Moertel  Development
 All Classes Namespaces Files Functions Enumerations Friends Pages
Moertel: Mortar Methods Package.


Moertel provides fundamental construction routines and services that are required for serial and parallel mesh-tying and contact formulations using Mortar methods.

Overview of Moertel.


This package supplies capabilities for nonconforming mesh tying and contact formulations in 2 and 3 dimensions using Mortar methods. Mortar methods are a type of Lagrange Multiplier constraints that can be used in contact formulations and in non-conforming or conforming mesh tying as well as in domain decomposition techniques. Originally introduced as a domain decomposition method for spectral elements, Mortar methods are used in a large class of nonconforming situations such as the surface coupling of different physical models, discretization schemes or non-matching triangulations along interior interfaces of a domain.

Suitable conditions at interfaces are formulated as weak continuity conditions in dual variables introducing Lagrange multipliers on the interface. By an approbiate choice of the function space of the Lagrange multipliers on an interface it is possible to locally condense Lagrange multipliers such that a sparse and definite system of equations can be formed which is equivalent to the saddle point system resulting from the Lagrange multiplier formulation.
Moreover if the problems on subdomains are symmetric positive definite (spd) or symmetric positive indefinite and the complete problem is known to be spd, then a spd system of equations can be recovered that leads to the same solution as the saddle point system of equations. This way, unmodfied standard solution techniques such as multigrid can be applied and the reduction in the solution costs can be expected to over-compensate costs for the Mortar formulation of the problem.

This package currently has the following capabilities and features:

This package does not feature:


Moertel severely depends on the other Trilinos packages Epetra, EpetraExt, Teuchos, Amesos, AztecOO and ML.

To use Moertel one has to use at least the following enabled when configuring Trilinos:

--enable-aztecoo --enable-aztecoo-teuchos

User interface

Described here briefly is what would be the typical usage of Moertel for a mesh tying problem.

One would first construct an empty MOERTEL::Interface instance. This is a collective operation as all processors have to at least know about all existing interfaces.
Any MOERTEL::Interface instance has 2 sides which can be constructed independently and nonconforming. For more detailed information about restrictions and capabilities for Interfaces, see MOERTEL::Interface
Then it is neccessary to supply information about the geometry and connectivity of that Interface. This is done by defining an arbitrary number of MOERTEL::Node and MOERTEL::Segment instances and adding them to either side of the Interface.

To be more precise: The user has to define instances of one of the supplied MOERTEL::Segment derived types, as MOERTEL::Segment itself is virtual. Currently, the package supports linear 1D segments in 2D problems, bilinear quadrilateral segments in 3D problems and linear triangle segments in 3D problems.
Adding a MOERTEL::Node or MOERTEL::Segment to a MOERTEL::Interface is NOT a collective operation. Nodes and Segments are added by individual processes which then become owner of that Node or Segment on that specific interface.
Every process that does NOT add any Node or Segment instances to an interface will not take part in any computations performed on that Interface instance though some of the methods are collective for all procs. Most Interface methods will be non-blocking for such processes.

After adding all segments and nodes to the Interface that are neccessary to define both sides of it the user has to indicate the completeness of the interface instance by calling MOERTEL::Interface::Complete() on it. Upon MOERTEL::Interface::Complete(), the parallel computation of that interface is organized and reasonability test upon the connectivity of the interface are performed.

The base class for the user interface is the MOERTEL::Manager.
It supplies all methods neccessary to perform the Mortar integration and to solve resulting systems of equations.
Once a MOERTEL::Interface is complete it can be added to a MOERTEL::Manager instance. A MOERTEL::Manager can hold an arbitrary number of interfaces.
Note that a Manager instance can not hold 2D (3D problem) and 1D (2D problem) interfaces at the same time. The integration of all interfaces and the assembly of constraint matrices is performed by MOERTEL::Manager::Mortar_Integrate().
After integration, the Manager instance supplies a variety of access and solution methods to the user, as e.g. full support interfaces to the solution packages Amesos, AztecOO and ML.


A simple serial example demonstrating usage of Moertel and its interfaces to other Trilinos packages is given in TwoSquares.cpp .


For more detailed documentation please browse the Moertel website and the


Author and Acknowledgements

Moertel was conceived and developed by Michael W. Gee

I would like to thank Barbara Wohlmuth, Stefan Huuber, Raymond Tuminaro and Pavel Bochev for discussions and support in creating this work.

Moertel is currently being maintained and extended by:

Glen Hansen