]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
Modification and swigg-ing of MEDField for ICoCo interface.
authorabn <adrien.bruneton@cea.fr>
Wed, 21 Aug 2019 13:17:44 +0000 (15:17 +0200)
committerabn <adrien.bruneton@cea.fr>
Wed, 21 Aug 2019 13:25:53 +0000 (15:25 +0200)
src/ICoCo/ICoCoMEDField.cxx
src/ICoCo/ICoCoMEDField.hxx
src/ICoCo/Swig/ICoCoMEDField.i [new file with mode: 0644]
src/MEDCoupling/CMakeLists.txt
src/MEDCoupling_Swig/CMakeLists.txt
src/MEDCoupling_Swig/ICoCoMEDFieldTest.py [new file with mode: 0755]
src/MEDCoupling_Swig/MEDCoupling.i
src/MEDCoupling_Swig/tests.set
src/PyWrapping/CMakeLists.txt
src/PyWrapping/medcoupling.i

index c0db2f93cc7ad934d8ac9daff589d6ddb94d5a72..965ed06c2f383f4db2094da806701c24a18a759f 100644 (file)
 //
 
 #include "ICoCoMEDField.hxx"
-//#include "ProcessorGroup.hxx"
-#include "MEDCouplingUMesh.hxx"
 #include "MEDCouplingFieldDouble.hxx"
-#include "NormalizedUnstructuredMesh.hxx"
 
 namespace ICoCo
 {
@@ -36,7 +33,7 @@ namespace ICoCo
     if(_field)
       _field->incrRef();
   }
- MEDField::MEDField(const MEDField& field):_field(field.getField())
+ MEDField::MEDField(const MEDField& field):_field(field.getMCField())
   {
     if(_field)
       _field->incrRef();
@@ -53,10 +50,20 @@ namespace ICoCo
   {
     if (_field)
       _field->decrRef();
-     
-    _field=field.getField();
+
+    _field=field.getMCField();
     if(_field)
       _field->incrRef();
     return *this;
   }
+
+  void MEDField::setMCField(MEDCoupling::MEDCouplingFieldDouble * f)
+  {
+    if(_field)
+      _field->decrRef();
+    _field = f;
+    if(f)
+      _field->incrRef();
+  }
+
 }
index a33d3a8ed69c6441e8cd10e1146453d2fe97b496..e460e85fafce95e20a4529227570babb7dee0aff 100644 (file)
@@ -36,8 +36,9 @@ namespace ICoCo
     MEDField(const MEDField& field);
     MEDField& operator=(const MEDField& field);
     virtual ~MEDField();
-    MEDCoupling::MEDCouplingFieldDouble *getField() const  { return _field; }
-    const MEDCoupling::MEDCouplingMesh *getMesh() const { return _field->getMesh(); }
+    MEDCoupling::MEDCouplingFieldDouble *getMCField() const  { return _field; }
+    void setMCField(MEDCoupling::MEDCouplingFieldDouble * f);
+
   private:
     MEDCoupling::MEDCouplingFieldDouble *_field;
   };
diff --git a/src/ICoCo/Swig/ICoCoMEDField.i b/src/ICoCo/Swig/ICoCoMEDField.i
new file mode 100644 (file)
index 0000000..dad8b1a
--- /dev/null
@@ -0,0 +1,42 @@
+// Copyright (C) 2017-2019  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, 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.
+//
+// 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
+//
+// Author : Adrien Bruneton (CEA)
+
+
+%{
+#include "ICoCoMEDField.hxx"
+
+using namespace MEDCoupling;
+%}
+
+namespace ICoCo
+{
+  class MEDField
+  {
+  public:
+    MEDField();
+    MEDField(MEDCoupling::MEDCouplingFieldDouble* field);
+    MEDField(const MEDField& field);
+    MEDField& operator=(const MEDField& field);
+    MEDCoupling::MEDCouplingFieldDouble *getMCField() const;
+    void setMCField(MEDCoupling::MEDCouplingFieldDouble * f);
+  };
+}
+
+
index 04e0b5b3ec88ab787468611b8b042fb70963ed49..42395cf21b7d89380ad8e604b61ea803e224ba9a 100644 (file)
@@ -89,7 +89,7 @@ ADD_LIBRARY(medcouplingremapper ${medcouplingremapper_SOURCES})
 TARGET_LINK_LIBRARIES(medcouplingremapper medcouplingcpp)
 INSTALL(TARGETS medcouplingremapper EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${MEDCOUPLING_INSTALL_LIBS})
 
