Source code for Muscat.Actions.OpenInParaView

# -*- coding: utf-8 -*-
#
# This file is subject to the terms and conditions defined in
# file 'LICENSE.txt', which is part of this source code package.
#
from typing import Optional, Union

from Muscat.Containers.Mesh import Mesh
from Muscat.Experimental.Containers.PartitionedMesh import PartitionedMesh
from Muscat.Helpers.IO.FileTools import GetUniqueTempFile
from Muscat.Helpers.IO.TemporaryDirectory import TemporaryDirectory
from Muscat.Helpers.IO.PathController import PathController as PC
from Muscat.Helpers.IO.Which import Which

paraviewExec = "paraview"


[docs]def OpenInParaView(mesh: Optional[Union[Mesh, PartitionedMesh]] = None, filename: Optional[str] = None, run: bool = True, wait: bool = False) -> None: """Export mesh to a temporary file and open the file in ParaView the paraviewExec Parameters ---------- mesh : Optional[Mesh, PartitionedMesh], optional Mesh to export, if None the file with the name filename will be open by default None filename : Optional[str], optional filename to use, if None a generated name will be used, by default None run : bool, optional to run ParaView, can be False to only export the file, by default True wait : bool, optional wait for paraview to close before continuing, by default False """ from subprocess import Popen realPVExec = Which(paraviewExec) if not realPVExec: # pragma: no cover if run: raise RuntimeError(f"Error Executable ({paraviewExec}) Not Found!!") else: print(f"Error Executable ({paraviewExec}) Not Found!!") realPVExec = "" else: realPVExec = str(realPVExec) if isinstance(realPVExec, str) and filename is None and mesh is None and run: # pragma: no cover process = Popen([realPVExec]) if wait: process.wait(wait) return if filename is None: (fd, filename) = GetUniqueTempFile(suffix=".xmf", prefix="ExportedDataMuscat_") else: filename = TemporaryDirectory.GetFullFilenameOnTempDirectory(filename) if mesh is not None: if isinstance(mesh, Mesh): from Muscat.IO.XdmfWriter import WriteMeshToXdmf PointFieldsNames = list(mesh.nodeFields.keys()) PointFields = list(mesh.nodeFields.values()) CellFieldsNames = list(mesh.elemFields.keys()) CellFields = list(mesh.elemFields.values()) WriteMeshToXdmf(filename, mesh, PointFieldsNames=PointFieldsNames, PointFields=PointFields, CellFieldsNames=CellFieldsNames, CellFields=CellFields) else: # experimental for Partitioned meshes from Muscat.IO.XdmfWriter import WriteMeshToXdmf, XdmfWriter writer = XdmfWriter() writer.SetMultidomain() writer.SetFileName(filename) writer.Open() for nMesh in mesh.storage: PointFieldsNames = list(nMesh.nodeFields.keys()) PointFields = list(nMesh.nodeFields.values()) CellFieldsNames = list(nMesh.elemFields.keys()) CellFields = list(nMesh.elemFields.values()) writer.Write(nMesh, PointFieldsNames=PointFieldsNames, PointFields=PointFields, CellFieldsNames=CellFieldsNames, CellFields=CellFields) writer.NextDomain() writer.Close() if run: # pragma: no cover process = Popen([realPVExec, filename]) if wait: process.wait(wait)
[docs]def CheckIntegrity(GUI: bool = False) -> str: from Muscat.Containers.MeshCreationTools import CreateCube mesh = CreateCube(dimensions=[20, 21, 22], spacing=[2., 2., 2.], ofTetras=True) from Muscat.Actions.OpenInParaView import OpenInParaView OpenInParaView(mesh, run=GUI) OpenInParaView(mesh, filename="CheckIntegrity_OpenInParaview.xmf", run=GUI) OpenInParaView(None, None, run=GUI) from Muscat.Experimental.Containers.PartitionedMesh import PartitionedMesh pmesh = PartitionedMesh() import numpy as np pmesh.AddMesh(mesh, nodesGlobalIDs=np.arange(mesh.GetNumberOfNodes()), elementsGlobalIDs=np.arange(mesh.GetNumberOfElements())) mesh2 = CreateCube(dimensions=[20, 21, 22], spacing=[2., 2., 2.], origin=[-1+2*19, -1, -1], ofTetras=False) pmesh.AddMesh(mesh2, nodesGlobalIDs=np.arange(mesh.GetNumberOfNodes(), mesh.GetNumberOfNodes()+mesh2.GetNumberOfNodes()), elementsGlobalIDs=np.arange(mesh.GetNumberOfElements(), mesh.GetNumberOfElements()+mesh2.GetNumberOfElements()) ) OpenInParaView(pmesh, run=False) return "ok"
if __name__ == '__main__': # pragma: no cover print(CheckIntegrity(GUI=True)) print("Done")