MFEM  v4.6.0
Finite element discretization library
Public Member Functions | List of all members
mfem::ParMortarAssembler Class Reference

This class implements the parallel variational transfer between finite element spaces. Variational transfer has been shown to have better approximation properties than standard interpolation. This facilities can be used for supporting applications which require the handling of non matching meshes. For instance: General multi-physics problems, fluid structure interaction, or even visualization of average quantities within subvolumes. This particular code is also used with LLNL for large scale multilevel Monte Carlo simulations. This algorithm allows to perform quadrature in the intersection of elements of two separate, unrelated, and arbitrarily distributed meshes. It generates quadrature rules in the intersection which allows us to integrate with to machine precision using the mfem::MortarIntegrator interface. See https://doi.org/10.1137/15M1008361 for and in-depth explanation. At this time curved elements are not supported. Convex non-affine elements are partially supported, however, high order (>3) finite element discretizations or nonlinear geometric transformations might generate undesired oscillations. Discontinuous fields in general can only be mapped to order 0 destination fields. For such cases localized versions of the projection will have to be developed. More...

#include <pmortarassembler.hpp>

Public Member Functions

 ParMortarAssembler (const std::shared_ptr< ParFiniteElementSpace > &source, const std::shared_ptr< ParFiniteElementSpace > &destination)
 constructs the object with source and destination spaces More...
 
 ~ParMortarAssembler ()
 
bool Assemble (std::shared_ptr< HypreParMatrix > &B)
 assembles the coupling matrix B. B : source -> destination If u is a coefficient associated with source and v with destination Then v = M^(-1) * B * u; where M is the mass matrix in destination. Works with L2_FECollection, H1_FECollection and DG_FECollection (experimental with RT_FECollection and ND_FECollection). More...
 
bool Transfer (const ParGridFunction &src_fun, ParGridFunction &dest_fun)
 transfer a function from source to destination. if the transfer is to be performed multiple times use Assemble or Update/Apply instead More...
 
bool Apply (const ParGridFunction &src_fun, ParGridFunction &dest_fun)
 transfer a function from source to destination. It requires that the Update function is called before More...
 
bool Update ()
 assembles the various components necessary for the transfer. To be called before calling the Apply function if the mesh geometry changed, after previous call. Works with L2_FECollection, H1_FECollection and DG_FECollection (experimental with RT_FECollection and ND_FECollection). More...
 
void AddMortarIntegrator (const std::shared_ptr< MortarIntegrator > &integrator)
 This method must be called before Assemble or Transfer. It will assemble the operator in all intersections found. More...
 
void SetVerbose (const bool verbose)
 Expose process details with verbose output. More...
 
void SetAssembleMassAndCouplingTogether (const bool value)
 Control if the Mass matrix is computed together with the coupling operator every time. More...
 
void SetMaxSolverIterations (const int max_solver_iterations)
 Control the maximum numbers of conjugate gradients steps for mass matrix inversion. More...
 
void SetSolver (const std::shared_ptr< IterativeSolver > &solver)
 Changes the solver to be used for solving the mass-matrix linear system. More...
 

Detailed Description

This class implements the parallel variational transfer between finite element spaces. Variational transfer has been shown to have better approximation properties than standard interpolation. This facilities can be used for supporting applications which require the handling of non matching meshes. For instance: General multi-physics problems, fluid structure interaction, or even visualization of average quantities within subvolumes. This particular code is also used with LLNL for large scale multilevel Monte Carlo simulations. This algorithm allows to perform quadrature in the intersection of elements of two separate, unrelated, and arbitrarily distributed meshes. It generates quadrature rules in the intersection which allows us to integrate with to machine precision using the mfem::MortarIntegrator interface. See https://doi.org/10.1137/15M1008361 for and in-depth explanation. At this time curved elements are not supported. Convex non-affine elements are partially supported, however, high order (>3) finite element discretizations or nonlinear geometric transformations might generate undesired oscillations. Discontinuous fields in general can only be mapped to order 0 destination fields. For such cases localized versions of the projection will have to be developed.

Definition at line 49 of file pmortarassembler.hpp.

Constructor & Destructor Documentation

◆ ParMortarAssembler()

