]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
On the road
authorAnthony Geay <anthony.geay@edf.fr>
Tue, 23 Aug 2016 16:54:39 +0000 (18:54 +0200)
committerAnthony Geay <anthony.geay@edf.fr>
Tue, 23 Aug 2016 16:54:39 +0000 (18:54 +0200)
doc/user/doxygen/Doxyfile_med_user.in
src/MEDCoupling/MEDCouplingFieldDouble.cxx
src/MEDCoupling/MEDCouplingFieldDouble.hxx
src/MEDCoupling/MEDCouplingFieldInt.cxx
src/MEDCoupling/MEDCouplingFieldInt.hxx
src/MEDCoupling/MEDCouplingFieldT.hxx
src/MEDCoupling/MEDCouplingFieldT.txx
src/MEDCoupling/MEDCouplingTraits.hxx

index 77989d3871d1094e584437c4cbe549634a6c7c06..fd9598241b24be2b0ba8d88ff861986cecfda509 100644 (file)
@@ -140,6 +140,8 @@ FILE_PATTERNS          = InterpKernelDEC.*xx \
                          MEDCouplingCurveLinearMesh.*xx \
                          MEDCouplingMappedExtrudedMesh.*xx \
                          MEDCouplingFieldDouble.*xx \
+                        MEDCouplingFieldInt.*xx \
+                        MEDCouplingFieldT.*xx \
                          MEDCouplingField.*xx \
                          MEDCouplingNatureOfFieldEnum \
                          MEDCouplingNatureOfField.hxx \
