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);
+ return ret;
+}
+
+std::vector<const BigMemoryObject *> MEDCouplingCurveLinearMesh::getDirectChildren() const
+{
+ std::vector<const BigMemoryObject *> ret;
if((const DataArrayDouble *)_coords)
- ret+=_coords->getHeapMemorySize();
- return MEDCouplingStructuredMesh::getHeapMemorySize()+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<const MEDCouplingCurveLinearMesh *>(other);
if(!otherC)
_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 !");
throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::checkDeepEquivalOnSameNodesWith : other is NOT a cartesian mesh ! Impossible to check equivalence !");
}
-void MEDCouplingCurveLinearMesh::checkCoherency() const throw(INTERP_KERNEL::Exception)
+void MEDCouplingCurveLinearMesh::checkCoherency() const
{
std::size_t sz=_structure.size(),i=0,nbOfNodes=1;
if(sz<1)
}
}
-void MEDCouplingCurveLinearMesh::checkCoherency1(double eps) const throw(INTERP_KERNEL::Exception)
+void MEDCouplingCurveLinearMesh::checkCoherency1(double eps) const
{
checkCoherency();
}
-void MEDCouplingCurveLinearMesh::checkCoherency2(double eps) const throw(INTERP_KERNEL::Exception)
+void MEDCouplingCurveLinearMesh::checkCoherency2(double eps) const
{
checkCoherency1(eps);
}
return (int)_structure.size();
}
-void MEDCouplingCurveLinearMesh::getCoordinatesOfNode(int nodeId, std::vector<double>& coo) const throw(INTERP_KERNEL::Exception)
+void MEDCouplingCurveLinearMesh::getCoordinatesOfNode(int nodeId, std::vector<double>& coo) const
{
if(!((const DataArrayDouble *)_coords))
throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::getCoordinatesOfNode : Coordinates not set !");
return simpleRepr();
}
-DataArrayDouble *MEDCouplingCurveLinearMesh::getCoords() throw(INTERP_KERNEL::Exception)
+DataArrayDouble *MEDCouplingCurveLinearMesh::getCoords()
{
return _coords;
}
-const DataArrayDouble *MEDCouplingCurveLinearMesh::getCoords() const throw(INTERP_KERNEL::Exception)
+const DataArrayDouble *MEDCouplingCurveLinearMesh::getCoords() const
{
return _coords;
}
-void MEDCouplingCurveLinearMesh::setCoords(const DataArrayDouble *coords) throw(INTERP_KERNEL::Exception)
+void MEDCouplingCurveLinearMesh::setCoords(const DataArrayDouble *coords)
{
if(coords!=(const DataArrayDouble *)_coords)
{
}
}
-void MEDCouplingCurveLinearMesh::setNodeGridStructure(const int *gridStructBg, const int *gridStructEnd) throw(INTERP_KERNEL::Exception)
+void MEDCouplingCurveLinearMesh::setNodeGridStructure(const int *gridStructBg, const int *gridStructEnd)
{
- _structure.resize(0);
- _structure.insert(_structure.end(),gridStructBg,gridStructEnd);
+ std::size_t sz=std::distance(gridStructBg,gridStructEnd);
+ if(sz>=1 && sz<=3)
+ {
+ _structure.resize(0);
+ _structure.insert(_structure.end(),gridStructBg,gridStructEnd);
+ }
+ else
+ {
+ std::ostringstream oss; oss << "MEDCouplingCurveLinearMesh::setNodeGridStructure : size of input nodal grid structure (" << sz << ") should be in 1, 2 or 3 !";
+ throw INTERP_KERNEL::Exception(oss.str().c_str());
+ }
}
-std::vector<int> MEDCouplingCurveLinearMesh::getNodeGridStructure() const throw(INTERP_KERNEL::Exception)
+std::vector<int> MEDCouplingCurveLinearMesh::getNodeGridStructure() const
{
return _structure;
}
+MEDCouplingStructuredMesh *MEDCouplingCurveLinearMesh::buildStructuredSubPart(const std::vector< std::pair<int,int> >& cellPart) const
+{
+ checkCoherency();
+ int dim(getMeshDimension());
+ std::vector<int> dims(getMeshDimension());
+ if(dim!=(int)cellPart.size())
+ {
+ std::ostringstream oss; oss << "MEDCouplingCurveLinearMesh::buildStructuredSubPart : the mesh dimension is " << dim << " and cell part size is " << cellPart.size() << " !";
+ throw INTERP_KERNEL::Exception(oss.str().c_str());
+ }
+ std::vector< std::pair<int,int> > nodePartFormat(cellPart);
+ for(std::vector< std::pair<int,int> >::iterator it=nodePartFormat.begin();it!=nodePartFormat.end();it++)
+ (*it).second++;
+ MEDCouplingAutoRefCountObjectPtr<DataArrayInt> tmp1(BuildExplicitIdsFrom(getNodeGridStructure(),nodePartFormat));
+ MEDCouplingAutoRefCountObjectPtr<MEDCouplingCurveLinearMesh> ret(dynamic_cast<MEDCouplingCurveLinearMesh *>(deepCpy()));
+ const DataArrayDouble *coo(ret->getCoords());
+ if(coo)
+ {
+ MEDCouplingAutoRefCountObjectPtr<DataArrayDouble> coo2(coo->selectByTupleIdSafe(tmp1->begin(),tmp1->end()));
+ ret->setCoords(coo2);
+ }
+ for(int i=0;i<dim;i++)
+ {
+ dims[i]=cellPart[i].second-cellPart[i].first+1;
+ if(dims[i]<1)
+ throw INTERP_KERNEL::Exception("MEDCouplingCurveLinearMesh::buildStructuredSubPart : invalid input cellPart !");
+ }
+ ret->setNodeGridStructure(&dims[0],&dims[0]+dims.size());
+ return ret.retn();
+}
+
void MEDCouplingCurveLinearMesh::getBoundingBox(double *bbox) const
{
if(!((const DataArrayDouble *)_coords))
* \param [in,out] f field feeded 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();
* \param [in,out] f field feeded 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();
* \param [in,out] f field feeded 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();
}
}
-DataArrayDouble *MEDCouplingCurveLinearMesh::computeIsoBarycenterOfNodesPerCell() const throw(INTERP_KERNEL::Exception)
+DataArrayDouble *MEDCouplingCurveLinearMesh::computeIsoBarycenterOfNodesPerCell() const
{
return MEDCouplingCurveLinearMesh::getBarycenterAndOwner();
}
std::transform(bary->begin(),bary->end(),bary->getPointer(),std::bind2nd(std::multiplies<double>(),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 !");
}
}
}
-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();
ofs << " </CellData>\n";
ofs << " <Points>\n";
if(getSpaceDimension()==3)
- _coords->writeVTK(ofs,8,"Points");
+ _coords->writeVTK(ofs,8,"Points",byteData);
else
{
MEDCouplingAutoRefCountObjectPtr<DataArrayDouble> coo=_coords->changeNbOfComponents(3,0.);
- coo->writeVTK(ofs,8,"Points");
+ coo->writeVTK(ofs,8,"Points",byteData);
}
ofs << " </Points>\n";
ofs << " </Piece>\n";
ofs << " </" << getVTKDataSetType() << ">\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 << ".";
-}
-
-std::string MEDCouplingCurveLinearMesh::getVTKDataSetType() const throw(INTERP_KERNEL::Exception)
+ stream << "MEDCouplingCurveLinearMesh C++ instance at " << this << ". Name : \"" << getName() << "\".";
+ stream << " Nodal structure : [";
+ for(std::size_t i=0;i<_structure.size();i++)
+ {
+ char tmp='X'+i;
+ stream << " " << tmp << "=" << _structure[i];
+ if(i!=_structure.size()-1)
+ stream << ", ";
+ }
+ stream << " ].";
+ const DataArrayDouble *coo(_coords);
+ if(!coo)
+ { 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())
+ { 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
{
return std::string("StructuredGrid");
}