mfem::ParMortarAssembler::ParMortarAssembler ( const std::shared_ptr< ParFiniteElementSpace > &  source,
const std::shared_ptr< ParFiniteElementSpace > &  destination 
)

constructs the object with source and destination spaces

Parameters
sourcethe source space from where we want to transfer the discrete field
destinationthe source space to where we want to transfer the discrete field

Definition at line 1087 of file pmortarassembler.cpp.

◆ ~ParMortarAssembler()

mfem::ParMortarAssembler::~ParMortarAssembler ( )
default

Member Function Documentation

◆ AddMortarIntegrator()

void mfem::ParMortarAssembler::AddMortarIntegrator ( const std::shared_ptr< MortarIntegrator > &  integrator)

This method must be called before Assemble or Transfer. It will assemble the operator in all intersections found.

Parameters
integratorthe integrator object

Definition at line 111 of file pmortarassembler.cpp.

◆ Apply()

bool mfem::ParMortarAssembler::Apply ( const ParGridFunction src_fun,
ParGridFunction dest_fun 
)

transfer a function from source to destination. It requires that the Update function is called before

Parameters
src_funthe function associated with the source finite element space
[out]dest_funthe function associated with the destination finite element space
Returns
true if the transfer was successful, fail otherwise.

Definition at line 1132 of file pmortarassembler.cpp.

◆ Assemble()

bool mfem::ParMortarAssembler::Assemble ( std::shared_ptr< HypreParMatrix > &  B)

assembles the coupling matrix B. B : source -> destination If u is a coefficient associated with source and v with destination Then v = M^(-1) * B * u; where M is the mass matrix in destination. Works with L2_FECollection, H1_FECollection and DG_FECollection (experimental with RT_FECollection and ND_FECollection).

Parameters
Bthe assembled coupling operator. B can be passed uninitialized.
Returns
true if there was an intersection and the operator has been assembled. False otherwise.

Definition at line 1097 of file pmortarassembler.cpp.

◆ SetAssembleMassAndCouplingTogether()

void mfem::ParMortarAssembler::SetAssembleMassAndCouplingTogether ( const bool  value)

Control if the Mass matrix is computed together with the coupling operator every time.

Parameters
valueis set to true for computing the mass matrix operator with the coupling operator, false otherwise. The option is true by default, set to false if only the coupling operator is needed.

Definition at line 99 of file pmortarassembler.cpp.

◆ SetMaxSolverIterations()

void mfem::ParMortarAssembler::SetMaxSolverIterations ( const int  max_solver_iterations)

Control the maximum numbers of conjugate gradients steps for mass matrix inversion.

Parameters
max_solver_iterationsthe maximum number of iterations

Definition at line 104 of file pmortarassembler.cpp.

◆ SetSolver()

void mfem::ParMortarAssembler::SetSolver ( const std::shared_ptr< IterativeSolver > &  solver)

Changes the solver to be used for solving the mass-matrix linear system.

Parameters
solvernew strategy

Definition at line 94 of file pmortarassembler.cpp.

◆ SetVerbose()

void mfem::ParMortarAssembler::SetVerbose ( const bool  verbose)

Expose process details with verbose output.

Parameters
verboseset to true for verbose output

Definition at line 117 of file pmortarassembler.cpp.

◆ Transfer()

bool mfem::ParMortarAssembler::Transfer ( const ParGridFunction src_fun,
ParGridFunction dest_fun 
)

transfer a function from source to destination. if the transfer is to be performed multiple times use Assemble or Update/Apply instead

Parameters
src_funthe function associated with the source finite element space
[out]dest_funthe function associated with the destination finite element space
Returns
true if there was an intersection and the output can be used.

Definition at line 1125 of file pmortarassembler.cpp.

◆ Update()

bool mfem::ParMortarAssembler::Update ( )

assembles the various components necessary for the transfer. To be called before calling the Apply function if the mesh geometry changed, after previous call. Works with L2_FECollection, H1_FECollection and DG_FECollection (experimental with RT_FECollection and ND_FECollection).

Returns
true if there was an intersection and the operator has been assembled. False otherwise.

Definition at line 1185 of file pmortarassembler.cpp.


The documentation for this class was generated from the following files: