From 637e36ba1fdc38a6e07761796f64b8b486d3d4d4 Mon Sep 17 00:00:00 2001 From: ageay Date: Tue, 24 Sep 2013 09:51:07 +0000 Subject: [PATCH] End of reorganization of MEDCoupling wrapper for Renumber --- src/CMakeLists.txt | 3 + src/RENUMBER_Swig/CMakeLists.txt | 64 +++++++++++++ src/RENUMBER_Swig/MEDRenumber.i | 128 ++++++++++++++++++++++++++ src/RENUMBER_Swig/MEDRenumberCommon.i | 92 ++++++++++++++++++ src/RENUMBER_Swig/MEDRenumberTest.py | 20 ++++ 5 files changed, 307 insertions(+) create mode 100644 src/RENUMBER_Swig/CMakeLists.txt create mode 100644 src/RENUMBER_Swig/MEDRenumber.i create mode 100644 src/RENUMBER_Swig/MEDRenumberCommon.i create mode 100644 src/RENUMBER_Swig/MEDRenumberTest.py diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e140bfc6a..3ed0f1d4f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -28,6 +28,9 @@ IF(NOT SALOME_MED_MICROMED) ADD_SUBDIRECTORY(MEDLoader) IF(SALOME_MED_ENABLE_RENUMBER) ADD_SUBDIRECTORY(RENUMBER) + IF(SALOME_MED_ENABLE_PYTHON) + ADD_SUBDIRECTORY(RENUMBER_Swig) + ENDIF(SALOME_MED_ENABLE_PYTHON) ENDIF(SALOME_MED_ENABLE_RENUMBER) IF(SALOME_MED_ENABLE_PARTITIONER) ADD_SUBDIRECTORY(MEDPartitioner) diff --git a/src/RENUMBER_Swig/CMakeLists.txt b/src/RENUMBER_Swig/CMakeLists.txt new file mode 100644 index 000000000..70d49b650 --- /dev/null +++ b/src/RENUMBER_Swig/CMakeLists.txt @@ -0,0 +1,64 @@ +# Copyright (C) 2012-2013 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 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 +# + +INCLUDE(${SWIG_USE_FILE}) + +ADD_DEFINITIONS(${PYTHON_DEFINITIONS}) + +SET_SOURCE_FILES_PROPERTIES(MEDRenumber.i PROPERTIES CPLUSPLUS ON) +SET_SOURCE_FILES_PROPERTIES(MEDRenumber.i PROPERTIES SWIG_DEFINITIONS "-shadow") +IF(NUMPY_FOUND) + SET(SWIG_MODULE_MEDRenumber_EXTRA_FLAGS -DWITH_NUMPY -DWITHOUT_AUTOFIELD) +ELSE(NUMPY_FOUND) + SET(SWIG_MODULE_MEDRenumber_EXTRA_FLAGS -DWITHOUT_AUTOFIELD) +ENDIF(NUMPY_FOUND) + +SET (MEDRenumber_SWIG_DPYS_FILES + MEDRenumberCommon.i) + +INCLUDE_DIRECTORIES( + ${PYTHON_INCLUDE_DIRS} + ${PTHREAD_INCLUDE_DIR} # pthread dependancy due to python2.7 library + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/../RENUMBER + ${CMAKE_CURRENT_SOURCE_DIR}/../MEDCoupling_Swig + ${CMAKE_CURRENT_SOURCE_DIR}/../MEDCoupling + ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL + ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL/Bases + ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL/Geometric2D + ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL/ExprEval + ${CMAKE_CURRENT_SOURCE_DIR}/../INTERP_KERNEL/GaussPoints + ) + +SWIG_ADD_MODULE(MEDRenumber python MEDRenumber.i) +SWIG_LINK_LIBRARIES(MEDRenumber ${PYTHON_LIBRARIES} ${PLATFORM_LIBS} renumbercpp) + +IF(WIN32) + SET_TARGET_PROPERTIES(_MEDRenumber PROPERTIES DEBUG_OUTPUT_NAME _MEDRenumber_d) +ENDIF(WIN32) +INSTALL(TARGETS ${SWIG_MODULE_MEDRenumber_REAL_NAME} DESTINATION ${SALOME_INSTALL_PYTHON}) + +SET(PYFILES_TO_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/MEDRenumber.py) +INSTALL_AND_COMPILE_PYTHON_FILE("${PYFILES_TO_INSTALL}" ${SALOME_INSTALL_SCRIPT_PYTHON}) + +INSTALL(FILES MEDRenumber.i MEDRenumberCommon.i DESTINATION ${SALOME_INSTALL_HEADERS}) +INSTALL(FILES MEDRenumberTest.py DESTINATION ${SALOME_INSTALL_SCRIPT_PYTHON}) + +ADD_TEST(MEDRenumberTest ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/MEDRenumberTest.py) diff --git a/src/RENUMBER_Swig/MEDRenumber.i b/src/RENUMBER_Swig/MEDRenumber.i new file mode 100644 index 000000000..483fddb70 --- /dev/null +++ b/src/RENUMBER_Swig/MEDRenumber.i @@ -0,0 +1,128 @@ +// Copyright (C) 2007-2013 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 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 +// + +%include "MEDRenumberCommon.i" + +%pythoncode %{ +def ParaMEDMEMDataArrayDoubleIadd(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayDouble____iadd___(self, self, *args) +def ParaMEDMEMDataArrayDoubleIsub(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayDouble____isub___(self, self, *args) +def ParaMEDMEMDataArrayDoubleImul(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayDouble____imul___(self, self, *args) +def ParaMEDMEMDataArrayDoubleIdiv(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayDouble____idiv___(self, self, *args) +def ParaMEDMEMDataArrayDoubleIpow(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayDouble____ipow___(self, self, *args) +def ParaMEDMEMDataArrayIntIadd(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayInt____iadd___(self, self, *args) +def ParaMEDMEMDataArrayIntIsub(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayInt____isub___(self, self, *args) +def ParaMEDMEMDataArrayIntImul(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayInt____imul___(self, self, *args) +def ParaMEDMEMDataArrayIntIdiv(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayInt____idiv___(self, self, *args) +def ParaMEDMEMDataArrayIntImod(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayInt____imod___(self, self, *args) +def ParaMEDMEMDataArrayIntIpow(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayInt____ipow___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIadd(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayDoubleTuple____iadd___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIsub(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayDoubleTuple____isub___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleImul(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayDoubleTuple____imul___(self, self, *args) +def ParaMEDMEMDataArrayDoubleTupleIdiv(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayDoubleTuple____idiv___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIadd(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayIntTuple____iadd___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIsub(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayIntTuple____isub___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleImul(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayIntTuple____imul___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleIdiv(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayIntTuple____idiv___(self, self, *args) +def ParaMEDMEMDataArrayIntTupleImod(self,*args): + import _MEDCoupling + return _MEDCoupling.DataArrayIntTuple____imod___(self, self, *args) +%} + +%pythoncode %{ +DataArrayDouble.__iadd__=ParaMEDMEMDataArrayDoubleIadd +DataArrayDouble.__isub__=ParaMEDMEMDataArrayDoubleIsub +DataArrayDouble.__imul__=ParaMEDMEMDataArrayDoubleImul +DataArrayDouble.__idiv__=ParaMEDMEMDataArrayDoubleIdiv +DataArrayDouble.__ipow__=ParaMEDMEMDataArrayDoubleIpow + +DataArrayInt.__iadd__=ParaMEDMEMDataArrayIntIadd +DataArrayInt.__isub__=ParaMEDMEMDataArrayIntIsub +DataArrayInt.__imul__=ParaMEDMEMDataArrayIntImul +DataArrayInt.__idiv__=ParaMEDMEMDataArrayIntIdiv +DataArrayInt.__imod__=ParaMEDMEMDataArrayIntImod +DataArrayInt.__ipow__=ParaMEDMEMDataArrayIntIpow + +DataArrayDoubleTuple.__iadd__=ParaMEDMEMDataArrayDoubleTupleIadd +DataArrayDoubleTuple.__isub__=ParaMEDMEMDataArrayDoubleTupleIsub +DataArrayDoubleTuple.__imul__=ParaMEDMEMDataArrayDoubleTupleImul +DataArrayDoubleTuple.__idiv__=ParaMEDMEMDataArrayDoubleTupleIdiv + +DataArrayIntTuple.__iadd__=ParaMEDMEMDataArrayIntTupleIadd +DataArrayIntTuple.__isub__=ParaMEDMEMDataArrayIntTupleIsub +DataArrayIntTuple.__imul__=ParaMEDMEMDataArrayIntTupleImul +DataArrayIntTuple.__idiv__=ParaMEDMEMDataArrayIntTupleIdiv +DataArrayIntTuple.__imod__=ParaMEDMEMDataArrayIntTupleImod + +del ParaMEDMEMDataArrayDoubleIadd +del ParaMEDMEMDataArrayDoubleIsub +del ParaMEDMEMDataArrayDoubleImul +del ParaMEDMEMDataArrayDoubleIdiv +del ParaMEDMEMDataArrayIntIadd +del ParaMEDMEMDataArrayIntIsub +del ParaMEDMEMDataArrayIntImul +del ParaMEDMEMDataArrayIntIdiv +del ParaMEDMEMDataArrayIntImod +del ParaMEDMEMDataArrayDoubleTupleIadd +del ParaMEDMEMDataArrayDoubleTupleIsub +del ParaMEDMEMDataArrayDoubleTupleImul +del ParaMEDMEMDataArrayDoubleTupleIdiv +del ParaMEDMEMDataArrayIntTupleIadd +del ParaMEDMEMDataArrayIntTupleIsub +del ParaMEDMEMDataArrayIntTupleImul +del ParaMEDMEMDataArrayIntTupleIdiv +del ParaMEDMEMDataArrayIntTupleImod +%} diff --git a/src/RENUMBER_Swig/MEDRenumberCommon.i b/src/RENUMBER_Swig/MEDRenumberCommon.i new file mode 100644 index 000000000..b099f70b6 --- /dev/null +++ b/src/RENUMBER_Swig/MEDRenumberCommon.i @@ -0,0 +1,92 @@ +// Copyright (C) 2007-2013 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 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 : Anthony Geay (CEA/DEN) + +%module MEDRenumber + +%include std_vector.i +%include std_string.i + +%{ +#include "MEDCouplingMemArray.hxx" +#include "MEDCouplingAutoRefCountObjectPtr.hxx" +#include "MEDCouplingDataArrayTypemaps.i" + +#include "RenumberingFactory.hxx" +#include "RENUMBER_Renumbering.hxx" + +using namespace ParaMEDMEM; +using namespace INTERP_KERNEL; + using namespace MED_RENUMBER; +%} + +%template(ivec) std::vector; +%template(dvec) std::vector; +%template(svec) std::vector; + +#ifdef WITH_NUMPY +%init %{ import_array(); %} +#endif + +%feature("autodoc", "1"); +%feature("docstring"); + +%newobject MED_RENUMBER::RenumberingFactory; + +%nodefaultctor; + +%rename (InterpKernelException) INTERP_KERNEL::Exception; + +%include "MEDCouplingRefCountObject.i" +%include "MEDCouplingMemArray.i" + +class Renumbering +{ +public: + %extend + { + virtual PyObject *renumber(const ParaMEDMEM::DataArrayInt *graph, const ParaMEDMEM::DataArrayInt *index_graph) throw(INTERP_KERNEL::Exception) + { + if(!graph || !index_graph) + throw INTERP_KERNEL::Exception("wrap of Renumbering::renumber : One of the input arrays is NULL !"); + if(!graph->isAllocated() || !index_graph->isAllocated()) + throw INTERP_KERNEL::Exception("wrap of Renumbering::renumber : One of the input arrays is not allocated !"); + ParaMEDMEM::DataArrayInt *out0(0),*out1(0); + self->renumber(graph->begin(),index_graph->begin(),index_graph->getNumberOfTuples()-1,out0,out1); + PyObject *ret=PyTuple_New(2); + PyTuple_SetItem(ret,0,SWIG_NewPointerObj(SWIG_as_voidptr(out0),SWIGTYPE_p_ParaMEDMEM__DataArrayInt, SWIG_POINTER_OWN | 0 )); + PyTuple_SetItem(ret,1,SWIG_NewPointerObj(SWIG_as_voidptr(out1),SWIGTYPE_p_ParaMEDMEM__DataArrayInt, SWIG_POINTER_OWN | 0 )); + return ret; + } + } + virtual ~Renumbering(); +}; + +namespace MED_RENUMBER +{ + Renumbering *RenumberingFactory(const std::string& s) throw(INTERP_KERNEL::Exception); +} + +%pythoncode %{ +import os +__filename=os.environ.get('PYTHONSTARTUP') +if __filename and os.path.isfile(__filename): + execfile(__filename) + pass +%} diff --git a/src/RENUMBER_Swig/MEDRenumberTest.py b/src/RENUMBER_Swig/MEDRenumberTest.py new file mode 100644 index 000000000..1539adf61 --- /dev/null +++ b/src/RENUMBER_Swig/MEDRenumberTest.py @@ -0,0 +1,20 @@ +from MEDRenumber import * +import unittest + +class MEDRenumberTest(unittest.TestCase): + def test1(self): + from MEDCoupling import MEDCouplingCMesh + ren=RenumberingFactory("BOOST") + arr=DataArrayDouble(10) ; arr.iota() + c=MEDCouplingCMesh() ; c.setCoords(arr,arr) + m=c.buildUnstructured() + a,b=m.computeNeighborsOfCells() + n2o,o2n=ren.renumber(a,b) + self.assertTrue(o2n.isEqual(DataArrayInt([0,2,5,9,14,20,27,35,44,1,4,8,13,19,26,34,43,52,3,7,12,18,25,33,42,51,59,6,11,17,24,32,41,50,58,65,10,16,23,31,40,49,57,64,70,15,22,30,39,48,56,63,69,74,21,29,38,47,55,62,68,73,77,28,37,46,54,61,67,72,76,79,36,45,53,60,66,71,75,78,80]))) + pass + + def setUp(self): + pass + pass + +unittest.main() -- 2.39.2