int MEDCouplingGaussLocalization::getDimension() const
{
if(_weight.empty())
- return -1;
+ THROW_IK_EXCEPTION("getDimension : weight is empty !");
return (int)_gauss_coord.size()/(int)_weight.size();
}
int MEDCouplingGaussLocalization::getNumberOfPtsInRefCell() const
{
- int dim=getDimension();
- if(dim==0)
- return -1;
+ if(_gauss_coord.empty())
+ {
+ if(!_weight.empty())
+ THROW_IK_EXCEPTION("getNumberOfPtsInRefCell : gauss_coords are empty whereas weights are not empty !");
+ const INTERP_KERNEL::CellModel& cm = INTERP_KERNEL::CellModel::GetCellModel(_type);
+ return ((int)_ref_coord.size()) / ((int)cm.getDimension());
+ }
+ int dim( getDimension() );
return (int)_ref_coord.size()/dim;
}
return MCAuto<MEDCouplingUMesh>(ret->buildUnstructured());
}
+/*!
+ * This method returns an array containing for each Gauss Points in \a this, function values relative to the points of the
+ * reference cell. Number of components of returned array is equal to the number of points of the reference cell.
+ */
+MCAuto<DataArrayDouble> MEDCouplingGaussLocalization::getFunctionValues() const
+{
+ MCAuto<DataArrayDouble> ret(DataArrayDouble::New());
+ int nbGaussPt(getNumberOfGaussPt()),nbPtsRefCell(getNumberOfPtsInRefCell()),dim(getDimension());
+ ret->alloc(nbGaussPt,nbPtsRefCell);
+ double *retPtr(ret->getPointer());
+ for(int iGaussPt = 0 ; iGaussPt < nbGaussPt ; ++iGaussPt)
+ {
+ std::vector<double> curGaussPt(_gauss_coord.begin()+iGaussPt*dim,_gauss_coord.begin()+(iGaussPt+1)*dim);
+ INTERP_KERNEL::GaussInfo gi(_type,curGaussPt,1,_ref_coord,nbPtsRefCell);
+ gi.initLocalInfo();
+ const double *funcVal( gi.getFunctionValues(0) );
+ std::copy(funcVal,funcVal+nbPtsRefCell,retPtr);
+ retPtr += nbPtsRefCell;
+ }
+ return ret;
+}
+
/*!
* This method sets the comp_th component of ptIdInCell_th point coordinate of reference element of type this->_type.
* @throw if not 0<=ptIdInCell<nbOfNodePerCell or if not 0<=comp<dim
//
MEDCOUPLING_EXPORT MCAuto<DataArrayDouble> localizePtsInRefCooForEachCell(const DataArrayDouble *ptsInRefCoo, const MEDCouplingUMesh *mesh) const;
MEDCOUPLING_EXPORT MCAuto<MEDCouplingUMesh> buildRefCell() const;
+ MEDCOUPLING_EXPORT MCAuto<DataArrayDouble> getFunctionValues() const;
//
MEDCOUPLING_EXPORT const std::vector<double>& getRefCoords() const { return _ref_coord; }
MEDCOUPLING_EXPORT double getRefCoord(int ptIdInCell, int comp) const;
%newobject MEDCoupling::DenseMatrix::__mul__;
%newobject MEDCoupling::MEDCouplingGaussLocalization::localizePtsInRefCooForEachCell;
%newobject MEDCoupling::MEDCouplingGaussLocalization::buildRefCell;
+%newobject MEDCoupling::MEDCouplingGaussLocalization::getFunctionValues;
%newobject MEDCoupling::MEDCouplingSkyLineArray::BuildFromPolyhedronConn;
%newobject MEDCoupling::MEDCouplingSkyLineArray::getSuperIndexArray;
%newobject MEDCoupling::MEDCouplingSkyLineArray::getIndexArray;
MCAuto<MEDCouplingUMesh> ret(self->buildRefCell());
return ret.retn();
}
+
+ DataArrayDouble *getFunctionValues() const
+ {
+ MCAuto<DataArrayDouble> ret(self->getFunctionValues());
+ return ret.retn();
+ }
}
};