X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FMEDCoupling%2FMEDCouplingExtrudedMesh.cxx;h=8ebcf8a71b585ee1576ebcad01acd2aee1ec9ba9;hb=b4b11b30ec3c8c59b9124a2c4efbd4b99039556f;hp=14a29179d878a0f516275f8a8ced18a4af573f79;hpb=cdc5bc34c06fca639aef39cf04645acf6620ae2a;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling/MEDCouplingExtrudedMesh.cxx b/src/MEDCoupling/MEDCouplingExtrudedMesh.cxx index 14a29179d..8ebcf8a71 100644 --- a/src/MEDCoupling/MEDCouplingExtrudedMesh.cxx +++ b/src/MEDCoupling/MEDCouplingExtrudedMesh.cxx @@ -45,7 +45,7 @@ using namespace ParaMEDMEM; * because the mesh is aggregated and potentially modified by rotate or translate method. * @param cell2DId Id of cell in mesh2D mesh where the computation of 1D mesh will be done. */ -MEDCouplingExtrudedMesh *MEDCouplingExtrudedMesh::New(const MEDCouplingUMesh *mesh3D, const MEDCouplingUMesh *mesh2D, int cell2DId) throw(INTERP_KERNEL::Exception) +MEDCouplingExtrudedMesh *MEDCouplingExtrudedMesh::New(const MEDCouplingUMesh *mesh3D, const MEDCouplingUMesh *mesh2D, int cell2DId) { return new MEDCouplingExtrudedMesh(mesh3D,mesh2D,cell2DId); } @@ -69,15 +69,15 @@ std::size_t MEDCouplingExtrudedMesh::getHeapMemorySizeWithoutChildren() const return MEDCouplingMesh::getHeapMemorySizeWithoutChildren(); } -std::vector MEDCouplingExtrudedMesh::getDirectChildren() const +std::vector MEDCouplingExtrudedMesh::getDirectChildren() const { - std::vector ret; + std::vector ret; if(_mesh2D) - ret.push_back(const_cast(_mesh2D)); + ret.push_back(_mesh2D); if(_mesh1D) - ret.push_back(const_cast(_mesh1D)); + ret.push_back(_mesh1D); if(_mesh3D_ids) - ret.push_back(const_cast(_mesh3D_ids)); + ret.push_back(_mesh3D_ids); return ret; } @@ -85,7 +85,7 @@ std::vector MEDCouplingExtrudedMesh::getDirectChildren() const * This method copyies all tiny strings from other (name and components name). * @throw if other and this have not same mesh type. */ -void MEDCouplingExtrudedMesh::copyTinyStringsFrom(const MEDCouplingMesh *other) throw(INTERP_KERNEL::Exception) +void MEDCouplingExtrudedMesh::copyTinyStringsFrom(const MEDCouplingMesh *other) { const MEDCouplingExtrudedMesh *otherC=dynamic_cast(other); if(!otherC) @@ -95,13 +95,13 @@ void MEDCouplingExtrudedMesh::copyTinyStringsFrom(const MEDCouplingMesh *other) _mesh1D->copyTinyStringsFrom(otherC->_mesh1D); } -MEDCouplingExtrudedMesh::MEDCouplingExtrudedMesh(const MEDCouplingUMesh *mesh3D, const MEDCouplingUMesh *mesh2D, int cell2DId) throw(INTERP_KERNEL::Exception) +MEDCouplingExtrudedMesh::MEDCouplingExtrudedMesh(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) _mesh2D->incrRef(); computeExtrusion(mesh3D); - setName(mesh3D->getName().c_str()); + setName(mesh3D->getName()); } catch(INTERP_KERNEL::Exception& e) { @@ -170,7 +170,7 @@ MEDCouplingExtrudedMesh *MEDCouplingExtrudedMesh::clone(bool recDeepCpy) const return new MEDCouplingExtrudedMesh(*this,recDeepCpy); } -bool MEDCouplingExtrudedMesh::isEqualIfNotWhy(const MEDCouplingMesh *other, double prec, std::string& reason) const throw(INTERP_KERNEL::Exception) +bool MEDCouplingExtrudedMesh::isEqualIfNotWhy(const MEDCouplingMesh *other, double prec, std::string& reason) const { if(!other) throw INTERP_KERNEL::Exception("MEDCouplingExtrudedMesh::isEqualIfNotWhy : input other pointer is null !"); @@ -250,14 +250,14 @@ INTERP_KERNEL::NormalizedCellType MEDCouplingExtrudedMesh::getTypeOfCell(int cel std::set MEDCouplingExtrudedMesh::getAllGeoTypes() const { - const std::set& ret2D=_mesh2D->getAllTypes(); + std::set ret2D(_mesh2D->getAllGeoTypes()); std::set ret; for(std::set::const_iterator it=ret2D.begin();it!=ret2D.end();it++) ret.insert(INTERP_KERNEL::CellModel::GetCellModel(*it).getExtrudedType()); return ret; } -DataArrayInt *MEDCouplingExtrudedMesh::giveCellsWithType(INTERP_KERNEL::NormalizedCellType type) const throw(INTERP_KERNEL::Exception) +DataArrayInt *MEDCouplingExtrudedMesh::giveCellsWithType(INTERP_KERNEL::NormalizedCellType type) const { const INTERP_KERNEL::CellModel& cm=INTERP_KERNEL::CellModel::GetCellModel(type); INTERP_KERNEL::NormalizedCellType revExtTyp=cm.getReverseExtrudedType(); @@ -274,13 +274,13 @@ DataArrayInt *MEDCouplingExtrudedMesh::giveCellsWithType(INTERP_KERNEL::Normaliz ret->alloc(nbOfLevs*nbOfTuples,1); int *pt=ret->getPointer(); for(int i=0;ibegin(),tmp->end(),pt,std::bind2nd(std::plus(),i*nbOfCells2D)); + std::transform(tmp->begin(),tmp->end(),pt,std::bind2nd(std::plus(),i*nbOfCells2D)); MEDCouplingAutoRefCountObjectPtr ret2=ret->renumberR(_mesh3D_ids->begin()); ret2->sort(); return ret2.retn(); } -DataArrayInt *MEDCouplingExtrudedMesh::computeNbOfNodesPerCell() const throw(INTERP_KERNEL::Exception) +DataArrayInt *MEDCouplingExtrudedMesh::computeNbOfNodesPerCell() const { MEDCouplingAutoRefCountObjectPtr ret2D=_mesh2D->computeNbOfNodesPerCell(); int nbOfLevs=_mesh1D->getNumberOfCells(); @@ -293,7 +293,7 @@ DataArrayInt *MEDCouplingExtrudedMesh::computeNbOfNodesPerCell() const throw(INT return ret3D->renumberR(_mesh3D_ids->begin()); } -DataArrayInt *MEDCouplingExtrudedMesh::computeNbOfFacesPerCell() const throw(INTERP_KERNEL::Exception) +DataArrayInt *MEDCouplingExtrudedMesh::computeNbOfFacesPerCell() const { MEDCouplingAutoRefCountObjectPtr ret2D=_mesh2D->computeNbOfNodesPerCell(); int nbOfLevs=_mesh1D->getNumberOfCells(); @@ -306,7 +306,7 @@ DataArrayInt *MEDCouplingExtrudedMesh::computeNbOfFacesPerCell() const throw(INT return ret3D->renumberR(_mesh3D_ids->begin()); } -DataArrayInt *MEDCouplingExtrudedMesh::computeEffectiveNbOfNodesPerCell() const throw(INTERP_KERNEL::Exception) +DataArrayInt *MEDCouplingExtrudedMesh::computeEffectiveNbOfNodesPerCell() const { return computeNbOfNodesPerCell(); } @@ -339,7 +339,7 @@ void MEDCouplingExtrudedMesh::getNodeIdsOfCell(int cellId, std::vector& con conn.insert(conn.end(),tmp2.begin(),tmp2.end()); } -void MEDCouplingExtrudedMesh::getCoordinatesOfNode(int nodeId, std::vector& coo) const throw(INTERP_KERNEL::Exception) +void MEDCouplingExtrudedMesh::getCoordinatesOfNode(int nodeId, std::vector& coo) const { int nbOfNodes2D=_mesh2D->getNumberOfNodes(); int locId=nodeId%nbOfNodes2D; @@ -394,12 +394,12 @@ void MEDCouplingExtrudedMesh::checkCoherency() const throw (INTERP_KERNEL::Excep { } -void MEDCouplingExtrudedMesh::checkCoherency1(double eps) const throw(INTERP_KERNEL::Exception) +void MEDCouplingExtrudedMesh::checkCoherency1(double eps) const { checkCoherency(); } -void MEDCouplingExtrudedMesh::checkCoherency2(double eps) const throw(INTERP_KERNEL::Exception) +void MEDCouplingExtrudedMesh::checkCoherency2(double eps) const { checkCoherency1(eps); } @@ -438,7 +438,7 @@ void MEDCouplingExtrudedMesh::updateTime() const } } -void MEDCouplingExtrudedMesh::renumberCells(const int *old2NewBg, bool check) throw(INTERP_KERNEL::Exception) +void MEDCouplingExtrudedMesh::renumberCells(const int *old2NewBg, bool check) { throw INTERP_KERNEL::Exception("Functionnality of renumbering cells unavailable for ExtrudedMesh"); } @@ -448,11 +448,11 @@ MEDCouplingUMesh *MEDCouplingExtrudedMesh::build3DUnstructuredMesh() const MEDCouplingUMesh *ret=_mesh2D->buildExtrudedMesh(_mesh1D,0); const int *renum=_mesh3D_ids->getConstPointer(); ret->renumberCells(renum,false); - ret->setName(getName().c_str()); + ret->setName(getName()); return ret; } -MEDCouplingUMesh *MEDCouplingExtrudedMesh::buildUnstructured() const throw(INTERP_KERNEL::Exception) +MEDCouplingUMesh *MEDCouplingExtrudedMesh::buildUnstructured() const { return build3DUnstructuredMesh(); } @@ -480,7 +480,7 @@ MEDCouplingFieldDouble *MEDCouplingExtrudedMesh::getMeasureField(bool) const retPtr[renum[i*nbOf2DCells+j]]=ret2DPtr[j]*ret1DPtr[i]; ret->setArray(da); da->decrRef(); - ret->setName(name.c_str()); + ret->setName(name); ret2D->decrRef(); ret1D->decrRef(); return ret; @@ -512,7 +512,7 @@ MEDCouplingExtrudedMesh::~MEDCouplingExtrudedMesh() _mesh3D_ids->decrRef(); } -void MEDCouplingExtrudedMesh::computeExtrusion(const MEDCouplingUMesh *mesh3D) throw(INTERP_KERNEL::Exception) +void MEDCouplingExtrudedMesh::computeExtrusion(const MEDCouplingUMesh *mesh3D) { 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"; @@ -695,17 +695,17 @@ void MEDCouplingExtrudedMesh::scale(const double *point, double factor) _mesh1D->scale(point,factor); } -std::vector MEDCouplingExtrudedMesh::getDistributionOfTypes() const throw(INTERP_KERNEL::Exception) +std::vector MEDCouplingExtrudedMesh::getDistributionOfTypes() const { throw INTERP_KERNEL::Exception("Not implemented yet !"); } -DataArrayInt *MEDCouplingExtrudedMesh::checkTypeConsistencyAndContig(const std::vector& code, const std::vector& idsPerType) const throw(INTERP_KERNEL::Exception) +DataArrayInt *MEDCouplingExtrudedMesh::checkTypeConsistencyAndContig(const std::vector& code, const std::vector& idsPerType) const { throw INTERP_KERNEL::Exception("Not implemented yet !"); } -void MEDCouplingExtrudedMesh::splitProfilePerType(const DataArrayInt *profile, std::vector& code, std::vector& idsInPflPerType, std::vector& idsPerType) const throw(INTERP_KERNEL::Exception) +void MEDCouplingExtrudedMesh::splitProfilePerType(const DataArrayInt *profile, std::vector& code, std::vector& idsInPflPerType, std::vector& idsPerType) const { throw INTERP_KERNEL::Exception("Not implemented yet !"); } @@ -722,7 +722,7 @@ MEDCouplingMesh *MEDCouplingExtrudedMesh::buildPartAndReduceNodes(const int *sta return 0; } -DataArrayInt *MEDCouplingExtrudedMesh::simplexize(int policy) throw(INTERP_KERNEL::Exception) +DataArrayInt *MEDCouplingExtrudedMesh::simplexize(int policy) { throw INTERP_KERNEL::Exception("MEDCouplingExtrudedMesh::simplexize : unavailable for such a type of mesh : Extruded !"); } @@ -761,12 +761,18 @@ DataArrayDouble *MEDCouplingExtrudedMesh::getBarycenterAndOwner() const throw INTERP_KERNEL::Exception("MEDCouplingExtrudedMesh::getBarycenterAndOwner : not yet implemented !"); } -DataArrayDouble *MEDCouplingExtrudedMesh::computeIsoBarycenterOfNodesPerCell() const throw(INTERP_KERNEL::Exception) +DataArrayDouble *MEDCouplingExtrudedMesh::computeIsoBarycenterOfNodesPerCell() const { throw INTERP_KERNEL::Exception("MEDCouplingExtrudedMesh::computeIsoBarycenterOfNodesPerCell: not yet implemented !"); } -void MEDCouplingExtrudedMesh::computeExtrusionAlg(const MEDCouplingUMesh *mesh3D) throw(INTERP_KERNEL::Exception) +void MEDCouplingExtrudedMesh::getReverseNodalConnectivity(DataArrayInt *revNodal, DataArrayInt *revNodalIndx) const +{ + MEDCouplingAutoRefCountObjectPtr m(buildUnstructured()); + m->getReverseNodalConnectivity(revNodal,revNodalIndx); +} + +void MEDCouplingExtrudedMesh::computeExtrusionAlg(const MEDCouplingUMesh *mesh3D) { _mesh3D_ids->alloc(mesh3D->getNumberOfCells(),1); int nbOf1DLev=mesh3D->getNumberOfCells()/_mesh2D->getNumberOfCells(); @@ -897,8 +903,8 @@ void MEDCouplingExtrudedMesh::serialize(DataArrayInt *&a1, DataArrayDouble *&a2) void MEDCouplingExtrudedMesh::unserialization(const std::vector& tinyInfoD, const std::vector& tinyInfo, const DataArrayInt *a1, DataArrayDouble *a2, const std::vector& littleStrings) { - setName(littleStrings[littleStrings.size()-2].c_str()); - setDescription(littleStrings.back().c_str()); + setName(littleStrings[littleStrings.size()-2]); + setDescription(littleStrings.back()); std::size_t sz=tinyInfo.size(); int sz1=tinyInfo[sz-2]; _cell_2D_id=tinyInfo[sz-3]; @@ -937,18 +943,18 @@ void MEDCouplingExtrudedMesh::unserialization(const std::vector& tinyInf std::copy(a1Ptr,a1Ptr+szIds,_mesh3D_ids->getPointer()); } -void MEDCouplingExtrudedMesh::writeVTKLL(std::ostream& ofs, const std::string& cellData, const std::string& pointData, DataArrayByte *byteData) const throw(INTERP_KERNEL::Exception) +void MEDCouplingExtrudedMesh::writeVTKLL(std::ostream& ofs, const std::string& cellData, const std::string& pointData, DataArrayByte *byteData) const { MEDCouplingAutoRefCountObjectPtr m=buildUnstructured(); m->writeVTKLL(ofs,cellData,pointData,byteData); } -void MEDCouplingExtrudedMesh::reprQuickOverview(std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void MEDCouplingExtrudedMesh::reprQuickOverview(std::ostream& stream) const { stream << "MEDCouplingExtrudedMesh C++ instance at " << this << ". Name : \"" << getName() << "\"."; } -std::string MEDCouplingExtrudedMesh::getVTKDataSetType() const throw(INTERP_KERNEL::Exception) +std::string MEDCouplingExtrudedMesh::getVTKDataSetType() const { return _mesh2D->getVTKDataSetType(); }