# -*- 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")