Source code for Mordicus.Modules.sorbonne.IO.MeshReader
# -*- coding: utf-8 -*-
import numpy as np
from Mordicus.Core.IO.MeshReaderBase import MeshReaderBase
from Mordicus.Modules.sorbonne.IO import GmshMeshReader as GMR
from Mordicus.Modules.sorbonne.IO import VTKMeshReader as VTKMR
from mpi4py import MPI
from pathlib import Path
import os
[docs]def ReadMesh(meshFileName,dimension):
"""
Functional API
Reads the mesh file "meshFileName" VTK (.vtu)
Parameters
----------
meshFileName : str
VTK file
Returns
-------
BasicToolsUnstructuredMesh
mesh of the HF computation
"""
reader = MeshReader(meshFileName=meshFileName,dimension=dimension)
return reader.ReadMesh()
[docs]class MeshReader(MeshReaderBase):
"""
Class containing a reader for VTK mesh and fields file
Attributes
----------
meshFileName : str
name of the VTK mesh file (.vtu)
"""
def __init__(self, meshFileName,dimension):
"""
Parameters
----------
meshFileName : str, optional
"""
super(MeshReader, self).__init__()
assert isinstance(meshFileName, str)
folder = str(Path(meshFileName).parents[0])
suffix = str(Path(meshFileName).suffix)
stem = str(Path(meshFileName).stem)
if MPI.COMM_WORLD.Get_size() > 1: # pragma: no cover
self.meshFileName = folder + os.sep + stem + "-pmeshes" + os.sep + stem + "-" + str(MPI.COMM_WORLD.Get_rank()+1).zfill(3) + suffix
else:
self.meshFileName = meshFileName
self.dimension=dimension
[docs] def ReadMesh(self):
"""
Read the HF mesh
Returns
-------
BasicToolsUnstructuredMesh
mesh of the HF computation
"""
#print("dans readmesh")
suffix = str(Path(self.meshFileName).suffix)
if suffix == ".vtu": # pragma: no cover
vtkmeshReader = VTKMR.VTKMeshReader(self.meshFileName)
mesh = vtkmeshReader.ReadMesh()
if self.dimension==2:
mesh.GetInternalStorage().nodes = mesh.GetInternalStorage().nodes[:,:2] #CAS 2D
return mesh
elif suffix == ".msh":
folder = str(Path(self.meshFileName).parents[0])
suffix = str(Path(self.meshFileName).suffix)
stem = str(Path(self.meshFileName).stem)
meshFileNameGMSH = folder+"/"+stem+"GMSH"+suffix
GMSH=GMR.CheckAndConvertMeshFFtoGMSH(self.meshFileName,meshFileNameGMSH,self.dimension) #1 if GMSH
if GMSH==1:
GMSHmeshReader = GMR.GmshMeshReader(self.meshFileName) #GMSHmeshReader
else:
GMSHmeshReader = GMR.GmshMeshReader(meshFileNameGMSH) #GMSHmeshReader
mesh= GMSHmeshReader.ReadMesh()
if self.dimension==2:
mesh.GetInternalStorage().nodes = mesh.GetInternalStorage().nodes[:,:2] #CAS 2D
return mesh
else:
raise ValueError