-FILE(GLOB medcoupling_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx")
+FILE(GLOB medcoupling_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx" "${CMAKE_CURRENT_SOURCE_DIR}/../ICoCo/*.hxx")
 FILE(GLOB medcoupling_HEADERS_TXX "${CMAKE_CURRENT_SOURCE_DIR}/*.txx")
 FILE(GLOB icoco_HEADERS_HXX "${CMAKE_CURRENT_SOURCE_DIR}/../ICoCo/*.hxx")
 INSTALL(FILES ${medcoupling_HEADERS_HXX} ${medcoupling_HEADERS_TXX} ${icoco_HEADERS_HXX} MEDCouplingNatureOfFieldEnum DESTINATION ${MEDCOUPLING_INSTALL_HEADERS})
index 8dd9feb7fe171bed64c7215d0496f98ac5b63c5a..89f92135f88350ee663dbc4a19777ad1684c1421 100644 (file)
@@ -36,7 +36,9 @@ SET (MEDCoupling_SWIG_DPYS_FILES
     MEDCouplingMemArray.i
     MEDCouplingFieldDiscretization.i
     MEDCouplingFinalize.i
-    MEDCouplingTypemaps.i)
+    MEDCouplingTypemaps.i
+    ../ICoCo/Swig/ICoCoMEDField.i
+)
 
 SET (MC_pyTestFiles
     ${ALL_TESTS}
@@ -56,6 +58,7 @@ SET (MC_Swig_interf
     MEDCouplingTypemaps.i
     MEDCouplingDataArrayTypemaps.i
     MEDCouplingDataArrayTraits.hxx
+    ../ICoCo/Swig/ICoCoMEDField.i
 )
 
 INCLUDE_DIRECTORIES(
@@ -70,6 +73,8 @@ INCLUDE_DIRECTORIES(
   ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL/Geometric2D
   ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL/ExprEval
   ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL/GaussPoints
+  ${CMAKE_CURRENT_SOURCE_DIR}/../ICoCo
+  ${CMAKE_CURRENT_SOURCE_DIR}/../ICoCo/Swig
   ${PROJECT_BINARY_DIR}/doc
   )
 
diff --git a/src/MEDCoupling_Swig/ICoCoMEDFieldTest.py b/src/MEDCoupling_Swig/ICoCoMEDFieldTest.py
new file mode 100755 (executable)
index 0000000..63210af
--- /dev/null
@@ -0,0 +1,79 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2019  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, 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.
+#
+# 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
+#
+
+
+import sys
+if sys.platform == "win32":
+    from MEDCouplingCompat import *
+else:
+    from medcoupling import *
+
+import unittest
+
+class ICoCoMEDFieldTest(unittest.TestCase):
+  def generate_fields(self):
+    ## Dummy MCFieldDouble
+    msh = MEDCouplingCMesh()
+    msh.setCoords(DataArrayDouble([0.,1.,2.]))
+    msh = msh.buildUnstructured()
+    f1 = MEDCouplingFieldDouble(ON_CELLS, ONE_TIME)
+    f1.setMesh(msh)
+    f1.setArray(DataArrayDouble([0.,1.,2.,3.]))
+
+    f2 = f1.deepCopy()
+    da = f2.getArray()
+    da += 3.0
+    da2 = f2.getArray()
+    return f1, f2
+
+  def test1(self):
+    f1, f2 = self.generate_fields()
+    mf = MEDField()
+    mfd = mf.getMCField()
+    self.assertTrue(mfd is None)
+    mf.setMCField(f1)
+    f11 = mf.getMCField()
+    self.assertEqual(f1.getHiddenCppPointer(), f11.getHiddenCppPointer())  # strictly the same
+    mf.setMCField(f2)
+    f22 = mf.getMCField()
+    self.assertEqual(f2.getHiddenCppPointer(), f22.getHiddenCppPointer())  # strictly the same
+
+    mf = MEDField(f1)   # ctor with MC object
+    mfd = mf.getMCField()
+    self.assertEqual(mfd.getHiddenCppPointer(), f1.getHiddenCppPointer())  # strictly the same
+
+    mf.setMCField(None)
+    mfd = mf.getMCField()
+    self.assertTrue(mfd is None)
+
+    mf.setMCField(f2)
+    f22 = mf.getMCField()
+    self.assertEqual(f2.getHiddenCppPointer(), f22.getHiddenCppPointer())  # strictly the same
+
+    mf2 = MEDField(mf)  # copy ctor
+    f22 = mf2.getMCField()
+    self.assertEqual(f2.getHiddenCppPointer(), f22.getHiddenCppPointer())  # strictly the same
+
+    mf2 = mf  # assignement op
+    f22 = mf2.getMCField()
+    self.assertEqual(f2.getHiddenCppPointer(), f22.getHiddenCppPointer())  # strictly the same
+
+if __name__ == '__main__':
+    unittest.main()
index 57ae1cd4884f1709a9f7993c3d225fa6ee1f6e0e..9f44e9e4a9589afcad0344a74df986794e78694a 100644 (file)
@@ -24,6 +24,7 @@
 #endif
 
 %include "MEDCouplingCommon.i"
+%include "ICoCoMEDField.i"
 
 %pythoncode %{
 def MEDCouplingDataArrayDoubleIadd(self,*args):
index 6fd1864ed528cf17f917abb4110e9e88fb149da5..78e3b644865f94cc3aac28d407175e54f3b3ee23 100644 (file)
@@ -28,6 +28,7 @@ SET(BASE_TESTS
   MEDCouplingExamplesTest.py
   MEDCouplingRemapperTest.py
   UsersGuideExamplesTest.py
+  ICoCoMEDFieldTest.py
 )
 
 # if numpy is used
index 56c928ff391617f5e87176ad458a07f956414294..2a93dac761b890dd7da20ad06e6e72e69680c98e 100644 (file)
@@ -53,6 +53,7 @@ INCLUDE_DIRECTORIES(
   ${CMAKE_CURRENT_SOURCE_DIR}/../MEDPartitioner
   ${CMAKE_CURRENT_SOURCE_DIR}/../MEDPartitioner_Swig
   ${CMAKE_CURRENT_SOURCE_DIR}/../ICoCo
+  ${CMAKE_CURRENT_SOURCE_DIR}/../ICoCo/Swig
   ${CMAKE_CURRENT_SOURCE_DIR}/../ParaMEDMEM
   ${CMAKE_CURRENT_SOURCE_DIR}/../ParaMEDMEM_Swig
   ${PROJECT_BINARY_DIR}/doc
index 72032a3a470d8629dbb660b85007d36fdad47aeb..4bf4ab1bfd2309a5684701c70eb989a1d74d016b 100644 (file)
@@ -30,6 +30,8 @@
 
 %include "MEDCouplingRemapperCommon.i"
 
+%include "ICoCoMEDField.i"
+
 #ifdef WITH_MED_FILE
 %include "MEDLoaderCommon.i"
 #endif