Salome HOME
MED33 porting
[tools/medcoupling.git] / src / ParaMEDMEM / StructuredCoincidentDEC.cxx
index 6beb34df6dbfded511bf3ada0283a84239f2e763..7c582693606701d3728104b7856e3ebe1b13bc65 100644 (file)
@@ -1,21 +1,22 @@
-//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D
+// Copyright (C) 2007-2016  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
-//  License as published by the Free Software Foundation; either
-//  version 2.1 of the License.
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
 //
-//  This library is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-//  Lesser General Public License for more details.
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
 //
-//  You should have received a copy of the GNU Lesser General Public
-//  License along with this library; if not, write to the Free Software
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+
 #include <mpi.h>
 #include "CommInterface.hxx"
 #include "Topology.hxx"
 
 using namespace std;
 
-namespace ParaMEDMEM
+namespace MEDCoupling
 {
 
-  /*! \defgroup structuredcoincidentdec StructuredCoincidentDEC
+  /*!
+    \anchor StructuredCoincidentDEC-det
+    \class StructuredCoincidentDEC
 
-    This class is meant for remapping fields that have identical
-    supports with different parallel topologies. It can be used to couple
-    together multiphysics codes that operate on the same domain
-    with different partitionings, which can be useful if one of
+    This class aims at \ref interpolation "remapping fields" that have identical
+    structured supports (=the same underlying mesh) but different parallel topologies
+    (=different sub-domains in the structured mesh). It can be used to couple
+    together multi-physics codes that operate on the same domain
+    with different partitioning. This can be useful for example if one of
     the computation is much faster than the other. It can also be used 
     to couple together codes that share an interface that was generated
     in the same manner (with identical global ids). 
-    Also, this DEC can be used for fields that have component topologies, 
+    Also, this \ref para-dec "DEC" can be used for fields that have component topologies,
     i.e., components that are scattered over several processors.
 
     The remapping between the two supports is based on identity of global
-    ids, instead of geometrical considerations as it is the case for
-    NonCoincidentDEC and IntersectionDEC. Therefore, this DEC must not be used 
-    for coincident meshes that do not have the same numbering.
+    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.
 
-    As all the other DECs, its use is made of two phases :
-    - a setup phase during whih the topologies are exchanged so that
+    With this %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 DEC : 
+    the \c StructuredCoincidentDEC : 
     \code
     ...
     StructuredCoincidentDEC dec(groupA, groupB);
@@ -70,41 +80,42 @@ namespace ParaMEDMEM
     ...
     \endcode
 
-    Creating a ParaFIELD to be attached to the DEC is exactly the same as for 
-    other DECs in the case when the remapping concerns similar meshes 
-    that only have different partitionings. In the case when the
-    fields have also different component topologies, creating the ParaFIELD 
-    requires some more effort. See \ref parafield section for more details. 
+    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.
   */
 
 
   StructuredCoincidentDEC::StructuredCoincidentDEC():_topo_source(0),_topo_target(0),
-                                                     _recv_buffer(0),_send_buffer(0),
-                                                     _recv_counts(0),_send_counts(0),
-                                                     _recv_displs(0),_send_displs(0)
+                                                     _send_counts(0),_recv_counts(0),
+                                                     _send_displs(0),_recv_displs(0),
+                                                     _recv_buffer(0),_send_buffer(0)
   {  
   }
 
 
   StructuredCoincidentDEC::~StructuredCoincidentDEC()
   {
-    delete[] _send_buffer;
-    delete[] _recv_buffer;
-    delete[]_send_displs;
-    delete[] _recv_displs;
-    delete[] _send_counts;
-    delete[] _recv_counts;
+    delete [] _send_buffer;
+    delete [] _recv_buffer;
+    delete []_send_displs;
+    delete [] _recv_displs;
+    delete [] _send_counts;
+    delete [] _recv_counts;
     if (! _source_group->containsMyRank())
       delete _topo_source;
     if(!_target_group->containsMyRank())
       delete _topo_target;
   }
 
-  /*!
-    \addtogroup structuredcoincidentdec
-    @{
-  */
-  StructuredCoincidentDEC::StructuredCoincidentDEC(ProcessorGroup& local_group, ProcessorGroup& distant_group):DEC(local_group,distant_group),_topo_source(0),_topo_target(0),_recv_buffer(0),_send_buffer(0)
+  StructuredCoincidentDEC::StructuredCoincidentDEC(ProcessorGroup& local_group, ProcessorGroup& distant_group):
+      DisjointDEC(local_group,distant_group),
+      _topo_source(0),_topo_target(0),
+      _send_counts(0),_recv_counts(0),
+      _send_displs(0),_recv_displs(0),
+      _recv_buffer(0),_send_buffer(0)
   {
   }
 
@@ -209,7 +220,7 @@ namespace ParaMEDMEM
   }
 
   /*!
-   *  Creates the _buffers for receiving the fields on the target side
+   *  Creates the buffers for receiving the fields on the target side
    */
   void StructuredCoincidentDEC::prepareTargetDE()
   {
@@ -404,8 +415,5 @@ namespace ParaMEDMEM
         prepareTargetDE();
       }
   }
-  /*!
-    @}
-  */
 }