1 // Copyright (C) 2007-2012 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #ifndef __PARAMEDMEM_MEDCOUPLINGFIELDDISCRETIZATION_HXX__
21 #define __PARAMEDMEM_MEDCOUPLINGFIELDDISCRETIZATION_HXX__
23 #include "MEDCoupling.hxx"
24 #include "MEDCouplingRefCountObject.hxx"
25 #include "InterpKernelException.hxx"
26 #include "MEDCouplingTimeLabel.hxx"
27 #include "MEDCouplingNatureOfField.hxx"
28 #include "MEDCouplingGaussLocalization.hxx"
29 #include "MEDCouplingAutoRefCountObjectPtr.hxx"
36 class MEDCouplingMesh;
37 class DataArrayDouble;
38 class MEDCouplingFieldDouble;
40 class MEDCOUPLING_EXPORT MEDCouplingFieldDiscretization : public RefCountObject, public TimeLabel
43 static MEDCouplingFieldDiscretization *New(TypeOfField type);
44 double getPrecision() const { return _precision; }
45 void setPrecision(double val) { _precision=val; }
46 void updateTime() const;
47 static TypeOfField getTypeOfFieldFromStringRepr(const char *repr) throw(INTERP_KERNEL::Exception);
48 virtual TypeOfField getEnum() const = 0;
49 virtual bool isEqual(const MEDCouplingFieldDiscretization *other, double eps) const;
50 virtual bool isEqualIfNotWhy(const MEDCouplingFieldDiscretization *other, double eps, std::string& reason) const = 0;
51 virtual bool isEqualWithoutConsideringStr(const MEDCouplingFieldDiscretization *other, double eps) const;
52 virtual MEDCouplingFieldDiscretization *clone() const = 0;
53 virtual std::string getStringRepr() const = 0;
54 virtual const char *getRepr() const = 0;
55 virtual int getNumberOfTuples(const MEDCouplingMesh *mesh) const = 0;
56 virtual int getNumberOfMeshPlaces(const MEDCouplingMesh *mesh) const = 0;
57 virtual DataArrayInt *getOffsetArr(const MEDCouplingMesh *mesh) const = 0;
58 virtual void normL1(const MEDCouplingMesh *mesh, const DataArrayDouble *arr, double *res) const throw(INTERP_KERNEL::Exception);
59 virtual void normL2(const MEDCouplingMesh *mesh, const DataArrayDouble *arr, double *res) const throw(INTERP_KERNEL::Exception);
60 virtual void integral(const MEDCouplingMesh *mesh, const DataArrayDouble *arr, bool isWAbs, double *res) const throw(INTERP_KERNEL::Exception);
61 virtual DataArrayDouble *getLocalizationOfDiscValues(const MEDCouplingMesh *mesh) const = 0;
62 virtual void computeMeshRestrictionFromTupleIds(const MEDCouplingMesh *mesh, const int *partBg, const int *partEnd,
63 DataArrayInt *&cellRest) = 0;
64 virtual void checkCompatibilityWithNature(NatureOfField nat) const throw(INTERP_KERNEL::Exception) = 0;
65 virtual void renumberCells(const int *old2NewBg, bool check=true) throw(INTERP_KERNEL::Exception);
66 virtual void renumberArraysForCell(const MEDCouplingMesh *mesh, const std::vector<DataArrayDouble *>& arrays,
67 const int *old2NewBg, bool check) throw(INTERP_KERNEL::Exception) = 0;
68 virtual double getIJK(const MEDCouplingMesh *mesh, const DataArrayDouble *da, int cellId, int nodeIdInCell, int compoId) const throw(INTERP_KERNEL::Exception);
69 virtual void checkCoherencyBetween(const MEDCouplingMesh *mesh, const DataArrayDouble *da) const throw(INTERP_KERNEL::Exception) = 0;
70 virtual MEDCouplingFieldDouble *getMeasureField(const MEDCouplingMesh *mesh, bool isAbs) const = 0;
71 virtual void getValueOn(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, double *res) const = 0;
72 virtual void getValueOnPos(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, int i, int j, int k, double *res) const = 0;
73 virtual DataArrayDouble *getValueOnMulti(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, int nbOfPoints) const = 0;
74 virtual DataArrayInt *computeTupleIdsToSelectFromCellIds(const MEDCouplingMesh *mesh, const int *startCellIds, const int *endCellIds) const = 0;
75 virtual MEDCouplingMesh *buildSubMeshData(const MEDCouplingMesh *mesh, const int *start, const int *end, DataArrayInt *&di) const = 0;
76 virtual void renumberValuesOnNodes(double epsOnVals, const int *old2New, DataArrayDouble *arr) const = 0;
77 virtual void renumberValuesOnCells(double epsOnVals, const MEDCouplingMesh *mesh, const int *old2New, DataArrayDouble *arr) const = 0;
78 virtual void renumberValuesOnCellsR(const MEDCouplingMesh *mesh, const int *new2old, int newSz, DataArrayDouble *arr) const = 0;
79 virtual void getSerializationIntArray(DataArrayInt *& arr) const;
80 virtual void getTinySerializationIntInformation(std::vector<int>& tinyInfo) const;
81 virtual void getTinySerializationDbleInformation(std::vector<double>& tinyInfo) const;
82 virtual void finishUnserialization(const std::vector<double>& tinyInfo);
83 virtual void resizeForUnserialization(const std::vector<int>& tinyInfo, DataArrayInt *& arr);
84 virtual void setGaussLocalizationOnType(const MEDCouplingMesh *m, INTERP_KERNEL::NormalizedCellType type, const std::vector<double>& refCoo,
85 const std::vector<double>& gsCoo, const std::vector<double>& wg) throw(INTERP_KERNEL::Exception);
86 virtual void setGaussLocalizationOnCells(const MEDCouplingMesh *m, const int *begin, const int *end, const std::vector<double>& refCoo,
87 const std::vector<double>& gsCoo, const std::vector<double>& wg) throw(INTERP_KERNEL::Exception);
88 virtual void clearGaussLocalizations() throw(INTERP_KERNEL::Exception);
89 virtual MEDCouplingGaussLocalization& getGaussLocalization(int locId) throw(INTERP_KERNEL::Exception);
90 virtual int getNbOfGaussLocalization() const throw(INTERP_KERNEL::Exception);
91 virtual int getGaussLocalizationIdOfOneCell(int cellId) const throw(INTERP_KERNEL::Exception);
92 virtual int getGaussLocalizationIdOfOneType(INTERP_KERNEL::NormalizedCellType type) const throw(INTERP_KERNEL::Exception);
93 virtual void getCellIdsHavingGaussLocalization(int locId, std::vector<int>& cellIds) const throw(INTERP_KERNEL::Exception);
94 virtual const MEDCouplingGaussLocalization& getGaussLocalization(int locId) const throw(INTERP_KERNEL::Exception);
95 virtual ~MEDCouplingFieldDiscretization();
97 MEDCouplingFieldDiscretization();
98 static void renumberEntitiesFromO2NArr(double epsOnVals, const int *old2NewPtr, DataArrayDouble *arr, const char *msg);
99 static void renumberEntitiesFromN2OArr(const int *new2OldPtr, int new2OldSz, DataArrayDouble *arr, const char *msg);
102 static const double DFLT_PRECISION;
105 class MEDCOUPLING_EXPORT MEDCouplingFieldDiscretizationP0 : public MEDCouplingFieldDiscretization
108 TypeOfField getEnum() const;
109 MEDCouplingFieldDiscretization *clone() const;
110 std::string getStringRepr() const;
111 const char *getRepr() const;
112 bool isEqualIfNotWhy(const MEDCouplingFieldDiscretization *other, double eps, std::string& reason) const;
113 int getNumberOfTuples(const MEDCouplingMesh *mesh) const;
114 int getNumberOfMeshPlaces(const MEDCouplingMesh *mesh) const;
115 DataArrayInt *getOffsetArr(const MEDCouplingMesh *mesh) const;
116 void renumberArraysForCell(const MEDCouplingMesh *mesh, const std::vector<DataArrayDouble *>& arrays,
117 const int *old2NewBg, bool check) throw(INTERP_KERNEL::Exception);
118 DataArrayDouble *getLocalizationOfDiscValues(const MEDCouplingMesh *mesh) const;
119 void checkCompatibilityWithNature(NatureOfField nat) const throw(INTERP_KERNEL::Exception);
120 void computeMeshRestrictionFromTupleIds(const MEDCouplingMesh *mesh, const int *partBg, const int *partEnd,
121 DataArrayInt *&cellRest);
122 void checkCoherencyBetween(const MEDCouplingMesh *mesh, const DataArrayDouble *da) const throw(INTERP_KERNEL::Exception);
123 MEDCouplingFieldDouble *getMeasureField(const MEDCouplingMesh *mesh, bool isAbs) const;
124 void getValueOn(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, double *res) const;
125 void getValueOnPos(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, int i, int j, int k, double *res) const;
126 DataArrayDouble *getValueOnMulti(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, int nbOfPoints) const;
127 void renumberValuesOnNodes(double epsOnVals, const int *old2New, DataArrayDouble *arr) const;
128 void renumberValuesOnCells(double epsOnVals, const MEDCouplingMesh *mesh, const int *old2New, DataArrayDouble *arr) const;
129 void renumberValuesOnCellsR(const MEDCouplingMesh *mesh, const int *new2old, int newSz, DataArrayDouble *arr) const;
130 MEDCouplingMesh *buildSubMeshData(const MEDCouplingMesh *mesh, const int *start, const int *end, DataArrayInt *&di) const;
131 DataArrayInt *computeTupleIdsToSelectFromCellIds(const MEDCouplingMesh *mesh, const int *startCellIds, const int *endCellIds) const;
133 static const char REPR[];
134 static const TypeOfField TYPE;
137 class MEDCOUPLING_EXPORT MEDCouplingFieldDiscretizationOnNodes : public MEDCouplingFieldDiscretization
140 int getNumberOfTuples(const MEDCouplingMesh *mesh) const;
141 int getNumberOfMeshPlaces(const MEDCouplingMesh *mesh) const;
142 DataArrayInt *getOffsetArr(const MEDCouplingMesh *mesh) const;
143 void renumberArraysForCell(const MEDCouplingMesh *mesh, const std::vector<DataArrayDouble *>& arrays,
144 const int *old2NewBg, bool check) throw(INTERP_KERNEL::Exception);
145 DataArrayDouble *getLocalizationOfDiscValues(const MEDCouplingMesh *mesh) const;
146 void computeMeshRestrictionFromTupleIds(const MEDCouplingMesh *mesh, const int *partBg, const int *partEnd,
147 DataArrayInt *&cellRest);
148 void checkCoherencyBetween(const MEDCouplingMesh *mesh, const DataArrayDouble *da) const throw(INTERP_KERNEL::Exception);
149 MEDCouplingMesh *buildSubMeshData(const MEDCouplingMesh *mesh, const int *start, const int *end, DataArrayInt *&di) const;
150 DataArrayInt *computeTupleIdsToSelectFromCellIds(const MEDCouplingMesh *mesh, const int *startCellIds, const int *endCellIds) const;
151 void renumberValuesOnNodes(double epsOnVals, const int *old2New, DataArrayDouble *arr) const;
152 void renumberValuesOnCells(double epsOnVals, const MEDCouplingMesh *mesh, const int *old2New, DataArrayDouble *arr) const;
153 void renumberValuesOnCellsR(const MEDCouplingMesh *mesh, const int *new2old, int newSz, DataArrayDouble *arr) const;
155 void getValueOnPos(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, int i, int j, int k, double *res) const;
158 class MEDCOUPLING_EXPORT MEDCouplingFieldDiscretizationP1 : public MEDCouplingFieldDiscretizationOnNodes
161 TypeOfField getEnum() const;
162 MEDCouplingFieldDiscretization *clone() const;
163 std::string getStringRepr() const;
164 const char *getRepr() const;
165 void checkCompatibilityWithNature(NatureOfField nat) const throw(INTERP_KERNEL::Exception);
166 bool isEqualIfNotWhy(const MEDCouplingFieldDiscretization *other, double eps, std::string& reason) const;
167 MEDCouplingFieldDouble *getMeasureField(const MEDCouplingMesh *mesh, bool isAbs) const;
168 void getValueOn(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, double *res) const;
169 DataArrayDouble *getValueOnMulti(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, int nbOfPoints) const;
171 static const char REPR[];
172 static const TypeOfField TYPE;
174 void getValueInCell(const MEDCouplingMesh *mesh, int cellId, const DataArrayDouble *arr, const double *loc, double *res) const;
178 * This class abstracts MEDCouplingFieldDiscretization that needs an information on each cell to perform their job.
179 * All classes that inherits from this are more linked to mesh.
181 class MEDCOUPLING_EXPORT MEDCouplingFieldDiscretizationPerCell : public MEDCouplingFieldDiscretization
184 const DataArrayInt *getArrayOfDiscIds() const;
186 MEDCouplingFieldDiscretizationPerCell();
187 MEDCouplingFieldDiscretizationPerCell(const MEDCouplingFieldDiscretizationPerCell& other);
188 ~MEDCouplingFieldDiscretizationPerCell();
189 void updateTime() const;
190 void checkCoherencyBetween(const MEDCouplingMesh *mesh, const DataArrayDouble *da) const throw(INTERP_KERNEL::Exception);
191 bool isEqualIfNotWhy(const MEDCouplingFieldDiscretization *other, double eps, std::string& reason) const;
192 bool isEqualWithoutConsideringStr(const MEDCouplingFieldDiscretization *other, double eps) const;
193 void renumberCells(const int *old2NewBg, bool check) throw(INTERP_KERNEL::Exception);
194 void checkNoOrphanCells() const throw(INTERP_KERNEL::Exception);
196 void buildDiscrPerCellIfNecessary(const MEDCouplingMesh *m);
198 DataArrayInt *_discr_per_cell;
199 static const int DFT_INVALID_LOCID_VALUE;
202 class MEDCOUPLING_EXPORT MEDCouplingFieldDiscretizationGauss : public MEDCouplingFieldDiscretizationPerCell
205 MEDCouplingFieldDiscretizationGauss();
206 TypeOfField getEnum() const;
207 bool isEqualIfNotWhy(const MEDCouplingFieldDiscretization *other, double eps, std::string& reason) const;
208 bool isEqualWithoutConsideringStr(const MEDCouplingFieldDiscretization *other, double eps) const;
209 MEDCouplingFieldDiscretization *clone() const;
210 std::string getStringRepr() const;
211 const char *getRepr() const;
212 int getNumberOfTuples(const MEDCouplingMesh *mesh) const;
213 int getNumberOfMeshPlaces(const MEDCouplingMesh *mesh) const;
214 DataArrayInt *getOffsetArr(const MEDCouplingMesh *mesh) const;
215 void renumberArraysForCell(const MEDCouplingMesh *mesh, const std::vector<DataArrayDouble *>& arrays,
216 const int *old2NewBg, bool check) throw(INTERP_KERNEL::Exception);
217 DataArrayDouble *getLocalizationOfDiscValues(const MEDCouplingMesh *mesh) const;
218 void computeMeshRestrictionFromTupleIds(const MEDCouplingMesh *mesh, const int *partBg, const int *partEnd,
219 DataArrayInt *&cellRest);
220 void checkCompatibilityWithNature(NatureOfField nat) const throw(INTERP_KERNEL::Exception);
221 void getTinySerializationIntInformation(std::vector<int>& tinyInfo) const;
222 void getTinySerializationDbleInformation(std::vector<double>& tinyInfo) const;
223 void finishUnserialization(const std::vector<double>& tinyInfo);
224 void getSerializationIntArray(DataArrayInt *& arr) const;
225 void resizeForUnserialization(const std::vector<int>& tinyInfo, DataArrayInt *& arr);
226 double getIJK(const MEDCouplingMesh *mesh, const DataArrayDouble *da, int cellId, int nodeIdInCell, int compoId) const throw(INTERP_KERNEL::Exception);
227 void checkCoherencyBetween(const MEDCouplingMesh *mesh, const DataArrayDouble *da) const throw(INTERP_KERNEL::Exception);
228 MEDCouplingFieldDouble *getMeasureField(const MEDCouplingMesh *mesh, bool isAbs) const;
229 void getValueOn(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, double *res) const;
230 void getValueOnPos(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, int i, int j, int k, double *res) const;
231 DataArrayDouble *getValueOnMulti(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, int nbOfPoints) const;
232 MEDCouplingMesh *buildSubMeshData(const MEDCouplingMesh *mesh, const int *start, const int *end, DataArrayInt *&di) const;
233 DataArrayInt *computeTupleIdsToSelectFromCellIds(const MEDCouplingMesh *mesh, const int *startCellIds, const int *endCellIds) const;
234 void renumberValuesOnNodes(double epsOnVals, const int *old2New, DataArrayDouble *arr) const;
235 void renumberValuesOnCells(double epsOnVals, const MEDCouplingMesh *mesh, const int *old2New, DataArrayDouble *arr) const;
236 void renumberValuesOnCellsR(const MEDCouplingMesh *mesh, const int *new2old, int newSz, DataArrayDouble *arr) const;
237 void setGaussLocalizationOnType(const MEDCouplingMesh *m, INTERP_KERNEL::NormalizedCellType type, const std::vector<double>& refCoo,
238 const std::vector<double>& gsCoo, const std::vector<double>& wg) throw(INTERP_KERNEL::Exception);
239 void setGaussLocalizationOnCells(const MEDCouplingMesh *m, const int *begin, const int *end, const std::vector<double>& refCoo,
240 const std::vector<double>& gsCoo, const std::vector<double>& wg) throw(INTERP_KERNEL::Exception);
241 void clearGaussLocalizations() throw(INTERP_KERNEL::Exception);
242 MEDCouplingGaussLocalization& getGaussLocalization(int locId) throw(INTERP_KERNEL::Exception);
243 int getNbOfGaussLocalization() const throw(INTERP_KERNEL::Exception);
244 int getGaussLocalizationIdOfOneCell(int cellId) const throw(INTERP_KERNEL::Exception);
245 int getGaussLocalizationIdOfOneType(INTERP_KERNEL::NormalizedCellType type) const throw(INTERP_KERNEL::Exception);
246 void getCellIdsHavingGaussLocalization(int locId, std::vector<int>& cellIds) const throw(INTERP_KERNEL::Exception);
247 const MEDCouplingGaussLocalization& getGaussLocalization(int locId) const throw(INTERP_KERNEL::Exception);
248 std::vector<DataArrayInt *> splitIntoSingleGaussDicrPerCellType(std::vector< std::vector<int> >& locIds) const throw(INTERP_KERNEL::Exception);
249 DataArrayInt *buildNbOfGaussPointPerCellField() const throw(INTERP_KERNEL::Exception);
251 MEDCouplingFieldDiscretizationGauss(const MEDCouplingFieldDiscretizationGauss& other);
252 void zipGaussLocalizations();
253 int getOffsetOfCell(int cellId) const throw(INTERP_KERNEL::Exception);
254 void checkLocalizationId(int locId) const throw(INTERP_KERNEL::Exception);
256 static const char REPR[];
257 static const TypeOfField TYPE;
259 std::vector<MEDCouplingGaussLocalization> _loc;
263 * Gauss with points of values located on nodes of element. This is a specialization of MEDCouplingFieldDiscretizationGauss.
265 class MEDCOUPLING_EXPORT MEDCouplingFieldDiscretizationGaussNE : public MEDCouplingFieldDiscretization
268 MEDCouplingFieldDiscretizationGaussNE();
269 TypeOfField getEnum() const;
270 MEDCouplingFieldDiscretization *clone() const;
271 std::string getStringRepr() const;
272 const char *getRepr() const;
273 bool isEqualIfNotWhy(const MEDCouplingFieldDiscretization *other, double eps, std::string& reason) const;
274 int getNumberOfTuples(const MEDCouplingMesh *mesh) const;
275 int getNumberOfMeshPlaces(const MEDCouplingMesh *mesh) const;
276 DataArrayInt *getOffsetArr(const MEDCouplingMesh *mesh) const;
277 void renumberArraysForCell(const MEDCouplingMesh *mesh, const std::vector<DataArrayDouble *>& arrays,
278 const int *old2NewBg, bool check) throw(INTERP_KERNEL::Exception);
279 DataArrayDouble *getLocalizationOfDiscValues(const MEDCouplingMesh *mesh) const;
280 void computeMeshRestrictionFromTupleIds(const MEDCouplingMesh *mesh, const int *partBg, const int *partEnd,
281 DataArrayInt *&cellRest);
282 void checkCompatibilityWithNature(NatureOfField nat) const throw(INTERP_KERNEL::Exception);
283 double getIJK(const MEDCouplingMesh *mesh, const DataArrayDouble *da, int cellId, int nodeIdInCell, int compoId) const throw(INTERP_KERNEL::Exception);
284 void checkCoherencyBetween(const MEDCouplingMesh *mesh, const DataArrayDouble *da) const throw(INTERP_KERNEL::Exception);
285 MEDCouplingFieldDouble *getMeasureField(const MEDCouplingMesh *mesh, bool isAbs) const;
286 void getValueOn(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, double *res) const;
287 void getValueOnPos(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, int i, int j, int k, double *res) const;
288 DataArrayDouble *getValueOnMulti(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, int nbOfPoints) const;
289 MEDCouplingMesh *buildSubMeshData(const MEDCouplingMesh *mesh, const int *start, const int *end, DataArrayInt *&di) const;
290 DataArrayInt *computeTupleIdsToSelectFromCellIds(const MEDCouplingMesh *mesh, const int *startCellIds, const int *endCellIds) const;
291 void renumberValuesOnNodes(double epsOnVals, const int *old2New, DataArrayDouble *arr) const;
292 void renumberValuesOnCells(double epsOnVals, const MEDCouplingMesh *mesh, const int *old2New, DataArrayDouble *arr) const;
293 void renumberValuesOnCellsR(const MEDCouplingMesh *mesh, const int *new2old, int newSz, DataArrayDouble *arr) const;
295 MEDCouplingFieldDiscretizationGaussNE(const MEDCouplingFieldDiscretizationGaussNE& other);
297 static const char REPR[];
298 static const TypeOfField TYPE;
301 class MEDCOUPLING_EXPORT MEDCouplingFieldDiscretizationKriging : public MEDCouplingFieldDiscretizationOnNodes
304 TypeOfField getEnum() const;
305 const char *getRepr() const;
306 MEDCouplingFieldDiscretization *clone() const;
307 std::string getStringRepr() const;
308 void checkCompatibilityWithNature(NatureOfField nat) const throw(INTERP_KERNEL::Exception);
309 bool isEqualIfNotWhy(const MEDCouplingFieldDiscretization *other, double eps, std::string& reason) const;
310 MEDCouplingFieldDouble *getMeasureField(const MEDCouplingMesh *mesh, bool isAbs) const;
311 void getValueOn(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, double *res) const;
312 DataArrayDouble *getValueOnMulti(const DataArrayDouble *arr, const MEDCouplingMesh *mesh, const double *loc, int nbOfPoints) const;
313 public://specific part
314 DataArrayDouble *computeVectorOfCoefficients(const MEDCouplingMesh *mesh, const DataArrayDouble *arr, int& isDrift) const;
316 void operateOnDenseMatrix(int spaceDimension, int nbOfElems, double *matrixPtr) const;
317 DataArrayDouble *performDrift(const DataArrayDouble *matr, const DataArrayDouble *arr, int& delta) const;
319 static const char REPR[];
320 static const TypeOfField TYPE;