]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
A small useful method for Gauss points
authorAnthony Geay <anthony.geay@edf.fr>
Fri, 27 Jan 2017 13:33:56 +0000 (14:33 +0100)
committerAnthony Geay <anthony.geay@edf.fr>
Fri, 27 Jan 2017 13:33:56 +0000 (14:33 +0100)
src/MEDCoupling/MEDCouplingGaussLocalization.cxx
src/MEDCoupling/MEDCouplingGaussLocalization.hxx
src/MEDCoupling_Swig/MEDCouplingCommon.i

index c1919217cdb75bd1c3d7f1dce05feea63c82d198..f75cd82a80e61de94c60df6d950168d448fd9ea2 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "MEDCouplingGaussLocalization.hxx"
 #include "InterpKernelGaussCoords.hxx"
+#include "MEDCoupling1GTUMesh.hxx"
 #include "MEDCouplingUMesh.hxx"
 #include "CellModel.hxx"
 
@@ -232,6 +233,26 @@ MCAuto<DataArrayDouble> MEDCouplingGaussLocalization::localizePtsInRefCooForEach
   return ret;
 }
 
+/*!
+ * This method returns an unstructured mesh that represents the reference cell.
+ */
+MCAuto<MEDCouplingUMesh> MEDCouplingGaussLocalization::buildRefCell() const
+{
+  MCAuto<DataArrayDouble> coo(DataArrayDouble::New());
+  const INTERP_KERNEL::CellModel& cm(INTERP_KERNEL::CellModel::GetCellModel(getType()));
+  if(getDimension()!=cm.getDimension())
+    throw INTERP_KERNEL::Exception("BuildRefCell : dimension mistmatch !");
+  coo->alloc(cm.getNumberOfNodes(),getDimension());
+  std::copy(_ref_coord.begin(),_ref_coord.end(),coo->getPointer());
+  MCAuto<MEDCoupling1SGTUMesh> ret(MEDCoupling1SGTUMesh::New("",getType()));
+  ret->setCoords(coo);
+  MCAuto<DataArrayInt> conn(DataArrayInt::New());
+  conn->alloc(cm.getNumberOfNodes(),1);
+  conn->iota();
+  ret->setNodalConnectivity(conn);
+  return MCAuto<MEDCouplingUMesh>(ret->buildUnstructured());
+}
+
 /*!
  * 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
index 344683e1f1a70afda766872cdc8e707712b05425..feea93284a218e51adadd8b98f14f2df474c3652 100644 (file)
@@ -53,6 +53,7 @@ namespace MEDCoupling
     MEDCOUPLING_EXPORT const double *fillWithValues(const double *vals);
     //
     MEDCOUPLING_EXPORT MCAuto<DataArrayDouble> localizePtsInRefCooForEachCell(const DataArrayDouble *ptsInRefCoo, const MEDCouplingUMesh *mesh) const;
+    MEDCOUPLING_EXPORT MCAuto<MEDCouplingUMesh> buildRefCell() const;
     //
     MEDCOUPLING_EXPORT const std::vector<double>& getRefCoords() const { return _ref_coord; }
     MEDCOUPLING_EXPORT double getRefCoord(int ptIdInCell, int comp) const;
index 14a4510e5c76da6f58cf41540ef59373eb9df440..d4ad976775e12d5406a00be171f227a2dbcf3cc1 100644 (file)
@@ -411,6 +411,8 @@ using namespace INTERP_KERNEL;
 %newobject MEDCoupling::PartDefinition::tryToSimplify;
 %newobject MEDCoupling::DataArrayPartDefinition::New;
 %newobject MEDCoupling::SlicePartDefinition::New;
+%newobject MEDCoupling::MEDCouplingGaussLocalization::localizePtsInRefCooForEachCell;
+%newobject MEDCoupling::MEDCouplingGaussLocalization::buildRefCell;
 
 %feature("unref") MEDCouplingPointSet "$this->decrRef();"
 %feature("unref") MEDCouplingMesh "$this->decrRef();"
@@ -1161,6 +1163,21 @@ namespace MEDCoupling
     void setWeights(const std::vector<double>& w) throw(INTERP_KERNEL::Exception);
     //
     static bool AreAlmostEqual(const std::vector<double>& v1, const std::vector<double>& v2, double eps);
+    //
+    %extend 
+    {
+      DataArrayDouble *localizePtsInRefCooForEachCell(const DataArrayDouble *ptsInRefCoo, const MEDCouplingUMesh *mesh) const throw(INTERP_KERNEL::Exception)
+      {
+        MCAuto<DataArrayDouble> ret(self->localizePtsInRefCooForEachCell(ptsInRefCoo,mesh));
+        return ret.retn();
+      }
+
+      MEDCouplingUMesh *buildRefCell() const throw(INTERP_KERNEL::Exception)
+      {
+        MCAuto<MEDCouplingUMesh> ret(self->buildRefCell());
+        return ret.retn();
+      }
+    }
   };
 
   class MEDCouplingSkyLineArray