X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FParaMEDMEM_Swig%2FParaMEDMEMCommon.i;h=896f77469c751f2bcf95f3219ea7efb2c48d7712;hb=8411b13fec372c7635bf04d2bb81a869dc038fdd;hp=452834e7600915d89acfa02743537f3cbbdb280f;hpb=1c9761aeac9192f62f324ad7a04430f2482bc843;p=tools%2Fmedcoupling.git diff --git a/src/ParaMEDMEM_Swig/ParaMEDMEMCommon.i b/src/ParaMEDMEM_Swig/ParaMEDMEMCommon.i index 452834e76..896f77469 100644 --- a/src/ParaMEDMEM_Swig/ParaMEDMEMCommon.i +++ b/src/ParaMEDMEM_Swig/ParaMEDMEMCommon.i @@ -36,6 +36,7 @@ #include "ComponentTopology.hxx" #include "ParaUMesh.hxx" #include "ParaSkyLineArray.hxx" +#include "ParaDataArray.hxx" using namespace INTERP_KERNEL; using namespace MEDCoupling; @@ -58,12 +59,27 @@ using namespace ICoCo; %rename(ICoCoMEDField) ICoCo::MEDField; %include "ICoCoMEDField.hxx" +%newobject MEDCoupling::ParaUMesh::New; +%newobject MEDCoupling::ParaUMesh::getMesh; +%newobject MEDCoupling::ParaUMesh::getGlobalCellIds; +%newobject MEDCoupling::ParaUMesh::getGlobalNodeIds; %newobject MEDCoupling::ParaUMesh::getCellIdsLyingOnNodes; +%newobject MEDCoupling::ParaUMesh::redistributeCells; +%newobject MEDCoupling::ParaUMesh::redistributeCellField; +%newobject MEDCoupling::ParaUMesh::redistributeNodeField; +%newobject MEDCoupling::ParaDataArrayInt32::New; +%newobject MEDCoupling::ParaDataArrayInt32::buildComplement; +%newobject MEDCoupling::ParaDataArrayInt64::New; +%newobject MEDCoupling::ParaDataArrayInt64::buildComplement; +%newobject MEDCoupling::ParaSkyLineArray::New; %newobject MEDCoupling::ParaSkyLineArray::equiRedistribute; %newobject MEDCoupling::ParaSkyLineArray::getSkyLineArray; %newobject MEDCoupling::ParaSkyLineArray::getGlobalIdsArray; %feature("unref") ParaSkyLineArray "$this->decrRef();" +%feature("unref") ParaUMesh "$this->decrRef();" +%feature("unref") ParaDataArrayInt32 "$this->decrRef();" +%feature("unref") ParaDataArrayInt64 "$this->decrRef();" %nodefaultctor; @@ -127,14 +143,64 @@ namespace MEDCoupling int reduce(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) const; int allReduce(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) const; + %extend + { + PyObject *allGatherArrays(const DataArrayIdType *array) const + { + std::vector< MCAuto > ret; + self->allGatherArrays(MPI_COMM_WORLD,array,ret); + return convertFromVectorAutoObjToPyObj(ret,SWIGTITraits::TI); + } + + PyObject *allToAllArrays(PyObject *arrays) const + { + std::vector< DataArrayIdType * > arraysIn; + std::vector< MCAuto > arrayOut; + convertFromPyObjVectorOfObj(arrays,SWIGTITraits::TI,"DataArrayIdType",arraysIn); + std::vector< MCAuto > arraysIn2(FromVecToVecAuto(arraysIn)); + self->allToAllArrays(MPI_COMM_WORLD,arraysIn2,arrayOut); + return convertFromVectorAutoObjToPyObj(arrayOut,SWIGTITraits::TI); + } + } }; - class ParaUMesh + class ParaUMesh : public RefCountObject { public: - ParaUMesh(MEDCouplingUMesh *mesh, DataArrayIdType *globalCellIds, DataArrayIdType *globalNodeIds); + static ParaUMesh *New(MEDCouplingUMesh *mesh, DataArrayIdType *globalCellIds, DataArrayIdType *globalNodeIds); + ParaUMesh *redistributeCells(const DataArrayIdType *globalCellIds) const; + DataArrayIdType *redistributeCellField(const DataArrayIdType *globalCellIds, const DataArrayIdType *fieldValueToRed) const; + DataArrayDouble *redistributeCellField(const DataArrayIdType *globalCellIds, const DataArrayDouble *fieldValueToRed) const; + DataArrayIdType *redistributeNodeField(const DataArrayIdType *globalCellIds, const DataArrayIdType *fieldValueToRed) const; + DataArrayDouble *redistributeNodeField(const DataArrayIdType *globalCellIds, const DataArrayDouble *fieldValueToRed) const; %extend { + ParaUMesh(MEDCouplingUMesh *mesh, DataArrayIdType *globalCellIds, DataArrayIdType *globalNodeIds) + { + return ParaUMesh::New(mesh,globalCellIds,globalNodeIds); + } + + MEDCouplingUMesh *getMesh() + { + MEDCouplingUMesh *ret(self->getMesh()); + if(ret) ret->incrRef(); + return ret; + } + + DataArrayIdType *getGlobalCellIds() + { + DataArrayIdType *ret(self->getGlobalCellIds()); + if(ret) ret->incrRef(); + return ret; + } + + DataArrayIdType *getGlobalNodeIds() + { + DataArrayIdType *ret(self->getGlobalNodeIds()); + if(ret) ret->incrRef(); + return ret; + } + DataArrayIdType *getCellIdsLyingOnNodes(const DataArrayIdType *globalNodeIds, bool fullyIn) const { MCAuto ret(self->getCellIdsLyingOnNodes(globalNodeIds,fullyIn)); @@ -143,6 +209,38 @@ namespace MEDCoupling } }; + class ParaDataArray : public RefCountObject + { + }; + + class ParaDataArrayInt32 : public ParaDataArray + { + public: + static ParaDataArrayInt32 *New(DataArrayInt32 *seqDa); + DataArrayIdType *buildComplement(int nbOfElems) const; + %extend + { + ParaDataArrayInt32(DataArrayInt32 *seqDa) + { + return ParaDataArrayInt32::New(seqDa); + } + } + }; + + class ParaDataArrayInt64 : public ParaDataArray + { + public: + static ParaDataArrayInt64 *New(DataArrayInt64 *seqDa); + DataArrayIdType *buildComplement(long nbOfElems) const; + %extend + { + ParaDataArrayInt64(DataArrayInt64 *seqDa) + { + return ParaDataArrayInt64::New(seqDa); + } + } + }; + class ParaSkyLineArray : public RefCountObject { public: @@ -220,3 +318,10 @@ public: return ret; } } + +%pythoncode %{ +if MEDCouplingUse64BitIDs(): + ParaDataArrayInt = ParaDataArrayInt64 +else: + ParaDataArrayInt = ParaDataArrayInt32 +%}