X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCoupling%2FMEDCouplingCurveLinearMesh.cxx;h=1f7fc08919a2ab46b1dacc1847099b806e0f513b;hb=75006818415ac26dc594b6abb806ba3c292a545c;hp=6e93efb1262743f8a4a57dc4442bf7862cbd3ae9;hpb=f67dc0817fad8a24d547e09fdab9c36e280cd378;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling/MEDCouplingCurveLinearMesh.cxx b/src/MEDCoupling/MEDCouplingCurveLinearMesh.cxx index 6e93efb12..1f7fc0891 100644 --- a/src/MEDCoupling/MEDCouplingCurveLinearMesh.cxx +++ b/src/MEDCoupling/MEDCouplingCurveLinearMesh.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2013 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 // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -16,7 +16,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// Author : Anthony Geay (CEA/DEN) +// Author : Anthony Geay (EDF R&D) #include "MEDCouplingCurveLinearMesh.hxx" #include "MEDCouplingPointSet.hxx" @@ -31,18 +31,18 @@ #include #include -using namespace ParaMEDMEM; +using namespace MEDCoupling; MEDCouplingCurveLinearMesh::MEDCouplingCurveLinearMesh():_coords(0),_structure(0) { } -MEDCouplingCurveLinearMesh::MEDCouplingCurveLinearMesh(const MEDCouplingCurveLinearMesh& other, bool deepCopy):MEDCouplingStructuredMesh(other,deepCopy),_structure(other._structure) +MEDCouplingCurveLinearMesh::MEDCouplingCurveLinearMesh(const MEDCouplingCurveLinearMesh& other, bool deepCpy):MEDCouplingStructuredMesh(other,deepCpy),_structure(other._structure) { - if(deepCopy) + if(deepCpy) { if((const DataArrayDouble *)other._coords) - _coords=other._coords->deepCpy(); + _coords=other._coords->deepCopy(); } else _coords=other._coords; @@ -57,14 +57,14 @@ MEDCouplingCurveLinearMesh *MEDCouplingCurveLinearMesh::New() return new MEDCouplingCurveLinearMesh; } -MEDCouplingCurveLinearMesh *MEDCouplingCurveLinearMesh::New(const char *meshName) +MEDCouplingCurveLinearMesh *MEDCouplingCurveLinearMesh::New(const std::string& meshName) { MEDCouplingCurveLinearMesh *ret=new MEDCouplingCurveLinearMesh; ret->setName(meshName); return ret; } -MEDCouplingMesh *MEDCouplingCurveLinearMesh::deepCpy() const +MEDCouplingCurveLinearMesh *MEDCouplingCurveLinearMesh::deepCopy() const { return clone(true); } @@ -80,20 +80,25 @@ void MEDCouplingCurveLinearMesh::updateTime() const updateTimeWith(*_coords); } -std::size_t MEDCouplingCurveLinearMesh::getHeapMemorySize() const +std::size_t MEDCouplingCurveLinearMesh::getHeapMemorySizeWithoutChildren() const { - std::size_t ret=0; + std::size_t ret(MEDCouplingStructuredMesh::getHeapMemorySizeWithoutChildren()); ret+=_structure.capacity()*sizeof(int); - if((const DataArrayDouble *)_coords) - ret+=_coords->getHeapMemorySize(); - return MEDCouplingStructuredMesh::getHeapMemorySize()+ret; + return ret; +} + +std::vector MEDCouplingCurveLinearMesh::getDirectChildrenWithNull() const +{ + std::vector ret; + ret.push_back((const DataArrayDouble *)_coords); + return ret; } /*! * This method copyies all tiny strings from other (name and components name). * @throw if other and this have not same mesh type. */ -void MEDCouplingCurveLinearMesh::copyTinyStringsFrom(const MEDCouplingMesh *other) throw(INTERP_KERNEL::Exception) +void MEDCouplingCurveLinearMesh::copyTinyStringsFrom(const MEDCouplingMesh *other) { const MEDCouplingCurveLinearMesh *otherC=dynamic_cast(other); if(!otherC) @@ -103,7 +108,7 @@ void MEDCouplingCurveLinearMesh::copyTinyStringsFrom(const MEDCouplingMesh *othe _coords->copyStringInfoFrom(*otherC->_coords); } -bool MEDCouplingCurveLinearMesh::isEqualIfNotWhy(const MEDCouplingMesh *other, double prec, std::string& reason) const throw(INTERP_KERNEL::Exception) +bool MEDCouplingCurveLinearMesh::isEqualIfNotWhy(const MEDCouplingMesh *other, double prec, std::string& reason) const { if(!other) throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::isEqualIfNotWhy : input other pointer is null !"); @@ -154,98 +159,62 @@ bool MEDCouplingCurveLinearMesh::isEqualWithoutConsideringStr(const MEDCouplingM } void MEDCouplingCurveLinearMesh::checkDeepEquivalWith(const MEDCouplingMesh *other, int cellCompPol, double prec, - DataArrayInt *&cellCor, DataArrayInt *&nodeCor) const throw(INTERP_KERNEL::Exception) + DataArrayInt *&cellCor, DataArrayInt *&nodeCor) const { if(!isEqualWithoutConsideringStr(other,prec)) throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::checkDeepEquivalWith : Meshes are not the same !"); } /*! - * Nothing is done here (except to check that the other is a ParaMEDMEM::MEDCouplingCurveLinearMesh instance too). - * The user intend that the nodes are the same, so by construction of ParaMEDMEM::MEDCouplingCurveLinearMesh, 'this' and 'other' are the same ! + * Nothing is done here (except to check that the other is a MEDCoupling::MEDCouplingCurveLinearMesh instance too). + * The user intend that the nodes are the same, so by construction of MEDCoupling::MEDCouplingCurveLinearMesh, \a this and \a other are the same ! */ void MEDCouplingCurveLinearMesh::checkDeepEquivalOnSameNodesWith(const MEDCouplingMesh *other, int cellCompPol, double prec, - DataArrayInt *&cellCor) const throw(INTERP_KERNEL::Exception) + DataArrayInt *&cellCor) const { - const MEDCouplingCurveLinearMesh *otherC=dynamic_cast(other); - if(!otherC) - throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::checkDeepEquivalOnSameNodesWith : other is NOT a cartesian mesh ! Impossible to check equivalence !"); + if(!isEqualWithoutConsideringStr(other,prec)) + throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::checkDeepEquivalOnSameNodesWith : Meshes are not the same !"); } -void MEDCouplingCurveLinearMesh::checkCoherency() const throw(INTERP_KERNEL::Exception) +void MEDCouplingCurveLinearMesh::checkConsistencyLight() const { std::size_t sz=_structure.size(),i=0,nbOfNodes=1; if(sz<1) - throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::checkCoherency : structure should have a lgth of size 1 at least !"); + throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::checkConsistencyLight : structure should have a lgth of size 1 at least !"); for(std::vector::const_iterator it=_structure.begin();it!=_structure.end();it++,i++) { if((*it)<1) - { std::ostringstream oss; oss << "MEDCouplingCurveLinearMesh::checkCoherency : At pos #" << i << " of structure value is " << *it << "should be >= 1 !"; throw INTERP_KERNEL::Exception(oss.str().c_str()); } + { std::ostringstream oss; oss << "MEDCouplingCurveLinearMesh::checkConsistencyLight : At pos #" << i << " of structure value is " << *it << "should be >= 1 !"; throw INTERP_KERNEL::Exception(oss.str().c_str()); } nbOfNodes*=*it; } if(!((const DataArrayDouble *)_coords)) - throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::checkCoherency : the array is not set !"); + throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::checkConsistencyLight : the array is not set !"); if(!_coords->isAllocated()) - throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::checkCoherency : the array is not allocated !"); + throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::checkConsistencyLight : the array is not allocated !"); if(_coords->getNumberOfComponents()<1) - throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::checkCoherency : the array should have >= 1 components !"); + throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::checkConsistencyLight : the array should have >= 1 components !"); if(_coords->getNumberOfTuples()!=(int)nbOfNodes) { - std::ostringstream oss; oss << "MEDCouplingCurveLinearMesh::checkCoherency : structure said that number of nodes should be equal to " << nbOfNodes << " but number of tuples in array is equal to " << _coords->getNumberOfTuples() << " !"; + std::ostringstream oss; oss << "MEDCouplingCurveLinearMesh::checkConsistencyLight : structure said that number of nodes should be equal to " << nbOfNodes << " but number of tuples in array is equal to " << _coords->getNumberOfTuples() << " !"; throw INTERP_KERNEL::Exception(oss.str().c_str()); } } -void MEDCouplingCurveLinearMesh::checkCoherency1(double eps) const throw(INTERP_KERNEL::Exception) -{ - checkCoherency(); -} - -void MEDCouplingCurveLinearMesh::checkCoherency2(double eps) const throw(INTERP_KERNEL::Exception) +void MEDCouplingCurveLinearMesh::checkConsistency(double eps) const { - checkCoherency1(eps); + checkConsistencyLight(); } -int MEDCouplingCurveLinearMesh::getNumberOfCells() const +std::size_t MEDCouplingCurveLinearMesh::getNumberOfCells() const { - checkCoherency(); - std::size_t nbOfCells=1,i=0; - for(std::vector::const_iterator it=_structure.begin();it!=_structure.end();it++,i++) - nbOfCells*=(*it)-1; - return (int)nbOfCells; + checkConsistencyLight(); + return MEDCouplingStructuredMesh::getNumberOfCells(); } int MEDCouplingCurveLinearMesh::getNumberOfNodes() const { - checkCoherency(); - std::size_t nbOfNodes=1; - for(std::vector::const_iterator it=_structure.begin();it!=_structure.end();it++) - nbOfNodes*=(*it); - return (int)nbOfNodes; -} - -void MEDCouplingCurveLinearMesh::getSplitCellValues(int *res) const -{ - int meshDim=getMeshDimension(); - for(int l=0;lgetNumberOfComponents(); } -int MEDCouplingCurveLinearMesh::getMeshDimension() const -{ - return (int)_structure.size(); -} - -void MEDCouplingCurveLinearMesh::getCoordinatesOfNode(int nodeId, std::vector& coo) const throw(INTERP_KERNEL::Exception) +void MEDCouplingCurveLinearMesh::getCoordinatesOfNode(int nodeId, std::vector& coo) const { if(!((const DataArrayDouble *)_coords)) throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::getCoordinatesOfNode : Coordinates not set !"); @@ -285,7 +255,7 @@ std::string MEDCouplingCurveLinearMesh::simpleRepr() const double tt=getTime(tmpp1,tmpp2); ret << "Time attached to the mesh [unit] : " << tt << " [" << getTimeUnit() << "]\n"; ret << "Iteration : " << tmpp1 << " Order : " << tmpp2 << "\n"; - ret << "The nodal stucture of curve linear mesh is : ["; + ret << "The nodal structure of curve linear mesh is : ["; std::copy(_structure.begin(),_structure.end(),std::ostream_iterator(ret,",")); ret << "]\n"; ret << "The coords array is this : "; if((const DataArrayDouble *)_coords) @@ -300,17 +270,22 @@ std::string MEDCouplingCurveLinearMesh::advancedRepr() const return simpleRepr(); } -DataArrayDouble *MEDCouplingCurveLinearMesh::getCoords() throw(INTERP_KERNEL::Exception) +const DataArrayDouble *MEDCouplingCurveLinearMesh::getDirectAccessOfCoordsArrIfInStructure() const { return _coords; } -const DataArrayDouble *MEDCouplingCurveLinearMesh::getCoords() const throw(INTERP_KERNEL::Exception) +DataArrayDouble *MEDCouplingCurveLinearMesh::getCoords() { return _coords; } -void MEDCouplingCurveLinearMesh::setCoords(const DataArrayDouble *coords) throw(INTERP_KERNEL::Exception) +const DataArrayDouble *MEDCouplingCurveLinearMesh::getCoords() const +{ + return _coords; +} + +void MEDCouplingCurveLinearMesh::setCoords(const DataArrayDouble *coords) { if(coords!=(const DataArrayDouble *)_coords) { @@ -321,7 +296,7 @@ void MEDCouplingCurveLinearMesh::setCoords(const DataArrayDouble *coords) throw( } } -void MEDCouplingCurveLinearMesh::setNodeGridStructure(const int *gridStructBg, const int *gridStructEnd) throw(INTERP_KERNEL::Exception) +void MEDCouplingCurveLinearMesh::setNodeGridStructure(const int *gridStructBg, const int *gridStructEnd) { std::size_t sz=std::distance(gridStructBg,gridStructEnd); if(sz>=1 && sz<=3) @@ -336,11 +311,42 @@ void MEDCouplingCurveLinearMesh::setNodeGridStructure(const int *gridStructBg, c } } -std::vector MEDCouplingCurveLinearMesh::getNodeGridStructure() const throw(INTERP_KERNEL::Exception) +std::vector MEDCouplingCurveLinearMesh::getNodeGridStructure() const { return _structure; } +MEDCouplingStructuredMesh *MEDCouplingCurveLinearMesh::buildStructuredSubPart(const std::vector< std::pair >& cellPart) const +{ + checkConsistencyLight(); + int dim(getSpaceDimension()); + std::vector dims(getMeshDimension()); + if(dim!=(int)cellPart.size()) + { + std::ostringstream oss; oss << "MEDCouplingCurveLinearMesh::buildStructuredSubPart : the space dimension is " << dim << " and cell part size is " << cellPart.size() << " !"; + throw INTERP_KERNEL::Exception(oss.str().c_str()); + } + std::vector< std::pair > nodePartFormat(cellPart); + for(std::vector< std::pair >::iterator it=nodePartFormat.begin();it!=nodePartFormat.end();it++) + (*it).second++; + MCAuto tmp1(BuildExplicitIdsFrom(getNodeGridStructure(),nodePartFormat)); + MCAuto ret(dynamic_cast(deepCopy())); + const DataArrayDouble *coo(ret->getCoords()); + if(coo) + { + MCAuto coo2(coo->selectByTupleIdSafe(tmp1->begin(),tmp1->end())); + ret->setCoords(coo2); + } + for(int i=0;isetNodeGridStructure(&dims[0],&dims[0]+dims.size()); + return ret.retn(); +} + void MEDCouplingCurveLinearMesh::getBoundingBox(double *bbox) const { if(!((const DataArrayDouble *)_coords)) @@ -350,13 +356,13 @@ void MEDCouplingCurveLinearMesh::getBoundingBox(double *bbox) const MEDCouplingFieldDouble *MEDCouplingCurveLinearMesh::getMeasureField(bool isAbs) const { - checkCoherency(); + checkConsistencyLight(); int meshDim=getMeshDimension(); std::string name="MeasureOfMesh_"; name+=getName(); - MEDCouplingAutoRefCountObjectPtr field=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME); - field->setName(name.c_str()); field->setMesh(const_cast(this)); field->synchronizeTimeWithMesh(); + MCAuto field=MEDCouplingFieldDouble::New(ON_CELLS,ONE_TIME); + field->setName(name); field->setMesh(const_cast(this)); field->synchronizeTimeWithMesh(); switch(meshDim) - { + { case 3: { getMeasureFieldMeshDim3(isAbs,field); return field.retn(); } case 2: @@ -365,18 +371,18 @@ MEDCouplingFieldDouble *MEDCouplingCurveLinearMesh::getMeasureField(bool isAbs) { getMeasureFieldMeshDim1(isAbs,field); return field.retn(); } default: throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::getMeasureField : mesh dimension must be in [1,2,3] !"); - } + } } /*! - * \param [in,out] f field feeded with good values. + * \param [in,out] f field fed with good values. * \sa MEDCouplingCurveLinearMesh::getMeasureField */ -void MEDCouplingCurveLinearMesh::getMeasureFieldMeshDim1(bool isAbs, MEDCouplingFieldDouble *field) const throw(INTERP_KERNEL::Exception) +void MEDCouplingCurveLinearMesh::getMeasureFieldMeshDim1(bool isAbs, MEDCouplingFieldDouble *field) const { int nbnodes=getNumberOfNodes(); int spaceDim=getSpaceDimension(); - MEDCouplingAutoRefCountObjectPtr arr=DataArrayDouble::New(); field->setArray(arr); + MCAuto arr=DataArrayDouble::New(); field->setArray(arr); if(nbnodes==0) { arr->alloc(0,1); return; } if(spaceDim==1) @@ -388,23 +394,23 @@ void MEDCouplingCurveLinearMesh::getMeasureFieldMeshDim1(bool isAbs, MEDCoupling } else { - MEDCouplingAutoRefCountObjectPtr tmp=DataArrayDouble::New(); tmp->alloc(nbnodes-1,spaceDim); + MCAuto tmp=DataArrayDouble::New(); tmp->alloc(nbnodes-1,spaceDim); std::transform(_coords->begin()+spaceDim,_coords->end(),_coords->begin(),tmp->getPointer(),std::minus()); - MEDCouplingAutoRefCountObjectPtr tmp2=tmp->magnitude(); field->setArray(tmp2); + MCAuto tmp2=tmp->magnitude(); field->setArray(tmp2); } } /*! - * \param [in,out] f field feeded with good values. + * \param [in,out] f field fed with good values. * \sa MEDCouplingCurveLinearMesh::getMeasureField */ -void MEDCouplingCurveLinearMesh::getMeasureFieldMeshDim2(bool isAbs, MEDCouplingFieldDouble *field) const throw(INTERP_KERNEL::Exception) +void MEDCouplingCurveLinearMesh::getMeasureFieldMeshDim2(bool isAbs, MEDCouplingFieldDouble *field) const { int nbcells=getNumberOfCells(); int spaceDim=getSpaceDimension(); if(spaceDim!=2 && spaceDim!=3) throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::getMeasureFieldMeshDim2 : with meshDim 2 only space dimension 2 and 3 are possible !"); - MEDCouplingAutoRefCountObjectPtr arr=DataArrayDouble::New(); field->setArray(arr); + MCAuto arr=DataArrayDouble::New(); field->setArray(arr); arr->alloc(nbcells,1); double *pt=arr->getPointer(); const double *coords=_coords->begin(); @@ -421,16 +427,16 @@ void MEDCouplingCurveLinearMesh::getMeasureFieldMeshDim2(bool isAbs, MEDCoupling } /*! - * \param [in,out] f field feeded with good values. + * \param [in,out] f field fed with good values. * \sa MEDCouplingCurveLinearMesh::getMeasureField */ -void MEDCouplingCurveLinearMesh::getMeasureFieldMeshDim3(bool isAbs, MEDCouplingFieldDouble *field) const throw(INTERP_KERNEL::Exception) +void MEDCouplingCurveLinearMesh::getMeasureFieldMeshDim3(bool isAbs, MEDCouplingFieldDouble *field) const { int nbcells=getNumberOfCells(); int spaceDim=getSpaceDimension(); if(spaceDim!=3) throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::getMeasureFieldMeshDim3 : with meshDim 3 only space dimension 3 is possible !"); - MEDCouplingAutoRefCountObjectPtr arr=DataArrayDouble::New(); field->setArray(arr); + MCAuto arr=DataArrayDouble::New(); field->setArray(arr); arr->alloc(nbcells,1); double *pt=arr->getPointer(); const double *coords=_coords->begin(); @@ -477,7 +483,7 @@ MEDCouplingFieldDouble *MEDCouplingCurveLinearMesh::buildOrthogonalField() const /// @cond INTERNAL -namespace ParaMEDMEM +namespace MEDCoupling { template class DummyClsMCL @@ -501,7 +507,7 @@ namespace ParaMEDMEM int MEDCouplingCurveLinearMesh::getCellContainingPoint(const double *pos, double eps) const { - checkCoherency(); + checkConsistencyLight(); int spaceDim=getSpaceDimension(); const double *coords=_coords->getConstPointer(); int nodeId=-1; @@ -513,7 +519,7 @@ int MEDCouplingCurveLinearMesh::getCellContainingPoint(const double *pos, double if(nbOfNodes==1) throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::getCellContainingPoint : No cells in this !"); switch(getMeshDimension()) - { + { case 1: if(spaceDim==1) { @@ -625,7 +631,13 @@ int MEDCouplingCurveLinearMesh::getCellContainingPoint(const double *pos, double } default: throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::getCellContainingPoint : mesh dimension managed are 1, 2 or 3 !"); - } + } +} + +void MEDCouplingCurveLinearMesh::getCellsContainingPoint(const double *pos, double eps, std::vector& elts) const +{ + int ret(getCellContainingPoint(pos,eps)); + elts.push_back(ret); } void MEDCouplingCurveLinearMesh::rotate(const double *center, const double *vector, double angle) @@ -636,9 +648,9 @@ void MEDCouplingCurveLinearMesh::rotate(const double *center, const double *vect int nbNodes=_coords->getNumberOfTuples(); double *coords=_coords->getPointer(); if(spaceDim==3) - MEDCouplingPointSet::Rotate3DAlg(center,vector,angle,nbNodes,coords); + DataArrayDouble::Rotate3DAlg(center,vector,angle,nbNodes,coords,coords); else if(spaceDim==2) - MEDCouplingPointSet::Rotate2DAlg(center,angle,nbNodes,coords); + DataArrayDouble::Rotate2DAlg(center,angle,nbNodes,coords,coords); else throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::rotate : invalid space dim for rotation must be 2 or 3"); _coords->declareAsNew(); @@ -693,17 +705,17 @@ DataArrayDouble *MEDCouplingCurveLinearMesh::getCoordinatesAndOwner() const return ret; } -DataArrayDouble *MEDCouplingCurveLinearMesh::getBarycenterAndOwner() const +DataArrayDouble *MEDCouplingCurveLinearMesh::computeCellCenterOfMass() const { - checkCoherency(); - MEDCouplingAutoRefCountObjectPtr ret=DataArrayDouble::New(); + checkConsistencyLight(); + MCAuto ret=DataArrayDouble::New(); int spaceDim=getSpaceDimension(); int meshDim=getMeshDimension(); int nbOfCells=getNumberOfCells(); ret->alloc(nbOfCells,spaceDim); ret->copyStringInfoFrom(*getCoords()); switch(meshDim) - { + { case 3: { getBarycenterAndOwnerMeshDim3(ret); return ret.retn(); } case 2: @@ -711,18 +723,18 @@ DataArrayDouble *MEDCouplingCurveLinearMesh::getBarycenterAndOwner() const case 1: { getBarycenterAndOwnerMeshDim1(ret); return ret.retn(); } default: - throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::getBarycenterAndOwner : mesh dimension must be in [1,2,3] !"); - } + throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::computeCellCenterOfMass : mesh dimension must be in [1,2,3] !"); + } } -DataArrayDouble *MEDCouplingCurveLinearMesh::computeIsoBarycenterOfNodesPerCell() const throw(INTERP_KERNEL::Exception) +DataArrayDouble *MEDCouplingCurveLinearMesh::computeIsoBarycenterOfNodesPerCell() const { - return MEDCouplingCurveLinearMesh::getBarycenterAndOwner(); + return MEDCouplingCurveLinearMesh::computeCellCenterOfMass(); } /*! - * \param [in,out] bary Barycenter array feeded with good values. - * \sa MEDCouplingCurveLinearMesh::getBarycenterAndOwner + * \param [in,out] bary Barycenter array fed with good values. + * \sa MEDCouplingCurveLinearMesh::computeCellCenterOfMass */ void MEDCouplingCurveLinearMesh::getBarycenterAndOwnerMeshDim3(DataArrayDouble *bary) const { @@ -747,8 +759,8 @@ void MEDCouplingCurveLinearMesh::getBarycenterAndOwnerMeshDim3(DataArrayDouble * } /*! - * \param [in,out] bary Barycenter array feeded with good values. - * \sa MEDCouplingCurveLinearMesh::getBarycenterAndOwner + * \param [in,out] bary Barycenter array fed with good values. + * \sa MEDCouplingCurveLinearMesh::computeCellCenterOfMass */ void MEDCouplingCurveLinearMesh::getBarycenterAndOwnerMeshDim2(DataArrayDouble *bary) const { @@ -770,8 +782,8 @@ void MEDCouplingCurveLinearMesh::getBarycenterAndOwnerMeshDim2(DataArrayDouble * } /*! - * \param [in,out] bary Barycenter array feeded with good values. - * \sa MEDCouplingCurveLinearMesh::getBarycenterAndOwner + * \param [in,out] bary Barycenter array fed with good values. + * \sa MEDCouplingCurveLinearMesh::computeCellCenterOfMass */ void MEDCouplingCurveLinearMesh::getBarycenterAndOwnerMeshDim1(DataArrayDouble *bary) const { @@ -780,9 +792,9 @@ void MEDCouplingCurveLinearMesh::getBarycenterAndOwnerMeshDim1(DataArrayDouble * std::transform(bary->begin(),bary->end(),bary->getPointer(),std::bind2nd(std::multiplies(),0.5)); } -void MEDCouplingCurveLinearMesh::renumberCells(const int *old2NewBg, bool check) throw(INTERP_KERNEL::Exception) +void MEDCouplingCurveLinearMesh::renumberCells(const int *old2NewBg, bool check) { - throw INTERP_KERNEL::Exception("Functionnality of renumbering cell not available for CurveLinear Mesh !"); + throw INTERP_KERNEL::Exception("Functionality of renumbering cell not available for CurveLinear Mesh !"); } void MEDCouplingCurveLinearMesh::getTinySerializationInformation(std::vector& tinyInfoD, std::vector& tinyInfo, std::vector& littleStrings) const @@ -841,9 +853,9 @@ void MEDCouplingCurveLinearMesh::serialize(DataArrayInt *&a1, DataArrayDouble *& void MEDCouplingCurveLinearMesh::unserialization(const std::vector& tinyInfoD, const std::vector& tinyInfo, const DataArrayInt *a1, DataArrayDouble *a2, const std::vector& littleStrings) { - setName(littleStrings[0].c_str()); - setDescription(littleStrings[1].c_str()); - setTimeUnit(littleStrings[2].c_str()); + setName(littleStrings[0]); + setDescription(littleStrings[1]); + setTimeUnit(littleStrings[2]); setTime(tinyInfoD[0],tinyInfo[0],tinyInfo[1]); int sz=tinyInfo[2]; _structure.resize(sz); @@ -860,7 +872,7 @@ void MEDCouplingCurveLinearMesh::unserialization(const std::vector& tiny } } -void MEDCouplingCurveLinearMesh::writeVTKLL(std::ostream& ofs, const std::string& cellData, const std::string& pointData) const throw(INTERP_KERNEL::Exception) +void MEDCouplingCurveLinearMesh::writeVTKLL(std::ostream& ofs, const std::string& cellData, const std::string& pointData, DataArrayByte *byteData) const { std::ostringstream extent; int meshDim=(int)_structure.size(); @@ -876,21 +888,21 @@ void MEDCouplingCurveLinearMesh::writeVTKLL(std::ostream& ofs, const std::string ofs << " \n"; ofs << " \n"; if(getSpaceDimension()==3) - _coords->writeVTK(ofs,8,"Points"); + _coords->writeVTK(ofs,8,"Points",byteData); else { - MEDCouplingAutoRefCountObjectPtr coo=_coords->changeNbOfComponents(3,0.); - coo->writeVTK(ofs,8,"Points"); + MCAuto coo=_coords->changeNbOfComponents(3,0.); + coo->writeVTK(ofs,8,"Points",byteData); } ofs << " \n"; ofs << " \n"; ofs << " \n"; } -void MEDCouplingCurveLinearMesh::reprQuickOverview(std::ostream& stream) const throw(INTERP_KERNEL::Exception) +void MEDCouplingCurveLinearMesh::reprQuickOverview(std::ostream& stream) const { stream << "MEDCouplingCurveLinearMesh C++ instance at " << this << ". Name : \"" << getName() << "\"."; - stream << "Nodal structure : ["; + stream << " Nodal structure : ["; for(std::size_t i=0;i<_structure.size();i++) { char tmp='X'+i; @@ -904,14 +916,27 @@ void MEDCouplingCurveLinearMesh::reprQuickOverview(std::ostream& stream) const t { stream << std::endl << "No coordinates set !"; return ; } if(!coo->isAllocated()) { stream << std::endl << "Coordinates set but not allocated !"; return ; } - int nbOfCompo=coo->getNumberOfComponents(); - if(nbOfCompo!=(int)_structure.size()) + int nbOfCompo(coo->getNumberOfComponents()); + int nbOfCompoExp(-1); + try + { + nbOfCompoExp=getSpaceDimension(); + } + catch(INTERP_KERNEL::Exception& e) + { + } + if(nbOfCompo!=nbOfCompoExp) { stream << std::endl << "Coordinates set and allocated but mismatch number of components !"; return ; } stream << std::endl << "Coordinates ( number of tuples = " << coo->getNumberOfTuples() << " ) : "; coo->reprQuickOverviewData(stream,200); } -std::string MEDCouplingCurveLinearMesh::getVTKDataSetType() const throw(INTERP_KERNEL::Exception) +std::string MEDCouplingCurveLinearMesh::getVTKFileExtension() const +{ + return std::string("vts"); +} + +std::string MEDCouplingCurveLinearMesh::getVTKDataSetType() const { return std::string("StructuredGrid"); }