index 64f4a24a799cd843f7e915df517a591e1dc6edc9..976d798e0d9c33028d38dbf024736e45d5d50bb7 100644 (file)
@@ -87,19 +87,14 @@ MEDCouplingFieldDouble *MEDCouplingFieldDouble::New(const MEDCouplingFieldTempla
  * Sets a time \a unit of \a this field. For more info, see \ref MEDCouplingFirstSteps3.
  * \param [in] unit \a unit (string) in which time is measured.
  */
-void MEDCouplingFieldDouble::setTimeUnit(const std::string& unit)
-{
-  timeDiscr()->setTimeUnit(unit);
-}
+//void MEDCouplingFieldDouble::setTimeUnit(const std::string& unit)
 
 /*!
  * Returns a time unit of \a this field.
  * \return a string describing units in which time is measured.
  */
-std::string MEDCouplingFieldDouble::getTimeUnit() const
-{
-  return timeDiscr()->getTimeUnit();
-}
+//std::string MEDCouplingFieldDouble::getTimeUnit() const
+
 
 /*!
  * This method if possible the time information (time unit, time iteration, time unit and time value) with its support
@@ -139,38 +134,6 @@ MEDCouplingFieldDouble *MEDCouplingFieldDouble::clone(bool recDeepCpy) const
   return new MEDCouplingFieldDouble(*this,recDeepCpy);
 }
 
-/*!
- * Returns a new MEDCouplingFieldDouble which is a copy of \a this one. The data
- * of \a this field is copied either deep or shallow depending on \a recDeepCpy
- * parameter. But the underlying mesh is always deep copied.
- * Data that can be copied either deeply or shallow are:
- * - \ref MEDCouplingTemporalDisc "temporal discretization" data that holds array(s)
- * of field values,
- * - \ref MEDCouplingSpatialDisc "a spatial discretization".
- * 
- * This method behaves exactly like clone() except that here the underlying **mesh is
- * always deeply duplicated**, whatever the value \a recDeepCpy parameter.
- * The result of \c cloneWithMesh(true) is exactly the same as that of deepCopy().
- * So the resulting field can not be used together with \a this one in the methods
- * like operator+(), operator*() etc. To avoid deep copying the underlying mesh,
- * the user can call clone().
- *  \param [in] recDeepCpy - if \c true, the copy of the underlying data arrays is
- *         deep, else all data arrays of \a this field are shared by the new field.
- *  \return MEDCouplingFieldDouble * - a new instance of MEDCouplingFieldDouble. The
- *         caller is to delete this field using decrRef() as it is no more needed.
- * \sa clone()
- */
-MEDCouplingFieldDouble *MEDCouplingFieldDouble::cloneWithMesh(bool recDeepCpy) const
-{
-  MCAuto<MEDCouplingFieldDouble> ret=clone(recDeepCpy);
-  if(_mesh)
-    {
-      MCAuto<MEDCouplingMesh> mCpy=_mesh->deepCopy();
-      ret->setMesh(mCpy);
-    }
-  return ret.retn();
-}
-
 /*!
  * Returns a new MEDCouplingFieldDouble which is a deep copy of \a this one **including
  * the mesh**.
@@ -907,22 +870,6 @@ MEDCouplingFieldDouble::MEDCouplingFieldDouble(NatureOfField n, MEDCouplingTimeD
 {
 }
 
-/*!
- * Checks if \a this field is correctly defined, else an exception is thrown.
- *  \throw If the mesh is not set.
- *  \throw If the data array is not set.
- *  \throw If the spatial discretization of \a this field is NULL.
- *  \throw If \a this->getTimeTolerance() < 0.
- *  \throw If the temporal discretization data is incorrect.
- *  \throw If mesh data does not correspond to field data.
- */
-void MEDCouplingFieldDouble::checkConsistencyLight() const
-{
-  MEDCouplingField::checkConsistencyLight();
-  timeDiscr()->checkConsistencyLight();
-  _type->checkCoherencyBetween(_mesh,getArray());
-}
-
 /*!
  * Accumulate values of a given component of \a this field.
  *  \param [in] compId - the index of the component of interest.
@@ -1953,20 +1900,7 @@ void MEDCouplingFieldDouble::setNature(NatureOfField nat)
     _type->checkCompatibilityWithNature(nat);
 }
 
-/*!
- * This method synchronizes time information (time, iteration, order, time unit) regarding the information in \c this->_mesh.
- * \throw If no mesh is set in this. Or if \a this is not compatible with time setting (typically NO_TIME)
- */
-void MEDCouplingFieldDouble::synchronizeTimeWithMesh()
-{
-  if(!_mesh)
-    throw INTERP_KERNEL::Exception("MEDCouplingFieldDouble::synchronizeTimeWithMesh : no mesh set in this !");
-  int it=-1,ordr=-1;
-  double val=_mesh->getTime(it,ordr);
-  std::string timeUnit(_mesh->getTimeUnit());
-  setTime(val,it,ordr);
-  setTimeUnit(timeUnit);
-}
+
 
 /*!
  * Returns a value of \a this field of type either
@@ -1997,10 +1931,7 @@ double MEDCouplingFieldDouble::getIJK(int cellId, int nodeIdInCell, int compoId)
  *         \ref MEDCouplingSpatialDisc "spatial discretization" of \a this field
  *         (see getNumberOfTuples()), but this size is not checked here.
  */
-void MEDCouplingFieldDouble::setArray(DataArrayDouble *array)
-{
-  timeDiscr()->setArray(array,this);
-}
+//void MEDCouplingFieldDouble::setArray(DataArrayDouble *array)
 
 /*!
  * Sets the data array holding values corresponding to an end of a time interval
@@ -2010,10 +1941,7 @@ void MEDCouplingFieldDouble::setArray(DataArrayDouble *array)
  *         \ref MEDCouplingSpatialDisc "spatial discretization" of \a this field
  *         (see getNumberOfTuples()), but this size is not checked here.
  */
-void MEDCouplingFieldDouble::setEndArray(DataArrayDouble *array)
-{
-  timeDiscr()->setEndArray(array,this);
-}
+//void MEDCouplingFieldDouble::setEndArray(DataArrayDouble *array)
 
 /*!
  * Sets all data arrays needed to define the field values.
@@ -2024,10 +1952,7 @@ void MEDCouplingFieldDouble::setEndArray(DataArrayDouble *array)
  *  \throw If number of arrays in \a arrs does not correspond to type of
  *         \ref MEDCouplingTemporalDisc "temporal discretization" of \a this field.
  */
-void MEDCouplingFieldDouble::setArrays(const std::vector<DataArrayDouble *>& arrs)
-{
-  timeDiscr()->setArrays(arrs,this);
-}
+//void MEDCouplingFieldDouble::setArrays(const std::vector<DataArrayDouble *>& arrs)
 
 void MEDCouplingFieldDouble::getTinySerializationStrInformation(std::vector<std::string>& tinyInfo) const
 {
index 07e16e42e96e93999f3f05a4733240b6d4f288ff..a1a7a519adbd138dafe9eca2ee397c2aab3a2a3e 100644 (file)
@@ -34,8 +34,6 @@ namespace MEDCoupling
   public:
     MEDCOUPLING_EXPORT static MEDCouplingFieldDouble *New(TypeOfField type, TypeOfTimeDiscretization td=ONE_TIME);
     MEDCOUPLING_EXPORT static MEDCouplingFieldDouble *New(const MEDCouplingFieldTemplate& ft, TypeOfTimeDiscretization td=ONE_TIME);
-    MEDCOUPLING_EXPORT void setTimeUnit(const std::string& unit);
-    MEDCOUPLING_EXPORT std::string getTimeUnit() const;
     MEDCOUPLING_EXPORT void synchronizeTimeWithSupport();
     MEDCOUPLING_EXPORT void copyTinyStringsFrom(const MEDCouplingField *other);
     MEDCOUPLING_EXPORT void copyTinyAttrFrom(const MEDCouplingFieldDouble *other);
@@ -60,38 +58,12 @@ namespace MEDCoupling
     MEDCOUPLING_EXPORT MEDCouplingFieldDouble *buildSubPartRange(int begin, int end, int step) const;
     MEDCOUPLING_EXPORT MEDCouplingFieldDouble *deepCopy() const;
     MEDCOUPLING_EXPORT MEDCouplingFieldDouble *clone(bool recDeepCpy) const;
-    MEDCOUPLING_EXPORT MEDCouplingFieldDouble *cloneWithMesh(bool recDeepCpy) const;
     MEDCOUPLING_EXPORT MEDCouplingFieldDouble *buildNewTimeReprFromThis(TypeOfTimeDiscretization td, bool deepCopy) const;
     MEDCOUPLING_EXPORT MEDCouplingFieldDouble *nodeToCellDiscretization() const;
     MEDCOUPLING_EXPORT MEDCouplingFieldDouble *cellToNodeDiscretization() const;
     MEDCOUPLING_EXPORT TypeOfTimeDiscretization getTimeDiscretization() const;
-    MEDCOUPLING_EXPORT void checkConsistencyLight() const;
     MEDCOUPLING_EXPORT void setNature(NatureOfField nat);
-    MEDCOUPLING_EXPORT void setTimeTolerance(double val) { _time_discr->setTimeTolerance(val); }
-    MEDCOUPLING_EXPORT double getTimeTolerance() const { return _time_discr->getTimeTolerance(); }
-    MEDCOUPLING_EXPORT void setIteration(int it) { _time_discr->setIteration(it); }
-    MEDCOUPLING_EXPORT void setEndIteration(int it) { _time_discr->setEndIteration(it); }
-    MEDCOUPLING_EXPORT void setOrder(int order) { _time_discr->setOrder(order); }
-    MEDCOUPLING_EXPORT void setEndOrder(int order) { _time_discr->setEndOrder(order); }
-    MEDCOUPLING_EXPORT void setTimeValue(double val) { _time_discr->setTimeValue(val); }
-    MEDCOUPLING_EXPORT void setEndTimeValue(double val) { _time_discr->setEndTimeValue(val); }
-    MEDCOUPLING_EXPORT void setTime(double val, int iteration, int order) { _time_discr->setTime(val,iteration,order); }
-    MEDCOUPLING_EXPORT void synchronizeTimeWithMesh();
-    MEDCOUPLING_EXPORT void setStartTime(double val, int iteration, int order) { _time_discr->setStartTime(val,iteration,order); }
-    MEDCOUPLING_EXPORT void setEndTime(double val, int iteration, int order) { _time_discr->setEndTime(val,iteration,order); }
-    MEDCOUPLING_EXPORT double getTime(int& iteration, int& order) const { return _time_discr->getTime(iteration,order); }
-    MEDCOUPLING_EXPORT double getStartTime(int& iteration, int& order) const { return _time_discr->getStartTime(iteration,order); }
-    MEDCOUPLING_EXPORT double getEndTime(int& iteration, int& order) const { return _time_discr->getEndTime(iteration,order); }
-    MEDCOUPLING_EXPORT double getIJ(int tupleId, int compoId) const { return getArray()->getIJ(tupleId,compoId); }
     MEDCOUPLING_EXPORT double getIJK(int cellId, int nodeIdInCell, int compoId) const;
-    MEDCOUPLING_EXPORT void setArray(DataArrayDouble *array);
-    MEDCOUPLING_EXPORT void setEndArray(DataArrayDouble *array);
-    MEDCOUPLING_EXPORT void setArrays(const std::vector<DataArrayDouble *>& arrs);
-    MEDCOUPLING_EXPORT const DataArrayDouble *getArray() const { return _time_discr->getArray(); }
-    MEDCOUPLING_EXPORT DataArrayDouble *getArray() { return _time_discr->getArray(); }
-    MEDCOUPLING_EXPORT const DataArrayDouble *getEndArray() const { return _time_discr->getEndArray(); }
-    MEDCOUPLING_EXPORT DataArrayDouble *getEndArray() { return _time_discr->getEndArray(); }
-    MEDCOUPLING_EXPORT std::vector<DataArrayDouble *> getArrays() const { std::vector<DataArrayDouble *> ret; _time_discr->getArrays(ret); return ret; }
     MEDCOUPLING_EXPORT double accumulate(int compId) const;
     MEDCOUPLING_EXPORT void accumulate(double *res) const;
     MEDCOUPLING_EXPORT double getMaxValue() const;
index cc4938f3486f29fb98678d8cf1a88f2c3f6359a8..30fc263bb0e75ad13bc62d8be172999866fc2f3f 100644 (file)
@@ -37,13 +37,6 @@ MEDCouplingFieldInt *MEDCouplingFieldInt::New(const MEDCouplingFieldTemplate& ft
   return new MEDCouplingFieldInt(ft,td);
 }
 
-void MEDCouplingFieldInt::checkConsistencyLight() const
-{
-  MEDCouplingField::checkConsistencyLight();
-  timeDiscr()->checkConsistencyLight();
-  _type->checkCoherencyBetween(_mesh,getArray());
-}
-
 std::string MEDCouplingFieldInt::simpleRepr() const
 {
   std::ostringstream ret;
@@ -85,41 +78,6 @@ void MEDCouplingFieldInt::reprQuickOverview(std::ostream& stream) const
 {
 }
 
-void MEDCouplingFieldInt::setTimeUnit(const std::string& unit)
-{
-  timeDiscr()->setTimeUnit(unit);
-}
-
-std::string MEDCouplingFieldInt::getTimeUnit() const
-{
-  return timeDiscr()->getTimeUnit();
-}
-
-void MEDCouplingFieldInt::setTime(double val, int iteration, int order) 
-{ 
-  timeDiscr()->setTime(val,iteration,order); 
-}
-
-double MEDCouplingFieldInt::getTime(int& iteration, int& order) const
-{
-  return timeDiscr()->getTime(iteration,order);
-}
-
-void MEDCouplingFieldInt::setArray(DataArrayInt *array)
-{
-  timeDiscr()->setArray(array,this);
-}
-
-const DataArrayInt *MEDCouplingFieldInt::getArray() const
-{
-  return timeDiscr()->getArray();
-}
-
-DataArrayInt *MEDCouplingFieldInt::getArray()
-{
-  return timeDiscr()->getArray();
-}
-
 MEDCouplingFieldInt::MEDCouplingFieldInt(TypeOfField type, TypeOfTimeDiscretization td):MEDCouplingFieldT<int>(type,MEDCouplingTimeDiscretizationInt::New(td))
 {
 }
@@ -144,17 +102,6 @@ MEDCouplingFieldInt *MEDCouplingFieldInt::deepCopy() const
   return cloneWithMesh(true);
 }
 
-MEDCouplingFieldInt *MEDCouplingFieldInt::cloneWithMesh(bool recDeepCpy) const
-{
-  MCAuto<MEDCouplingFieldInt> ret(clone(recDeepCpy));
-  if(_mesh)
-    {
-      MCAuto<MEDCouplingMesh> mCpy(_mesh->deepCopy());
-      ret->setMesh(mCpy);
-    }
-  return ret.retn();
-}
-
 MEDCouplingFieldInt *MEDCouplingFieldInt::clone(bool recDeepCpy) const
 {
   return new MEDCouplingFieldInt(*this,recDeepCpy);
index 38c7463783ba5fed929d5d2d3b477cf0e7be54d0..1701f8ccb64ea39045a44e960c6588227cd666a7 100644 (file)
@@ -36,19 +36,10 @@ namespace MEDCoupling
   public:
     MEDCOUPLING_EXPORT static MEDCouplingFieldInt *New(TypeOfField type, TypeOfTimeDiscretization td=ONE_TIME);
     MEDCOUPLING_EXPORT static MEDCouplingFieldInt *New(const MEDCouplingFieldTemplate& ft, TypeOfTimeDiscretization td=ONE_TIME);
-    MEDCOUPLING_EXPORT void checkConsistencyLight() const;
     MEDCOUPLING_EXPORT std::string simpleRepr() const;
     MEDCOUPLING_EXPORT void reprQuickOverview(std::ostream& stream) const;
-    MEDCOUPLING_EXPORT void setTimeUnit(const std::string& unit);
-    MEDCOUPLING_EXPORT std::string getTimeUnit() const;
-    MEDCOUPLING_EXPORT void setTime(double val, int iteration, int order);
-    MEDCOUPLING_EXPORT double getTime(int& iteration, int& order) const;
-    MEDCOUPLING_EXPORT void setArray(DataArrayInt *array);
-    MEDCOUPLING_EXPORT const DataArrayInt *getArray() const;
-    MEDCOUPLING_EXPORT DataArrayInt *getArray();
     MEDCOUPLING_EXPORT MEDCouplingFieldInt *deepCopy() const;
     MEDCOUPLING_EXPORT MEDCouplingFieldInt *clone(bool recDeepCpy) const;
-    MEDCOUPLING_EXPORT MEDCouplingFieldInt *cloneWithMesh(bool recDeepCpy) const;
     MEDCOUPLING_EXPORT bool isEqualIfNotWhy(const MEDCouplingField *other, double meshPrec, double valsPrec, std::string& reason) const;
     MEDCOUPLING_EXPORT bool isEqualWithoutConsideringStr(const MEDCouplingField *other, double meshPrec, double valsPrec) const;
     MEDCOUPLING_EXPORT void copyTinyStringsFrom(const MEDCouplingField *other);
index 6f88381eef652b51596854d0671ec7574c85228e..9dc0fe0e589b7a838cb084ebc023c8600cc7a21d 100644 (file)
@@ -22,6 +22,7 @@
 #define __MEDCOUPLINGFIELDT_HXX__
 
 #include "MEDCouplingField.hxx"
+#include "MEDCouplingTraits.hxx"
 #include "MEDCouplingTimeDiscretization.hxx"
 
 namespace MEDCoupling
@@ -38,6 +39,36 @@ namespace MEDCoupling
     MEDCouplingFieldT(TypeOfField type, MEDCouplingTimeDiscretizationTemplate<T> *timeDiscr);
     MEDCouplingFieldT(MEDCouplingFieldDiscretization *type, NatureOfField n, MEDCouplingTimeDiscretizationTemplate<T> *timeDiscr);
     ~MEDCouplingFieldT();
+  public:
+    MEDCOUPLING_EXPORT virtual typename Traits<T>::FieldType *clone(bool recDeepCpy) const = 0;
+    MEDCOUPLING_EXPORT void checkConsistencyLight() const;
+    MEDCOUPLING_EXPORT typename Traits<T>::FieldType *cloneWithMesh(bool recDeepCpy) const;
+    MEDCOUPLING_EXPORT void setArray(typename Traits<T>::ArrayType *array) { _time_discr->setArray(array,this); }
+    MEDCOUPLING_EXPORT void setEndArray(typename Traits<T>::ArrayType *array) { _time_discr->setEndArray(array,this); }
+    MEDCOUPLING_EXPORT const typename Traits<T>::ArrayType *getArray() const { return _time_discr->getArray(); }
+    MEDCOUPLING_EXPORT typename Traits<T>::ArrayType *getArray() { return _time_discr->getArray(); }
+    MEDCOUPLING_EXPORT const typename Traits<T>::ArrayType *getEndArray() const { return _time_discr->getEndArray(); }
+    MEDCOUPLING_EXPORT typename Traits<T>::ArrayType *getEndArray() { return _time_discr->getEndArray(); }
+    MEDCOUPLING_EXPORT void setArrays(const std::vector<typename Traits<T>::ArrayType *>& arrs) { _time_discr->setArrays(arrs,this); }
+    MEDCOUPLING_EXPORT std::vector<typename Traits<T>::ArrayType *> getArrays() const { std::vector<typename Traits<T>::ArrayType *> ret; _time_discr->getArrays(ret); return ret; }
+    MEDCOUPLING_EXPORT void setTimeUnit(const std::string& unit) { _time_discr->setTimeUnit(unit); }
+    MEDCOUPLING_EXPORT std::string getTimeUnit() const { return _time_discr->getTimeUnit(); }
+    MEDCOUPLING_EXPORT void setTimeTolerance(double val) { _time_discr->setTimeTolerance(val); }
+    MEDCOUPLING_EXPORT double getTimeTolerance() const { return _time_discr->getTimeTolerance(); }
+    MEDCOUPLING_EXPORT void setIteration(int it) { _time_discr->setIteration(it); }
+    MEDCOUPLING_EXPORT void setEndIteration(int it) { _time_discr->setEndIteration(it); }
+    MEDCOUPLING_EXPORT void setOrder(int order) { _time_discr->setOrder(order); }
+    MEDCOUPLING_EXPORT void setEndOrder(int order) { _time_discr->setEndOrder(order); }
+    MEDCOUPLING_EXPORT void setTimeValue(double val) { _time_discr->setTimeValue(val); }
+    MEDCOUPLING_EXPORT void setEndTimeValue(double val) { _time_discr->setEndTimeValue(val); }
+    MEDCOUPLING_EXPORT void setTime(double val, int iteration, int order) { _time_discr->setTime(val,iteration,order); }
+    MEDCOUPLING_EXPORT void synchronizeTimeWithMesh();
+    MEDCOUPLING_EXPORT void setStartTime(double val, int iteration, int order) { _time_discr->setStartTime(val,iteration,order); }
+    MEDCOUPLING_EXPORT void setEndTime(double val, int iteration, int order) { _time_discr->setEndTime(val,iteration,order); }
+    MEDCOUPLING_EXPORT double getTime(int& iteration, int& order) const { return _time_discr->getTime(iteration,order); }
+    MEDCOUPLING_EXPORT double getStartTime(int& iteration, int& order) const { return _time_discr->getStartTime(iteration,order); }
+    MEDCOUPLING_EXPORT double getEndTime(int& iteration, int& order) const { return _time_discr->getEndTime(iteration,order); }
+    MEDCOUPLING_EXPORT T getIJ(int tupleId, int compoId) const { return getArray()->getIJ(tupleId,compoId); }
   protected:
     MEDCouplingTimeDiscretizationTemplate<T> *_time_discr;
   };
index fac31b705b9f46822b71324e7fb9fdf5bfc83732..459134b2f4237dee38a0cfe31aab6a38de44a849 100644 (file)
@@ -22,6 +22,7 @@
 #define __MEDCOUPLINGFIELDT_TXX__
 
 #include "MEDCouplingTimeDiscretization.hxx"
+#include "MEDCouplingMesh.hxx"
 
 namespace MEDCoupling
 {
@@ -29,6 +30,23 @@ namespace MEDCoupling
   MEDCouplingFieldT<T>::MEDCouplingFieldT(const MEDCouplingFieldT<T>& other, bool deepCopy):MEDCouplingField(other,deepCopy),_time_discr(other._time_discr->performCopyOrIncrRef(deepCopy))
   {
   }
+  
+  /*!
+   * Checks if \a this field is correctly defined, else an exception is thrown.
+   *  \throw If the mesh is not set.
+   *  \throw If the data array is not set.
+   *  \throw If the spatial discretization of \a this field is NULL.
+   *  \throw If \a this->getTimeTolerance() < 0.
+   *  \throw If the temporal discretization data is incorrect.
+   *  \throw If mesh data does not correspond to field data.
+   */
+  template<class T>
+  void MEDCouplingFieldT<T>::checkConsistencyLight() const
+  {
+    MEDCouplingField::checkConsistencyLight();
+    _time_discr->checkConsistencyLight();
+    _type->checkCoherencyBetween(_mesh,getArray());
+  }
 
   template<class T>
   MEDCouplingFieldT<T>::MEDCouplingFieldT(const MEDCouplingField& other, MEDCouplingTimeDiscretizationTemplate<T> *timeDiscr, bool deepCopy):MEDCouplingField(other,deepCopy),_time_discr(timeDiscr)
@@ -50,6 +68,55 @@ namespace MEDCoupling
   {
     delete _time_discr;
   }
+
+  /*!
+   * This method synchronizes time information (time, iteration, order, time unit) regarding the information in \c this->_mesh.
+   * \throw If no mesh is set in this. Or if \a this is not compatible with time setting (typically NO_TIME)
+   */
+  template<class T>
+  void MEDCouplingFieldT<T>::synchronizeTimeWithMesh()
+  {
+    if(!_mesh)
+      throw INTERP_KERNEL::Exception("MEDCouplingFieldT::synchronizeTimeWithMesh : no mesh set in this !");
+    int it(-1),ordr(-1);
+    double val(_mesh->getTime(it,ordr));
+    std::string timeUnit(_mesh->getTimeUnit());
+    setTime(val,it,ordr);
+    setTimeUnit(timeUnit);
+  }
+
+  /*!
+   * Returns a new MEDCouplingFieldDouble which is a copy of \a this one. The data
+   * of \a this field is copied either deep or shallow depending on \a recDeepCpy
+   * parameter. But the underlying mesh is always deep copied.
+   * Data that can be copied either deeply or shallow are:
+   * - \ref MEDCouplingTemporalDisc "temporal discretization" data that holds array(s)
+   * of field values,
+   * - \ref MEDCouplingSpatialDisc "a spatial discretization".
+   * 
+   * This method behaves exactly like clone() except that here the underlying **mesh is
+   * always deeply duplicated**, whatever the value \a recDeepCpy parameter.
+   * The result of \c cloneWithMesh(true) is exactly the same as that of deepCopy().
+   * So the resulting field can not be used together with \a this one in the methods
+   * like operator+(), operator*() etc. To avoid deep copying the underlying mesh,
+   * the user can call clone().
+   *  \param [in] recDeepCpy - if \c true, the copy of the underlying data arrays is
+   *         deep, else all data arrays of \a this field are shared by the new field.
+   *  \return MEDCouplingFieldDouble * - a new instance of MEDCouplingFieldDouble. The
+   *         caller is to delete this field using decrRef() as it is no more needed.
+   * \sa clone()
+   */
+  template<class T>
+  typename Traits<T>::FieldType *MEDCouplingFieldT<T>::cloneWithMesh(bool recDeepCpy) const
+  {
+    MCAuto<  typename Traits<T>::FieldType > ret(clone(recDeepCpy));
+    if(_mesh)
+      {
+        MCAuto<MEDCouplingMesh> mCpy=_mesh->deepCopy();
+        ret->setMesh(mCpy);
+      }
+    return ret.retn();
+  }
 }
 
 #endif
index c4b7ed7fdbd224bfa0bf728f2631d819475dd8f5..3b0ce94b0df34dc01b3e068c78e67a165ce3374a 100644 (file)
@@ -32,12 +32,15 @@ namespace MEDCoupling
   class DataArrayInt;
   class DataArrayDouble;
   class DataArrayChar;
+  class MEDCouplingFieldDouble;
+  class MEDCouplingFieldInt;
   
   template<>
   struct Traits<double>
   {
     static const char ArrayTypeName[];
     typedef DataArrayDouble ArrayType;
+    typedef MEDCouplingFieldDouble FieldType;
   };
   
   template<>
@@ -45,6 +48,7 @@ namespace MEDCoupling
   {
     static const char ArrayTypeName[];
     typedef DataArrayInt ArrayType;
+    typedef MEDCouplingFieldInt FieldType;
   };
 
   template<>