Salome HOME
Various fixes for test runs - introducing MEDCOUPLING_RESOURCE_DIR env variable
[tools/medcoupling.git] / src / ParaMEDMEM / DisjointDEC.hxx
index b012e9a07e28583e8d0d603b8cdfd2680b7d19ed..289d618dded6d65c915ee59805baa6a7cd9866bb 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2007-2020  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.
+// 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
 
 namespace ICoCo
 {
-  class Field;
+  class MEDField;
 }
 
-namespace ParaMEDMEM
+namespace MEDCoupling
 {
   class ProcessorGroup;
   class ParaFIELD;
-  
+
+  /*!
+   * \anchor DisjointDEC-det
+   * \class DisjointDEC
+   *
+   * \section DisjointDEC-over Overview
+   *
+   * Abstract interface class representing a link between two
+   * processor groups for exchanging mesh or field data. The two processor groups must
+   * have a void intersection (\ref MEDCoupling::OverlapDEC "OverlapDEC" is to be considered otherwise).
+   * The %DEC is initialized by attaching a field on the receiving or on the
+   * sending side.
+   *
+   * The data is sent or received through calls to the (abstract) methods recvData() and sendData().
+   *
+   * One can attach either a \c MEDCoupling::ParaFIELD, or a
+   * \c ICoCo::Field, or directly a \c MEDCoupling::MEDCouplingFieldDouble instance.
+   * See the various signatures of the method DisjointDEC::attachLocalField()
+   *
+   * The derivations of this class should be considered for practical instantiation:
+   * - \ref InterpKernelDEC-det "InterpKernelDEC"
+   * - \ref ExplicitCoincidentDEC-det "ExplicitCoincidentDEC"
+   * - \ref StructuredCoincidentDEC-det "StructuredCoincidentDEC"
+   *
+   * \section DisjointDEC-options DisjointDEC options
+   * The options supported by %DisjointDEC objects are the same that the ones supported for all
+   * DECs in general and are all inherited from the class \ref MEDCoupling::DECOptions "DECOptions"
+   *
+  */
+
   class DisjointDEC : public DEC
   {
   public:
-    DisjointDEC():_local_field(0),_union_group(0),_source_group(0),_target_group(0),_owns_field(false),_owns_groups(false),_icoco_field(0) { }
+    DisjointDEC():_local_field(0),_union_group(0),_source_group(0),_target_group(0),
+    _comm_interface(0),
+    _owns_field(false),_owns_groups(false),
+    _union_comm(MPI_COMM_NULL)
+    { }
     DisjointDEC(ProcessorGroup& source_group, ProcessorGroup& target_group);
     DisjointDEC(const DisjointDEC&);
     DisjointDEC &operator=(const DisjointDEC& s);
     DisjointDEC(const std::set<int>& src_ids, const std::set<int>& trg_ids,
                 const MPI_Comm& world_comm=MPI_COMM_WORLD);
     void setNature(NatureOfField nature);
-    void attachLocalField( MEDCouplingFieldDoublefield);
-    void attachLocalField(const ParaFIELDfield, bool ownPt=false);
-    void attachLocalField(const ICoCo::Field* field);
+    void attachLocalField( MEDCouplingFieldDouble *field);
+    void attachLocalField(const ParaFIELD *field, bool ownPt=false);
+    void attachLocalField(const ICoCo::MEDField *field);
     
     virtual void prepareSourceDE() = 0;
     virtual void prepareTargetDE() = 0;
@@ -67,9 +100,10 @@ namespace ParaMEDMEM
     bool isInTargetSide() const;
     bool isInUnion() const;
   protected:
-    void compareFieldAndMethod() const throw(INTERP_KERNEL::Exception);
+    void compareFieldAndMethod() const;
     void cleanInstance();
     void copyInstance(const DisjointDEC& other);
+    void checkPartitionGroup() const;
   protected:
     const ParaFIELD* _local_field;
     //! Processor group representing the union of target and source processors
@@ -80,8 +114,7 @@ namespace ParaMEDMEM
     const CommInterface* _comm_interface;
     bool _owns_field;
     bool _owns_groups;
-  private:
-    ICoCo::Field* _icoco_field;
+    MPI_Comm _union_comm;
   };
 }