X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FParaMEDMEM%2FExplicitCoincidentDEC.cxx;h=db0396725b3135d1e1639e8f3a0870f4e404125e;hb=9f966e0ed55cc976b59a17318a7be82445529eda;hp=01d4beacbc858afa693c7ad2eb3d5b3c4263ced3;hpb=75943f980f7b908052ef03c2c0154508f4b0a039;p=tools%2Fmedcoupling.git diff --git a/src/ParaMEDMEM/ExplicitCoincidentDEC.cxx b/src/ParaMEDMEM/ExplicitCoincidentDEC.cxx index 01d4beacb..db0396725 100644 --- a/src/ParaMEDMEM/ExplicitCoincidentDEC.cxx +++ b/src/ParaMEDMEM/ExplicitCoincidentDEC.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -32,9 +32,69 @@ using namespace std; namespace ParaMEDMEM { - /*! \defgroup explicitcoincidentdec ExplicitCoincidentDEC + + /*! + \anchor ExplicitCoincidentDEC-det + \class ExplicitCoincidentDEC + + + This class aims at \ref interpolation "remapping fields" that have identical + supports (=the same underlying mesh) but different parallel topologies + (=different sub-domains in the mesh). It can be used to couple + together multi-physics codes that operate on the same domain + with different partitioning. + + It is very similar to what the \ref StructuredCoincidentDEC-det "StructuredCoincidentDEC" + does, except that it works with an arbitrary user-defined topology. + + The remapping between the two supports is based on identity of global + ids, instead of geometrical considerations (as it is the case for + \ref InterpKernelDEC-det "InterpKernelDEC"). + Therefore, beware that this \ref para-dec "DEC" can not be used + for coincident meshes if they do *not* have the exact same numbering. + + With this \ref para-dec "DEC" no projection, and no interpolation of the field data is done, contrary + to what happens in \ref InterpKernelDEC-det "InterpKernelDEC". It is just + a matter of allocating the values from one side to the other, using directly the cell + identifiers. + + As all the other DECs, its usage requires two phases : + - a setup phase during which the topologies are exchanged so that + the target side knows from which processors it should expect + the data. + - a send/recv phase during which the field data is actually transferred. + + This example illustrates the sending of a field with + the \c ExplicitCoincidentDEC : + \code + ... + ExplicitCoincidentDEC dec(groupA, groupB); + dec.attachLocalField(field); + dec.synchronize(); + if (groupA.containsMyRank()) + dec.recvData(); + else if (groupB.containsMyRank()) + dec.sendData(); + ... + \endcode + + Creating a ParaFIELD to be attached to the %DEC is done in exactly the same way as for + the other DECs, if only the partitioning of the support mesh differs. + In the case where the + fields have also different *component* topologies, creating the ParaFIELD + requires some more effort. See the \ref para-over "parallelism" section for more details. + */ + + + /*! Constructor */ - ExplicitCoincidentDEC::ExplicitCoincidentDEC():_toposource(0),_topotarget(0) + ExplicitCoincidentDEC::ExplicitCoincidentDEC(): + _toposource(0),_topotarget(0), + _targetgroup(0), _sourcegroup(0), + _sendcounts(0), _recvcounts(0), + _senddispls(0), _recvdispls(0), + _recvbuffer(0), _sendbuffer(0), + _distant_elems(), _explicit_mapping() { } @@ -42,12 +102,6 @@ namespace ParaMEDMEM { } - - /*! - \addtogroup explicitcoincidentdec - @{ - */ - /*! Synchronization process for exchanging topologies */ void ExplicitCoincidentDEC::synchronize() @@ -185,8 +239,7 @@ namespace ParaMEDMEM /*! - * Synchronizing a topology so that all the - * group possesses it. + * Synchronizing a topology so that all the groups get it. * * \param toposend Topology that is transmitted. It is read on processes where it already exists, and it is created and filled on others. * \param toporecv Topology which is received. @@ -388,8 +441,5 @@ namespace ParaMEDMEM _comm_interface->allToAllV(_sendbuffer, _sendcounts, _senddispls, MPI_DOUBLE, _recvbuffer, _recvcounts, _recvdispls, MPI_DOUBLE,MPI_COMM_WORLD); } - /*! - @} - */ }