Version: 9.12.0
MEDCoupling::NonCoincidentDEC Class Reference
Inheritance diagram for MEDCoupling::NonCoincidentDEC:
Collaboration diagram for MEDCoupling::NonCoincidentDEC:

Public Member Functions

 NonCoincidentDEC ()
 
 NonCoincidentDEC (ProcessorGroup &, ProcessorGroup &)
 
void prepareSourceDE ()
 
void prepareTargetDE ()
 
void recvData ()
 
void sendData ()
 
void setInterpolationMethod (InterpolationMethod method)
 
void synchronize ()
 
virtual ~NonCoincidentDEC ()
 
- Public Member Functions inherited from MEDCoupling::DEC
void copyFrom (const DEC &other)
 
 DEC ()
 
virtual void sendRecvData (bool way=true)=0
 
virtual ~DEC ()
 
- Public Member Functions inherited from MEDCoupling::DECOptions
 DECOptions ()
 
 DECOptions (const DECOptions &deco)
 
AllToAllMethod getAllToAllMethod () const
 
bool getAsynchronous () const
 
bool getForcedRenormalization () const
 
const std::string & getMethod () const
 
TimeInterpolationMethod getTimeInterpolationMethod () const
 
void setAllToAllMethod (AllToAllMethod sp)
 
void setAsynchronous (bool dr)
 
void setForcedRenormalization (bool dr)
 
void setMethod (const char *m)
 
void setTimeInterpolationMethod (TimeInterpolationMethod it)
 

Additional Inherited Members

- Protected Attributes inherited from MEDCoupling::DEC
const CommInterface_comm_interface
 
- Protected Attributes inherited from MEDCoupling::DECOptions
AllToAllMethod _allToAllMethod
 
bool _asynchronous
 
bool _forcedRenormalization
 
std::string _method
 
TimeInterpolationMethod _timeInterpolationMethod
 

Detailed Description

NonCoincidentDEC enables non-conservative remapping of fields between two parallel codes. The computation is possible for 3D meshes and 2D meshes. It is not available for 3D surfaces.

The computation enables fast parallel localization, and is based on a point in element search, followed by a field evaluation at the point location. Thus, it is typically faster than the InterpKernelDEC which uses a conservative remapping (i.e. the same algorithms of volume intersection as in the sequential remapper) It is particularly true for the initialisation phase (synchronize() method) which has a significant computation cost in InterpKernelDEC-det.

In the present version, only fields lying on elements ("P0") are considered. The value is estimated by locating the barycenter of the target side cell in a source cell and sending the value of this source cell as the value of the target cell.

Example showing the transfer from a field based on a quadrangular mesh to a triangular mesh. The triangle barycenters are computed and located in the quadrangles. In a P0-P0 interpolation, the value on the quadrangle is then applied to the triangles whose barycenter lies within.

A typical use of NonCoincidentDEC encompasses two distinct phases :

  • A setup phase during which the intersection volumes are computed and the communication structures are setup. This corresponds to calling the NonCoincidentDEC::synchronize() method.
  • A use phase during which the remappings are actually performed. This corresponds to the calls to sendData() and recvData() which actually trigger the data exchange. The data exchange are synchronous in the current version of the library so that recvData() and sendData() calls must be synchronized on code A and code B processor groups.

The following code excerpt illutrates a typical use of the NonCoincidentDEC class.

...
NonCoincidentDEC dec(groupA, groupB);
dec.attachLocalField(field);
dec.synchronize();
if (groupA.containsMyRank())
dec.recvData();
else if (groupB.containsMyRank())
dec.sendData();
...

Computing the field on the receiving side can be expressed in terms of a matrix-vector product : $ \phi_t=W.\phi_s$, with $ \phi_t $ the field on the target side and $ \phi_s $ the field on the source side. In the P0-P0 case, this matrix is a plain rectangular matrix with one non-zero element per row (with value 1). For instance, in the above figure, the matrix is :

\[ \begin{tabular}{|cccc|} 1 & 0 & 0 & 0\\ 0 & 0 & 1 & 0\\ 1 & 0 & 0 & 0\\ 0 & 0 & 1 & 0\\ \end{tabular} \]

Constructor & Destructor Documentation

◆ NonCoincidentDEC() [1/2]

MEDCoupling::NonCoincidentDEC::NonCoincidentDEC ( )

◆ NonCoincidentDEC() [2/2]

MEDCoupling::NonCoincidentDEC::NonCoincidentDEC ( ProcessorGroup source_group,
ProcessorGroup target_group 
)

Constructor of a non coincident DEC with a source group on which lies a field lying on a mesh and a target group on which lies a mesh.

Parameters
source_groupProcessorGroup on the source side
target_groupProcessorGroup on the target side

◆ ~NonCoincidentDEC()

MEDCoupling::NonCoincidentDEC::~NonCoincidentDEC ( )
virtual

Member Function Documentation

◆ synchronize()

void MEDCoupling::NonCoincidentDEC::synchronize ( )
virtual

Synchronization process. Calling this method synchronizes the topologies so that the target side gets the information which enable it to fetch the field value from the source side. A typical call is :

NonCoincidentDEC dec(source_group,target_group);
dec.attachLocalField(field);
dec.synchronize();

Implements MEDCoupling::DEC.

References MEDCoupling::medmemMeshToFVMMesh().

◆ recvData()

void MEDCoupling::NonCoincidentDEC::recvData ( )

This method is called on the target group in order to trigger the retrieveal of field data. It must be called synchronously with a sendData() call on the source group.

◆ sendData()

void MEDCoupling::NonCoincidentDEC::sendData ( )

This method is called on the source group in order to send field data. It must be called synchronously with a recvData() call on the target group.

◆ prepareSourceDE()

void MEDCoupling::NonCoincidentDEC::prepareSourceDE ( )

◆ prepareTargetDE()

void MEDCoupling::NonCoincidentDEC::prepareTargetDE ( )

◆ setInterpolationMethod()

void MEDCoupling::NonCoincidentDEC::setInterpolationMethod ( InterpolationMethod  method)