X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCoupling%2FMEDCouplingMappedExtrudedMesh.cxx;h=b20e45461af92cc112d645de3492b8395126abe7;hb=e7835cba1eb17f50ef4e130c2cb8d0f54bc25083;hp=d98a92b818a056c09d15571b5397b0dbea92f38d;hpb=3b1d77efdd048ef4aad858e96138bf79318119df;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling/MEDCouplingMappedExtrudedMesh.cxx b/src/MEDCoupling/MEDCouplingMappedExtrudedMesh.cxx index d98a92b81..b20e45461 100644 --- a/src/MEDCoupling/MEDCouplingMappedExtrudedMesh.cxx +++ b/src/MEDCoupling/MEDCouplingMappedExtrudedMesh.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D +// Copyright (C) 2007-2016 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 @@ -20,6 +20,7 @@ #include "MEDCouplingMappedExtrudedMesh.hxx" #include "MEDCouplingUMesh.hxx" +#include "MEDCouplingCMesh.hxx" #include "MEDCouplingMemArray.hxx" #include "MEDCouplingFieldDouble.hxx" #include "MCAuto.hxx" @@ -50,6 +51,11 @@ MEDCouplingMappedExtrudedMesh *MEDCouplingMappedExtrudedMesh::New(const MEDCoupl return new MEDCouplingMappedExtrudedMesh(mesh3D,mesh2D,cell2DId); } +MEDCouplingMappedExtrudedMesh *MEDCouplingMappedExtrudedMesh::New(const MEDCouplingCMesh *mesh3D) +{ + return new MEDCouplingMappedExtrudedMesh(mesh3D); +} + /*! * This constructor is here only for unserialisation process. * This constructor is normally completely useless for end user. @@ -95,29 +101,38 @@ void MEDCouplingMappedExtrudedMesh::copyTinyStringsFrom(const MEDCouplingMesh *o MEDCouplingMappedExtrudedMesh::MEDCouplingMappedExtrudedMesh(const MEDCouplingUMesh *mesh3D, const MEDCouplingUMesh *mesh2D, int cell2DId) try:_mesh2D(const_cast(mesh2D)),_mesh1D(MEDCouplingUMesh::New()),_mesh3D_ids(0),_cell_2D_id(cell2DId) { - if(_mesh2D!=0) + if(_mesh2D.isNotNull()) _mesh2D->incrRef(); computeExtrusion(mesh3D); - setName(mesh3D->getName()); + setName(mesh3D->getName()); setDescription(mesh3D->getDescription()); } catch(INTERP_KERNEL::Exception& e) { - if(_mesh2D) - _mesh2D->decrRef(); - if(_mesh1D) - _mesh1D->decrRef(); - if(_mesh3D_ids) - _mesh3D_ids->decrRef(); throw e; } +MEDCouplingMappedExtrudedMesh::MEDCouplingMappedExtrudedMesh(const MEDCouplingCMesh *mesh3D):_mesh1D(MEDCouplingUMesh::New()),_mesh3D_ids(0),_cell_2D_id(0) +{ + if(!mesh3D) + throw INTERP_KERNEL::Exception("MEDCouplingMappedExtrudedMesh contrct : null input pointer !"); + if(mesh3D->getMeshDimension()!=3) + throw INTERP_KERNEL::Exception("MEDCouplingMappedExtrudedMesh contrct : input cart mesh must have dimension equal to 3 !"); + MCAuto umesh3D(mesh3D->buildUnstructured()); + MCAuto cmesh2D(MEDCouplingCMesh::New()); cmesh2D->setName(mesh3D->getName()); + cmesh2D->setCoords(mesh3D->getCoordsAt(0),mesh3D->getCoordsAt(1)); + _mesh2D=cmesh2D->buildUnstructured(); + _mesh2D->setCoords(umesh3D->getCoords()); + computeExtrusion(umesh3D); + setName(mesh3D->getName()); setDescription(mesh3D->getDescription()); +} + MEDCouplingMappedExtrudedMesh::MEDCouplingMappedExtrudedMesh():_mesh2D(0),_mesh1D(0),_mesh3D_ids(0),_cell_2D_id(-1) { } -MEDCouplingMappedExtrudedMesh::MEDCouplingMappedExtrudedMesh(const MEDCouplingMappedExtrudedMesh& other, bool deepCopy):MEDCouplingMesh(other),_cell_2D_id(other._cell_2D_id) +MEDCouplingMappedExtrudedMesh::MEDCouplingMappedExtrudedMesh(const MEDCouplingMappedExtrudedMesh& other, bool deepCpy):MEDCouplingMesh(other),_cell_2D_id(other._cell_2D_id) { - if(deepCopy) + if(deepCpy) { _mesh2D=other._mesh2D->clone(true); _mesh1D=other._mesh1D->clone(true); @@ -126,18 +141,12 @@ MEDCouplingMappedExtrudedMesh::MEDCouplingMappedExtrudedMesh(const MEDCouplingMa else { _mesh2D=other._mesh2D; - if(_mesh2D) - _mesh2D->incrRef(); _mesh1D=other._mesh1D; - if(_mesh1D) - _mesh1D->incrRef(); _mesh3D_ids=other._mesh3D_ids; - if(_mesh3D_ids) - _mesh3D_ids->incrRef(); } } -int MEDCouplingMappedExtrudedMesh::getNumberOfCells() const +std::size_t MEDCouplingMappedExtrudedMesh::getNumberOfCells() const { return _mesh2D->getNumberOfCells()*_mesh1D->getNumberOfCells(); } @@ -167,6 +176,11 @@ MEDCouplingMappedExtrudedMesh *MEDCouplingMappedExtrudedMesh::clone(bool recDeep return new MEDCouplingMappedExtrudedMesh(*this,recDeepCpy); } +const DataArrayDouble *MEDCouplingMappedExtrudedMesh::getDirectAccessOfCoordsArrIfInStructure() const +{ + throw INTERP_KERNEL::Exception("MEDCouplingMappedExtrudedMesh::getDirectAccessOfCoordsArrIfInStructure : no direct access of DataArrayDouble holding nodes !"); +} + bool MEDCouplingMappedExtrudedMesh::isEqualIfNotWhy(const MEDCouplingMesh *other, double prec, std::string& reason) const { if(!other) @@ -232,16 +246,16 @@ void MEDCouplingMappedExtrudedMesh::checkDeepEquivalOnSameNodesWith(const MEDCou throw INTERP_KERNEL::Exception("MEDCouplingMappedExtrudedMesh::checkDeepEquivalOnSameNodesWith : not implemented yet !"); } -INTERP_KERNEL::NormalizedCellType MEDCouplingMappedExtrudedMesh::getTypeOfCell(int cellId) const +INTERP_KERNEL::NormalizedCellType MEDCouplingMappedExtrudedMesh::getTypeOfCell(std::size_t cellId) const { - const int *ids=_mesh3D_ids->getConstPointer(); - int nbOf3DCells=_mesh3D_ids->getNumberOfTuples(); - const int *where=std::find(ids,ids+nbOf3DCells,cellId); + const int *ids(_mesh3D_ids->begin()); + std::size_t nbOf3DCells(_mesh3D_ids->getNumberOfTuples()); + const int *where(std::find(ids,ids+nbOf3DCells,cellId)); if(where==ids+nbOf3DCells) throw INTERP_KERNEL::Exception("Invalid cellId specified >= getNumberOfCells() !"); - int nbOfCells2D=_mesh2D->getNumberOfCells(); - int locId=((int)std::distance(ids,where))%nbOfCells2D; - INTERP_KERNEL::NormalizedCellType tmp=_mesh2D->getTypeOfCell(locId); + std::size_t nbOfCells2D(_mesh2D->getNumberOfCells()); + std::size_t locId((std::distance(ids,where))%nbOfCells2D); + INTERP_KERNEL::NormalizedCellType tmp(_mesh2D->getTypeOfCell(locId)); return INTERP_KERNEL::CellModel::GetCellModel(tmp).getExtrudedType(); } @@ -256,34 +270,34 @@ std::set MEDCouplingMappedExtrudedMesh::getAl DataArrayInt *MEDCouplingMappedExtrudedMesh::giveCellsWithType(INTERP_KERNEL::NormalizedCellType type) const { - const INTERP_KERNEL::CellModel& cm=INTERP_KERNEL::CellModel::GetCellModel(type); - INTERP_KERNEL::NormalizedCellType revExtTyp=cm.getReverseExtrudedType(); - MCAuto ret=DataArrayInt::New(); + const INTERP_KERNEL::CellModel& cm(INTERP_KERNEL::CellModel::GetCellModel(type)); + INTERP_KERNEL::NormalizedCellType revExtTyp(cm.getReverseExtrudedType()); + MCAuto ret(DataArrayInt::New()); if(revExtTyp==INTERP_KERNEL::NORM_ERROR) { ret->alloc(0,1); return ret.retn(); } - MCAuto tmp=_mesh2D->giveCellsWithType(revExtTyp); - int nbOfLevs=_mesh1D->getNumberOfCells(); - int nbOfCells2D=_mesh2D->getNumberOfCells(); - int nbOfTuples=tmp->getNumberOfTuples(); + MCAuto tmp(_mesh2D->giveCellsWithType(revExtTyp)); + int nbOfLevs(_mesh1D->getNumberOfCells()); + int nbOfCells2D(_mesh2D->getNumberOfCells()); + int nbOfTuples(tmp->getNumberOfTuples()); ret->alloc(nbOfLevs*nbOfTuples,1); - int *pt=ret->getPointer(); + int *pt(ret->getPointer()); for(int i=0;ibegin(),tmp->end(),pt,std::bind2nd(std::plus(),i*nbOfCells2D)); - MCAuto ret2=ret->renumberR(_mesh3D_ids->begin()); + MCAuto ret2(ret->renumberR(_mesh3D_ids->begin())); ret2->sort(); return ret2.retn(); } DataArrayInt *MEDCouplingMappedExtrudedMesh::computeNbOfNodesPerCell() const { - MCAuto ret2D=_mesh2D->computeNbOfNodesPerCell(); - int nbOfLevs=_mesh1D->getNumberOfCells(); - int nbOfCells2D=_mesh2D->getNumberOfCells(); - MCAuto ret3D=DataArrayInt::New(); ret3D->alloc(nbOfLevs*nbOfCells2D,1); - int *pt=ret3D->getPointer(); + MCAuto ret2D(_mesh2D->computeNbOfNodesPerCell()); + int nbOfLevs(_mesh1D->getNumberOfCells()); + int nbOfCells2D(_mesh2D->getNumberOfCells()); + MCAuto ret3D(DataArrayInt::New()); ret3D->alloc(nbOfLevs*nbOfCells2D,1); + int *pt(ret3D->getPointer()); for(int i=0;ibegin(),ret2D->end(),pt); ret3D->applyLin(2,0,0); @@ -292,11 +306,11 @@ DataArrayInt *MEDCouplingMappedExtrudedMesh::computeNbOfNodesPerCell() const DataArrayInt *MEDCouplingMappedExtrudedMesh::computeNbOfFacesPerCell() const { - MCAuto ret2D=_mesh2D->computeNbOfNodesPerCell(); - int nbOfLevs=_mesh1D->getNumberOfCells(); - int nbOfCells2D=_mesh2D->getNumberOfCells(); - MCAuto ret3D=DataArrayInt::New(); ret3D->alloc(nbOfLevs*nbOfCells2D,1); - int *pt=ret3D->getPointer(); + MCAuto ret2D(_mesh2D->computeNbOfNodesPerCell()); + int nbOfLevs(_mesh1D->getNumberOfCells()); + int nbOfCells2D(_mesh2D->getNumberOfCells()); + MCAuto ret3D(DataArrayInt::New()); ret3D->alloc(nbOfLevs*nbOfCells2D,1); + int *pt(ret3D->getPointer()); for(int i=0;ibegin(),ret2D->end(),pt); ret3D->applyLin(2,2,0); @@ -308,25 +322,25 @@ DataArrayInt *MEDCouplingMappedExtrudedMesh::computeEffectiveNbOfNodesPerCell() return computeNbOfNodesPerCell(); } -int MEDCouplingMappedExtrudedMesh::getNumberOfCellsWithType(INTERP_KERNEL::NormalizedCellType type) const +std::size_t MEDCouplingMappedExtrudedMesh::getNumberOfCellsWithType(INTERP_KERNEL::NormalizedCellType type) const { - int ret=0; - int nbOfCells2D=_mesh2D->getNumberOfCells(); - for(int i=0;igetNumberOfCells()); + for(std::size_t i=0;igetTypeOfCell(i); + INTERP_KERNEL::NormalizedCellType t(_mesh2D->getTypeOfCell(i)); if(INTERP_KERNEL::CellModel::GetCellModel(t).getExtrudedType()==type) ret++; } return ret*_mesh1D->getNumberOfCells(); } -void MEDCouplingMappedExtrudedMesh::getNodeIdsOfCell(int cellId, std::vector& conn) const +void MEDCouplingMappedExtrudedMesh::getNodeIdsOfCell(std::size_t cellId, std::vector& conn) const { - int nbOfCells2D=_mesh2D->getNumberOfCells(); - int nbOfNodes2D=_mesh2D->getNumberOfNodes(); - int locId=cellId%nbOfCells2D; - int lev=cellId/nbOfCells2D; + int nbOfCells2D(_mesh2D->getNumberOfCells()); + int nbOfNodes2D(_mesh2D->getNumberOfNodes()); + int locId(cellId%nbOfCells2D); + int lev(cellId/nbOfCells2D); std::vector tmp,tmp2; _mesh2D->getNodeIdsOfCell(locId,tmp); tmp2=tmp; @@ -338,14 +352,14 @@ void MEDCouplingMappedExtrudedMesh::getNodeIdsOfCell(int cellId, std::vector& coo) const { - int nbOfNodes2D=_mesh2D->getNumberOfNodes(); - int locId=nodeId%nbOfNodes2D; - int lev=nodeId/nbOfNodes2D; + int nbOfNodes2D(_mesh2D->getNumberOfNodes()); + int locId(nodeId%nbOfNodes2D); + int lev(nodeId/nbOfNodes2D); std::vector tmp,tmp2; _mesh2D->getCoordinatesOfNode(locId,tmp); tmp2=tmp; - int spaceDim=_mesh1D->getSpaceDimension(); - const double *z=_mesh1D->getCoords()->getConstPointer(); + int spaceDim(_mesh1D->getSpaceDimension()); + const double *z(_mesh1D->getCoords()->begin()); std::transform(tmp.begin(),tmp.end(),z+lev*spaceDim,tmp.begin(),std::plus()); std::transform(tmp2.begin(),tmp2.end(),z+(lev+1)*spaceDim,tmp2.begin(),std::plus()); coo.insert(coo.end(),tmp.begin(),tmp.end()); @@ -400,8 +414,8 @@ void MEDCouplingMappedExtrudedMesh::getBoundingBox(double *bbox) const { double bbox2D[6]; _mesh2D->getBoundingBox(bbox2D); - const double *nodes1D=_mesh1D->getCoords()->getConstPointer(); - int nbOfNodes1D=_mesh1D->getNumberOfNodes(); + const double *nodes1D(_mesh1D->getCoords()->begin()); + int nbOfNodes1D(_mesh1D->getNumberOfNodes()); double bbox1DMin[3],bbox1DMax[3],tmp[3]; std::fill(bbox1DMin,bbox1DMin+3,std::numeric_limits::max()); std::fill(bbox1DMax,bbox1DMax+3,-(std::numeric_limits::max())); @@ -420,30 +434,36 @@ void MEDCouplingMappedExtrudedMesh::getBoundingBox(double *bbox) const void MEDCouplingMappedExtrudedMesh::updateTime() const { - if(_mesh2D) - { - updateTimeWith(*_mesh2D); - } - if(_mesh1D) - { - updateTimeWith(*_mesh1D); - } + if(_mesh2D.isNotNull()) + updateTimeWith(*_mesh2D); + if(_mesh1D.isNotNull()) + updateTimeWith(*_mesh1D); } void MEDCouplingMappedExtrudedMesh::renumberCells(const int *old2NewBg, bool check) { - throw INTERP_KERNEL::Exception("Functionnality of renumbering cells unavailable for ExtrudedMesh"); + throw INTERP_KERNEL::Exception("Functionality of renumbering cells unavailable for ExtrudedMesh"); } +/*! + * \b WARNING in case of modif think to update MEDFileUMesh::New implementation ! + * \sa MEDFileUMesh::New + */ MEDCouplingUMesh *MEDCouplingMappedExtrudedMesh::build3DUnstructuredMesh() const { - MEDCouplingUMesh *ret=_mesh2D->buildExtrudedMesh(_mesh1D,0); - const int *renum=_mesh3D_ids->getConstPointer(); + MCAuto mesh2DZC(_mesh2D->deepCopyConnectivityOnly()); + mesh2DZC->zipCoords(); + MCAuto ret(mesh2DZC->buildExtrudedMesh(_mesh1D,0)); + const int *renum(_mesh3D_ids->begin()); ret->renumberCells(renum,false); ret->setName(getName()); - return ret; + return ret.retn(); } +/*! + * \b WARNING in case of modif think to update MEDFileUMesh::New implementation ! + * \sa MEDFileUMesh::New + */ MEDCouplingUMesh *MEDCouplingMappedExtrudedMesh::buildUnstructured() const { return build3DUnstructuredMesh(); @@ -453,29 +473,23 @@ MEDCouplingFieldDouble *MEDCouplingMappedExtrudedMesh::getMeasureField(bool) con { std::string name="MeasureOfMesh_"; name+=getName(); - MEDCouplingFieldDouble *ret2D=_mesh2D->getMeasureField(true); - MEDCouplingFieldDouble *ret1D=_mesh1D->getMeasureField(true); - const double *ret2DPtr=ret2D->getArray()->getConstPointer(); - const double *ret1DPtr=ret1D->getArray()->getConstPointer(); - int nbOf2DCells=_mesh2D->getNumberOfCells(); - int nbOf1DCells=_mesh1D->getNumberOfCells(); - int nbOf3DCells=nbOf2DCells*nbOf1DCells; - const int *renum=_mesh3D_ids->getConstPointer(); - MEDCouplingFieldDouble *ret=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME); + MCAuto ret2D(_mesh2D->getMeasureField(true)),ret1D(_mesh1D->getMeasureField(true)); + const double *ret2DPtr(ret2D->getArray()->begin()); + const double *ret1DPtr(ret1D->getArray()->begin()); + int nbOf2DCells(_mesh2D->getNumberOfCells()),nbOf1DCells(_mesh1D->getNumberOfCells()),nbOf3DCells(nbOf2DCells*nbOf1DCells); + const int *renum(_mesh3D_ids->begin()); + MCAuto ret(MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME)); ret->setMesh(this); ret->synchronizeTimeWithMesh(); - DataArrayDouble *da=DataArrayDouble::New(); + MCAuto da(DataArrayDouble::New()); da->alloc(nbOf3DCells,1); - double *retPtr=da->getPointer(); + double *retPtr(da->getPointer()); for(int i=0;isetArray(da); - da->decrRef(); ret->setName(name); - ret2D->decrRef(); - ret1D->decrRef(); - return ret; + return ret.retn(); } MEDCouplingFieldDouble *MEDCouplingMappedExtrudedMesh::getMeasureFieldOnNode(bool isAbs) const @@ -494,14 +508,13 @@ int MEDCouplingMappedExtrudedMesh::getCellContainingPoint(const double *pos, dou throw INTERP_KERNEL::Exception("MEDCouplingMappedExtrudedMesh::getCellContainingPoint : not implemented yet !"); } +void MEDCouplingMappedExtrudedMesh::getCellsContainingPoint(const double *pos, double eps, std::vector& elts) const +{ + throw INTERP_KERNEL::Exception("MEDCouplingMappedExtrudedMesh::getCellsContainingPoint : not implemented yet !"); +} + MEDCouplingMappedExtrudedMesh::~MEDCouplingMappedExtrudedMesh() { - if(_mesh2D) - _mesh2D->decrRef(); - if(_mesh1D) - _mesh1D->decrRef(); - if(_mesh3D_ids) - _mesh3D_ids->decrRef(); } void MEDCouplingMappedExtrudedMesh::computeExtrusion(const MEDCouplingUMesh *mesh3D) @@ -509,15 +522,15 @@ void MEDCouplingMappedExtrudedMesh::computeExtrusion(const MEDCouplingUMesh *mes const char errMsg1[]="2D mesh is empty unable to compute extrusion !"; const char errMsg2[]="Coords between 2D and 3D meshes are not the same ! Try MEDCouplingPointSet::tryToShareSameCoords method"; const char errMsg3[]="No chance to find extrusion pattern in mesh3D,mesh2D couple because nbCells3D%nbCells2D!=0 !"; - if(_mesh2D==0 || mesh3D==0) + if(_mesh2D.isNull() || mesh3D==0) throw INTERP_KERNEL::Exception(errMsg1); if(_mesh2D->getCoords()!=mesh3D->getCoords()) throw INTERP_KERNEL::Exception(errMsg2); if(mesh3D->getNumberOfCells()%_mesh2D->getNumberOfCells()!=0) throw INTERP_KERNEL::Exception(errMsg3); - if(!_mesh3D_ids) + if(_mesh3D_ids.isNull()) _mesh3D_ids=DataArrayInt::New(); - if(!_mesh1D) + if(_mesh1D.isNull()) _mesh1D=MEDCouplingUMesh::New(); computeExtrusionAlg(mesh3D); } @@ -527,21 +540,21 @@ void MEDCouplingMappedExtrudedMesh::build1DExtrusion(int idIn3DDesc, int newId, const int *revDesc3D, const int *revDescIndx3D, bool computeMesh1D) { - int nbOf2DCells=_mesh2D->getNumberOfCells(); - int start=revDescIndx3D[idIn3DDesc]; - int end=revDescIndx3D[idIn3DDesc+1]; + int nbOf2DCells(_mesh2D->getNumberOfCells()); + int start(revDescIndx3D[idIn3DDesc]); + int end(revDescIndx3D[idIn3DDesc+1]); if(end-start!=1) { std::ostringstream ost; ost << "Invalid bases 2D mesh specified : 2D cell # " << idIn3DDesc; ost << " shared by more than 1 3D cell !!!"; throw INTERP_KERNEL::Exception(ost.str().c_str()); } - int current3DCell=revDesc3D[start]; - int current2DCell=idIn3DDesc; - int *mesh3DIDs=_mesh3D_ids->getPointer(); + int current3DCell(revDesc3D[start]); + int current2DCell(idIn3DDesc); + int *mesh3DIDs(_mesh3D_ids->getPointer()); mesh3DIDs[newId]=current3DCell; - const int *conn2D=subMesh->getNodalConnectivity()->getConstPointer(); - const int *conn2DIndx=subMesh->getNodalConnectivityIndex()->getConstPointer(); + const int *conn2D(subMesh->getNodalConnectivity()->begin()); + const int *conn2DIndx(subMesh->getNodalConnectivityIndex()->begin()); for(int i=1;i conn(conn2D+conn2DIndx[current2DCell]+1,conn2D+conn2DIndx[current2DCell+1]); @@ -582,8 +595,8 @@ int MEDCouplingMappedExtrudedMesh::findOppositeFaceOf(int current2DCell, int cur const int *desc3D, const int *descIndx3D, const int *conn2D, const int *conn2DIndx) { - int start=descIndx3D[current3DCell]; - int end=descIndx3D[current3DCell+1]; + int start(descIndx3D[current3DCell]); + int end(descIndx3D[current3DCell+1]); bool found=false; for(const int *candidate2D=desc3D+start;candidate2D!=desc3D+end && !found;candidate2D++) { @@ -605,9 +618,9 @@ int MEDCouplingMappedExtrudedMesh::findOppositeFaceOf(int current2DCell, int cur void MEDCouplingMappedExtrudedMesh::computeBaryCenterOfFace(const std::vector& nodalConnec, int lev1DId) { - double *zoneToUpdate=_mesh1D->getCoords()->getPointer()+lev1DId*3; + double *zoneToUpdate(_mesh1D->getCoords()->getPointer()+lev1DId*3); std::fill(zoneToUpdate,zoneToUpdate+3,0.); - const double *coords=_mesh2D->getCoords()->getConstPointer(); + const double *coords(_mesh2D->getCoords()->begin()); for(std::vector::const_iterator iter=nodalConnec.begin();iter!=nodalConnec.end();iter++) std::transform(zoneToUpdate,zoneToUpdate+3,coords+3*(*iter),zoneToUpdate,std::plus()); std::transform(zoneToUpdate,zoneToUpdate+3,zoneToUpdate,std::bind2nd(std::multiplies(),(double)(1./(int)nodalConnec.size()))); @@ -696,7 +709,7 @@ DataArrayInt *MEDCouplingMappedExtrudedMesh::checkTypeConsistencyAndContig(const throw INTERP_KERNEL::Exception("Not implemented yet !"); } -void MEDCouplingMappedExtrudedMesh::splitProfilePerType(const DataArrayInt *profile, std::vector& code, std::vector& idsInPflPerType, std::vector& idsPerType) const +void MEDCouplingMappedExtrudedMesh::splitProfilePerType(const DataArrayInt *profile, std::vector& code, std::vector& idsInPflPerType, std::vector& idsPerType, bool smartPflKiller) const { throw INTERP_KERNEL::Exception("Not implemented yet !"); } @@ -726,25 +739,25 @@ MEDCouplingMesh *MEDCouplingMappedExtrudedMesh::mergeMyselfWith(const MEDCouplin DataArrayDouble *MEDCouplingMappedExtrudedMesh::getCoordinatesAndOwner() const { - DataArrayDouble *arr2D=_mesh2D->getCoords(); - DataArrayDouble *arr1D=_mesh1D->getCoords(); - DataArrayDouble *ret=DataArrayDouble::New(); + const DataArrayDouble *arr2D(_mesh2D->getCoords()); + const DataArrayDouble *arr1D(_mesh1D->getCoords()); + MCAuto ret(DataArrayDouble::New()); ret->alloc(getNumberOfNodes(),3); - int nbOf1DLev=_mesh1D->getNumberOfNodes(); - int nbOf2DNodes=_mesh2D->getNumberOfNodes(); - const double *ptSrc=arr2D->getConstPointer(); - double *pt=ret->getPointer(); + int nbOf1DLev(_mesh1D->getNumberOfNodes()); + int nbOf2DNodes(_mesh2D->getNumberOfNodes()); + const double *ptSrc(arr2D->begin()); + double *pt(ret->getPointer()); std::copy(ptSrc,ptSrc+3*nbOf2DNodes,pt); for(int i=1;igetConstPointer()+3*i,arr1D->getConstPointer()+3*(i+1),vec); - std::transform(arr1D->getConstPointer()+3*(i-1),arr1D->getConstPointer()+3*i,vec,vec,std::minus()); + std::copy(arr1D->begin()+3*i,arr1D->begin()+3*(i+1),vec); + std::transform(arr1D->begin()+3*(i-1),arr1D->begin()+3*i,vec,vec,std::minus()); for(int j=0;j()); } - return ret; + return ret.retn(); } DataArrayDouble *MEDCouplingMappedExtrudedMesh::computeCellCenterOfMass() const @@ -766,7 +779,7 @@ void MEDCouplingMappedExtrudedMesh::getReverseNodalConnectivity(DataArrayInt *re void MEDCouplingMappedExtrudedMesh::computeExtrusionAlg(const MEDCouplingUMesh *mesh3D) { _mesh3D_ids->alloc(mesh3D->getNumberOfCells(),1); - int nbOf1DLev=mesh3D->getNumberOfCells()/_mesh2D->getNumberOfCells(); + int nbOf1DLev(mesh3D->getNumberOfCells()/_mesh2D->getNumberOfCells()); _mesh1D->setMeshDimension(1); _mesh1D->allocateCells(nbOf1DLev); int tmpConn[2]; @@ -781,22 +794,17 @@ void MEDCouplingMappedExtrudedMesh::computeExtrusionAlg(const MEDCouplingUMesh * myCoords->alloc(nbOf1DLev+1,3); _mesh1D->setCoords(myCoords); myCoords->decrRef(); - DataArrayInt *desc,*descIndx,*revDesc,*revDescIndx; - desc=DataArrayInt::New(); descIndx=DataArrayInt::New(); revDesc=DataArrayInt::New(); revDescIndx=DataArrayInt::New(); - MEDCouplingUMesh *subMesh=mesh3D->buildDescendingConnectivity(desc,descIndx,revDesc,revDescIndx); - DataArrayInt *revNodal2D,*revNodalIndx2D; - revNodal2D=DataArrayInt::New(); revNodalIndx2D=DataArrayInt::New(); + MCAuto desc(DataArrayInt::New()),descIndx(DataArrayInt::New()),revDesc(DataArrayInt::New()),revDescIndx(DataArrayInt::New()); + MCAuto subMesh(mesh3D->buildDescendingConnectivity(desc,descIndx,revDesc,revDescIndx)); + MCAuto revNodal2D(DataArrayInt::New()),revNodalIndx2D(DataArrayInt::New()); subMesh->getReverseNodalConnectivity(revNodal2D,revNodalIndx2D); - const int *nodal2D=_mesh2D->getNodalConnectivity()->getConstPointer(); - const int *nodal2DIndx=_mesh2D->getNodalConnectivityIndex()->getConstPointer(); - const int *revNodal2DPtr=revNodal2D->getConstPointer(); - const int *revNodalIndx2DPtr=revNodalIndx2D->getConstPointer(); - const int *descP=desc->getConstPointer(); - const int *descIndxP=descIndx->getConstPointer(); - const int *revDescP=revDesc->getConstPointer(); - const int *revDescIndxP=revDescIndx->getConstPointer(); + const int *nodal2D(_mesh2D->getNodalConnectivity()->begin()); + const int *nodal2DIndx(_mesh2D->getNodalConnectivityIndex()->begin()); + const int *revNodal2DPtr(revNodal2D->begin()); + const int *revNodalIndx2DPtr(revNodalIndx2D->begin()); + const int *descP(desc->begin()),*descIndxP(descIndx->begin()),*revDescP(revDesc->begin()),*revDescIndxP(revDescIndx->begin()); // - int nbOf2DCells=_mesh2D->getNumberOfCells(); + int nbOf2DCells(_mesh2D->getNumberOfCells()); for(int i=0;idecrRef(); - revNodalIndx2D->decrRef(); - subMesh->decrRef(); - desc->decrRef(); - descIndx->decrRef(); - revDesc->decrRef(); - revDescIndx->decrRef(); } void MEDCouplingMappedExtrudedMesh::getTinySerializationInformation(std::vector& tinyInfoD, std::vector& tinyInfo, std::vector& littleStrings) const @@ -879,16 +879,16 @@ void MEDCouplingMappedExtrudedMesh::serialize(DataArrayInt *&a1, DataArrayDouble _mesh1D->serialize(a1_2,a2_2); a1->alloc(a1_1->getNbOfElems()+a1_2->getNbOfElems()+_mesh3D_ids->getNbOfElems(),1); int *ptri=a1->getPointer(); - ptri=std::copy(a1_1->getConstPointer(),a1_1->getConstPointer()+a1_1->getNbOfElems(),ptri); + ptri=std::copy(a1_1->begin(),a1_1->begin()+a1_1->getNbOfElems(),ptri); a1_1->decrRef(); - ptri=std::copy(a1_2->getConstPointer(),a1_2->getConstPointer()+a1_2->getNbOfElems(),ptri); + ptri=std::copy(a1_2->begin(),a1_2->begin()+a1_2->getNbOfElems(),ptri); a1_2->decrRef(); - std::copy(_mesh3D_ids->getConstPointer(),_mesh3D_ids->getConstPointer()+_mesh3D_ids->getNbOfElems(),ptri); + std::copy(_mesh3D_ids->begin(),_mesh3D_ids->begin()+_mesh3D_ids->getNbOfElems(),ptri); a2->alloc(a2_1->getNbOfElems()+a2_2->getNbOfElems(),1); double *ptrd=a2->getPointer(); - ptrd=std::copy(a2_1->getConstPointer(),a2_1->getConstPointer()+a2_1->getNbOfElems(),ptrd); + ptrd=std::copy(a2_1->begin(),a2_1->begin()+a2_1->getNbOfElems(),ptrd); a2_1->decrRef(); - std::copy(a2_2->getConstPointer(),a2_2->getConstPointer()+a2_2->getNbOfElems(),ptrd); + std::copy(a2_2->begin(),a2_2->begin()+a2_2->getNbOfElems(),ptrd); a2_2->decrRef(); } @@ -903,8 +903,8 @@ void MEDCouplingMappedExtrudedMesh::unserialization(const std::vector& t std::vector ti2(tinyInfo.begin()+sz1,tinyInfo.end()-3); DataArrayInt *a1tmp=DataArrayInt::New(); DataArrayDouble *a2tmp=DataArrayDouble::New(); - const int *a1Ptr=a1->getConstPointer(); - const double *a2Ptr=a2->getConstPointer(); + const int *a1Ptr=a1->begin(); + const double *a2Ptr=a2->begin(); _mesh2D=MEDCouplingUMesh::New(); std::vector ls1,ls2; _mesh2D->resizeForUnserialization(ti1,a1tmp,a2tmp,ls1); @@ -929,7 +929,7 @@ void MEDCouplingMappedExtrudedMesh::unserialization(const std::vector& t a1tmp->decrRef(); a2tmp->decrRef(); // _mesh3D_ids=DataArrayInt::New(); - int szIds=(int)std::distance(a1Ptr,a1->getConstPointer()+a1->getNbOfElems()); + int szIds=(int)std::distance(a1Ptr,a1->begin()+a1->getNbOfElems()); _mesh3D_ids->alloc(szIds,1); std::copy(a1Ptr,a1Ptr+szIds,_mesh3D_ids->getPointer()); }