Source code for Muscat.MeshTools.Remesh
# -*- 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 Muscat.Helpers.Factory import Factory
[docs]
def RegisterRemesherClass(name, classtype, withError=True):
def GetConstructor(classtype):
return lambda ops: classtype(**ops)
return RemesherFactory.RegisterClass(name, classtype, constructor=GetConstructor(classtype), withError=withError)
[docs]
def CreateRemesher(name, ops=None):
return RemesherFactory.Create(name, ops)
[docs]
class RemesherFactory(Factory):
_Catalog = {}
_SetCatalog = set()
def __init__(self):
super().__init__()
[docs]
def GetAvailableRemesher():
return list(RemesherFactory._Catalog.keys())
[docs]
def InitAllRemesher():
from Muscat.MeshTools.RemeshBackEnds import MMGWrapper
from Muscat.MeshTools.RemeshBackEnds import MmgRemeshing
from Muscat.MeshTools.RemeshBackEnds import ParMmgRemeshing
from Muscat.MeshTools.RemeshBackEnds import FefloRemeshing
defaultBackEnd = "MmgInMemory"
from Muscat.MeshTools.RemeshBackEnds import MMGWrapper
[docs]
def Remesh(mesh, levelset=None, solution=None, metric=None, remesher_options=None, backEnd=None, backEndOptions=None):
InitAllRemesher()
if backEnd is None:
backEnd = defaultBackEnd
return CreateRemesher(backEnd, {"mesh": mesh, "levelset": levelset, "solution": solution, "metric": metric}).Runner(remesher_options=remesher_options, backEndOptions=backEndOptions)
[docs]
def CheckIntegrity(GUI=False):
from Muscat.MeshTools.MeshCreationTools import CreateDisk, CreateCube
import numpy as np
mesh = CreateDisk(ofTriangles=True)
from Muscat.MeshTools import Remesh as R
R.InitAllRemesher()
print(R.GetAvailableRemesher())
for backend in R.GetAvailableRemesher():
if "parmmg" not in backend.lower():
print(f"Remeshing with {backend} in 2D")
R.Remesh(mesh, backEnd=backend)
else:
print(f"Remeshing with {backend} in 3D")
mesh3D = CreateCube(dimensions=np.array([8, 8, 2]), ofTetras=True)
R.Remesh(mesh3D, backEnd=backend)
return "ok"
if __name__ == '__main__':
print(CheckIntegrity())