+
+ class MEDCouplingCartesianAMRMesh;
+
+ class MEDCouplingCartesianAMRPatch : public RefCountObject
+ {
+ public:
+ int getNumberOfCellsRecursiveWithOverlap() const throw(INTERP_KERNEL::Exception);
+ int getNumberOfCellsRecursiveWithoutOverlap() const throw(INTERP_KERNEL::Exception);
+ int getMaxNumberOfLevelsRelativeToThis() const throw(INTERP_KERNEL::Exception);
+ int getNumberOfOverlapedCellsForFather() const throw(INTERP_KERNEL::Exception);
+ %extend
+ {
+ PyObject *getBLTRRange() const throw(INTERP_KERNEL::Exception)
+ {
+ const std::vector< std::pair<int,int> >& ret(self->getBLTRRange());
+ return convertFromVectorPairInt(ret);
+ }
+
+ MEDCouplingCartesianAMRMesh *getMesh() const throw(INTERP_KERNEL::Exception)
+ {
+ MEDCouplingCartesianAMRMesh *ret(const_cast<MEDCouplingCartesianAMRMesh *>(self->getMesh()));
+ if(ret)
+ ret->incrRef();
+ return ret;
+ }
+
+ void addPatch(PyObject *bottomLeftTopRight, int factor) throw(INTERP_KERNEL::Exception)
+ {
+ std::vector< std::pair<int,int> > inp;
+ convertPyToVectorPairInt(bottomLeftTopRight,inp);
+ self->addPatch(inp,factor);
+ }
+
+ MEDCouplingCartesianAMRPatch *__getitem__(int patchId) const throw(INTERP_KERNEL::Exception)
+ {
+ const MEDCouplingCartesianAMRMesh *mesh(self->getMesh());
+ if(!mesh)
+ throw INTERP_KERNEL::Exception("wrap MEDCouplingCartesianAMRPatch.__getitem__ : no underlying mesh !");
+ if(patchId==mesh->getNumberOfPatches())
+ {
+ std::ostringstream oss;
+ oss << "Requesting for patchId " << patchId << " having only " << mesh->getNumberOfPatches() << " patches !";
+ PyErr_SetString(PyExc_StopIteration,oss.str().c_str());
+ return 0;
+ }
+ MEDCouplingCartesianAMRPatch *ret(const_cast<MEDCouplingCartesianAMRPatch *>(mesh->getPatch(patchId)));
+ if(ret)
+ ret->incrRef();
+ return ret;
+ }
+
+ void __delitem__(int patchId) throw(INTERP_KERNEL::Exception)
+ {
+ MEDCouplingCartesianAMRMesh *mesh(const_cast<MEDCouplingCartesianAMRMesh *>(self->getMesh()));
+ if(!mesh)
+ throw INTERP_KERNEL::Exception("wrap MEDCouplingCartesianAMRPatch.__delitem__ : no underlying mesh !");
+ mesh->removePatch(patchId);
+ }
+
+ int __len__() const throw(INTERP_KERNEL::Exception)
+ {
+ const MEDCouplingCartesianAMRMesh *mesh(self->getMesh());
+ if(!mesh)
+ throw INTERP_KERNEL::Exception("wrap MEDCouplingCartesianAMRPatch.__len__ : no underlying mesh !");
+ return mesh->getNumberOfPatches();
+ }
+ }
+ };
+
+ class MEDCouplingCartesianAMRMesh : public RefCountObject, public TimeLabel
+ {
+ public:
+
+ int getSpaceDimension() const throw(INTERP_KERNEL::Exception);
+ int getMaxNumberOfLevelsRelativeToThis() const throw(INTERP_KERNEL::Exception);
+ int getNumberOfCellsAtCurrentLevel() const throw(INTERP_KERNEL::Exception);
+ int getNumberOfCellsRecursiveWithOverlap() const throw(INTERP_KERNEL::Exception);
+ int getNumberOfCellsRecursiveWithoutOverlap() const throw(INTERP_KERNEL::Exception);
+ //
+ int getNumberOfPatches() const throw(INTERP_KERNEL::Exception);
+ MEDCouplingUMesh *buildUnstructured() const throw(INTERP_KERNEL::Exception);
+ void removePatch(int patchId) throw(INTERP_KERNEL::Exception);
+ void detachFromFather() throw(INTERP_KERNEL::Exception);
+ %extend
+ {
+ static MEDCouplingCartesianAMRMesh *New(const std::string& meshName, int spaceDim, PyObject *nodeStrct, PyObject *origin, PyObject *dxyz) throw(INTERP_KERNEL::Exception)
+ {
+ static const char msg0[]="MEDCouplingCartesianAMRMesh::New : error on 'origin' parameter !";
+ static const char msg1[]="MEDCouplingCartesianAMRMesh::New : error on 'dxyz' parameter !";
+ const int *nodeStrctPtr(0);
+ const double *originPtr(0),*dxyzPtr(0);
+ int sw,sz,val0;
+ std::vector<int> bb0;
+ nodeStrctPtr=convertObjToPossibleCpp1_Safe(nodeStrct,sw,sz,val0,bb0);
+ //
+ double val,val2;
+ std::vector<double> bb,bb2;
+ int sz1,sz2;
+ originPtr=convertObjToPossibleCpp5_SingleCompo(origin,sw,val,bb,msg0,false,sz1);
+ dxyzPtr=convertObjToPossibleCpp5_SingleCompo(dxyz,sw,val2,bb2,msg1,false,sz2);
+ //
+ return MEDCouplingCartesianAMRMesh::New(meshName,spaceDim,nodeStrctPtr,nodeStrctPtr+sz,originPtr,originPtr+sz1,dxyzPtr,dxyzPtr+sz2);
+ }
+
+ 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);
+ }
+
+ void addPatch(PyObject *bottomLeftTopRight, int factor) throw(INTERP_KERNEL::Exception)
+ {
+ std::vector< std::pair<int,int> > inp;
+ convertPyToVectorPairInt(bottomLeftTopRight,inp);
+ self->addPatch(inp,factor);
+ }
+
+ MEDCouplingCartesianAMRMesh *getFather() const throw(INTERP_KERNEL::Exception)
+ {
+ MEDCouplingCartesianAMRMesh *ret(const_cast<MEDCouplingCartesianAMRMesh *>(self->getFather()));
+ if(ret)
+ ret->incrRef();
+ return ret;
+ }
+
+ MEDCouplingCartesianAMRMesh *getGodFather() const throw(INTERP_KERNEL::Exception)
+ {
+ MEDCouplingCartesianAMRMesh *ret(const_cast<MEDCouplingCartesianAMRMesh *>(self->getGodFather()));
+ if(ret)
+ ret->incrRef();
+ return ret;
+ }
+
+ MEDCouplingCartesianAMRPatch *getPatch(int patchId) const throw(INTERP_KERNEL::Exception)
+ {
+ MEDCouplingCartesianAMRPatch *ret(const_cast<MEDCouplingCartesianAMRPatch *>(self->getPatch(patchId)));
+ if(ret)
+ ret->incrRef();
+ return ret;
+ }
+
+ MEDCouplingCartesianAMRPatch *__getitem__(int patchId) const throw(INTERP_KERNEL::Exception)
+ {
+ if(patchId==self->getNumberOfPatches())
+ {
+ std::ostringstream oss;
+ oss << "Requesting for patchId " << patchId << " having only " << self->getNumberOfPatches() << " patches !";
+ PyErr_SetString(PyExc_StopIteration,oss.str().c_str());
+ return 0;
+ }
+ MEDCouplingCartesianAMRPatch *ret(const_cast<MEDCouplingCartesianAMRPatch *>(self->getPatch(patchId)));
+ if(ret)
+ ret->incrRef();
+ return ret;
+ }
+
+ void __delitem__(int patchId) throw(INTERP_KERNEL::Exception)
+ {
+ self->removePatch(patchId);
+ }
+
+ int __len__() const throw(INTERP_KERNEL::Exception)
+ {
+ return self->getNumberOfPatches();
+ }
+ }
+ };
+
+ class DenseMatrix : public RefCountObject, public TimeLabel
+ {
+ public:
+ static DenseMatrix *New(int nbRows, int nbCols) throw(INTERP_KERNEL::Exception);
+ static DenseMatrix *New(DataArrayDouble *array, int nbRows, int nbCols) throw(INTERP_KERNEL::Exception);
+ DenseMatrix *deepCpy() const throw(INTERP_KERNEL::Exception);
+ DenseMatrix *shallowCpy() const throw(INTERP_KERNEL::Exception);
+ //
+ int getNumberOfRows() const throw(INTERP_KERNEL::Exception);
+ int getNumberOfCols() const throw(INTERP_KERNEL::Exception);
+ int getNbOfElems() const throw(INTERP_KERNEL::Exception);
+ void reBuild(DataArrayDouble *array, int nbRows=-1, int nbCols=-1) throw(INTERP_KERNEL::Exception);
+ void reShape(int nbRows, int nbCols) throw(INTERP_KERNEL::Exception);
+ void transpose() throw(INTERP_KERNEL::Exception);
+ //
+ bool isEqual(const DenseMatrix& other, double eps) const throw(INTERP_KERNEL::Exception);
+ DataArrayDouble *matVecMult(const DataArrayDouble *vec) const throw(INTERP_KERNEL::Exception);
+ static DataArrayDouble *MatVecMult(const DenseMatrix *mat, const DataArrayDouble *vec) throw(INTERP_KERNEL::Exception);
+ %extend
+ {
+ DenseMatrix(int nbRows, int nbCols) throw(INTERP_KERNEL::Exception)
+ {
+ return DenseMatrix::New(nbRows,nbCols);
+ }
+
+ DenseMatrix(DataArrayDouble *array, int nbRows, int nbCols) throw(INTERP_KERNEL::Exception)
+ {
+ return DenseMatrix::New(array,nbRows,nbCols);
+ }
+
+ PyObject *isEqualIfNotWhy(const DenseMatrix& other, double eps) const throw(INTERP_KERNEL::Exception)
+ {
+ std::string ret1;
+ bool ret0=self->isEqualIfNotWhy(other,eps,ret1);
+ PyObject *ret=PyTuple_New(2);
+ PyObject *ret0Py=ret0?Py_True:Py_False;
+ Py_XINCREF(ret0Py);
+ PyTuple_SetItem(ret,0,ret0Py);
+ PyTuple_SetItem(ret,1,PyString_FromString(ret1.c_str()));
+ return ret;
+ }
+
+ DataArrayDouble *getData() throw(INTERP_KERNEL::Exception)
+ {
+ DataArrayDouble *ret(self->getData());
+ if(ret)
+ ret->incrRef();
+ return ret;
+ }
+
+ DenseMatrix *__add__(const DenseMatrix *other) throw(INTERP_KERNEL::Exception)
+ {
+ return ParaMEDMEM::DenseMatrix::Add(self,other);
+ }
+
+ DenseMatrix *__sub__(const DenseMatrix *other) throw(INTERP_KERNEL::Exception)
+ {
+ return ParaMEDMEM::DenseMatrix::Substract(self,other);
+ }
+
+ DenseMatrix *__mul__(const DenseMatrix *other) throw(INTERP_KERNEL::Exception)
+ {
+ return ParaMEDMEM::DenseMatrix::Multiply(self,other);
+ }
+
+ DenseMatrix *__mul__(const DataArrayDouble *other) throw(INTERP_KERNEL::Exception)
+ {
+ return ParaMEDMEM::DenseMatrix::Multiply(self,other);
+ }
+
+ PyObject *___iadd___(PyObject *trueSelf, const DenseMatrix *other) throw(INTERP_KERNEL::Exception)
+ {
+ self->addEqual(other);
+ Py_XINCREF(trueSelf);
+ return trueSelf;
+ }
+
+ PyObject *___isub___(PyObject *trueSelf, const DenseMatrix *other) throw(INTERP_KERNEL::Exception)
+ {
+ self->substractEqual(other);
+ Py_XINCREF(trueSelf);
+ return trueSelf;
+ }
+#ifdef WITH_NUMPY
+ PyObject *toNumPyMatrix() throw(INTERP_KERNEL::Exception) // not const. It is not a bug !
+ {
+ PyObject *obj(ToNumPyArrayUnderground<DataArrayDouble,double>(self->getData(),NPY_DOUBLE,"DataArrayDouble",self->getNumberOfRows(),self->getNumberOfCols()));
+ return obj;
+ }
+#endif
+ }
+ };