X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCoupling_Swig%2FMEDCouplingCommon.i;h=bfbf966dbebe43072a7e2fcc993c0a0214af01e8;hb=ec0d2fa019c87f670675131f7ae89228664dc8d4;hp=b72ee4c40d71cc796bd48c6e1c0af10cf99547ce;hpb=e92e242ba1cb78f30c63f208b6bc049869a7d43f;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling_Swig/MEDCouplingCommon.i b/src/MEDCoupling_Swig/MEDCouplingCommon.i index b72ee4c40..bfbf966db 100644 --- a/src/MEDCoupling_Swig/MEDCouplingCommon.i +++ b/src/MEDCoupling_Swig/MEDCouplingCommon.i @@ -41,6 +41,7 @@ #include "MEDCouplingDefinitionTime.hxx" #include "MEDCouplingFieldDiscretization.hxx" #include "MEDCouplingCartesianAMRMesh.hxx" +#include "MEDCouplingAMRAttribute.hxx" #include "MEDCouplingMatrix.hxx" #include "MEDCouplingTypemaps.i" @@ -94,6 +95,13 @@ using namespace INTERP_KERNEL; } //$$$$$$$$$$$$$$$$$$ +//////////////////// +%typemap(out) MEDCouplingDataForGodFather* +{ + $result=convertDataForGodFather($1,$owner); +} +//$$$$$$$$$$$$$$$$$$ + //////////////////// %typemap(out) ParaMEDMEM::MEDCoupling1GTUMesh* { @@ -316,6 +324,7 @@ using namespace INTERP_KERNEL; %newobject ParaMEDMEM::MEDCouplingStructuredMesh::ExtractFieldOfDoubleFrom; %newobject ParaMEDMEM::MEDCouplingStructuredMesh::Build1GTNodalConnectivity; %newobject ParaMEDMEM::MEDCouplingStructuredMesh::Build1GTNodalConnectivityOfSubLevelMesh; +%newobject ParaMEDMEM::MEDCouplingStructuredMesh::ComputeCornersGhost; %newobject ParaMEDMEM::MEDCouplingCMesh::New; %newobject ParaMEDMEM::MEDCouplingCMesh::clone; %newobject ParaMEDMEM::MEDCouplingCMesh::getCoordsAt; @@ -331,7 +340,9 @@ using namespace INTERP_KERNEL; %newobject ParaMEDMEM::MEDCouplingFieldOverTime::New; %newobject ParaMEDMEM::MEDCouplingCartesianAMRPatchGen::getMesh; %newobject ParaMEDMEM::MEDCouplingCartesianAMRPatchGen::__getitem__; +%newobject ParaMEDMEM::MEDCouplingCartesianAMRMeshGen::deepCpy; %newobject ParaMEDMEM::MEDCouplingCartesianAMRMeshGen::buildUnstructured; +%newobject ParaMEDMEM::MEDCouplingCartesianAMRMeshGen::extractGhostFrom; %newobject ParaMEDMEM::MEDCouplingCartesianAMRMeshGen::buildMeshFromPatchEnvelop; %newobject ParaMEDMEM::MEDCouplingCartesianAMRMeshGen::buildMeshOfDirectChildrenOnly; %newobject ParaMEDMEM::MEDCouplingCartesianAMRMeshGen::getImageMesh; @@ -340,10 +351,19 @@ using namespace INTERP_KERNEL; %newobject ParaMEDMEM::MEDCouplingCartesianAMRMeshGen::getPatch; %newobject ParaMEDMEM::MEDCouplingCartesianAMRMeshGen::createCellFieldOnPatch; %newobject ParaMEDMEM::MEDCouplingCartesianAMRMeshGen::findPatchesInTheNeighborhoodOf; +%newobject ParaMEDMEM::MEDCouplingCartesianAMRMeshGen::getPatchAtPosition; +%newobject ParaMEDMEM::MEDCouplingCartesianAMRMeshGen::getMeshAtPosition; %newobject ParaMEDMEM::MEDCouplingCartesianAMRMeshGen::__getitem__; %newobject ParaMEDMEM::MEDCouplingCartesianAMRMesh::New; -%newobject ParaMEDMEM::MEDCouplingCartesianAMRMesh::getDataConst; -%newobject ParaMEDMEM::MEDCouplingCartesianAMRMesh::getData; +%newobject ParaMEDMEM::MEDCouplingDataForGodFather::getMyGodFather; +%newobject ParaMEDMEM::MEDCouplingAMRAttribute::New; +%newobject ParaMEDMEM::MEDCouplingAMRAttribute::deepCpy; +%newobject ParaMEDMEM::MEDCouplingAMRAttribute::deepCpyWithoutGodFather; +%newobject ParaMEDMEM::MEDCouplingAMRAttribute::getFieldOn; +%newobject ParaMEDMEM::MEDCouplingAMRAttribute::projectTo; +%newobject ParaMEDMEM::MEDCouplingAMRAttribute::buildCellFieldOnRecurseWithoutOverlapWithoutGhost; +%newobject ParaMEDMEM::MEDCouplingAMRAttribute::buildCellFieldOnWithGhost; +%newobject ParaMEDMEM::MEDCouplingAMRAttribute::buildCellFieldOnWithoutGhost; %newobject ParaMEDMEM::DenseMatrix::New; %newobject ParaMEDMEM::DenseMatrix::deepCpy; %newobject ParaMEDMEM::DenseMatrix::shallowCpy; @@ -381,6 +401,7 @@ using namespace INTERP_KERNEL; %feature("unref") MEDCouplingCartesianAMRPatchGF "$this->decrRef();" %feature("unref") MEDCouplingCartesianAMRPatch "$this->decrRef();" %feature("unref") MEDCouplingDataForGodFather "$this->decrRef();" +%feature("unref") MEDCouplingAMRAttribute "$this->decrRef();" %feature("unref") DenseMatrix "$this->decrRef();" %rename(assign) *::operator=; @@ -407,14 +428,16 @@ namespace INTERP_KERNEL public: BoxSplittingOptions(); void init() throw(INTERP_KERNEL::Exception); - double getEffeciency() const throw(INTERP_KERNEL::Exception); - void setEffeciency(double effeciency) throw(INTERP_KERNEL::Exception); - double getEffeciencySnd() const throw(INTERP_KERNEL::Exception); - void setEffeciencySnd(double effeciencySnd) throw(INTERP_KERNEL::Exception); - int getMinCellDirection() const throw(INTERP_KERNEL::Exception); - void setMinCellDirection(int minCellDirection) throw(INTERP_KERNEL::Exception); - int getMaxCells() const throw(INTERP_KERNEL::Exception); - void setMaxCells(int maxCells) throw(INTERP_KERNEL::Exception); + double getEfficiencyGoal() const throw(INTERP_KERNEL::Exception); + void setEfficiencyGoal(double efficiency) throw(INTERP_KERNEL::Exception); + double getEfficiencyThreshold() const throw(INTERP_KERNEL::Exception); + void setEfficiencyThreshold(double efficiencyThreshold) throw(INTERP_KERNEL::Exception); + int getMinimumPatchLength() const throw(INTERP_KERNEL::Exception); + void setMinimumPatchLength(int minPatchLength) throw(INTERP_KERNEL::Exception); + int getMaximumPatchLength() const throw(INTERP_KERNEL::Exception); + void setMaximumPatchLength(int maxPatchLength) throw(INTERP_KERNEL::Exception); + int getMaximumNbOfCellsInPatch() const throw(INTERP_KERNEL::Exception); + void setMaximumNbOfCellsInPatch(int maxNbCellsInPatch) throw(INTERP_KERNEL::Exception); void copyOptions(const BoxSplittingOptions & other) throw(INTERP_KERNEL::Exception); std::string printOptions() const throw(INTERP_KERNEL::Exception); %extend @@ -525,7 +548,9 @@ namespace ParaMEDMEM virtual INTERP_KERNEL::NormalizedCellType getTypeOfCell(int cellId) const throw(INTERP_KERNEL::Exception); virtual std::string simpleRepr() const throw(INTERP_KERNEL::Exception); virtual std::string advancedRepr() const throw(INTERP_KERNEL::Exception); - void writeVTK(const std::string& fileName, bool isBinary=true) const throw(INTERP_KERNEL::Exception); + std::string writeVTK(const std::string& fileName, bool isBinary=true) const throw(INTERP_KERNEL::Exception); + virtual std::string getVTKFileExtension() const; + std::string getVTKFileNameOf(const std::string& fileName) const; // tools virtual MEDCouplingFieldDouble *getMeasureField(bool isAbs) const throw(INTERP_KERNEL::Exception); virtual MEDCouplingFieldDouble *getMeasureFieldOnNode(bool isAbs) const throw(INTERP_KERNEL::Exception); @@ -2845,12 +2870,14 @@ namespace ParaMEDMEM int getNodeIdFromPos(int i, int j, int k) const throw(INTERP_KERNEL::Exception); int getNumberOfCellsOfSubLevelMesh() const throw(INTERP_KERNEL::Exception); int getSpaceDimensionOnNodeStruct() const throw(INTERP_KERNEL::Exception); + double computeSquareness() const throw(INTERP_KERNEL::Exception); virtual std::vector getNodeGridStructure() const throw(INTERP_KERNEL::Exception); std::vector getCellGridStructure() const throw(INTERP_KERNEL::Exception); MEDCoupling1SGTUMesh *build1SGTUnstructured() const throw(INTERP_KERNEL::Exception); static INTERP_KERNEL::NormalizedCellType GetGeoTypeGivenMeshDimension(int meshDim) throw(INTERP_KERNEL::Exception); MEDCoupling1SGTUMesh *build1SGTSubLevelMesh() const throw(INTERP_KERNEL::Exception); static int DeduceNumberOfGivenStructure(const std::vector& st) throw(INTERP_KERNEL::Exception); + static DataArrayInt *ComputeCornersGhost(const std::vector& st, int ghostLev) throw(INTERP_KERNEL::Exception); static std::vector GetSplitVectFromStruct(const std::vector& strct) throw(INTERP_KERNEL::Exception); %extend { @@ -2891,6 +2918,33 @@ namespace ParaMEDMEM return MEDCouplingStructuredMesh::BuildExplicitIdsFrom(tmp5,inp); } + static void MultiplyPartOf(const std::vector& st, PyObject *part, double factor, DataArrayDouble *da) throw(INTERP_KERNEL::Exception) + { + std::vector< std::pair > inp; + convertPyToVectorPairInt(part,inp); + MEDCouplingStructuredMesh::MultiplyPartOf(st,inp,factor,da); + } + + static void MultiplyPartOfByGhost(const std::vector& st, PyObject *part, int ghostSize, double factor, DataArrayDouble *da) throw(INTERP_KERNEL::Exception) + { + std::vector< std::pair > inp; + convertPyToVectorPairInt(part,inp); + MEDCouplingStructuredMesh::MultiplyPartOfByGhost(st,inp,ghostSize,factor,da); + } + + static PyObject *PutInGhostFormat(int ghostSize, const std::vector& st, PyObject *part) throw(INTERP_KERNEL::Exception) + { + std::vector< std::pair > inp; + convertPyToVectorPairInt(part,inp); + std::vector stWithGhost; + std::vector< std::pair > partWithGhost; + MEDCouplingStructuredMesh::PutInGhostFormat(ghostSize,st,inp,stWithGhost,partWithGhost); + PyObject *ret(PyTuple_New(2)); + PyTuple_SetItem(ret,0,convertIntArrToPyList2(stWithGhost)); + PyTuple_SetItem(ret,1,convertFromVectorPairInt(partWithGhost)); + return ret; + } + static DataArrayDouble *ExtractFieldOfDoubleFrom(const std::vector& st, const DataArrayDouble *fieldOfDbl, PyObject *partCompactFormat) throw(INTERP_KERNEL::Exception) { std::vector< std::pair > inp; @@ -2898,6 +2952,13 @@ namespace ParaMEDMEM return MEDCouplingStructuredMesh::ExtractFieldOfDoubleFrom(st,fieldOfDbl,inp); } + static void AssignPartOfFieldOfDoubleUsing(const std::vector& st, DataArrayDouble *fieldOfDbl, PyObject *partCompactFormat, const DataArrayDouble *other) throw(INTERP_KERNEL::Exception) + { + std::vector< std::pair > inp; + convertPyToVectorPairInt(partCompactFormat,inp); + MEDCouplingStructuredMesh::AssignPartOfFieldOfDoubleUsing(st,fieldOfDbl,inp,other); + } + static int DeduceNumberOfGivenRangeInCompactFrmt(PyObject *part) throw(INTERP_KERNEL::Exception) { std::vector< std::pair > inp; @@ -2959,6 +3020,14 @@ namespace ParaMEDMEM return retPy; } + static bool AreRangesIntersect(PyObject *r1, PyObject *r2) + { + std::vector< std::pair > r1Cpp,r2Cpp; + convertPyToVectorPairInt(r1,r1Cpp); + convertPyToVectorPairInt(r2,r2Cpp); + return MEDCouplingStructuredMesh::AreRangesIntersect(r1Cpp,r2Cpp); + } + static PyObject *IsPartStructured(PyObject *li, PyObject *st) throw(INTERP_KERNEL::Exception) { int szArr,sw,iTypppArr; @@ -3002,6 +3071,30 @@ namespace ParaMEDMEM return retPy; } + static PyObject *TranslateCompactFrmt(PyObject *part, const std::vector& translation) throw(INTERP_KERNEL::Exception) + { + std::vector< std::pair > param0; + convertPyToVectorPairInt(part,param0); + std::vector< std::pair > ret(MEDCouplingStructuredMesh::TranslateCompactFrmt(param0,translation)); + PyObject *retPy(PyList_New(ret.size())); + for(std::size_t i=0;i FindTranslationFrom(PyObject *startingFrom, PyObject *goingTo) throw(INTERP_KERNEL::Exception) + { + std::vector< std::pair > param0,param1; + convertPyToVectorPairInt(startingFrom,param0); + convertPyToVectorPairInt(goingTo,param1); + return MEDCouplingStructuredMesh::FindTranslationFrom(param0,param1); + } + static PyObject *ChangeReferenceToGlobalOfCompactFrmt(PyObject *bigInAbs, PyObject *partOfBigRelativeToBig, bool check=true) throw(INTERP_KERNEL::Exception) { std::vector< std::pair > param0,param1,ret; @@ -3219,6 +3312,13 @@ namespace ParaMEDMEM MEDCouplingIMesh::SpreadCoarseToFineGhost(coarseDA,coarseSt,fineDA,inp,facts,ghostSize); } + static void SpreadCoarseToFineGhostZone(const DataArrayDouble *coarseDA, const std::vector& coarseSt, DataArrayDouble *fineDA, PyObject *fineLocInCoarse, const std::vector& facts, int ghostSize) throw(INTERP_KERNEL::Exception) + { + std::vector< std::pair > inp; + convertPyToVectorPairInt(fineLocInCoarse,inp); + MEDCouplingIMesh::SpreadCoarseToFineGhostZone(coarseDA,coarseSt,fineDA,inp,facts,ghostSize); + } + std::string __str__() const throw(INTERP_KERNEL::Exception) { return self->simpleRepr(); @@ -3440,7 +3540,7 @@ namespace ParaMEDMEM void copyAllTinyAttrFrom(const MEDCouplingFieldDouble *other) throw(INTERP_KERNEL::Exception); std::string simpleRepr() const throw(INTERP_KERNEL::Exception); std::string advancedRepr() const throw(INTERP_KERNEL::Exception); - void writeVTK(const std::string& fileName, bool isBinary=true) const throw(INTERP_KERNEL::Exception); + std::string writeVTK(const std::string& fileName, bool isBinary=true) const throw(INTERP_KERNEL::Exception); MEDCouplingFieldDouble *clone(bool recDeepCpy) const; MEDCouplingFieldDouble *cloneWithMesh(bool recDeepCpy) const; MEDCouplingFieldDouble *deepCpy() const; @@ -4511,11 +4611,11 @@ namespace ParaMEDMEM return MEDCouplingFieldDouble::MergeFields(tmp); } - static void WriteVTK(const char *fileName, PyObject *li, bool isBinary=true) throw(INTERP_KERNEL::Exception) + static std::string WriteVTK(const char *fileName, PyObject *li, bool isBinary=true) throw(INTERP_KERNEL::Exception) { std::vector tmp; convertFromPyObjVectorOfObj(li,SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDouble,"MEDCouplingFieldDouble",tmp); - MEDCouplingFieldDouble::WriteVTK(fileName,tmp,isBinary); + return MEDCouplingFieldDouble::WriteVTK(fileName,tmp,isBinary); } } }; @@ -4780,6 +4880,7 @@ namespace ParaMEDMEM public: int getNumberOfOverlapedCellsForFather() const throw(INTERP_KERNEL::Exception); bool isInMyNeighborhood(const MEDCouplingCartesianAMRPatch *other, int ghostLev) const throw(INTERP_KERNEL::Exception); + std::vector computeCellGridSt() const throw(INTERP_KERNEL::Exception); %extend { PyObject *getBLTRRange() const throw(INTERP_KERNEL::Exception) @@ -4834,18 +4935,13 @@ namespace ParaMEDMEM class MEDCouplingCartesianAMRPatchGF : public MEDCouplingCartesianAMRPatchGen { }; - - class MEDCouplingDataForGodFather : public RefCountObject - { - public: - virtual void alloc() throw(INTERP_KERNEL::Exception); - virtual void dealloc() throw(INTERP_KERNEL::Exception); - }; class MEDCouplingCartesianAMRMeshGen : public RefCountObject, public TimeLabel { public: int getAbsoluteLevel() const throw(INTERP_KERNEL::Exception); + int getAbsoluteLevelRelativeTo(const MEDCouplingCartesianAMRMeshGen *ref) const throw(INTERP_KERNEL::Exception); + std::vector getPositionRelativeTo(const MEDCouplingCartesianAMRMeshGen *ref) const throw(INTERP_KERNEL::Exception); int getSpaceDimension() const throw(INTERP_KERNEL::Exception); const std::vector& getFactors() const throw(INTERP_KERNEL::Exception); void setFactors(const std::vector& newFactors) throw(INTERP_KERNEL::Exception); @@ -4855,21 +4951,28 @@ namespace ParaMEDMEM int getNumberOfCellsRecursiveWithOverlap() const throw(INTERP_KERNEL::Exception); int getNumberOfCellsRecursiveWithoutOverlap() const throw(INTERP_KERNEL::Exception); bool isPatchInNeighborhoodOf(int patchId1, int patchId2, int ghostLev) const throw(INTERP_KERNEL::Exception); + virtual void detachFromFather() throw(INTERP_KERNEL::Exception); // - int getNumberOfPatches() const throw(INTERP_KERNEL::Exception); + int getNumberOfPatches() const throw(INTERP_KERNEL::Exception); + int getPatchIdFromChildMesh(const MEDCouplingCartesianAMRMeshGen *mesh) const throw(INTERP_KERNEL::Exception); MEDCouplingUMesh *buildUnstructured() const throw(INTERP_KERNEL::Exception); + DataArrayDouble *extractGhostFrom(int ghostSz, const DataArrayDouble *arr) const throw(INTERP_KERNEL::Exception); + std::vector getPatchIdsInTheNeighborhoodOf(int patchId, int ghostLev) const throw(INTERP_KERNEL::Exception); MEDCoupling1SGTUMesh *buildMeshFromPatchEnvelop() const throw(INTERP_KERNEL::Exception); MEDCoupling1SGTUMesh *buildMeshOfDirectChildrenOnly() const throw(INTERP_KERNEL::Exception); void removeAllPatches() throw(INTERP_KERNEL::Exception); void removePatch(int patchId) throw(INTERP_KERNEL::Exception); - void detachFromFather() throw(INTERP_KERNEL::Exception); void createPatchesFromCriterion(const INTERP_KERNEL::BoxSplittingOptions& bso, const DataArrayByte *criterion, const std::vector& factors) throw(INTERP_KERNEL::Exception); + void createPatchesFromCriterion(const INTERP_KERNEL::BoxSplittingOptions& bso, const DataArrayDouble *criterion, const std::vector& factors, double eps) throw(INTERP_KERNEL::Exception); DataArrayDouble *createCellFieldOnPatch(int patchId, const DataArrayDouble *cellFieldOnThis) const throw(INTERP_KERNEL::Exception); - void fillCellFieldOnPatch(int patchId, const DataArrayDouble *cellFieldOnThis, DataArrayDouble *cellFieldOnPatch) const throw(INTERP_KERNEL::Exception); - void fillCellFieldOnPatchGhost(int patchId, const DataArrayDouble *cellFieldOnThis, DataArrayDouble *cellFieldOnPatch, int ghostLev) const throw(INTERP_KERNEL::Exception); - void fillCellFieldComingFromPatch(int patchId, const DataArrayDouble *cellFieldOnPatch, DataArrayDouble *cellFieldOnThis) const throw(INTERP_KERNEL::Exception); - void fillCellFieldComingFromPatchGhost(int patchId, const DataArrayDouble *cellFieldOnPatch, DataArrayDouble *cellFieldOnThis, int ghostLev) const throw(INTERP_KERNEL::Exception); + void fillCellFieldOnPatch(int patchId, const DataArrayDouble *cellFieldOnThis, DataArrayDouble *cellFieldOnPatch, bool isConservative=true) const throw(INTERP_KERNEL::Exception); + void fillCellFieldOnPatchGhost(int patchId, const DataArrayDouble *cellFieldOnThis, DataArrayDouble *cellFieldOnPatch, int ghostLev, bool isConservative=true) const throw(INTERP_KERNEL::Exception); + void fillCellFieldOnPatchOnlyOnGhostZone(int patchId, const DataArrayDouble *cellFieldOnThis, DataArrayDouble *cellFieldOnPatch, int ghostLev) const throw(INTERP_KERNEL::Exception); + void fillCellFieldOnPatchOnlyOnGhostZoneWith(int ghostLev, const MEDCouplingCartesianAMRPatch *patchToBeModified, const MEDCouplingCartesianAMRPatch *neighborPatch, DataArrayDouble *cellFieldOnPatch, const DataArrayDouble *cellFieldNeighbor) const; + void fillCellFieldComingFromPatch(int patchId, const DataArrayDouble *cellFieldOnPatch, DataArrayDouble *cellFieldOnThis, bool isConservative=true) const throw(INTERP_KERNEL::Exception); + void fillCellFieldComingFromPatchGhost(int patchId, const DataArrayDouble *cellFieldOnPatch, DataArrayDouble *cellFieldOnThis, int ghostLev, bool isConservative=true) const throw(INTERP_KERNEL::Exception); DataArrayInt *findPatchesInTheNeighborhoodOf(int patchId, int ghostLev) const throw(INTERP_KERNEL::Exception); + std::string buildPythonDumpOfThis() const throw(INTERP_KERNEL::Exception); %extend { void addPatch(PyObject *bottomLeftTopRight, const std::vector& factors) throw(INTERP_KERNEL::Exception) @@ -4879,7 +4982,56 @@ namespace ParaMEDMEM self->addPatch(inp,factors); } - PyObject *retrieveGridsAt(int absoluteLev) const throw(INTERP_KERNEL::Exception) + PyObject *getPatches() const throw(INTERP_KERNEL::Exception) + { + std::vector< const MEDCouplingCartesianAMRPatch *> ps(self->getPatches()); + int sz(ps.size()); + PyObject *ret = PyList_New(sz); + for(int i=0;i(ps[i])); + if(elt) + elt->incrRef(); + PyList_SetItem(ret,i,convertCartesianAMRPatch(elt, SWIG_POINTER_OWN | 0 )); + } + return ret; + } + + // agy : don't know why typemap fails here ??? let it in the extend section + PyObject *deepCpy(MEDCouplingCartesianAMRMeshGen *father) const throw(INTERP_KERNEL::Exception) + { + return convertCartesianAMRMesh(self->deepCpy(father), SWIG_POINTER_OWN | 0 ); + } + + MEDCouplingCartesianAMRPatch *getPatchAtPosition(const std::vector& pos) const throw(INTERP_KERNEL::Exception) + { + const MEDCouplingCartesianAMRPatch *ret(self->getPatchAtPosition(pos)); + MEDCouplingCartesianAMRPatch *ret2(const_cast(ret)); + if(ret2) + ret2->incrRef(); + return ret2; + } + + MEDCouplingCartesianAMRMeshGen *getMeshAtPosition(const std::vector& pos) const throw(INTERP_KERNEL::Exception) + { + const MEDCouplingCartesianAMRMeshGen *ret(self->getMeshAtPosition(pos)); + MEDCouplingCartesianAMRMeshGen *ret2(const_cast(ret)); + if(ret2) + ret2->incrRef(); + return ret2; + } + + virtual PyObject *positionRelativeToGodFather() const throw(INTERP_KERNEL::Exception) + { + std::vector out1; + std::vector< std::pair > out0(self->positionRelativeToGodFather(out1)); + PyObject *ret(PyTuple_New(2)); + PyTuple_SetItem(ret,0,convertFromVectorPairInt(out0)); + PyTuple_SetItem(ret,1,convertIntArrToPyList2(out1)); + return ret; + } + + virtual PyObject *retrieveGridsAt(int absoluteLev) const throw(INTERP_KERNEL::Exception) { std::vector ps(self->retrieveGridsAt(absoluteLev)); int sz(ps.size()); @@ -4889,7 +5041,14 @@ namespace ParaMEDMEM return ret; } - MEDCouplingCartesianAMRMeshGen *getFather() const throw(INTERP_KERNEL::Exception) + MEDCouplingFieldDouble *buildCellFieldOnRecurseWithoutOverlapWithoutGhost(int ghostSz, PyObject *recurseArrs) const + { + std::vector inp; + convertFromPyObjVectorOfObj(recurseArrs,SWIGTYPE_p_ParaMEDMEM__DataArrayDouble,"DataArrayDouble",inp); + return self->buildCellFieldOnRecurseWithoutOverlapWithoutGhost(ghostSz,inp); + } + + virtual MEDCouplingCartesianAMRMeshGen *getFather() const throw(INTERP_KERNEL::Exception) { MEDCouplingCartesianAMRMeshGen *ret(const_cast(self->getFather())); if(ret) @@ -4897,7 +5056,7 @@ namespace ParaMEDMEM return ret; } - MEDCouplingCartesianAMRMeshGen *getGodFather() const throw(INTERP_KERNEL::Exception) + virtual MEDCouplingCartesianAMRMeshGen *getGodFather() const throw(INTERP_KERNEL::Exception) { MEDCouplingCartesianAMRMeshGen *ret(const_cast(self->getGodFather())); if(ret) @@ -4936,11 +5095,11 @@ namespace ParaMEDMEM return ret; } - void fillCellFieldOnPatchGhostAdv(int patchId, const DataArrayDouble *cellFieldOnThis, int ghostLev, PyObject *arrsOnPatches) const throw(INTERP_KERNEL::Exception) + void fillCellFieldOnPatchGhostAdv(int patchId, const DataArrayDouble *cellFieldOnThis, int ghostLev, PyObject *arrsOnPatches, bool isConservative=true) const throw(INTERP_KERNEL::Exception) { std::vector arrsOnPatches2; convertFromPyObjVectorOfObj(arrsOnPatches,SWIGTYPE_p_ParaMEDMEM__DataArrayDouble,"DataArrayDouble",arrsOnPatches2); - self->fillCellFieldOnPatchGhostAdv(patchId,cellFieldOnThis,ghostLev,arrsOnPatches2); + self->fillCellFieldOnPatchGhostAdv(patchId,cellFieldOnThis,ghostLev,arrsOnPatches2,isConservative); } void fillCellFieldOnPatchOnlyGhostAdv(int patchId, int ghostLev, PyObject *arrsOnPatches) const @@ -4969,9 +5128,6 @@ namespace ParaMEDMEM class MEDCouplingCartesianAMRMesh : public MEDCouplingCartesianAMRMeshGen { public: - void setData(MEDCouplingDataForGodFather *data) throw(INTERP_KERNEL::Exception); - void allocData() const throw(INTERP_KERNEL::Exception); - void deallocData() const throw(INTERP_KERNEL::Exception); %extend { static MEDCouplingCartesianAMRMesh *New(const std::string& meshName, int spaceDim, PyObject *nodeStrct, PyObject *origin, PyObject *dxyz) throw(INTERP_KERNEL::Exception) @@ -4993,26 +5149,120 @@ namespace ParaMEDMEM return MEDCouplingCartesianAMRMesh::New(meshName,spaceDim,nodeStrctPtr,nodeStrctPtr+sz,originPtr,originPtr+sz1,dxyzPtr,dxyzPtr+sz2); } + void createPatchesFromCriterionML(PyObject *bso, const DataArrayDouble *criterion, PyObject *factors, double eps) throw(INTERP_KERNEL::Exception) + { + std::vector inp0; + convertFromPyObjVectorOfObj(bso,SWIGTYPE_p_INTERP_KERNEL__BoxSplittingOptions,"BoxSplittingOptions",inp0); + std::vector< std::vector > inp2; + convertPyToVectorOfVectorOfInt(factors,inp2); + self->createPatchesFromCriterionML(inp0,criterion,inp2,eps); + } + MEDCouplingCartesianAMRMesh(const std::string& meshName, int spaceDim, PyObject *nodeStrct, PyObject *origin, PyObject *dxyz) throw(INTERP_KERNEL::Exception) { return ParaMEDMEM_MEDCouplingCartesianAMRMesh_New(meshName,spaceDim,nodeStrct,origin,dxyz); } + } + }; - MEDCouplingDataForGodFather *getDataConst() const throw(INTERP_KERNEL::Exception) + class MEDCouplingDataForGodFather : public RefCountObject + { + public: + virtual void synchronizeFineToCoarse() throw(INTERP_KERNEL::Exception); + virtual void synchronizeFineToCoarseBetween(int fromLev, int toLev) throw(INTERP_KERNEL::Exception); + virtual void synchronizeCoarseToFine() throw(INTERP_KERNEL::Exception); + virtual void synchronizeCoarseToFineBetween(int fromLev, int toLev) throw(INTERP_KERNEL::Exception); + virtual void synchronizeAllGhostZones() throw(INTERP_KERNEL::Exception); + virtual void synchronizeAllGhostZonesOfDirectChidrenOf(const MEDCouplingCartesianAMRMeshGen *mesh) throw(INTERP_KERNEL::Exception); + virtual void synchronizeAllGhostZonesAtASpecifiedLevel(int level) throw(INTERP_KERNEL::Exception); + virtual void synchronizeAllGhostZonesAtASpecifiedLevelUsingOnlyFather(int level) throw(INTERP_KERNEL::Exception); + virtual void alloc() throw(INTERP_KERNEL::Exception); + virtual void dealloc() throw(INTERP_KERNEL::Exception); + %extend + { + MEDCouplingCartesianAMRMesh *getMyGodFather() throw(INTERP_KERNEL::Exception) { - const MEDCouplingDataForGodFather *ret(self->getDataConst()); + MEDCouplingCartesianAMRMesh *ret(self->getMyGodFather()); if(ret) ret->incrRef(); - return const_cast(ret); + return ret; } - - MEDCouplingDataForGodFather *getData() throw(INTERP_KERNEL::Exception) + } + }; + + class MEDCouplingAMRAttribute : public MEDCouplingDataForGodFather, public TimeLabel + { + public: + int getNumberOfLevels() const throw(INTERP_KERNEL::Exception); + MEDCouplingAMRAttribute *deepCpy() const throw(INTERP_KERNEL::Exception); + MEDCouplingAMRAttribute *deepCpyWithoutGodFather() const throw(INTERP_KERNEL::Exception); + MEDCouplingFieldDouble *buildCellFieldOnRecurseWithoutOverlapWithoutGhost(MEDCouplingCartesianAMRMeshGen *mesh, const std::string& fieldName) const throw(INTERP_KERNEL::Exception); + MEDCouplingFieldDouble *buildCellFieldOnWithGhost(MEDCouplingCartesianAMRMeshGen *mesh, const std::string& fieldName) const throw(INTERP_KERNEL::Exception); + MEDCouplingFieldDouble *buildCellFieldOnWithoutGhost(MEDCouplingCartesianAMRMeshGen *mesh, const std::string& fieldName) const throw(INTERP_KERNEL::Exception); + bool changeGodFather(MEDCouplingCartesianAMRMesh *gf) throw(INTERP_KERNEL::Exception); + MEDCouplingAMRAttribute *projectTo(MEDCouplingCartesianAMRMesh *targetGF) const throw(INTERP_KERNEL::Exception); + %extend + { + static MEDCouplingAMRAttribute *New(MEDCouplingCartesianAMRMesh *gf, PyObject *fieldNames, int ghostLev) throw(INTERP_KERNEL::Exception) { - MEDCouplingDataForGodFather *ret(self->getData()); - if(ret) - ret->incrRef(); + std::vector< std::pair > fieldNamesCpp0; + std::vector< std::pair > > fieldNamesCpp1; + MEDCouplingAMRAttribute *ret(0); + try + { + convertPyToVectorPairStringInt(fieldNames,fieldNamesCpp0); + ret=MEDCouplingAMRAttribute::New(gf,fieldNamesCpp0,ghostLev); + } + catch(INTERP_KERNEL::Exception&) + { + convertPyToVectorPairStringVecString(fieldNames,fieldNamesCpp1); + ret=MEDCouplingAMRAttribute::New(gf,fieldNamesCpp1,ghostLev); + } return ret; } + + MEDCouplingAMRAttribute(MEDCouplingCartesianAMRMesh *gf, PyObject *fieldNames, int ghostLev) throw(INTERP_KERNEL::Exception) + { + return ParaMEDMEM_MEDCouplingAMRAttribute_New(gf,fieldNames,ghostLev); + } + + DataArrayDouble *getFieldOn(MEDCouplingCartesianAMRMeshGen *mesh, const std::string& fieldName) const throw(INTERP_KERNEL::Exception) + { + const DataArrayDouble *ret(self->getFieldOn(mesh,fieldName)); + DataArrayDouble *ret2(const_cast(ret)); + if(ret2) + ret2->incrRef(); + return ret2; + } + + void spillInfoOnComponents(PyObject *compNames) throw(INTERP_KERNEL::Exception) + { + std::vector< std::vector > compNamesCpp; + convertPyToVectorOfVectorOfString(compNames,compNamesCpp); + self->spillInfoOnComponents(compNamesCpp); + } + + void spillNatures(PyObject *nfs) throw(INTERP_KERNEL::Exception) + { + std::vector inp0; + if(!fillIntVector(nfs,inp0)) + throw INTERP_KERNEL::Exception("wrap of MEDCouplingAMRAttribute::spillNatures : vector of NatureOfField enum expected !"); + std::size_t sz(inp0.size()); + std::vector inp00(sz); + for(std::size_t i=0;ispillNatures(inp00); + } + + PyObject *retrieveFieldsOn(MEDCouplingCartesianAMRMeshGen *mesh) const throw(INTERP_KERNEL::Exception) + { + std::vector ret(self->retrieveFieldsOn(mesh)); + int sz((int)ret.size()); + PyObject *retPy(PyList_New(sz)); + for(int i=0;i