1 // Copyright (C) 2007-2022 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, or (at your option) any later version.
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
19 // Author : Anthony Geay (CEA/DEN)
21 #ifndef __MEDCOUPLINGTIMEDISCRETIZATION_HXX__
22 #define __MEDCOUPLINGTIMEDISCRETIZATION_HXX__
24 #include "MEDCoupling.hxx"
25 #include "MEDCouplingTimeLabel.hxx"
26 #include "MEDCouplingRefCountObject.hxx"
27 #include "InterpKernelException.hxx"
28 #include "MEDCouplingTraits.hxx"
34 class MEDCouplingMesh;
35 class DataArrayDouble;
41 MEDCOUPLING_EXPORT std::string getTimeUnit() const { return _time_unit; }
42 MEDCOUPLING_EXPORT void setTimeUnit(const std::string& unit) { _time_unit=unit; }
43 MEDCOUPLING_EXPORT double getTime(int& iteration, int& order) const { return getStartTime(iteration,order); }
44 MEDCOUPLING_EXPORT virtual double getStartTime(int& iteration, int& order) const = 0;
45 void copyTinyAttrFrom(const TimeHolder& other) { _time_unit=other._time_unit; }
48 TimeHolder(const TimeHolder& other):_time_unit(other._time_unit) { }
49 virtual ~TimeHolder() { }
51 std::string _time_unit;
55 class MEDCouplingTimeDiscretizationTemplate : public TimeLabel, public BigMemoryObject, public TimeHolder
58 MEDCOUPLING_EXPORT void updateTime() const;
59 MEDCOUPLING_EXPORT virtual void setArray(typename Traits<T>::ArrayType *array, TimeLabel *owner);
60 MEDCOUPLING_EXPORT typename Traits<T>::ArrayType *getArray() { return _array; }
61 MEDCOUPLING_EXPORT const typename Traits<T>::ArrayType *getArray() const { return _array; }
62 MEDCOUPLING_EXPORT void setTimeTolerance(double val) { _time_tolerance=val; }
63 MEDCOUPLING_EXPORT double getTimeTolerance() const { return _time_tolerance; }
64 MEDCOUPLING_EXPORT void setTime(double time, int iteration, int order) { setStartTime(time,iteration,order); }
65 MEDCOUPLING_EXPORT void setIteration(int it) { setStartIteration(it); }
66 MEDCOUPLING_EXPORT void setOrder(int order) { setStartOrder(order); }
67 MEDCOUPLING_EXPORT void setTimeValue(double val) { setStartTimeValue(val); }
68 MEDCOUPLING_EXPORT virtual void setStartIteration(int it) = 0;
69 MEDCOUPLING_EXPORT virtual void setStartOrder(int order) = 0;
70 MEDCOUPLING_EXPORT virtual void setStartTime(double time, int iteration, int order) = 0;
71 MEDCOUPLING_EXPORT virtual void setStartTimeValue(double time) = 0;
72 MEDCOUPLING_EXPORT virtual double getEndTime(int& iteration, int& order) const = 0;
73 MEDCOUPLING_EXPORT virtual void setEndIteration(int it) = 0;
74 MEDCOUPLING_EXPORT virtual void setEndOrder(int order) = 0;
75 MEDCOUPLING_EXPORT virtual void setEndTimeValue(double time) = 0;
76 MEDCOUPLING_EXPORT virtual void setEndTime(double time, int iteration, int order) = 0;
78 MEDCOUPLING_EXPORT virtual void setEndArray(typename Traits<T>::ArrayType *array, TimeLabel *owner);
79 MEDCOUPLING_EXPORT virtual void setArrays(const std::vector< typename Traits<T>::ArrayType *>& arrays, TimeLabel *owner);
80 MEDCOUPLING_EXPORT virtual const typename Traits<T>::ArrayType *getEndArray() const;
81 MEDCOUPLING_EXPORT virtual typename Traits<T>::ArrayType *getEndArray();
82 MEDCOUPLING_EXPORT virtual void getArrays(std::vector<typename Traits<T>::ArrayType *>& arrays) const;
84 MEDCOUPLING_EXPORT virtual std::string getStringRepr() const = 0;
85 MEDCOUPLING_EXPORT virtual TypeOfTimeDiscretization getEnum() const = 0;
86 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretizationTemplate<T> *performCopyOrIncrRef(bool deepCopy) const = 0;
88 MEDCOUPLING_EXPORT virtual void copyTinyAttrFrom(const MEDCouplingTimeDiscretizationTemplate<T>& other);
89 MEDCOUPLING_EXPORT virtual void copyTinyStringsFrom(const MEDCouplingTimeDiscretizationTemplate<T>& other);
90 MEDCOUPLING_EXPORT virtual void checkConsistencyLight() const;
91 MEDCOUPLING_EXPORT virtual std::size_t getHeapMemorySizeWithoutChildren() const;
92 MEDCOUPLING_EXPORT virtual std::vector<const BigMemoryObject *> getDirectChildrenWithNull() const;
94 MEDCOUPLING_EXPORT virtual bool isEqualIfNotWhy(const MEDCouplingTimeDiscretizationTemplate<T> *other, T prec, std::string& reason) const = 0;
95 MEDCOUPLING_EXPORT virtual bool isEqualWithoutConsideringStr(const MEDCouplingTimeDiscretizationTemplate<T> *other, T prec) const = 0;
97 MEDCOUPLING_EXPORT virtual bool areStrictlyCompatible(const MEDCouplingTimeDiscretizationTemplate<T> *other, std::string& reason) const;
98 MEDCOUPLING_EXPORT virtual bool areCompatible(const MEDCouplingTimeDiscretizationTemplate<T> *other) const;
99 MEDCOUPLING_EXPORT virtual bool areStrictlyCompatibleForMul(const MEDCouplingTimeDiscretizationTemplate<T> *other) const;
100 MEDCOUPLING_EXPORT virtual bool areStrictlyCompatibleForDiv(const MEDCouplingTimeDiscretizationTemplate<T> *other) const;
101 MEDCOUPLING_EXPORT virtual ~MEDCouplingTimeDiscretizationTemplate();
102 MEDCOUPLING_EXPORT virtual void getTinySerializationIntInformation(std::vector<mcIdType>& tinyInfo) const;
103 MEDCOUPLING_EXPORT virtual void getTinySerializationDbleInformation(std::vector<double>& tinyInfo) const;
104 MEDCOUPLING_EXPORT virtual void getTinySerializationStrInformation(std::vector<std::string>& tinyInfo) const;
105 MEDCOUPLING_EXPORT virtual void resizeForUnserialization(const std::vector<mcIdType>& tinyInfoI, std::vector<typename Traits<T>::ArrayType *>& arrays);
106 MEDCOUPLING_EXPORT virtual void checkForUnserialization(const std::vector<mcIdType>& tinyInfoI, const std::vector<typename Traits<T>::ArrayType *>& arrays);
107 MEDCOUPLING_EXPORT virtual void finishUnserialization(const std::vector<mcIdType>& tinyInfoI, const std::vector<double>& tinyInfoD, const std::vector<std::string>& tinyInfoS);
109 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretizationTemplate();
110 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretizationTemplate(const MEDCouplingTimeDiscretizationTemplate<T>& other, bool deepCopy);
112 double _time_tolerance;
113 typename Traits<T>::ArrayType *_array;
115 static const double TIME_TOLERANCE_DFT;
118 class MEDCouplingTimeKeeper
121 MEDCOUPLING_EXPORT MEDCouplingTimeKeeper():_time(0.),_iteration(-1),_order(-1) { }
122 MEDCOUPLING_EXPORT double getAllInfo(int& iteration, int& order) const { iteration=_iteration; order=_order; return _time; }
123 MEDCOUPLING_EXPORT void setAllInfo(double time, int iteration, int order) { _time=time; _iteration=iteration; _order=order; }
124 MEDCOUPLING_EXPORT int getIteration() const { return _iteration; }
125 MEDCOUPLING_EXPORT void setIteration(int it) { _iteration=it; }
126 MEDCOUPLING_EXPORT int getOrder() const { return _order; }
127 MEDCOUPLING_EXPORT void setOrder(int order) { _order=order; }
128 MEDCOUPLING_EXPORT double getTimeValue() const { return _time; }
129 MEDCOUPLING_EXPORT void setTimeValue(double time) { _time=time; }
130 MEDCOUPLING_EXPORT bool isEqualIfNotWhy(const MEDCouplingTimeKeeper& other, double prec, std::string& reason) const;
131 MEDCOUPLING_EXPORT bool isEqual(const MEDCouplingTimeKeeper& other, double prec) const;
132 MEDCOUPLING_EXPORT void copyFrom(const MEDCouplingTimeKeeper& other);
133 MEDCOUPLING_EXPORT void checkTimePresence(double time, double eps) const;
140 class MEDCouplingTimeDiscretization : public MEDCouplingTimeDiscretizationTemplate<double>
143 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization() { }
144 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization(const MEDCouplingTimeDiscretization& other, bool deepCopy):MEDCouplingTimeDiscretizationTemplate<double>(other,deepCopy) { }
146 MEDCOUPLING_EXPORT static MEDCouplingTimeDiscretization *New(TypeOfTimeDiscretization type);
147 MEDCOUPLING_EXPORT virtual bool areCompatibleForMeld(const MEDCouplingTimeDiscretization *other) const;
148 MEDCOUPLING_EXPORT virtual bool isEqualWithoutConsideringStr(const MEDCouplingTimeDiscretizationTemplate<double> *other, double prec) const;
149 MEDCOUPLING_EXPORT virtual bool isEqualIfNotWhy(const MEDCouplingTimeDiscretizationTemplate<double> *other, double prec, std::string& reason) const;
150 MEDCOUPLING_EXPORT virtual bool isEqual(const MEDCouplingTimeDiscretization *other, double prec) const;
151 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *buildNewTimeReprFromThis(TypeOfTimeDiscretization type, bool deepCopy) const;
152 MEDCOUPLING_EXPORT virtual void synchronizeTimeWith(const MEDCouplingMesh *mesh) = 0;
153 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *aggregate(const MEDCouplingTimeDiscretization *other) const = 0;
154 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *aggregate(const std::vector<const MEDCouplingTimeDiscretization *>& other) const = 0;
155 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *meld(const MEDCouplingTimeDiscretization *other) const = 0;
156 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *dot(const MEDCouplingTimeDiscretization *other) const = 0;
157 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *crossProduct(const MEDCouplingTimeDiscretization *other) const = 0;
158 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *max(const MEDCouplingTimeDiscretization *other) const = 0;
159 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *min(const MEDCouplingTimeDiscretization *other) const = 0;
160 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *add(const MEDCouplingTimeDiscretization *other) const = 0;
161 MEDCOUPLING_EXPORT virtual void addEqual(const MEDCouplingTimeDiscretization *other) = 0;
162 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *substract(const MEDCouplingTimeDiscretization *other) const = 0;
163 MEDCOUPLING_EXPORT virtual void substractEqual(const MEDCouplingTimeDiscretization *other) = 0;
164 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *multiply(const MEDCouplingTimeDiscretization *other) const = 0;
165 MEDCOUPLING_EXPORT virtual void multiplyEqual(const MEDCouplingTimeDiscretization *other) = 0;
166 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *divide(const MEDCouplingTimeDiscretization *other) const = 0;
167 MEDCOUPLING_EXPORT virtual void divideEqual(const MEDCouplingTimeDiscretization *other) = 0;
168 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *pow(const MEDCouplingTimeDiscretization *other) const = 0;
169 MEDCOUPLING_EXPORT virtual void powEqual(const MEDCouplingTimeDiscretization *other) = 0;
170 MEDCOUPLING_EXPORT virtual void getTinySerializationIntInformation2(std::vector<mcIdType>& tinyInfo) const = 0;
171 MEDCOUPLING_EXPORT virtual void getTinySerializationDbleInformation2(std::vector<double>& tinyInfo) const = 0;
172 MEDCOUPLING_EXPORT virtual void finishUnserialization2(const std::vector<mcIdType>& tinyInfoI, const std::vector<double>& tinyInfoD) = 0;
173 MEDCOUPLING_EXPORT virtual void checkNoTimePresence() const = 0;
174 MEDCOUPLING_EXPORT virtual void checkTimePresence(double time) const = 0;
175 MEDCOUPLING_EXPORT virtual std::vector< const DataArrayDouble *> getArraysForTime(double time) const = 0;
176 MEDCOUPLING_EXPORT virtual void getValueForTime(double time, const std::vector<double>& vals, double *res) const = 0;
177 MEDCOUPLING_EXPORT virtual bool isBefore(const MEDCouplingTimeDiscretization *other) const;
178 MEDCOUPLING_EXPORT virtual bool isStrictlyBefore(const MEDCouplingTimeDiscretization *other) const;
179 MEDCOUPLING_EXPORT virtual void getValueOnTime(mcIdType eltId, double time, double *value) const = 0;
180 MEDCOUPLING_EXPORT virtual void getValueOnDiscTime(mcIdType eltId, int iteration, int order, double *value) const = 0;
182 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *computeVectorFieldCyl(const DataArrayDouble *coords, const double center[3], const double vect[3]) const;
183 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *doublyContractedProduct() const;
184 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *determinant() const;
185 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *eigenValues() const;
186 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *eigenVectors() const;
187 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *inverse() const;
188 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *trace() const;
189 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *deviator() const;
190 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *magnitude() const;
191 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *negate() const;
192 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *maxPerTuple() const;
193 MEDCOUPLING_EXPORT virtual MEDCouplingTimeDiscretization *keepSelectedComponents(const std::vector<std::size_t>& compoIds) const;
194 MEDCOUPLING_EXPORT virtual void setSelectedComponents(const MEDCouplingTimeDiscretization *other, const std::vector<std::size_t>& compoIds);
195 MEDCOUPLING_EXPORT virtual void changeNbOfComponents(std::size_t newNbOfComp, double dftValue);
196 MEDCOUPLING_EXPORT virtual void sortPerTuple(bool asc);
197 MEDCOUPLING_EXPORT virtual void setUniformValue(mcIdType nbOfTuple, int nbOfCompo, double value);
198 MEDCOUPLING_EXPORT virtual void setOrCreateUniformValueOnAllComponents(mcIdType nbOfTuple, double value);
199 MEDCOUPLING_EXPORT virtual void applyLin(double a, double b, int compoId);
200 MEDCOUPLING_EXPORT virtual void applyLin(double a, double b);
201 MEDCOUPLING_EXPORT virtual void applyFunc(int nbOfComp, FunctionToEvaluate func);
202 MEDCOUPLING_EXPORT virtual void applyFunc(int nbOfComp, const std::string& func);
203 MEDCOUPLING_EXPORT virtual void applyFuncCompo(int nbOfComp, const std::string& func);
204 MEDCOUPLING_EXPORT virtual void applyFuncNamedCompo(int nbOfComp, const std::vector<std::string>& varsOrder, const std::string& func);
205 MEDCOUPLING_EXPORT virtual void applyFunc(const std::string& func);
206 MEDCOUPLING_EXPORT virtual void applyFuncFast32(const std::string& func);
207 MEDCOUPLING_EXPORT virtual void applyFuncFast64(const std::string& func);
208 MEDCOUPLING_EXPORT virtual void fillFromAnalytic(const DataArrayDouble *loc, int nbOfComp, FunctionToEvaluate func);
209 MEDCOUPLING_EXPORT virtual void fillFromAnalytic(const DataArrayDouble *loc, int nbOfComp, const std::string& func);
210 MEDCOUPLING_EXPORT virtual void fillFromAnalyticCompo(const DataArrayDouble *loc, int nbOfComp, const std::string& func);
211 MEDCOUPLING_EXPORT virtual void fillFromAnalyticNamedCompo(const DataArrayDouble *loc, int nbOfComp, const std::vector<std::string>& varsOrder, const std::string& func);
215 class MEDCouplingTimeDiscretizationSimple : public MEDCouplingTimeDiscretizationTemplate<T>
218 std::string getStringRepr() const;
219 double getStartTime(int& iteration, int& order) const { return _tk.getAllInfo(iteration,order); }
220 void setStartIteration(int it) { _tk.setIteration(it); }
221 void setStartOrder(int order) { _tk.setOrder(order); }
222 void setStartTimeValue(double time) { _tk.setTimeValue(time); }
223 void setStartTime(double time, int iteration, int order) { _tk.setAllInfo(time,iteration,order); }
224 double getEndTime(int& iteration, int& order) const;
225 void setEndIteration(int it);
226 void setEndOrder(int order);
227 void setEndTimeValue(double time);
228 void setEndTime(double time, int iteration, int order);
229 TypeOfTimeDiscretization getEnum() const { return DISCRETIZATION; }
231 MEDCouplingTimeDiscretizationSimple(const MEDCouplingTimeDiscretizationSimple<T>& other, bool deepCopy);
232 MEDCouplingTimeDiscretizationSimple() { }
234 MEDCouplingTimeKeeper _tk;
236 MEDCOUPLING_EXPORT static const char REPR[];
238 static const TypeOfTimeDiscretization DISCRETIZATION=ONE_TIME;
241 class MEDCouplingTimeDiscretizationInt32 : public MEDCouplingTimeDiscretizationSimple<Int32>
244 MEDCouplingTimeDiscretizationInt32() { }
245 std::string getClassName() const override { return std::string("MEDCouplingTimeDiscretizationInt32"); }
246 MEDCouplingTimeDiscretizationInt32(const MEDCouplingTimeDiscretizationInt32& other, bool deepCopy);
247 static MEDCouplingTimeDiscretizationInt32 *New(TypeOfTimeDiscretization type);
248 MEDCouplingTimeDiscretizationInt32 *performCopyOrIncrRef(bool deepCopy) const;
249 bool isEqualIfNotWhy(const MEDCouplingTimeDiscretizationTemplate<Int32> *other, Int32 prec, std::string& reason) const;
250 bool isEqualWithoutConsideringStr(const MEDCouplingTimeDiscretizationTemplate<Int32> *other, Int32 prec) const;
253 class MEDCouplingTimeDiscretizationInt64 : public MEDCouplingTimeDiscretizationSimple<Int64>
256 MEDCouplingTimeDiscretizationInt64() { }
257 std::string getClassName() const override { return std::string("MEDCouplingTimeDiscretizationInt64"); }
258 MEDCouplingTimeDiscretizationInt64(const MEDCouplingTimeDiscretizationInt64& other, bool deepCopy);
259 static MEDCouplingTimeDiscretizationInt64 *New(TypeOfTimeDiscretization type);
260 MEDCouplingTimeDiscretizationInt64 *performCopyOrIncrRef(bool deepCopy) const;
261 bool isEqualIfNotWhy(const MEDCouplingTimeDiscretizationTemplate<Int64> *other, Int64 prec, std::string& reason) const override;
262 bool isEqualWithoutConsideringStr(const MEDCouplingTimeDiscretizationTemplate<Int64> *other, Int64 prec) const override;
265 class MEDCouplingTimeDiscretizationFloat : public MEDCouplingTimeDiscretizationSimple<float>
268 MEDCouplingTimeDiscretizationFloat() { }
269 std::string getClassName() const override { return std::string("MEDCouplingTimeDiscretizationFloat"); }
270 MEDCouplingTimeDiscretizationFloat(const MEDCouplingTimeDiscretizationFloat& other, bool deepCopy);
271 static MEDCouplingTimeDiscretizationFloat *New(TypeOfTimeDiscretization type);
272 MEDCouplingTimeDiscretizationFloat *performCopyOrIncrRef(bool deepCopy) const;
273 bool isEqualIfNotWhy(const MEDCouplingTimeDiscretizationTemplate<float> *other, float prec, std::string& reason) const;
274 bool isEqualWithoutConsideringStr(const MEDCouplingTimeDiscretizationTemplate<float> *other, float prec) const;
276 static const TypeOfTimeDiscretization DISCRETIZATION=ONE_TIME;
279 class MEDCouplingNoTimeLabel : public MEDCouplingTimeDiscretization
282 MEDCOUPLING_EXPORT MEDCouplingNoTimeLabel();
283 MEDCOUPLING_EXPORT MEDCouplingNoTimeLabel(const MEDCouplingTimeDiscretization& other, bool deepCopy);
284 MEDCOUPLING_EXPORT std::string getStringRepr() const;
285 MEDCOUPLING_EXPORT std::string getClassName() const override { return std::string("MEDCouplingNoTimeLabel"); }
286 MEDCOUPLING_EXPORT TypeOfTimeDiscretization getEnum() const { return DISCRETIZATION; }
287 MEDCOUPLING_EXPORT void synchronizeTimeWith(const MEDCouplingMesh *mesh);
288 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *aggregate(const MEDCouplingTimeDiscretization *other) const;
289 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *aggregate(const std::vector<const MEDCouplingTimeDiscretization *>& other) const;
290 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *meld(const MEDCouplingTimeDiscretization *other) const;
291 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *dot(const MEDCouplingTimeDiscretization *other) const;
292 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *crossProduct(const MEDCouplingTimeDiscretization *other) const;
293 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *max(const MEDCouplingTimeDiscretization *other) const;
294 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *min(const MEDCouplingTimeDiscretization *other) const;
295 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *add(const MEDCouplingTimeDiscretization *other) const;
296 MEDCOUPLING_EXPORT void addEqual(const MEDCouplingTimeDiscretization *other);
297 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *substract(const MEDCouplingTimeDiscretization *other) const;
298 MEDCOUPLING_EXPORT void substractEqual(const MEDCouplingTimeDiscretization *other);
299 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *multiply(const MEDCouplingTimeDiscretization *other) const;
300 MEDCOUPLING_EXPORT void multiplyEqual(const MEDCouplingTimeDiscretization *other);
301 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *divide(const MEDCouplingTimeDiscretization *other) const;
302 MEDCOUPLING_EXPORT void divideEqual(const MEDCouplingTimeDiscretization *other);
303 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *pow(const MEDCouplingTimeDiscretization *other) const;
304 MEDCOUPLING_EXPORT void powEqual(const MEDCouplingTimeDiscretization *other);
305 MEDCOUPLING_EXPORT bool isEqualIfNotWhy(const MEDCouplingTimeDiscretizationTemplate<double> *other, double prec, std::string& reason) const;
306 MEDCOUPLING_EXPORT bool isEqualWithoutConsideringStr(const MEDCouplingTimeDiscretizationTemplate<double> *other, double prec) const;
307 MEDCOUPLING_EXPORT bool areCompatible(const MEDCouplingTimeDiscretizationTemplate<double> *other) const;
308 MEDCOUPLING_EXPORT bool areStrictlyCompatible(const MEDCouplingTimeDiscretizationTemplate<double> *other, std::string& reason) const;
309 MEDCOUPLING_EXPORT bool areStrictlyCompatibleForMul(const MEDCouplingTimeDiscretizationTemplate<double> *other) const;
310 MEDCOUPLING_EXPORT bool areStrictlyCompatibleForDiv(const MEDCouplingTimeDiscretizationTemplate<double> *other) const;
311 MEDCOUPLING_EXPORT bool areCompatibleForMeld(const MEDCouplingTimeDiscretization *other) const;
312 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *performCopyOrIncrRef(bool deepCopy) const;
313 MEDCOUPLING_EXPORT void checkNoTimePresence() const { }
314 MEDCOUPLING_EXPORT void checkTimePresence(double time) const;
315 MEDCOUPLING_EXPORT std::vector< const DataArrayDouble *> getArraysForTime(double time) const;
316 MEDCOUPLING_EXPORT void getValueForTime(double time, const std::vector<double>& vals, double *res) const;
317 MEDCOUPLING_EXPORT bool isBefore(const MEDCouplingTimeDiscretization *other) const;
318 MEDCOUPLING_EXPORT bool isStrictlyBefore(const MEDCouplingTimeDiscretization *other) const;
319 MEDCOUPLING_EXPORT double getStartTime(int& iteration, int& order) const;
320 MEDCOUPLING_EXPORT double getEndTime(int& iteration, int& order) const;
321 MEDCOUPLING_EXPORT void setStartIteration(int it);
322 MEDCOUPLING_EXPORT void setEndIteration(int it);
323 MEDCOUPLING_EXPORT void setStartOrder(int order);
324 MEDCOUPLING_EXPORT void setEndOrder(int order);
325 MEDCOUPLING_EXPORT void setStartTimeValue(double time);
326 MEDCOUPLING_EXPORT void setEndTimeValue(double time);
327 MEDCOUPLING_EXPORT void setStartTime(double time, int iteration, int order);
328 MEDCOUPLING_EXPORT void setEndTime(double time, int iteration, int order);
329 MEDCOUPLING_EXPORT void getValueOnTime(mcIdType eltId, double time, double *value) const;
330 MEDCOUPLING_EXPORT void getValueOnDiscTime(mcIdType eltId, int iteration, int order, double *value) const;
331 MEDCOUPLING_EXPORT void getTinySerializationIntInformation2(std::vector<mcIdType>& tinyInfo) const;
332 MEDCOUPLING_EXPORT void getTinySerializationDbleInformation2(std::vector<double>& tinyInfo) const;
333 MEDCOUPLING_EXPORT void finishUnserialization2(const std::vector<mcIdType>& tinyInfoI, const std::vector<double>& tinyInfoD);
335 static const TypeOfTimeDiscretization DISCRETIZATION=NO_TIME;
336 MEDCOUPLING_EXPORT static const char REPR[];
338 static const char EXCEPTION_MSG[];
341 class MEDCouplingWithTimeStep : public MEDCouplingTimeDiscretization
344 MEDCOUPLING_EXPORT MEDCouplingWithTimeStep(const MEDCouplingWithTimeStep& other, bool deepCopy);
346 MEDCOUPLING_EXPORT MEDCouplingWithTimeStep();
347 MEDCOUPLING_EXPORT std::string getClassName() const override { return std::string("MEDCouplingWithTimeLabel"); }
348 MEDCOUPLING_EXPORT std::string getStringRepr() const;
349 MEDCOUPLING_EXPORT void copyTinyAttrFrom(const MEDCouplingTimeDiscretizationTemplate<double>& other);
350 MEDCOUPLING_EXPORT TypeOfTimeDiscretization getEnum() const { return DISCRETIZATION; }
351 MEDCOUPLING_EXPORT void synchronizeTimeWith(const MEDCouplingMesh *mesh);
352 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *aggregate(const MEDCouplingTimeDiscretization *other) const;
353 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *aggregate(const std::vector<const MEDCouplingTimeDiscretization *>& other) const;
354 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *meld(const MEDCouplingTimeDiscretization *other) const;
355 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *dot(const MEDCouplingTimeDiscretization *other) const;
356 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *crossProduct(const MEDCouplingTimeDiscretization *other) const;
357 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *max(const MEDCouplingTimeDiscretization *other) const;
358 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *min(const MEDCouplingTimeDiscretization *other) const;
359 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *add(const MEDCouplingTimeDiscretization *other) const;
360 MEDCOUPLING_EXPORT void addEqual(const MEDCouplingTimeDiscretization *other);
361 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *substract(const MEDCouplingTimeDiscretization *other) const;
362 MEDCOUPLING_EXPORT void substractEqual(const MEDCouplingTimeDiscretization *other);
363 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *multiply(const MEDCouplingTimeDiscretization *other) const;
364 MEDCOUPLING_EXPORT void multiplyEqual(const MEDCouplingTimeDiscretization *other);
365 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *divide(const MEDCouplingTimeDiscretization *other) const;
366 MEDCOUPLING_EXPORT void divideEqual(const MEDCouplingTimeDiscretization *other);
367 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *pow(const MEDCouplingTimeDiscretization *other) const;
368 MEDCOUPLING_EXPORT void powEqual(const MEDCouplingTimeDiscretization *other);
369 MEDCOUPLING_EXPORT bool isEqualIfNotWhy(const MEDCouplingTimeDiscretizationTemplate<double> *other, double prec, std::string& reason) const;
370 MEDCOUPLING_EXPORT bool isEqualWithoutConsideringStr(const MEDCouplingTimeDiscretizationTemplate<double> *other, double prec) const;
371 MEDCOUPLING_EXPORT bool areCompatible(const MEDCouplingTimeDiscretizationTemplate<double> *other) const;
372 MEDCOUPLING_EXPORT bool areStrictlyCompatible(const MEDCouplingTimeDiscretizationTemplate<double> *other, std::string& reason) const;
373 MEDCOUPLING_EXPORT bool areStrictlyCompatibleForMul(const MEDCouplingTimeDiscretizationTemplate<double> *other) const;
374 MEDCOUPLING_EXPORT bool areStrictlyCompatibleForDiv(const MEDCouplingTimeDiscretizationTemplate<double> *other) const;
375 MEDCOUPLING_EXPORT bool areCompatibleForMeld(const MEDCouplingTimeDiscretization *other) const;
376 MEDCOUPLING_EXPORT void getTinySerializationIntInformation(std::vector<mcIdType>& tinyInfo) const;
377 MEDCOUPLING_EXPORT void getTinySerializationDbleInformation(std::vector<double>& tinyInfo) const;
378 MEDCOUPLING_EXPORT void finishUnserialization(const std::vector<mcIdType>& tinyInfoI, const std::vector<double>& tinyInfoD, const std::vector<std::string>& tinyInfoS);
379 MEDCOUPLING_EXPORT void getTinySerializationIntInformation2(std::vector<mcIdType>& tinyInfo) const;
380 MEDCOUPLING_EXPORT void getTinySerializationDbleInformation2(std::vector<double>& tinyInfo) const;
381 MEDCOUPLING_EXPORT void finishUnserialization2(const std::vector<mcIdType>& tinyInfoI, const std::vector<double>& tinyInfoD);
382 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *performCopyOrIncrRef(bool deepCopy) const;
383 MEDCOUPLING_EXPORT void checkNoTimePresence() const;
384 MEDCOUPLING_EXPORT void checkTimePresence(double time) const;
385 MEDCOUPLING_EXPORT void setStartTime(double time, int iteration, int order) { _tk.setAllInfo(time,iteration,order); }
386 MEDCOUPLING_EXPORT void setEndTime(double time, int iteration, int order) { _tk.setAllInfo(time,iteration,order); }
387 MEDCOUPLING_EXPORT double getStartTime(int& iteration, int& order) const { return _tk.getAllInfo(iteration,order); }
388 MEDCOUPLING_EXPORT double getEndTime(int& iteration, int& order) const { return _tk.getAllInfo(iteration,order); }
389 MEDCOUPLING_EXPORT void setStartIteration(int it) { _tk.setIteration(it); }
390 MEDCOUPLING_EXPORT void setEndIteration(int it) { _tk.setIteration(it); }
391 MEDCOUPLING_EXPORT void setStartOrder(int order) { _tk.setOrder(order); }
392 MEDCOUPLING_EXPORT void setEndOrder(int order) { _tk.setOrder(order); }
393 MEDCOUPLING_EXPORT void setStartTimeValue(double time) { _tk.setTimeValue(time); }
394 MEDCOUPLING_EXPORT void setEndTimeValue(double time) { _tk.setTimeValue(time); }
395 MEDCOUPLING_EXPORT std::vector< const DataArrayDouble *> getArraysForTime(double time) const;
396 MEDCOUPLING_EXPORT void getValueForTime(double time, const std::vector<double>& vals, double *res) const;
397 MEDCOUPLING_EXPORT void getValueOnTime(mcIdType eltId, double time, double *value) const;
398 MEDCOUPLING_EXPORT void getValueOnDiscTime(mcIdType eltId, int iteration, int order, double *value) const;
400 static const TypeOfTimeDiscretization DISCRETIZATION=ONE_TIME;
401 MEDCOUPLING_EXPORT static const char REPR[];
403 static const char EXCEPTION_MSG[];
405 MEDCouplingTimeKeeper _tk;
408 class MEDCouplingConstOnTimeInterval : public MEDCouplingTimeDiscretization
411 MEDCOUPLING_EXPORT MEDCouplingConstOnTimeInterval(const MEDCouplingConstOnTimeInterval& other, bool deepCopy);
413 MEDCOUPLING_EXPORT MEDCouplingConstOnTimeInterval();
414 MEDCOUPLING_EXPORT std::string getClassName() const override { return std::string("MEDCouplingConstOnTimeInterval"); }
415 MEDCOUPLING_EXPORT void copyTinyAttrFrom(const MEDCouplingTimeDiscretizationTemplate<double>& other);
416 MEDCOUPLING_EXPORT void getTinySerializationIntInformation(std::vector<mcIdType>& tinyInfo) const;
417 MEDCOUPLING_EXPORT void getTinySerializationDbleInformation(std::vector<double>& tinyInfo) const;
418 MEDCOUPLING_EXPORT void finishUnserialization(const std::vector<mcIdType>& tinyInfoI, const std::vector<double>& tinyInfoD, const std::vector<std::string>& tinyInfoS);
419 MEDCOUPLING_EXPORT void getTinySerializationIntInformation2(std::vector<mcIdType>& tinyInfo) const;
420 MEDCOUPLING_EXPORT void getTinySerializationDbleInformation2(std::vector<double>& tinyInfo) const;
421 MEDCOUPLING_EXPORT void finishUnserialization2(const std::vector<mcIdType>& tinyInfoI, const std::vector<double>& tinyInfoD);
422 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *performCopyOrIncrRef(bool deepCopy) const;
423 MEDCOUPLING_EXPORT bool areCompatible(const MEDCouplingTimeDiscretizationTemplate<double> *other) const;
424 MEDCOUPLING_EXPORT bool areStrictlyCompatible(const MEDCouplingTimeDiscretizationTemplate<double> *other, std::string& reason) const;
425 MEDCOUPLING_EXPORT bool areStrictlyCompatibleForMul(const MEDCouplingTimeDiscretizationTemplate<double> *other) const;
426 MEDCOUPLING_EXPORT bool areStrictlyCompatibleForDiv(const MEDCouplingTimeDiscretizationTemplate<double> *other) const;
427 MEDCOUPLING_EXPORT bool areCompatibleForMeld(const MEDCouplingTimeDiscretization *other) const;
428 MEDCOUPLING_EXPORT bool isEqualIfNotWhy(const MEDCouplingTimeDiscretizationTemplate<double> *other, double prec, std::string& reason) const;
429 MEDCOUPLING_EXPORT bool isEqualWithoutConsideringStr(const MEDCouplingTimeDiscretizationTemplate<double> *other, double prec) const;
430 MEDCOUPLING_EXPORT std::vector< const DataArrayDouble *> getArraysForTime(double time) const;
431 MEDCOUPLING_EXPORT void getValueForTime(double time, const std::vector<double>& vals, double *res) const;
432 MEDCOUPLING_EXPORT void getValueOnTime(mcIdType eltId, double time, double *value) const;
433 MEDCOUPLING_EXPORT void getValueOnDiscTime(mcIdType eltId, int iteration, int order, double *value) const;
434 MEDCOUPLING_EXPORT TypeOfTimeDiscretization getEnum() const { return DISCRETIZATION; }
435 MEDCOUPLING_EXPORT void synchronizeTimeWith(const MEDCouplingMesh *mesh);
436 MEDCOUPLING_EXPORT std::string getStringRepr() const;
437 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *aggregate(const MEDCouplingTimeDiscretization *other) const;
438 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *aggregate(const std::vector<const MEDCouplingTimeDiscretization *>& other) const;
439 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *meld(const MEDCouplingTimeDiscretization *other) const;
440 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *dot(const MEDCouplingTimeDiscretization *other) const;
441 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *crossProduct(const MEDCouplingTimeDiscretization *other) const;
442 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *max(const MEDCouplingTimeDiscretization *other) const;
443 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *min(const MEDCouplingTimeDiscretization *other) const;
444 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *add(const MEDCouplingTimeDiscretization *other) const;
445 MEDCOUPLING_EXPORT void addEqual(const MEDCouplingTimeDiscretization *other);
446 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *substract(const MEDCouplingTimeDiscretization *other) const;
447 MEDCOUPLING_EXPORT void substractEqual(const MEDCouplingTimeDiscretization *other);
448 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *multiply(const MEDCouplingTimeDiscretization *other) const;
449 MEDCOUPLING_EXPORT void multiplyEqual(const MEDCouplingTimeDiscretization *other);
450 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *divide(const MEDCouplingTimeDiscretization *other) const;
451 MEDCOUPLING_EXPORT void divideEqual(const MEDCouplingTimeDiscretization *other);
452 MEDCouplingTimeDiscretization *pow(const MEDCouplingTimeDiscretization *other) const;
453 MEDCOUPLING_EXPORT void powEqual(const MEDCouplingTimeDiscretization *other);
454 MEDCOUPLING_EXPORT void setStartTime(double time, int iteration, int order) { _start.setAllInfo(time,iteration,order); }
455 MEDCOUPLING_EXPORT void setEndTime(double time, int iteration, int order) { _end.setAllInfo(time,iteration,order); }
456 MEDCOUPLING_EXPORT double getStartTime(int& iteration, int& order) const { return _start.getAllInfo(iteration,order); }
457 MEDCOUPLING_EXPORT double getEndTime(int& iteration, int& order) const { return _end.getAllInfo(iteration,order); }
458 MEDCOUPLING_EXPORT void setStartIteration(int it) { _start.setIteration(it); }
459 MEDCOUPLING_EXPORT void setEndIteration(int it) { _end.setIteration(it); }
460 MEDCOUPLING_EXPORT void setStartOrder(int order) { _start.setOrder(order); }
461 MEDCOUPLING_EXPORT void setEndOrder(int order) { _end.setOrder(order); }
462 MEDCOUPLING_EXPORT void setStartTimeValue(double time) { _start.setTimeValue(time); }
463 MEDCOUPLING_EXPORT void setEndTimeValue(double time) { _end.setTimeValue(time); }
464 MEDCOUPLING_EXPORT void checkNoTimePresence() const;
465 MEDCOUPLING_EXPORT void checkTimePresence(double time) const;
467 static const TypeOfTimeDiscretization DISCRETIZATION=CONST_ON_TIME_INTERVAL;
468 MEDCOUPLING_EXPORT static const char REPR[];
470 static const char EXCEPTION_MSG[];
472 MEDCouplingTimeKeeper _start;
473 MEDCouplingTimeKeeper _end;
476 class MEDCouplingTwoTimeSteps : public MEDCouplingTimeDiscretization
479 MEDCOUPLING_EXPORT MEDCouplingTwoTimeSteps(const MEDCouplingTwoTimeSteps& other, bool deepCopy);
480 MEDCOUPLING_EXPORT MEDCouplingTwoTimeSteps();
481 MEDCOUPLING_EXPORT ~MEDCouplingTwoTimeSteps();
483 MEDCOUPLING_EXPORT std::string getClassName() const override { return std::string("MEDCouplingTwoTimeSteps"); }
484 MEDCOUPLING_EXPORT void updateTime() const;
485 MEDCOUPLING_EXPORT void synchronizeTimeWith(const MEDCouplingMesh *mesh);
486 MEDCOUPLING_EXPORT std::size_t getHeapMemorySizeWithoutChildren() const;
487 MEDCOUPLING_EXPORT std::vector<const BigMemoryObject *> getDirectChildrenWithNull() const;
488 MEDCOUPLING_EXPORT void copyTinyAttrFrom(const MEDCouplingTimeDiscretizationTemplate<double>& other);
489 MEDCOUPLING_EXPORT void copyTinyStringsFrom(const MEDCouplingTimeDiscretizationTemplate<double>& other);
490 MEDCOUPLING_EXPORT const DataArrayDouble *getEndArray() const;
491 MEDCOUPLING_EXPORT DataArrayDouble *getEndArray();
492 MEDCOUPLING_EXPORT void checkConsistencyLight() const;
493 MEDCOUPLING_EXPORT bool isEqualIfNotWhy(const MEDCouplingTimeDiscretizationTemplate<double> *other, double prec, std::string& reason) const;
494 MEDCOUPLING_EXPORT bool isEqualWithoutConsideringStr(const MEDCouplingTimeDiscretizationTemplate<double> *other, double prec) const;
495 MEDCOUPLING_EXPORT void checkNoTimePresence() const;
496 MEDCOUPLING_EXPORT void checkTimePresence(double time) const;
497 MEDCOUPLING_EXPORT void getArrays(std::vector<DataArrayDouble *>& arrays) const;
498 MEDCOUPLING_EXPORT void setEndArray(DataArrayDouble *array, TimeLabel *owner);
499 MEDCOUPLING_EXPORT void setStartTime(double time, int iteration, int order) { _start.setAllInfo(time,iteration,order); }
500 MEDCOUPLING_EXPORT void setEndTime(double time, int iteration, int order) { _end.setAllInfo(time,iteration,order); }
501 MEDCOUPLING_EXPORT double getStartTime(int& iteration, int& order) const { return _start.getAllInfo(iteration,order); }
502 MEDCOUPLING_EXPORT double getEndTime(int& iteration, int& order) const { return _end.getAllInfo(iteration,order); }
503 MEDCOUPLING_EXPORT void setStartIteration(int it) { _start.setIteration(it); }
504 MEDCOUPLING_EXPORT void setEndIteration(int it) { _end.setIteration(it); }
505 MEDCOUPLING_EXPORT void setStartOrder(int order) { _start.setOrder(order); }
506 MEDCOUPLING_EXPORT void setEndOrder(int order) { _end.setOrder(order); }
507 MEDCOUPLING_EXPORT void setStartTimeValue(double time) { _start.setTimeValue(time); }
508 MEDCOUPLING_EXPORT void setEndTimeValue(double time) { _end.setTimeValue(time); }
509 MEDCOUPLING_EXPORT void getTinySerializationIntInformation(std::vector<mcIdType>& tinyInfo) const;
510 MEDCOUPLING_EXPORT void getTinySerializationDbleInformation(std::vector<double>& tinyInfo) const;
511 MEDCOUPLING_EXPORT void getTinySerializationStrInformation(std::vector<std::string>& tinyInfo) const;
512 MEDCOUPLING_EXPORT void resizeForUnserialization(const std::vector<mcIdType>& tinyInfoI, std::vector<DataArrayDouble *>& arrays);
513 MEDCOUPLING_EXPORT void checkForUnserialization(const std::vector<mcIdType>& tinyInfoI, const std::vector<DataArrayDouble *>& arrays);
514 MEDCOUPLING_EXPORT void finishUnserialization(const std::vector<mcIdType>& tinyInfoI, const std::vector<double>& tinyInfoD, const std::vector<std::string>& tinyInfoS);
515 MEDCOUPLING_EXPORT void getTinySerializationIntInformation2(std::vector<mcIdType>& tinyInfo) const;
516 MEDCOUPLING_EXPORT void getTinySerializationDbleInformation2(std::vector<double>& tinyInfo) const;
517 MEDCOUPLING_EXPORT void finishUnserialization2(const std::vector<mcIdType>& tinyInfoI, const std::vector<double>& tinyInfoD);
518 MEDCOUPLING_EXPORT std::vector< const DataArrayDouble *> getArraysForTime(double time) const;
519 MEDCOUPLING_EXPORT void setArrays(const std::vector<DataArrayDouble *>& arrays, TimeLabel *owner);
521 static const char EXCEPTION_MSG[];
523 MEDCouplingTimeKeeper _start;
524 MEDCouplingTimeKeeper _end;
525 DataArrayDouble *_end_array;
528 class MEDCouplingLinearTime : public MEDCouplingTwoTimeSteps
531 MEDCOUPLING_EXPORT MEDCouplingLinearTime(const MEDCouplingLinearTime& other, bool deepCopy);
533 MEDCOUPLING_EXPORT MEDCouplingLinearTime();
534 MEDCOUPLING_EXPORT std::string getStringRepr() const;
535 MEDCOUPLING_EXPORT TypeOfTimeDiscretization getEnum() const { return DISCRETIZATION; }
536 MEDCOUPLING_EXPORT void checkConsistencyLight() const;
537 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *performCopyOrIncrRef(bool deepCopy) const;
538 MEDCOUPLING_EXPORT bool areCompatible(const MEDCouplingTimeDiscretizationTemplate<double> *other) const;
539 MEDCOUPLING_EXPORT bool areStrictlyCompatible(const MEDCouplingTimeDiscretizationTemplate<double> *other, std::string& reason) const;
540 MEDCOUPLING_EXPORT bool areStrictlyCompatibleForMul(const MEDCouplingTimeDiscretizationTemplate<double> *other) const;
541 MEDCOUPLING_EXPORT bool areStrictlyCompatibleForDiv(const MEDCouplingTimeDiscretizationTemplate<double> *other) const;
542 MEDCOUPLING_EXPORT bool areCompatibleForMeld(const MEDCouplingTimeDiscretization *other) const;
543 MEDCOUPLING_EXPORT void getValueForTime(double time, const std::vector<double>& vals, double *res) const;
544 MEDCOUPLING_EXPORT void getValueOnTime(mcIdType eltId, double time, double *value) const;
545 MEDCOUPLING_EXPORT void getValueOnDiscTime(mcIdType eltId, int iteration, int order, double *value) const;
546 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *aggregate(const MEDCouplingTimeDiscretization *other) const;
547 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *aggregate(const std::vector<const MEDCouplingTimeDiscretization *>& other) const;
548 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *meld(const MEDCouplingTimeDiscretization *other) const;
549 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *dot(const MEDCouplingTimeDiscretization *other) const;
550 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *crossProduct(const MEDCouplingTimeDiscretization *other) const;
551 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *max(const MEDCouplingTimeDiscretization *other) const;
552 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *min(const MEDCouplingTimeDiscretization *other) const;
553 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *add(const MEDCouplingTimeDiscretization *other) const;
554 MEDCOUPLING_EXPORT void addEqual(const MEDCouplingTimeDiscretization *other);
555 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *substract(const MEDCouplingTimeDiscretization *other) const;
556 MEDCOUPLING_EXPORT void substractEqual(const MEDCouplingTimeDiscretization *other);
557 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *multiply(const MEDCouplingTimeDiscretization *other) const;
558 MEDCOUPLING_EXPORT void multiplyEqual(const MEDCouplingTimeDiscretization *other);
559 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *divide(const MEDCouplingTimeDiscretization *other) const;
560 MEDCOUPLING_EXPORT void divideEqual(const MEDCouplingTimeDiscretization *other);
561 MEDCOUPLING_EXPORT MEDCouplingTimeDiscretization *pow(const MEDCouplingTimeDiscretization *other) const;
562 MEDCOUPLING_EXPORT void powEqual(const MEDCouplingTimeDiscretization *other);
564 static const TypeOfTimeDiscretization DISCRETIZATION=LINEAR_TIME;
565 MEDCOUPLING_EXPORT static const char REPR[];