Muscat Cheat Sheet

Mesh Import, Export and Creation

Description

Command

URL

Installation

mamba install muscat
mamba install muscat-core
mamba install muscat-extentions

Doc

Help

https://muscat.readthedocs.io/

https://gitlab.com/drti/muscat

https://github.com/conda-forge/muscat-split-feedstock/

From a script

import some commonly used symbols

from Muscat.Simple import *

API

Create a mesh

Imports
from Muscat.MeshTools.MeshCreationTools import (
    CreateUniformMeshOfBars,
    CreateMeshOfTriangles,
    CreateSquare,
    CreateCube,
    CreateMeshOf,
    CreateMeshFromCellsDict,
)
CreateUniformMeshOfBars(startPoint,stopPoint,nbPoints)
CreateMeshOfTriangles(points, triangles)
CreateSquare(dimension, origin, spacing, ofTriangles)
CreateCube(dimension, origin, spacing, ofTetras)
CreateMeshOf(points, connectivity, elementType)
CreateMeshFromCellsDict(...)

API

Linear <-> Quadratic mesh

from Muscat.MeshTools.MeshCreationTools import *
ToQuadraticMesh(mesh)
QuadToLin(mesh)

API

Read a Mesh File

from Muscat.IO.UniversalReader import InitAllReaders
from Muscat.IO.UniversalReader import ReadMesh
InitAllReaders()
ReadMesh("filename.ext")

(a reader is selected using the extension)

API

Read a Mesh File Using MeshIO

from Muscat.Bridges.MeshIOBridge import InitAllReaders
InitAllReaders()
from Muscat.IO.UniversalReader import ReadMesh
ReadMesh("filename.ext")

(a reader is selected using the extension)

API

Convert to/from MeshIO format

from Muscat.Bridges.MeshIOBridge import MeshToMeshIO
MeshToMeshIO(meshiodata)
from Muscat.Bridges.MeshIOBridge import MeshIOToMesh
MeshIOToMesh(muscatMesh)

API

Convert to/from vtk format

from Muscat.Bridges.vtkBridge import VtkToMesh
VtkToMesh(vtkMesh)
from Muscat.Bridges.vtkBridge import MeshToVtk
MeshToVtk(muscatMesh)

API

Export mesh using Xdmf

from Muscat.IO.XdmfWriter import WriteMeshToXdmf
WriteMeshToXdmf(filename="toto.xdmf", mesh,...)

For Temporal data

from Muscat.IO.XdmfWriter import XdmfWriter
writer = XdmfWriter(filename="outputmesh.xdmf")
writer.SetTemporal(True)
writer.Open()
for i in range(timesteps):
    writer.Write(mesh,...)
writer.Close()

API

Mesh Manipulation

Description

Command

URL

Iteration over points

for i in range(mesh.GetNumberOfNodes()):
    point_i = mesh.nodes[i,:]

Iteration using a NodeFilter

from Muscat.MeshContainers.Filters.FilterObjects import NodeFilter
nf = NodeFilter(eTag="leading edge")
for i in nf.GetNodesIndices(mesh)
    leading_edge_point_i = mesh.nodes(i,:)

API

Iteration over elements

for el_container in mesh.elements.values():
  for i in range(el_container.GetNumberOfElements())
     connectivity_e_i = elt_container.connectivity[i,:]

Mesh

Iteration over using an ElementFilter

from Muscat.MeshContainers.Filters.FilterObjects import ElementFilter
ef = ElementFilter(dimensionality=1,tag="trailing edge")
for selection in ef(mesh):
    conn=selection.elements.connectivity[selection.indices,:]

API

Remeshing

from Musca.MeshTools.Remesh import Remesh
Remesh(mesh, metric,remesher_options={"hmax":0.1})

Field Manipulation

Description

Command

URL

Creating a point/element field

mesh.nodeFields["temp"]= np.zeros(mesh.GetNumberOfNodes())
mesh.elemFields["rho"] = np.zeros(mesh. GetNumberOfElements())
  • Fields are defined over all the points/elements

Integration into a scalar

from Muscat.FE.IntegrationTools import IntegrateField
nodeData = mesh.nodeFields["temp"]
nodeField = FEField("temp",mesh,data=nodeData)
int_temp = IntegrateField(nodeField)

from Muscat.FE.FieldTools import ElemFieldsToFEField
elemData = mesh.elemFields["rho"]
rhoField = ElemFieldsToFEField(mesh, {"rho":elemData} )
mass = IntegrateField(rhoField, ElementFilter(eTag="bulk"))

API

Integration into a Vector (right hand side)

Imports
from Muscat.FE.SymWeakForm import GetField, GetTestField
from Muscat.FE.Fields.FEField import FEField
from Muscat.FE.Integration import IntegrateGeneral
from Muscat.MeshContainers.Filters.FilterObjects import ElementFilter
weakForm = GetField("p",1,3)*GetTestField("t",1,3)
mesh = ... #(create a mesh or read one from file)
p = FEField("p", mesh=mesh)
p.Allocate(1)
testFields = [FEField("t", mesh=mesh)]

_, F = IntegrateGeneral(mesh=mesh,
    wform=weakForm,
    constants={},
    fields=[p],
    testFields=testFields,
    integrationRuleName="LagrangeP1Quadrature",
    elementFilter=ElementFilter(eTag="top_surface") )

API

Integration into a Matrix (operator)

Imports
from Muscat.FE.SymWeakForm import GetField, GetTestField
from Muscat.FE.Fields.FEField import FEField
from Muscat.FE.Integration import IntegrateGeneral
from Muscat.MeshContainers.Filters.FilterObjects import ElementFilter
weakForm = GetField("t",1,3)*GetTestField("t",1,3)
mesh = ... #(create a mesh or read one from file)
unknownFields = [FEField("t", mesh=mesh)]

M, _ = IntegrateGeneral(mesh=mesh,
    wform=weakForm,
    constants={},
    fields=[],
    unknownFields=unknownFields,
    integrationRuleName="LagrangeP1Quadrature",
    elementFilter=ElementFilter(dimensionality=3) )
  • M is the scalar mass matrix of the mesh

API