Elmer FEM solver
Elmer is an open source finite element software for multiphysical problems
|
Public Member Functions | |
type(element_t) function, pointer | allocateelement () |
subroutine | setmeshedgefacedofs (Mesh, EdgeDOFs, FaceDOFs) |
type(matrix_t) function, pointer | weightedprojector2 (BMesh2, BMesh1, InvPerm2, InvPerm1, UseQuadrantTree, Repeating, AntiRepeating) |
type(matrix_t) function, pointer | nodalprojector (BMesh2, BMesh1, InvPerm2, InvPerm1, UseQuadrantTree, DoubleNode, MirrorNode) |
type(matrix_t) function, pointer | nodalprojector2 (BMesh2, BMesh1, InvPerm2, InvPerm1, UseQuadrantTree, Repeating, AntiRepeating) |
subroutine | rotationalinterfacemeshes (BMesh1, BMesh2, BParams, DoubleNode, MirrorNode) |
subroutine | findmeshedges3d (Mesh) |
subroutine | assignlocalnumber (EdgeElement, Element, Mesh) |
subroutine | findrigidbodyfixingnodes (Solver, FixingDofs, MaskPerm) |
subroutine | allocatepdefinitions (Element) |
type(mesh_t) function, pointer | allocatemesh () |
subroutine | getmaxdefs (Model, Mesh, Element, ElementDef, SolverId, BodyId, Def_Dofs) |
type(mesh_t) function, pointer | loadmesh (Model, MeshDirPar, MeshNamePar, BoundariesOnly, NumProcs, MyPE, Def_Dofs) |
subroutine | setmeshmaxdofs (Mesh) |
subroutine | readelementpropertyfile (FileName, Mesh) |
subroutine | meshstabparams (Mesh) |
subroutine | checkinterfacemeshangle (BMesh1, BMesh2, Angles, GotAngles) |
subroutine | createinterfacemeshes (Model, Mesh, This, Trgt, BMesh1, BMesh2, InvPerm1, InvPerm2, Success) |
subroutine | overlayintefacemeshes (BMesh1, BMesh2, BParams) |
subroutine | eliminateredundantcolumns (Cols, Values, DoubleNode, MirrorNode) |
subroutine | prerotationalprojector (BMesh1, BMesh2, MirrorNode) |
subroutine | postrotationalprojector (Proj, MirrorNode) |
type(matrix_t) function, pointer | weightedprojector (BMesh2, BMesh1, InvPerm2, InvPerm1, UseQuadrantTree, DoubleNode, MirrorNode) |
subroutine | rotationalinterfacemeshes2 (BMesh1, BMesh2, BParams) |
type(matrix_t) function, pointer | periodicprojector (Model, Mesh, This, Trgt, cdim, Galerkin) |
subroutine | unitsegmentdivision (w, n) |
type(mesh_t) function, pointer | meshextrude (Mesh_in, in_levels) |
subroutine | writemeshtodisk (NewMesh, Path) |
subroutine | findmeshedges (Mesh, FindEdges) |
subroutine | findmeshedges2d (Mesh) |
subroutine | findmeshfaces3d (Mesh) |
subroutine | findneighbournodes (Mesh, Direction, Neighbours, EndNeighbours) |
subroutine | updatesolvermesh (Solver, Mesh) |
type(mesh_t) function, pointer | splitmeshequal (Mesh, h) |
subroutine | releasevariablelist (VariableList) |
subroutine | releasemesh (Mesh) |
subroutine | releasemeshedgetables (Mesh) |
subroutine | releasemeshfacetables (Mesh) |
subroutine | releasemeshfactortables (Factors) |
subroutine | setcurrentmesh (Model, Mesh) |
subroutine | displacemesh (Mesh, Update, SIGN, Perm, DOFs, StabRecomp) |
subroutine | converttoactetra (Tetra) |
integer function | getelementmaxdofs (Mesh, Element) |
subroutine | makepermusingmask (Model, Solver, Mesh, MaskName, OptimizeBW, Perm, LocalNodes, MaskOnBulk, RequireLogical) |
logical function | pointinmesh (Solver, GlobalCoords, LocalCoords, HitElement, CandElement, ExtInitialize) |
subroutine | detectextrudedstructure (Mesh, Solver, ExtVar, TopNodePointer, BotNodePointer, UpNodePointer, DownNodePointer, NumberOfLayers, NodeLayer) |
subroutine | coordinatetransformation (Mesh, GlobalTransformation) |
subroutine | backcoordinatetransformation (Mesh) |
subroutine | clusternodesbydirection (Solver, Mesh, Clustering, MaskPerm) |
type(mesh_t) function, pointer | createlinemesh (Params) |
type(element_t) function, pointer meshutils::allocateelement | ( | ) |
Allocated one single element.
References messages::fatal().
Referenced by createsurfaces().
type(mesh_t) function, pointer meshutils::allocatemesh | ( | ) |
Allocate mesh structure and return handle to it.
References messages::fatal().
subroutine meshutils::allocatepdefinitions | ( | type(element_t) | Element) |
References messages::fatal().
Referenced by findmeshedges2d(), findmeshedges3d(), findmeshfaces3d(), loadmesh(), setmeshedgefacedofs(), and splitonelevel().
subroutine meshutils::assignlocalnumber | ( | type(element_t), pointer | EdgeElement, |
type(element_t), pointer | Element, | ||
type(mesh_t), pointer | Mesh | ||
) |
Assign local number of edge to given boundary element. Also copies all p element attributes from element edge to boundary edge.
edgeelement | Edge element to which assign local number |
element | Bulk element with some global numbering to use to assign local number |
mesh | Finite element mesh containing faces and edges. |
References pelementmaps::getelementboundarymap(), getelemententity(), pelementmaps::getfaceedgemap(), and messages::warn().
Referenced by setmeshedgefacedofs().
subroutine meshutils::backcoordinatetransformation | ( | type(mesh_t) | Mesh) |
Return back to the original coordinate system.
References messages::fatal(), and lists::variableget().
Referenced by mainutils::solveractivate().
subroutine meshutils::checkinterfacemeshangle | ( | type(mesh_t), pointer | BMesh1, |
type(mesh_t), pointer | BMesh2, | ||
real(kind=dp), dimension(3) | Angles, | ||
logical | GotAngles | ||
) |
Given two interface meshes check the angle between them using the normal vectors of the first element. Also check that all other elements are aligned with the first one. Only then is it possible to determine the angle.
References messages::info(), normal(), elementdescription::normalvector(), and messages::warn().
Referenced by overlayintefacemeshes().
subroutine meshutils::clusternodesbydirection | ( | type(solver_t), pointer | Solver, |
type(mesh_t), pointer | Mesh, | ||
integer, dimension(:), pointer | Clustering, | ||
integer, dimension(:), optional | MaskPerm | ||
) |
This partitions the mesh into a given number of partitions in each direction. It may be used in clustering multigrid or similar. It is not easily applicable to parallel computation as this partitioning should be done outside ElmerSolver in advance.
References messages::fatal(), messages::info(), lists::listgetconstrealarray(), lists::listgetinteger(), lists::listgetintegerarray(), normal(), solver(), generalutils::sortr(), and elementutils::tangentdirections().
Referenced by clusteringmethods::chooseclusternodes().
subroutine meshutils::converttoactetra | ( | type(element_t), pointer | Tetra) |
Convert tetrahedral element to Ainsworth & Coyle type tetrahedron.
tetra | Tetrahedral element to convert |
References messages::fatal(), pelementmaps::gettetraedgemap(), pelementmaps::gettetrafacemap(), and messages::warn().
Referenced by loadmesh().
subroutine meshutils::coordinatetransformation | ( | type(mesh_t), pointer | Mesh, |
logical, optional | GlobalTransformation | ||
) |
Maps coordinates from the original nodes into a new coordinate system while optionally maintaining the original coordinates. Note that this may be called.
References messages::fatal(), messages::info(), lists::listgetconstreal(), lists::listgetlogical(), lists::listgetstring(), lists::variableadd(), lists::variableget(), and messages::warn().
Referenced by elmersolver(), and mainutils::solveractivate().
subroutine meshutils::createinterfacemeshes | ( | type(model_t) | Model, |
type(mesh_t) | Mesh, | ||
integer | This, | ||
integer | Trgt, | ||
type(mesh_t), pointer | BMesh1, | ||
type(mesh_t), pointer | BMesh2, | ||
integer, dimension(:), pointer | InvPerm1, | ||
integer, dimension(:), pointer | InvPerm2, | ||
logical | Success | ||
) |
Create master and slave mesh for the interface in order to at a later stage create projector matrix to implement periodicity or mortar elements. The idea is to use a reduced set of elements and thereby speed up the mapping process. Also this gives more flexibility in transformation operations since the nodes may be ereased after use.
References messages::fatal(), and messages::info().
Referenced by periodicprojector().
type(mesh_t) function, pointer meshutils::createlinemesh | ( | type(valuelist_t), pointer | Params) |
Create a 1D mesh, may be used in 1D outlet conditions, for example.
References allocatemesh(), elementdescription::getelementtype(), messages::info(), lists::listgetconstreal(), lists::listgetinteger(), and lists::listgetstring().
Referenced by outletcompute_init().
subroutine meshutils::detectextrudedstructure | ( | type(mesh_t), pointer | Mesh, |
type(solver_t), pointer | Solver, | ||
type(variable_t), optional, pointer | ExtVar, | ||
integer, dimension(:), optional, pointer | TopNodePointer, | ||
integer, dimension(:), optional, pointer | BotNodePointer, | ||
integer, dimension(:), optional, pointer | UpNodePointer, | ||
integer, dimension(:), optional, pointer | DownNodePointer, | ||
integer, optional | NumberOfLayers, | ||
integer, dimension(:), optional, pointer | NodeLayer | ||
) |
This subroutine finds the structure of an extruded mesh even though it is given in an unstructured format. The routine may be used by some special solvers that employ the special character of the mesh. The extrusion is found for a given direction and for each node the corresponding up and down, and thereafter top and bottom node is computed.
References coordinatetransformationnodal(), messages::fatal(), messages::info(), lists::listgetconstreal(), lists::listgetinteger(), lists::listgetlogical(), lists::listgetstring(), solver(), lists::variableadd(), lists::variableget(), and messages::warn().
Referenced by clusterextrudedmesh(), direct1dsmoother(), passiveextrudedmesh(), structuredmeshmapper(), and structuredprojecttoplane().
subroutine meshutils::displacemesh | ( | type(mesh_t), pointer | Mesh, |
real(kind=dp), dimension(:) | Update, | ||
integer | SIGN, | ||
integer, dimension(:) | Perm, | ||
integer | DOFs, | ||
logical, optional | StabRecomp | ||
) |
References elementdescription::elementdiameter(), and elementdescription::stabparam().
Referenced by elasticsolver(), meshsolver(), and stresssolver().
subroutine meshutils::eliminateredundantcolumns | ( | integer, dimension(:), pointer | Cols, |
real(kind=dp), dimension(:), pointer | Values, | ||
integer, dimension(:), allocatable | DoubleNode, | ||
logical, dimension(:), allocatable | MirrorNode | ||
) |
Eliminate redundant columns pointed by the DoubleNode vector. The columns refer to the ghost nodes that were created to allow periodicity of the mortar piece.
cols | Columns of the sparse matrix |
values | Values of the sparse matrix |
doublenode | Indexes of the additional columns |
mirrornode | Indexes of the mirror nodes |
References messages::warn().
Referenced by nodalprojector(), and weightedprojector().
subroutine meshutils::findmeshedges | ( | type(mesh_t) | Mesh, |
logical, optional | FindEdges | ||
) |
Generate element edge (faces in 3D) tables for given mesh. Currently only for triangles and tetras. If mesh already has edges do nothing.
References assignconstraints(), coordinatesystems::coordinatesystemdimension(), findedges(), findmeshedges2d(), findmeshedges3d(), and findmeshfaces3d().
Referenced by adaptive::computeerror(), solverutils::getpassiveboundary(), saveline(), setmeshedgefacedofs(), particleutils::setparticlepreliminaries(), splitmeshequal(), and splitonelevel().
subroutine meshutils::findmeshedges2d | ( | type(mesh_t) | Mesh) |
Find 2D mesh edges.
References allocatepdefinitions(), and elementdescription::getelementtype().
Referenced by findmeshedges(), and isosurfacesolver().
subroutine meshutils::findmeshedges3d | ( | type(mesh_t) | Mesh) |
Find 3D mesh edges.
References allocatepdefinitions(), messages::fatal(), fixfaceedges(), pelementmaps::getelementedgemap(), pelementmaps::getelementfaceedgemap(), elementdescription::getelementtype(), and pelementmaps::isppyramid().
Referenced by findmeshedges(), and isosurfacesolver().
subroutine meshutils::findmeshfaces3d | ( | type(mesh_t) | Mesh) |
Find 3D mesh faces.
References allocatepdefinitions(), messages::fatal(), pelementmaps::getelementfacemap(), elementdescription::getelementtype(), pelementmaps::isptetra(), and sort().
Referenced by findmeshedges().
subroutine meshutils::findneighbournodes | ( | type(mesh_t), pointer | Mesh, |
real(kind=dp), dimension(:) | Direction, | ||
integer, dimension(:) | Neighbours, | ||
integer, dimension(:), optional | EndNeighbours | ||
) |
Finds neigbours of the nodes in given direction. The algorithm finds the neighbour that within 45 degrees of the given direction has the smallest distance.
References coordinatesystems::coordinatesystemdimension(), and messages::warn().
Referenced by freesurfacereduced().
subroutine meshutils::findrigidbodyfixingnodes | ( | type(solver_t) | Solver, |
integer, dimension(0:), optional | FixingDofs, | ||
integer, dimension(:), optional | MaskPerm | ||
) |
This find two fixing nodes for each coordinate direction The indexes are returned in order: x1 x2 y1 y2 z1 z2.
References determineforbiddennodes(), fixingnodesscore(), messages::info(), lists::listgetconstreal(), lists::listgetconstrealarray(), lists::listgetinteger(), lists::listgetlogical(), normal(), solver(), and elementutils::tangentdirections().
Referenced by fetisolve::fetifloatingdomain().
integer function meshutils::getelementmaxdofs | ( | type(mesh_t), pointer | Mesh, |
type(element_t), pointer | Element | ||
) |
Based on element degrees of freedom, return the sum of element degrees of freedom.
mesh | Finite element mesh |
element | Element to get maximum dofs for |
subroutine meshutils::getmaxdefs | ( | type(model_t) | Model, |
type(mesh_t) | Mesh, | ||
type(element_t) | Element, | ||
character(*) | ElementDef, | ||
integer | SolverId, | ||
integer | BodyId, | ||
integer, dimension(:) | Def_Dofs | ||
) |
References generalutils::i2s(), lists::listgetlogical(), and solver().
Referenced by loadmesh().
type(mesh_t) function, pointer meshutils::loadmesh | ( | type(model_t) | Model, |
character(len=*) | MeshDirPar, | ||
character(len=*) | MeshNamePar, | ||
logical | BoundariesOnly, | ||
integer, optional | NumProcs, | ||
integer, optional | MyPE, | ||
integer, dimension(:), optional | Def_Dofs | ||
) |
Function to load mesh from disk.
References allocatemesh(), allocatepdefinitions(), converttoactetra(), messages::error(), messages::fatal(), pelementmaps::getbubbledofs(), elementdescription::getelementtype(), getmaxdefs(), pelementmaps::getrefpelementnodes(), generalutils::i2s(), messages::info(), lists::listgetconstrealarray(), lists::listgetinteger(), lists::listgetintegerarray(), lists::listgetlogical(), lists::listgetstring(), periodicprojector(), readelementpropertyfile(), setmeshedgefacedofs(), setmeshmaxdofs(), sparitercomm::sparedgenumbering(), sparitercomm::sparfacenumbering(), and messages::warn().
Referenced by multigrid::gmgsolve(), modeldescription::loadmodel(), and remesh().
subroutine meshutils::makepermusingmask | ( | type(model_t) | Model, |
type(solver_t) | Solver, | ||
type(mesh_t) | Mesh, | ||
character(len=*) | MaskName, | ||
logical | OptimizeBW, | ||
integer, dimension(:), pointer | Perm, | ||
integer | LocalNodes, | ||
logical, optional | MaskOnBulk, | ||
logical, optional | RequireLogical | ||
) |
Creates a permutation table for bodies or boundaries using a free chosen string as mask. The resulting permutation is optimized in order, if requested. The subroutine is intended to help in saving boundary data in an ordered manner, but it can find other uses as well. Currently the implementation is limited to normal Lagrangian elements.
References listmatrix::list_freematrix(), listmatrix::list_getmatrixindex(), lists::listcheckpresent(), lists::listgetinteger(), lists::listgetlogical(), and bandwidthoptimize::optimizebandwidth().
Referenced by bulkassembly(), creategridparticles(), elmerpostoutputsolver(), solverutils::laplacematrixassembly(), nodaldisplacementpenalty(), particlewallcontact(), saveline(), structuredflowline(), and vtuoutputsolver().
type(mesh_t) function, pointer meshutils::meshextrude | ( | type(mesh_t), pointer | Mesh_in, |
integer | in_levels | ||
) |
Given a 2D mesh extrude it to be 3D. The 3rd coordinate will always be at the interval [0,1]. Therefore the adaptation for different shapes must be done with StructuredMeshMapper, or some similar utility. The top and bottom surface will be assigned Boundary Condition tags with indexes one larger than the maximum used on by the 2D mesh.
References allocatemesh(), elementdescription::getelementtype(), messages::info(), lists::listgetconstreal(), lists::listgetinteger(), setmeshedgefacedofs(), setmeshmaxdofs(), and unitsegmentdivision().
Referenced by elmersolver().
subroutine meshutils::meshstabparams | ( | type(mesh_t), pointer | Mesh) |
References elementdescription::elementdiameter(), lists::listgetlogical(), lists::listgetstring(), solver(), and elementdescription::stabparam().
Referenced by mainutils::addequationsolution(), modeldescription::loadmodel(), and adaptive::refinemesh().
type(matrix_t) function, pointer meshutils::nodalprojector | ( | type(mesh_t), pointer | BMesh2, |
type(mesh_t), pointer | BMesh1, | ||
integer, dimension(:), pointer | InvPerm2, | ||
integer, dimension(:), pointer | InvPerm1, | ||
logical | UseQuadrantTree, | ||
integer, dimension(:), allocatable | DoubleNode, | ||
logical, dimension(:), allocatable | MirrorNode | ||
) |
Create a projector for mapping between interfaces using the Galerkin method A temporal mesh structure with a node for each Gaussian integration point is created. The this projector matrix is transferred to a projector on the nodal coordinates.
References eliminateredundantcolumns(), and lists::meshprojector().
Referenced by periodicprojector().
type(matrix_t) function, pointer meshutils::nodalprojector2 | ( | type(mesh_t), pointer | BMesh2, |
type(mesh_t), pointer | BMesh1, | ||
integer, dimension(:), pointer | InvPerm2, | ||
integer, dimension(:), pointer | InvPerm1, | ||
logical | UseQuadrantTree, | ||
logical | Repeating, | ||
logical | AntiRepeating | ||
) |
Create a projector for mapping between interfaces using the Galerkin method A temporal mesh structure with a node for each Gaussian integration point is created. The this projector matrix is transferred to a projector on the nodal coordinates.
References lists::meshprojector(), postrotationalprojector(), and prerotationalprojector().
Referenced by periodicprojector().
subroutine meshutils::overlayintefacemeshes | ( | type(mesh_t), pointer | BMesh1, |
type(mesh_t), pointer | BMesh2, | ||
type(valuelist_t), pointer | BParams | ||
) |
Given two meshes that should occupy the same domain in space use rotation, scaling and translation to achive this goal.
References checkinterfacemeshangle(), messages::info(), lists::listgetconstrealarray(), and lists::listgetlogical().
Referenced by periodicprojector().
type(matrix_t) function, pointer meshutils::periodicprojector | ( | type(model_t) | Model, |
type(mesh_t) | Mesh, | ||
integer | This, | ||
integer | Trgt, | ||
integer, optional | cdim, | ||
logical, optional | Galerkin | ||
) |
Create a projector between Master and Target boundaries. The projector may be a nodal projector x=Px or a weigted Galerking projector such that Qx=Px. In the first case the projector will be P and in the second case [Q-P].
References allocatemesh(), lists::checktimer(), coordinatesystems::coordinatesystemdimension(), createinterfacemeshes(), generalutils::freequadranttree(), messages::info(), lists::listgetlogical(), nodalprojector(), nodalprojector2(), overlayintefacemeshes(), releasemesh(), lists::resettimer(), rotationalinterfacemeshes(), rotationalinterfacemeshes2(), weightedprojector(), and weightedprojector2().
Referenced by bsolver(), loadmesh(), magnetodynamics2d(), magnetodynamics2dharmonic(), solverutils::mortarrobinsolver(), and splitmeshequal().
logical function meshutils::pointinmesh | ( | type(solver_t) | Solver, |
real(kind=dp), dimension(3) | GlobalCoords, | ||
real(kind=dp), dimension(3) | LocalCoords, | ||
type(element_t), pointer | HitElement, | ||
type(element_t), optional, pointer | CandElement, | ||
logical, optional | ExtInitialize | ||
) |
Find a point in the mesh structure There are two strategies: 1) Recursive where the same routine is repeated with sloppier criteria 2) One-sweep strategy where the best hit is registered and used if of acceptable accuracy. There are two different epsilons that control the search. One for the rough test in absolute coordinates and another one for the more accurate test in local coordinates.
References interpolation::buildquadranttree(), interpolation::findleafelements(), generalutils::freequadranttree(), lists::listcheckpresent(), lists::listgetconstreal(), lists::listgetinteger(), lists::listgetlogical(), lists::listgetstring(), interpolation::pointinelement(), solver(), and messages::warn().
subroutine meshutils::postrotationalprojector | ( | type(matrix_t) | Proj, |
logical, dimension(:), allocatable | MirrorNode | ||
) |
Postprocess projector so that it changes the sign of the anti-periodic entries as assignes by the MirrorNode flag.
proj | Projection matrix |
mirrornode | Is the node a mirror node or not |
Referenced by nodalprojector2(), and weightedprojector2().
subroutine meshutils::prerotationalprojector | ( | type(mesh_t), pointer | BMesh1, |
type(mesh_t), pointer | BMesh2, | ||
logical, dimension(:), allocatable | MirrorNode | ||
) |
Given two interface meshes for nonconforming rotating boundaries make a coordinate transformation to each node of the slave boundary (BMesh1) so that they hit the master boundary (BMesh2). In case of anti-periodic projector mark the nodes that need an odd number of periods.
References messages::info().
Referenced by nodalprojector2(), and weightedprojector2().
subroutine meshutils::readelementpropertyfile | ( | character(len=*) | FileName, |
type(mesh_t) | Mesh | ||
) |
References messages::fatal(), and generalutils::readandtrim().
Referenced by loadmesh().
subroutine meshutils::releasemesh | ( | type(mesh_t), pointer | Mesh) |
References elementutils::freematrix(), generalutils::freequadranttree(), gebhardtfactors(), releasemeshedgetables(), releasemeshfacetables(), releasemeshfactortables(), and releasevariablelist().
Referenced by freemesh(), isosurfacesolver(), modeldescription::loadmodel(), periodicprojector(), adaptive::refinemesh(), and splitmesh().
subroutine meshutils::releasemeshedgetables | ( | type(mesh_t), pointer | Mesh) |
Referenced by isosurfacesolver(), adaptive::refinemesh(), releasemesh(), and splitmeshequal().
subroutine meshutils::releasemeshfacetables | ( | type(mesh_t), pointer | Mesh) |
Referenced by adaptive::refinemesh(), releasemesh(), and splitmeshequal().
subroutine meshutils::releasemeshfactortables | ( | type(factors_t), dimension(:), pointer | Factors) |
subroutine meshutils::releasevariablelist | ( | type(variable_t), pointer | VariableList) |
subroutine meshutils::rotationalinterfacemeshes | ( | type(mesh_t), pointer | BMesh1, |
type(mesh_t), pointer | BMesh2, | ||
type(valuelist_t), pointer | BParams, | ||
integer, dimension(:), allocatable | DoubleNode, | ||
logical, dimension(:), allocatable | MirrorNode | ||
) |
Given two interface meshes for nonconforming rotating boundaries make a coordinate transformation to (phi,z) level where the interpolation accuracy is not limited by the curvilinear coordinates. Also ensure that the target mesh is manipulated so that it includes the angle interval of the master nodes.
References messages::fatal(), messages::info(), and messages::warn().
Referenced by periodicprojector().
subroutine meshutils::rotationalinterfacemeshes2 | ( | type(mesh_t), pointer | BMesh1, |
type(mesh_t), pointer | BMesh2, | ||
type(valuelist_t), pointer | BParams | ||
) |
Given two interface meshes for nonconforming rotating boundaries make a coordinate transformation to (phi,z) level where the interpolation accuracy is not limited by the curvilinear coordinates. Also ensure that the master nodes manipulated so they for sure hit the target nodes.
References messages::fatal(), and messages::info().
Referenced by periodicprojector().
subroutine meshutils::setcurrentmesh | ( | type(model_t) | Model, |
type(mesh_t), pointer | Mesh | ||
) |
Referenced by mainutils::addequationsolution(), compressibilityscale(), gebhardtfactors(), multigrid::gmgsolve(), initcond(), multigrid::msolveractivate(), radiationfactors(), adaptive::refinemesh(), restart(), resultoutputsolver(), resulttopost(), resulttoresult(), saveline(), savescalars(), savetopost(), setinitialconditions(), mainutils::solveractivate(), statelecforce(), updatesolvermesh(), and viewfactors().
subroutine meshutils::setmeshedgefacedofs | ( | type(mesh_t), pointer | Mesh, |
integer, dimension(:), optional | EdgeDOFs, | ||
integer, dimension(:), optional | FaceDOFs | ||
) |
References allocatepdefinitions(), assignlocalnumber(), findmeshedges(), pelementmaps::getfacedofs(), and pelementmaps::getnumberofgausspointsface().
Referenced by loadmesh(), and meshextrude().
subroutine meshutils::setmeshmaxdofs | ( | type(mesh_t), pointer | Mesh) |
References pelementmaps::getnumberofgausspoints().
Referenced by loadmesh(), and meshextrude().
type(mesh_t) function, pointer meshutils::splitmeshequal | ( | type(mesh_t), pointer | Mesh, |
real(kind=dp), dimension(:), optional | h | ||
) |
Split a mesh equally to smaller pieces by performing a uniform split. Also known as mesh multiplication. A 2D element splits into 4 elements of same form, and 3D element into 8 elements. Currently works only for linear elements.
References allocatemesh(), lists::checktimer(), messages::error(), messages::fatal(), findmeshedges(), messages::info(), elementdescription::interpolateinelement2d(), elementdescription::interpolateinelement3d(), lists::listgetinteger(), periodicprojector(), releasemeshedgetables(), releasemeshfacetables(), lists::resettimer(), sort(), and updateparallelmesh().
Referenced by mainutils::addequationsolution(), and modeldescription::loadmodel().
subroutine meshutils::unitsegmentdivision | ( | real(kind=dp), dimension(:), allocatable | w, |
integer | n | ||
) |
Create node distribution for a unit segment x [0,1] with n elements i.e. n+1 nodes. There are different options for the type of distribution. 1) Even distribution 2) Geometric distribution 3) Arbitrary distribution determined by a functional dependence Note that the 3rd algorithm involves iterative solution of the nodal positions and is therefore not bullet-proof.
References messages::fatal(), messages::info(), lists::listcheckpresent(), lists::listgetconstreal(), lists::listgetfun(), and messages::warn().
Referenced by meshextrude().
subroutine meshutils::updatesolvermesh | ( | type( solver_t ), target | Solver, |
type( mesh_t ), pointer | Mesh | ||
) |
References elementutils::creatematrix(), lists::listgetlogical(), lists::listgetstring(), bandwidthoptimize::optimizebandwidth(), setcurrentmesh(), solver(), and lists::variableget().
Referenced by mainutils::addequationsolution(), and multigrid::gmgsolve().
type(matrix_t) function, pointer meshutils::weightedprojector | ( | type(mesh_t), pointer | BMesh2, |
type(mesh_t), pointer | BMesh1, | ||
integer, dimension(:), pointer | InvPerm2, | ||
integer, dimension(:), pointer | InvPerm1, | ||
logical | UseQuadrantTree, | ||
integer, dimension(:), allocatable | DoubleNode, | ||
logical, dimension(:), allocatable | MirrorNode | ||
) |
Create a projector for mapping between interfaces using the Galerkin method A temporal mesh structure with a node for each Gaussian integration point is created. The this projector matrix is transferred to a projector on the nodal coordinates.
References generalutils::allocatematrix(), elementdescription::elementinfo(), eliminateredundantcolumns(), integration::gausspoints(), listmatrix::list_addtomatrixelement(), listmatrix::list_tocrsmatrix(), and lists::meshprojector().
Referenced by periodicprojector().
type(matrix_t) function, pointer meshutils::weightedprojector2 | ( | type(mesh_t), pointer | BMesh2, |
type(mesh_t), pointer | BMesh1, | ||
integer, dimension(:), pointer | InvPerm2, | ||
integer, dimension(:), pointer | InvPerm1, | ||
logical | UseQuadrantTree, | ||
logical | Repeating, | ||
logical | AntiRepeating | ||
) |
Create a projector for mapping between interfaces using the Galerkin method A temporal mesh structure with a node for each Gaussian integration point is created. The this projector matrix is transferred to a projector on the nodal coordinates.
References generalutils::allocatematrix(), elementdescription::elementinfo(), integration::gausspoints(), messages::info(), listmatrix::list_addtomatrixelement(), listmatrix::list_tocrsmatrix(), lists::meshprojector(), postrotationalprojector(), and prerotationalprojector().
Referenced by periodicprojector().
subroutine meshutils::writemeshtodisk | ( | type(mesh_t), pointer | NewMesh, |
character(len=*) | Path | ||
) |
Writes the mesh to disk. Note that this does not include the information of shared nodes needed in parallel computation. This may be used for debugging purposes and for adaptive solution, for example.
Referenced by adaptive::refinemesh(), and remesh().