]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
Multi time.
authorageay <ageay>
Mon, 24 Jan 2011 15:49:02 +0000 (15:49 +0000)
committerageay <ageay>
Mon, 24 Jan 2011 15:49:02 +0000 (15:49 +0000)
32 files changed:
src/MEDCoupling/MEDCouplingCMesh.cxx
src/MEDCoupling/MEDCouplingCMesh.hxx
src/MEDCoupling/MEDCouplingDefinitionTime.cxx
src/MEDCoupling/MEDCouplingDefinitionTime.hxx
src/MEDCoupling/MEDCouplingExtrudedMesh.cxx
src/MEDCoupling/MEDCouplingExtrudedMesh.hxx
src/MEDCoupling/MEDCouplingField.cxx
src/MEDCoupling/MEDCouplingField.hxx
src/MEDCoupling/MEDCouplingFieldDiscretization.cxx
src/MEDCoupling/MEDCouplingFieldDiscretization.hxx
src/MEDCoupling/MEDCouplingFieldDouble.cxx
src/MEDCoupling/MEDCouplingFieldDouble.hxx
src/MEDCoupling/MEDCouplingFieldOverTime.cxx
src/MEDCoupling/MEDCouplingFieldOverTime.hxx
src/MEDCoupling/MEDCouplingMemArray.cxx
src/MEDCoupling/MEDCouplingMemArray.hxx
src/MEDCoupling/MEDCouplingMultiFields.cxx
src/MEDCoupling/MEDCouplingMultiFields.hxx
src/MEDCoupling/MEDCouplingPointSet.cxx
src/MEDCoupling/MEDCouplingPointSet.hxx
src/MEDCoupling/MEDCouplingRemapper.cxx
src/MEDCoupling/MEDCouplingRemapper.hxx
src/MEDCoupling/MEDCouplingTimeDiscretization.cxx
src/MEDCoupling/MEDCouplingTimeDiscretization.hxx
src/MEDCoupling/MEDCouplingTimeLabel.cxx
src/MEDCoupling/MEDCouplingTimeLabel.hxx
src/MEDCoupling/MEDCouplingUMesh.cxx
src/MEDCoupling/MEDCouplingUMesh.hxx
src/MEDCoupling/Test/MEDCouplingBasicsTest4.cxx
src/MEDCoupling_Swig/MEDCoupling.i
src/MEDCoupling_Swig/MEDCouplingBasicsTest.py
src/MEDCoupling_Swig/MEDCouplingDataForTest.py

index 3c8ce1a41239c4749d5c56061f0da88be68f0f1a..7827fd50b61b1e4b0640c1851a68e3dddbe464b5 100644 (file)
@@ -82,7 +82,7 @@ MEDCouplingCMesh *MEDCouplingCMesh::clone(bool recDeepCpy) const
   return new MEDCouplingCMesh(*this,recDeepCpy);
 }
 
-void MEDCouplingCMesh::updateTime()
+void MEDCouplingCMesh::updateTime() const
 {
   if(_x_array)
     updateTimeWith(*_x_array);
index eb6acf42ae6d7ca94b5898f36a74cc782edcee1c..3b3e50aa70ea2691bf02bbd3ac4084e3eb969666 100644 (file)
@@ -34,7 +34,7 @@ namespace ParaMEDMEM
     static MEDCouplingCMesh *New();
     MEDCouplingMesh *deepCpy() const;
     MEDCouplingCMesh *clone(bool recDeepCpy) const;
-    void updateTime();
+    void updateTime() const;
     MEDCouplingMeshType getType() const { return CARTESIAN; }
     void copyTinyStringsFrom(const MEDCouplingMesh *other) throw(INTERP_KERNEL::Exception);
     bool isEqual(const MEDCouplingMesh *other, double prec) const;
index 7b7b0af74b091f643390a94830a62d1aa65f203e..47836da6d12b7e5bd30a1b65618165882675eb5f 100644 (file)
@@ -24,6 +24,8 @@
 
 using namespace ParaMEDMEM;
 
+const double MEDCouplingDefinitionTime::EPS_DFT=1e-15;
+
 MEDCouplingDefinitionTimeSlice *MEDCouplingDefinitionTimeSlice::New(const MEDCouplingFieldDouble *f, int meshId, const std::vector<int>& arrId, int fieldId) throw(INTERP_KERNEL::Exception)
 {
   static const char msg[]="TimeSlice::New : mismatch of arrays number of a fieldDouble and its policy !!! Internal error !!!";
@@ -56,6 +58,21 @@ MEDCouplingDefinitionTimeSlice *MEDCouplingDefinitionTimeSlice::New(const MEDCou
     }
 }
 
+MEDCouplingDefinitionTimeSlice *MEDCouplingDefinitionTimeSlice::New(TypeOfTimeDiscretization type, const std::vector<int>& tiI, const std::vector<double>& tiD) throw(INTERP_KERNEL::Exception)
+{
+  switch(type)
+    {
+    case ONE_TIME:
+      return MEDCouplingDefinitionTimeSliceInst::New(tiI,tiD);
+    case CONST_ON_TIME_INTERVAL:
+      return MEDCouplingDefinitionTimeSliceCstOnTI::New(tiI,tiD);
+    case LINEAR_TIME:
+      return MEDCouplingDefinitionTimeSliceLT::New(tiI,tiD);
+    default:
+      throw INTERP_KERNEL::Exception("MEDCouplingDefinitionTimeSlice::New : unrecognized time discretization type !");
+    }
+}
+
 bool MEDCouplingDefinitionTimeSlice::isEqual(const MEDCouplingDefinitionTimeSlice& other, double eps) const
 {
   if(_mesh_id!=other._mesh_id)
@@ -125,8 +142,45 @@ bool MEDCouplingDefinitionTimeSlice::isBeforeMe(const MEDCouplingDefinitionTimeS
   return (o1<t1+eps && o2<t1+eps);
 }
 
+MEDCouplingDefinitionTimeSliceInst *MEDCouplingDefinitionTimeSliceInst::New(const std::vector<int>& tiI, const std::vector<double>& tiD)
+{
+  MEDCouplingDefinitionTimeSliceInst *ret=new MEDCouplingDefinitionTimeSliceInst;
+  ret->unserialize(tiI,tiD);
+  return ret;
+}
+
+void MEDCouplingDefinitionTimeSliceInst::getTinySerializationInformation(std::vector<int>& tiI, std::vector<double>& tiD) const
+{
+  tiI.resize(3);
+  tiI[0]=_mesh_id; tiI[1]=_array_id; tiI[2]=_field_id;
+  tiD.resize(1);
+  tiD[0]=_instant;
+}
+
+void MEDCouplingDefinitionTimeSliceInst::unserialize(const std::vector<int>& tiI, const std::vector<double>& tiD)
+{
+  _mesh_id=tiI[0]; _array_id=tiI[1]; _field_id=tiI[2];
+  _instant=tiD[0];
+}
+
+TypeOfTimeDiscretization MEDCouplingDefinitionTimeSliceInst::getTimeType() const
+{
+  return ONE_TIME;
+}
+
+MEDCouplingDefinitionTimeSlice *MEDCouplingDefinitionTimeSliceInst::copy() const
+{
+  return new MEDCouplingDefinitionTimeSliceInst(*this);
+}
+
 bool MEDCouplingDefinitionTimeSliceInst::isEqual(const MEDCouplingDefinitionTimeSlice& other, double eps) const
 {
+  if(!MEDCouplingDefinitionTimeSlice::isEqual(other,eps))
+    return false;
+  const MEDCouplingDefinitionTimeSliceInst *otherC=dynamic_cast<const MEDCouplingDefinitionTimeSliceInst *>(&other);
+  if(!otherC)
+    return false;
+  return fabs(otherC->_instant-_instant)<eps;
 }
 
 void MEDCouplingDefinitionTimeSliceInst::getHotSpotsTime(std::vector<double>& ret) const
@@ -175,8 +229,28 @@ MEDCouplingDefinitionTimeSliceInst::MEDCouplingDefinitionTimeSliceInst(const MED
   _instant=t1;
 }
 
+MEDCouplingDefinitionTimeSliceCstOnTI *MEDCouplingDefinitionTimeSliceCstOnTI::New(const std::vector<int>& tiI, const std::vector<double>& tiD)
+{
+  MEDCouplingDefinitionTimeSliceCstOnTI *ret=new MEDCouplingDefinitionTimeSliceCstOnTI;
+  ret->unserialize(tiI,tiD);
+  return ret;
+}
+
+MEDCouplingDefinitionTimeSlice *MEDCouplingDefinitionTimeSliceCstOnTI::copy() const
+{
+  return new MEDCouplingDefinitionTimeSliceCstOnTI(*this);
+}
+
 bool MEDCouplingDefinitionTimeSliceCstOnTI::isEqual(const MEDCouplingDefinitionTimeSlice& other, double eps) const
 {
+  if(!MEDCouplingDefinitionTimeSlice::isEqual(other,eps))
+    return false;
+  const MEDCouplingDefinitionTimeSliceCstOnTI *otherC=dynamic_cast<const MEDCouplingDefinitionTimeSliceCstOnTI *>(&other);
+  if(!otherC)
+    return false;
+  if(fabs(otherC->_start-_start)>eps)
+    return false;
+  return fabs(otherC->_end-_end)<eps;
 }
 
 void MEDCouplingDefinitionTimeSliceCstOnTI::getHotSpotsTime(std::vector<double>& ret) const
@@ -214,6 +288,25 @@ double MEDCouplingDefinitionTimeSliceCstOnTI::getEndTime() const
   return _end;
 }
 
+void MEDCouplingDefinitionTimeSliceCstOnTI::getTinySerializationInformation(std::vector<int>& tiI, std::vector<double>& tiD) const
+{
+  tiI.resize(3);
+  tiI[0]=_mesh_id; tiI[1]=_array_id; tiI[2]=_field_id;
+  tiD.resize(2);
+  tiD[0]=_start; tiD[1]=_end;
+}
+
+void MEDCouplingDefinitionTimeSliceCstOnTI::unserialize(const std::vector<int>& tiI, const std::vector<double>& tiD)
+{
+  _mesh_id=tiI[0]; _array_id=tiI[1]; _field_id=tiI[2];
+  _start=tiD[0]; _end=tiD[1];
+}
+
+TypeOfTimeDiscretization MEDCouplingDefinitionTimeSliceCstOnTI::getTimeType() const
+{
+  return CONST_ON_TIME_INTERVAL;
+}
+
 MEDCouplingDefinitionTimeSliceCstOnTI::MEDCouplingDefinitionTimeSliceCstOnTI(const MEDCouplingFieldDouble *f, int meshId, int arrId, int fieldId) throw(INTERP_KERNEL::Exception):MEDCouplingDefinitionTimeSlice(f,meshId,arrId,fieldId)
 {
   int tmp1,tmp2;
@@ -223,8 +316,30 @@ MEDCouplingDefinitionTimeSliceCstOnTI::MEDCouplingDefinitionTimeSliceCstOnTI(con
   _end=t2;
 }
 
+MEDCouplingDefinitionTimeSliceLT *MEDCouplingDefinitionTimeSliceLT::New(const std::vector<int>& tiI, const std::vector<double>& tiD)
+{
+  MEDCouplingDefinitionTimeSliceLT *ret=new MEDCouplingDefinitionTimeSliceLT;
+  ret->unserialize(tiI,tiD);
+  return ret;
+}
+
+MEDCouplingDefinitionTimeSlice *MEDCouplingDefinitionTimeSliceLT::copy() const
+{
+  return new MEDCouplingDefinitionTimeSliceLT(*this);
+}
+
 bool MEDCouplingDefinitionTimeSliceLT::isEqual(const MEDCouplingDefinitionTimeSlice& other, double eps) const
 {
+  if(!MEDCouplingDefinitionTimeSlice::isEqual(other,eps))
+    return false;
+  const MEDCouplingDefinitionTimeSliceLT *otherC=dynamic_cast<const MEDCouplingDefinitionTimeSliceLT *>(&other);
+  if(!otherC)
+    return false;
+  if(_array_id_end!=otherC->_array_id_end)
+    return false;
+  if(fabs(otherC->_start-_start)>eps)
+    return false;
+  return fabs(otherC->_end-_end)<eps;
 }
 
 void MEDCouplingDefinitionTimeSliceLT::getHotSpotsTime(std::vector<double>& ret) const
@@ -282,6 +397,25 @@ int MEDCouplingDefinitionTimeSliceLT::getEndId() const
   return _array_id_end;
 }
 
+void MEDCouplingDefinitionTimeSliceLT::getTinySerializationInformation(std::vector<int>& tiI, std::vector<double>& tiD) const
+{
+  tiI.resize(4);
+  tiI[0]=_mesh_id; tiI[1]=_array_id; tiI[2]=_field_id; tiI[3]=_array_id_end;
+  tiD.resize(2);
+  tiD[0]=_start; tiD[1]=_end;
+}
+
+void MEDCouplingDefinitionTimeSliceLT::unserialize(const std::vector<int>& tiI, const std::vector<double>& tiD)
+{
+  _mesh_id=tiI[0]; _array_id=tiI[1]; _field_id=tiI[2]; _array_id_end=tiI[3];
+  _start=tiD[0]; _end=tiD[1];
+}
+
+TypeOfTimeDiscretization MEDCouplingDefinitionTimeSliceLT::getTimeType() const
+{
+  return LINEAR_TIME;
+}
+
 MEDCouplingDefinitionTimeSliceLT::MEDCouplingDefinitionTimeSliceLT(const MEDCouplingFieldDouble *f, int meshId, int arrId, int arr2Id, int fieldId) throw(INTERP_KERNEL::Exception):MEDCouplingDefinitionTimeSlice(f,meshId,arrId,fieldId),_array_id_end(arr2Id)
 {
   int tmp1,tmp2;
@@ -291,7 +425,7 @@ MEDCouplingDefinitionTimeSliceLT::MEDCouplingDefinitionTimeSliceLT(const MEDCoup
   _end=t2;
 }
 
-MEDCouplingDefinitionTime::MEDCouplingDefinitionTime()
+MEDCouplingDefinitionTime::MEDCouplingDefinitionTime():_eps(EPS_DFT)
 {
 }
 
@@ -324,6 +458,25 @@ MEDCouplingDefinitionTime::MEDCouplingDefinitionTime(const std::vector<const MED
     }
 }
 
+void MEDCouplingDefinitionTime::assign(const MEDCouplingDefinitionTime& other)
+{
+  std::size_t sz=other._slices.size();
+  _slices.resize(sz);
+  for(std::size_t i=0;i<sz;i++)
+    _slices[i]=other._slices[i]->copy();
+}
+
+bool MEDCouplingDefinitionTime::isEqual(const MEDCouplingDefinitionTime& other) const
+{
+  std::size_t sz=_slices.size();
+  if(sz!=other._slices.size())
+    return false;
+  for(std::size_t i=0;i<sz;i++)
+    if(!_slices[i]->isEqual(*other._slices[i],_eps))
+      return false;
+  return true;
+}
+
 void MEDCouplingDefinitionTime::getIdsOnTimeRight(double tm, int& meshId, int& arrId, int& arrIdInField, int& fieldId) const throw(INTERP_KERNEL::Exception)
 {
   std::vector<int> meshIds;
@@ -401,3 +554,48 @@ void MEDCouplingDefinitionTime::appendRepr(std::ostream& stream) const
       stream << std::endl;
     }
 }
+
+void MEDCouplingDefinitionTime::getTinySerializationInformation(std::vector<int>& tinyInfoI, std::vector<double>& tinyInfoD) const
+{
+  int sz=_slices.size();
+  tinyInfoD.resize(1);
+  tinyInfoD[0]=_eps;
+  tinyInfoI.resize(3*sz+2);
+  tinyInfoI[0]=sz;
+  std::vector<int> coreData;
+  for(int i=0;i<sz;i++)
+    {
+      std::vector<int> tmp1;
+      std::vector<double> tmp2;
+      tinyInfoI[i+2]=(int)_slices[i]->getTimeType();
+      _slices[i]->getTinySerializationInformation(tmp1,tmp2);
+      tinyInfoI[i+sz+2]=tmp1.size();
+      tinyInfoI[i+2*sz+2]=tmp2.size();
+      coreData.insert(coreData.end(),tmp1.begin(),tmp1.end());
+      tinyInfoD.insert(tinyInfoD.end(),tmp2.begin(),tmp2.end());
+    }
+  tinyInfoI[1]=coreData.size();
+  tinyInfoI.insert(tinyInfoI.end(),coreData.begin(),coreData.end());
+}
+
+void MEDCouplingDefinitionTime::unserialize(const std::vector<int>& tinyInfoI, const std::vector<double>& tinyInfoD)
+{
+  int sz=tinyInfoI[0];
+  _slices.resize(sz);
+  _eps=tinyInfoD[0];
+  int offset1=0;
+  int offset2=1;
+  for(int i=0;i<sz;i++)
+    {
+      TypeOfTimeDiscretization ty=(TypeOfTimeDiscretization) tinyInfoI[i+2];  
+      int sz1=tinyInfoI[i+sz+2];
+      int sz2=tinyInfoI[i+2*sz+2];
+      std::vector<int> tmp1(tinyInfoI.begin()+3*sz+2+offset1,tinyInfoI.begin()+3*sz+2+offset1+sz1);
+      std::vector<double> tmp2(tinyInfoD.begin()+offset2,tinyInfoD.begin()+offset2+sz2);
+      MEDCouplingDefinitionTimeSlice *pt=MEDCouplingDefinitionTimeSlice::New(ty,tmp1,tmp2);
+      _slices[i]=pt;
+      offset1+=sz1;
+      offset2+=sz2;
+    }
+}
+
index e5becae040e48dee23e1911e80c4205b7caa2980..e728e373d86585cb666d1b6a1f79ba800f622aac 100644 (file)
@@ -36,7 +36,9 @@ namespace ParaMEDMEM
   {
   public:
     static MEDCouplingDefinitionTimeSlice *New(const MEDCouplingFieldDouble *f, int meshId, const std::vector<int>& arrId, int fieldId) throw(INTERP_KERNEL::Exception);
+    static MEDCouplingDefinitionTimeSlice *New(TypeOfTimeDiscretization type, const std::vector<int>& tiI, const std::vector<double>& tiD) throw(INTERP_KERNEL::Exception);
     int getArrayId() const { return _array_id; }
+    virtual MEDCouplingDefinitionTimeSlice *copy() const = 0;
     virtual bool isEqual(const MEDCouplingDefinitionTimeSlice& other, double eps) const;
     virtual void getHotSpotsTime(std::vector<double>& ret) const = 0;
     virtual void getIdsOnTime(double tm, double eps, int& meshId, int& arrId, int& arrIdInField, int& fieldId) const throw(INTERP_KERNEL::Exception) = 0;
@@ -46,11 +48,14 @@ namespace ParaMEDMEM
     virtual void appendRepr(std::ostream& stream) const;
     virtual double getStartTime() const = 0;
     virtual double getEndTime() const = 0;
+    virtual void getTinySerializationInformation(std::vector<int>& tiI, std::vector<double>& tiD) const = 0;
+    virtual TypeOfTimeDiscretization getTimeType() const = 0;
     bool isFullyIncludedInMe(const MEDCouplingDefinitionTimeSlice *other, double eps) const;
     bool isOverllapingWithMe(const MEDCouplingDefinitionTimeSlice *other, double eps) const;
     bool isAfterMe(const MEDCouplingDefinitionTimeSlice *other, double eps) const;
     bool isBeforeMe(const MEDCouplingDefinitionTimeSlice *other, double eps) const;
   protected:
+    MEDCouplingDefinitionTimeSlice() { }
     MEDCouplingDefinitionTimeSlice(const MEDCouplingFieldDouble *f, int meshId, int arrId, int fieldId) throw(INTERP_KERNEL::Exception);
   protected:
     int _mesh_id;
@@ -61,6 +66,8 @@ namespace ParaMEDMEM
   class MEDCouplingDefinitionTimeSliceInst : public MEDCouplingDefinitionTimeSlice
   {
   public:
+    static MEDCouplingDefinitionTimeSliceInst *New(const std::vector<int>& tiI, const std::vector<double>& tiD);
+    MEDCouplingDefinitionTimeSlice *copy() const;
     bool isEqual(const MEDCouplingDefinitionTimeSlice& other, double eps) const;
     void getHotSpotsTime(std::vector<double>& ret) const;
     void getIdsOnTime(double tm, double eps, int& meshId, int& arrId, int& arrIdInField, int& fieldId) const throw(INTERP_KERNEL::Exception);
@@ -68,8 +75,13 @@ namespace ParaMEDMEM
     void appendRepr(std::ostream& stream) const;
     double getStartTime() const;
     double getEndTime() const;
+    void getTinySerializationInformation(std::vector<int>& tiI, std::vector<double>& tiD) const;
+    void unserialize(const std::vector<int>& tiI, const std::vector<double>& tiD);
+    TypeOfTimeDiscretization getTimeType() const;
   public:
     MEDCouplingDefinitionTimeSliceInst(const MEDCouplingFieldDouble *f, int meshId, int arrId, int fieldId) throw(INTERP_KERNEL::Exception);
+  protected:
+    MEDCouplingDefinitionTimeSliceInst() { }
   protected:
     double _instant;
   };
@@ -77,6 +89,8 @@ namespace ParaMEDMEM
   class MEDCouplingDefinitionTimeSliceCstOnTI : public  MEDCouplingDefinitionTimeSlice
   {
   public:
+    static MEDCouplingDefinitionTimeSliceCstOnTI *New(const std::vector<int>& tiI, const std::vector<double>& tiD);
+    MEDCouplingDefinitionTimeSlice *copy() const;
     bool isEqual(const MEDCouplingDefinitionTimeSlice& other, double eps) const;
     void getHotSpotsTime(std::vector<double>& ret) const;
     void getIdsOnTime(double tm, double eps, int& meshId, int& arrId, int& arrIdInField, int& fieldId) const throw(INTERP_KERNEL::Exception);
@@ -84,17 +98,23 @@ namespace ParaMEDMEM
     void appendRepr(std::ostream& stream) const;
     double getStartTime() const;
     double getEndTime() const;
+    void getTinySerializationInformation(std::vector<int>& tiI, std::vector<double>& tiD) const;
+    void unserialize(const std::vector<int>& tiI, const std::vector<double>& tiD);
+    TypeOfTimeDiscretization getTimeType() const;
   public:
     MEDCouplingDefinitionTimeSliceCstOnTI(const MEDCouplingFieldDouble *f, int meshId, int arrId, int fieldId) throw(INTERP_KERNEL::Exception);
+  protected:
+    MEDCouplingDefinitionTimeSliceCstOnTI() { }
   protected:
     double _start;
     double _end;
   };
   
-
   class MEDCouplingDefinitionTimeSliceLT : public MEDCouplingDefinitionTimeSlice
   {
   public:
+    static MEDCouplingDefinitionTimeSliceLT *New(const std::vector<int>& tiI, const std::vector<double>& tiD);
+    MEDCouplingDefinitionTimeSlice *copy() const;
     bool isEqual(const MEDCouplingDefinitionTimeSlice& other, double eps) const;
     void getHotSpotsTime(std::vector<double>& ret) const;
     void getIdsOnTime(double tm, double eps, int& meshId, int& arrId, int& arrIdInField, int& fieldId) const throw(INTERP_KERNEL::Exception);
@@ -103,8 +123,13 @@ namespace ParaMEDMEM
     double getStartTime() const;
     double getEndTime() const;
     int getEndId() const;
+    void getTinySerializationInformation(std::vector<int>& tiI, std::vector<double>& tiD) const;
+    void unserialize(const std::vector<int>& tiI, const std::vector<double>& tiD);
+    TypeOfTimeDiscretization getTimeType() const;
   public:
     MEDCouplingDefinitionTimeSliceLT(const MEDCouplingFieldDouble *f, int meshId, int arrId, int arr2Id, int fieldId) throw(INTERP_KERNEL::Exception);
+  protected:
+    MEDCouplingDefinitionTimeSliceLT() { }
   protected:
     int _array_id_end;
     double _start;
@@ -115,18 +140,22 @@ namespace ParaMEDMEM
   {
   public:
     MEDCouplingDefinitionTime();
-    bool isEqual(const MEDCouplingDefinitionTime& other, double eps) const;
     MEDCouplingDefinitionTime(const std::vector<const MEDCouplingFieldDouble *>& fs, const std::vector<int>& meshRefs, const std::vector<std::vector<int> >& arrRefs) throw(INTERP_KERNEL::Exception);
+    void assign(const MEDCouplingDefinitionTime& other);
+    bool isEqual(const MEDCouplingDefinitionTime& other) const;
     double getTimeResolution() const { return _eps; }
     void getIdsOnTimeRight(double tm, int& meshId, int& arrId, int& arrIdInField, int& fieldId) const throw(INTERP_KERNEL::Exception);
     void getIdsOnTimeLeft(double tm, int& meshId, int& arrId, int& arrIdInField, int& fieldId) const throw(INTERP_KERNEL::Exception);
+    void getIdsOnTime(double tm, std::vector<int>& meshIds, std::vector<int>& arrIds, std::vector<int>& arrIdsInField, std::vector<int>& fieldIds) const throw(INTERP_KERNEL::Exception);
     std::vector<double> getHotSpotsTime() const;
     void appendRepr(std::ostream& stream) const;
-  private:
-    void getIdsOnTime(double tm, std::vector<int>& meshIds, std::vector<int>& arrIds, std::vector<int>& arrIdsInField, std::vector<int>& fieldIds) const throw(INTERP_KERNEL::Exception);
+  public:
+    void getTinySerializationInformation(std::vector<int>& tinyInfoI, std::vector<double>& tinyInfoD) const;
+    void unserialize(const std::vector<int>& tinyInfoI, const std::vector<double>& tinyInfoD);
   private:
     double _eps;
     std::vector< MEDCouplingAutoRefCountObjectPtr<MEDCouplingDefinitionTimeSlice> > _slices;
+    static const double EPS_DFT;
   };
 }
 
index c288087c126867e99f4a346b784105d1171d5b63..b6d9558a5be570e5788670d27ed900b11539631f 100644 (file)
@@ -306,7 +306,7 @@ void MEDCouplingExtrudedMesh::getBoundingBox(double *bbox) const
   bbox[2*id+1]+=tmp[id];
 }
 
-void MEDCouplingExtrudedMesh::updateTime()
+void MEDCouplingExtrudedMesh::updateTime() const
 {
   if(_mesh2D)
     {
index 91c5a80ca6050ed7502e9b594be3032a256e8faf..7d87aabf28232a9591a8864230bda1523a7b6beb 100644 (file)
@@ -59,7 +59,7 @@ namespace ParaMEDMEM
     std::string advancedRepr() const;
     void checkCoherency() const throw (INTERP_KERNEL::Exception);
     void getBoundingBox(double *bbox) const;
-    void updateTime();
+    void updateTime() const;
     void renumberCells(const int *old2NewBg, bool check) throw(INTERP_KERNEL::Exception);
     MEDCouplingUMesh *getMesh2D() const { return _mesh2D; }
     MEDCouplingUMesh *getMesh1D() const { return _mesh1D; }
index 91534d6875bb6ed68ea85be18000ed0600892a17..6e22c527a7f2b1a7efc14186b326707b301804b7 100644 (file)
@@ -86,7 +86,7 @@ bool MEDCouplingField::areStrictlyCompatible(const MEDCouplingField *other) cons
   return _mesh==other->_mesh;
 }
 
-void MEDCouplingField::updateTime()
+void MEDCouplingField::updateTime() const
 {
   if(_mesh)
     updateTimeWith(*_mesh);
index 2823103b257f26b8291ec22ea8470eb9d3be340f..da3acc1ad743d6109d0969a6550f88007e809a5a 100644 (file)
@@ -71,7 +71,7 @@ namespace ParaMEDMEM
     void getCellIdsHavingGaussLocalization(int locId, std::vector<int>& cellIds) const throw(INTERP_KERNEL::Exception);
     const MEDCouplingGaussLocalization& getGaussLocalization(int locId) const throw(INTERP_KERNEL::Exception);
   protected:
-    void updateTime();
+    void updateTime() const;
   protected:
     MEDCouplingField(TypeOfField type);
     MEDCouplingField(const MEDCouplingField& other);
index 10da3cf4b115bf373618493a197f172eb6a0f3d3..92ba480997a222c812a7221cbf70813d717b31f9 100644 (file)
@@ -93,7 +93,7 @@ bool MEDCouplingFieldDiscretization::isEqualWithoutConsideringStr(const MEDCoupl
 /*!
  * Excepted for MEDCouplingFieldDiscretizationPerCell no underlying TimeLabel object : nothing to do in generally.
  */
-void MEDCouplingFieldDiscretization::updateTime()
+void MEDCouplingFieldDiscretization::updateTime() const
 {
 }
 
@@ -594,7 +594,7 @@ MEDCouplingFieldDiscretizationPerCell::MEDCouplingFieldDiscretizationPerCell(con
     _discr_per_cell=arr->deepCpy();
 }
 
-void MEDCouplingFieldDiscretizationPerCell::updateTime()
+void MEDCouplingFieldDiscretizationPerCell::updateTime() const
 {
   if(_discr_per_cell)
     updateTimeWith(*_discr_per_cell);
index 1c742d2e20078796979e7a1671dd2948346b9f9d..80a3f49aeb2561f8866fb120be310e89389318dc 100644 (file)
@@ -42,7 +42,7 @@ namespace ParaMEDMEM
     static MEDCouplingFieldDiscretization *New(TypeOfField type);
     double getPrecision() const { return _precision; }
     void setPrecision(double val) { _precision=val; }
-    void updateTime();
+    void updateTime() const;
     static TypeOfField getTypeOfFieldFromStringRepr(const char *repr) throw(INTERP_KERNEL::Exception);
     virtual TypeOfField getEnum() const = 0;
     virtual bool isEqual(const MEDCouplingFieldDiscretization *other, double eps) const = 0;
@@ -159,7 +159,7 @@ namespace ParaMEDMEM
     MEDCouplingFieldDiscretizationPerCell();
     MEDCouplingFieldDiscretizationPerCell(const MEDCouplingFieldDiscretizationPerCell& other);
     ~MEDCouplingFieldDiscretizationPerCell();
-    void updateTime();
+    void updateTime() const;
     void checkCoherencyBetween(const MEDCouplingMesh *mesh, const DataArrayDouble *da) const throw(INTERP_KERNEL::Exception);
     bool isEqual(const MEDCouplingFieldDiscretization *other, double eps) const;
     bool isEqualWithoutConsideringStr(const MEDCouplingFieldDiscretization *other, double eps) const;
index 0df85211ae473c446f0b3d3976821019e202b8e2..ae8d1ff35d9f2140743d1a801632bbaf2e2e3243 100644 (file)
@@ -899,7 +899,7 @@ int MEDCouplingFieldDouble::getNumberOfValues() const throw(INTERP_KERNEL::Excep
   return getArray()->getNbOfElems();
 }
 
-void MEDCouplingFieldDouble::updateTime()
+void MEDCouplingFieldDouble::updateTime() const
 {
   MEDCouplingField::updateTime();
   updateTimeWith(*_time_discr);
index 990ca94dc9fb10e471ffc47b2f3fba6682d62a80..b10f4be6d6a33c2b7002a4b2e034e118216ce67d 100644 (file)
@@ -114,7 +114,7 @@ namespace ParaMEDMEM
     int getNumberOfComponents() const throw(INTERP_KERNEL::Exception);
     int getNumberOfTuples() const throw(INTERP_KERNEL::Exception);
     int getNumberOfValues() const throw(INTERP_KERNEL::Exception);
-    void updateTime();
+    void updateTime() const;
     //
     void getTinySerializationIntInformation(std::vector<int>& tinyInfo) const;
     void getTinySerializationDbleInformation(std::vector<double>& tinyInfo) const;
index b8978b053359faaea5119d38ccdf607b4da730fc..39842a43bf4eb6f7f6f0f96b127a1d4cf6b299f4 100644 (file)
@@ -159,3 +159,6 @@ MEDCouplingFieldOverTime::MEDCouplingFieldOverTime(const std::vector<MEDCoupling
   checkCoherency();
 }
 
+MEDCouplingFieldOverTime::MEDCouplingFieldOverTime()
+{
+}
index 565fdbb9d8112a4a28f82eed423041050103ee4a..28b6426941f1573166591850bb6ccab8c4420007 100644 (file)
@@ -37,11 +37,16 @@ namespace ParaMEDMEM
     std::string simpleRepr() const;
     bool isEqual(const MEDCouplingMultiFields *other, double meshPrec, double valsPrec) const;
     bool isEqualWithoutConsideringStr(const MEDCouplingMultiFields *other, double meshPrec, double valsPrec) const;
+    //void getIdsToFetch(double time, int& fieldId, int& arrId, int& meshId) const;
+    //void setFieldOnId(int fieldId, MEDCouplingFieldDouble *f);
+    //void dispatchPointers();
     std::vector<MEDCouplingMesh *> getMeshes() const throw(INTERP_KERNEL::Exception);
     std::vector<MEDCouplingMesh *> getDifferentMeshes(std::vector<int>& refs) const throw(INTERP_KERNEL::Exception);
     std::vector<DataArrayDouble *> getArrays() const throw(INTERP_KERNEL::Exception);
     std::vector<DataArrayDouble *> getDifferentArrays(std::vector< std::vector<int> >& refs) const throw(INTERP_KERNEL::Exception);
     MEDCouplingDefinitionTime getDefinitionTimeZone() const;
+  protected:
+    MEDCouplingFieldOverTime();
   private:
     MEDCouplingFieldOverTime(const std::vector<MEDCouplingFieldDouble *>& fs) throw(INTERP_KERNEL::Exception);
   };
index 42656389e2730613833c44f2cbb3b140873c9b7d..c731e263426bc0196eb228ea4cf4cffe6144cf7a 100644 (file)
@@ -1003,7 +1003,7 @@ DataArrayDouble *DataArrayDouble::applyFunc(int nbOfComp, const char *func) cons
   int oldNbOfComp=getNumberOfComponents();
   if((int)vars.size()>oldNbOfComp)
     {
-      std::ostringstream oss; oss << "The field has " << oldNbOfComp << " components and there are ";
+      std::ostringstream oss; oss << "The field has " << oldNbOfComp << " components and there are ";
       oss << vars.size() << " variables : ";
       std::copy(vars.begin(),vars.end(),std::ostream_iterator<std::string>(oss," "));
       throw INTERP_KERNEL::Exception(oss.str().c_str());
@@ -2549,3 +2549,74 @@ int *DataArrayInt::CheckAndPreparePermutation(const int *start, const int *end)
   delete [] work;
   return ret;
 }
+
+/*!
+ * Useless method for end user. Only for MPI/Corba/File serialsation for multi arrays class.
+ * Server side.
+ */
+void DataArrayInt::getTinySerializationIntInformation(std::vector<int>& tinyInfo) const
+{
+  tinyInfo.resize(2);
+  if(isAllocated())
+    {
+      tinyInfo[0]=getNumberOfTuples();
+      tinyInfo[1]=getNumberOfComponents();
+    }
+  else
+    {
+      tinyInfo[0]=-1;
+      tinyInfo[1]=-1;
+    }
+}
+
+/*!
+ * Useless method for end user. Only for MPI/Corba/File serialsation for multi arrays class.
+ * Server side.
+ */
+void DataArrayInt::getTinySerializationStrInformation(std::vector<std::string>& tinyInfo) const
+{
+  if(isAllocated())
+    {
+      int nbOfCompo=getNumberOfComponents();
+      tinyInfo.resize(nbOfCompo+1);
+      tinyInfo[0]=getName();
+      for(int i=0;i<nbOfCompo;i++)
+        tinyInfo[i+1]=getInfoOnComponent(i);
+    }
+  else
+    {
+      tinyInfo.resize(1);
+      tinyInfo[0]=getName();
+    }
+}
+
+/*!
+ * Useless method for end user. Only for MPI/Corba/File serialsation for multi arrays class.
+ * This method returns if a feeding is needed.
+ */
+bool DataArrayInt::resizeForUnserialization(const std::vector<int>& tinyInfoI)
+{
+  int nbOfTuple=tinyInfoI[0];
+  int nbOfComp=tinyInfoI[1];
+  if(nbOfTuple!=-1 || nbOfComp!=-1)
+    {
+      alloc(nbOfTuple,nbOfComp);
+      return true;
+    }
+  return false;
+}
+
+/*!
+ * Useless method for end user. Only for MPI/Corba/File serialsation for multi arrays class.
+ * This method returns if a feeding is needed.
+ */
+void DataArrayInt::finishUnserialization(const std::vector<int>& tinyInfoI, const std::vector<std::string>& tinyInfoS)
+{
+  setName(tinyInfoS[0].c_str());
+  if(isAllocated())
+    {
+      int nbOfCompo=getNumberOfComponents();
+      for(int i=0;i<nbOfCompo;i++)
+        setInfoOnComponent(i,tinyInfoS[i+1].c_str());
+    }
+}
index 1cfa057f50986922b9262a777a3dba3e4fb01c8c..08bb0ddf3c4efd916c4d0a89c8299f39ae678255 100644 (file)
@@ -208,7 +208,7 @@ namespace ParaMEDMEM
     MEDCOUPLING_EXPORT static DataArrayDouble *Divide(const DataArrayDouble *a1, const DataArrayDouble *a2) throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void divideEqual(const DataArrayDouble *other) throw(INTERP_KERNEL::Exception);
     //! nothing to do here because this class does not aggregate any TimeLabel instance.
-    MEDCOUPLING_EXPORT void updateTime() { }
+    MEDCOUPLING_EXPORT void updateTime() const { }
   public:
     void getTinySerializationIntInformation(std::vector<int>& tinyInfo) const;
     void getTinySerializationStrInformation(std::vector<std::string>& tinyInfo) const;
@@ -296,9 +296,14 @@ namespace ParaMEDMEM
     MEDCOUPLING_EXPORT void useArray(const int *array, bool ownership, DeallocType type, int nbOfTuple, int nbOfCompo);
     MEDCOUPLING_EXPORT void writeOnPlace(int id, int element0, const int *others, int sizeOfOthers) { _mem.writeOnPlace(id,element0,others,sizeOfOthers); }
     //! nothing to do here because this class does not aggregate any TimeLabel instance.
-    MEDCOUPLING_EXPORT void updateTime() { }
+    MEDCOUPLING_EXPORT void updateTime() const { }
   public:
     MEDCOUPLING_EXPORT static int *CheckAndPreparePermutation(const int *start, const int *end);
+  public:
+    void getTinySerializationIntInformation(std::vector<int>& tinyInfo) const;
+    void getTinySerializationStrInformation(std::vector<std::string>& tinyInfo) const;
+    bool resizeForUnserialization(const std::vector<int>& tinyInfoI);
+    void finishUnserialization(const std::vector<int>& tinyInfoI, const std::vector<std::string>& tinyInfoS);
   private:
     DataArrayInt() { }
   private:
index aaf3d6f989220892c47d16a5526c1b22be82fb3a..013ca88b67e7a245f025dae0f90d63bddf95241b 100644 (file)
@@ -170,15 +170,15 @@ const MEDCouplingFieldDouble *MEDCouplingMultiFields::getFieldAtPos(int id) cons
   return _fs[id];
 }
 
-void MEDCouplingMultiFields::updateTime()
+void MEDCouplingMultiFields::updateTime() const
 {
-  std::vector< MEDCouplingAutoRefCountObjectPtr<MEDCouplingFieldDouble> >::iterator it=_fs.begin();
+  std::vector< MEDCouplingAutoRefCountObjectPtr<MEDCouplingFieldDouble> >::const_iterator it=_fs.begin();
   for(;it!=_fs.end();it++)
-    if((MEDCouplingFieldDouble *)(*it))
+    if((const MEDCouplingFieldDouble *)(*it))
       (*it)->updateTime();
   it=_fs.begin();
   for(;it!=_fs.end();it++)
-    if((MEDCouplingFieldDouble *)(*it))
+    if((const MEDCouplingFieldDouble *)(*it))
       updateTimeWith(*(*it));
 }
 
index 26a6a1a18244b2ca996c89ea8b89cac7bb1e0c1a..e0999173d5fe4c2186b79d441aec9486f51c4c1b 100644 (file)
@@ -57,7 +57,7 @@ namespace ParaMEDMEM
     virtual std::vector<MEDCouplingMesh *> getDifferentMeshes(std::vector<int>& refs) const throw(INTERP_KERNEL::Exception);
     virtual std::vector<DataArrayDouble *> getArrays() const throw(INTERP_KERNEL::Exception);
     virtual std::vector<DataArrayDouble *> getDifferentArrays(std::vector< std::vector<int> >& refs) const throw(INTERP_KERNEL::Exception);
-    void updateTime();
+    void updateTime() const;
     void getTinySerializationInformation(std::vector<int>& tinyInfo, std::vector<double>& tinyInfo2, int& nbOfDiffMeshes, int& nbOfDiffArr) const;
     void finishUnserialization(const std::vector<int>& tinyInfoI, const std::vector<double>& tinyInfoD,
                                const std::vector<MEDCouplingFieldTemplate *>& ft, const std::vector<MEDCouplingMesh *>& ms,
index 4fa44dc4f0126bd4be74315bd0f5bb15d422f2e6..30a3ceff039725bf29f2f441a98b6c4e2ea4b9c4 100644 (file)
@@ -65,7 +65,7 @@ int MEDCouplingPointSet::getSpaceDimension() const
     throw INTERP_KERNEL::Exception("Unable to get space dimension because no coordinates specified !");
 }
 
-void MEDCouplingPointSet::updateTime()
+void MEDCouplingPointSet::updateTime() const
 {
   if(_coords)
     {
@@ -174,7 +174,7 @@ DataArrayInt *MEDCouplingPointSet::buildPermArrayForMergeNode(int limitNodeId, d
 /*!
  * This methods searches for each node n1 nodes in _coords that are less far than 'prec' from n1. if any these nodes are stored in params
  * comm and commIndex.
- * @param limitNodeId is the limit node id. All nodes which id is strictly lower than 'limitNodeId' will not be merged.
+ * @param limitNodeId is the limit node id. All nodes which id is strictly lower than 'limitNodeId' will not be merged each other.
  * @param comm out parameter (not inout)
  * @param commIndex out parameter (not inout)
  */
index 0085f7f40cb541ba783d679a9c5f3d8b26593894..b84a128d4e2b35d95b4eea463c8230247fa9f0b0 100644 (file)
@@ -42,7 +42,7 @@ namespace ParaMEDMEM
     MEDCouplingPointSet(const MEDCouplingPointSet& other, bool deepCpy);
     ~MEDCouplingPointSet();
   public:
-    void updateTime();
+    void updateTime() const;
     int getNumberOfNodes() const;
     int getSpaceDimension() const;
     void setCoords(DataArrayDouble *coords);
index 76026ff8c2cd77c7b15512f58ba7bf0af08aba2b..872ec333e15ebeb55f6d0b5be0194fddc8e0e67c 100644 (file)
@@ -335,7 +335,7 @@ int MEDCouplingRemapper::prepareEE(const char *method) throw(INTERP_KERNEL::Exce
   return 1;
 }
 
-void MEDCouplingRemapper::updateTime()
+void MEDCouplingRemapper::updateTime() const
 {
 }
 
index 14d402d0365d5a45e3db4e631866af24db86ea7a..07d2be0a0573c8a2b98be894fa23b23d187ef07d 100644 (file)
@@ -56,7 +56,7 @@ namespace ParaMEDMEM
   private:
     int prepareUU(const char *method) throw(INTERP_KERNEL::Exception);
     int prepareEE(const char *method) throw(INTERP_KERNEL::Exception);
-    void updateTime();
+    void updateTime() const;
     void releaseData(bool matrixSuppression);
     void computeDeno(NatureOfField nat, const MEDCouplingFieldDouble *srcField, const MEDCouplingFieldDouble *trgField);
     void computeDenoFromScratch(NatureOfField nat, const MEDCouplingFieldDouble *srcField, const MEDCouplingFieldDouble *trgField) throw(INTERP_KERNEL::Exception);
index 5e761d8fb3618c9638e1da73cbf6bdd95d7454e9..a86a7ca23d6b98a0cb6126df2723f5d9f3bdbc13 100644 (file)
@@ -83,7 +83,7 @@ void MEDCouplingTimeDiscretization::checkCoherency() const throw(INTERP_KERNEL::
     throw INTERP_KERNEL::Exception("time tolerance is expected to be greater than 0. !");
 }
 
-void MEDCouplingTimeDiscretization::updateTime()
+void MEDCouplingTimeDiscretization::updateTime() const
 {
   if(_array)
     updateTimeWith(*_array);
@@ -1893,7 +1893,7 @@ MEDCouplingTwoTimeSteps::MEDCouplingTwoTimeSteps(const MEDCouplingTwoTimeSteps&
     _end_array=0;
 }
 
-void MEDCouplingTwoTimeSteps::updateTime()
+void MEDCouplingTwoTimeSteps::updateTime() const
 {
   MEDCouplingTimeDiscretization::updateTime();
   if(_end_array)
index aa5e4ccd9c0eca16679765db69674094bb4d4518..844b197b5458906343699bcc368b8e037f3abc06 100644 (file)
@@ -38,7 +38,7 @@ namespace ParaMEDMEM
     MEDCouplingTimeDiscretization();
     MEDCouplingTimeDiscretization(const MEDCouplingTimeDiscretization& other, bool deepCpy);
   public:
-    void updateTime();
+    void updateTime() const;
     static MEDCouplingTimeDiscretization *New(TypeOfTimeDiscretization type);
     void setTimeUnit(const char *unit) { _time_unit=unit; }
     const char *getTimeUnit() const { return _time_unit.c_str(); }
@@ -341,7 +341,7 @@ namespace ParaMEDMEM
     MEDCouplingTwoTimeSteps();
     ~MEDCouplingTwoTimeSteps();
   public:
-    void updateTime();
+    void updateTime() const;
     void copyTinyAttrFrom(const MEDCouplingTimeDiscretization& other);
     void copyTinyStringsFrom(const MEDCouplingTimeDiscretization& other);
     DataArrayDouble *getEndArray() const;
index dad0d59002e271ccaf2fd67ea64ce8f40fd54e48..8c0115fbb6378e262fd63729b721b010555be14a 100644 (file)
@@ -31,18 +31,18 @@ TimeLabel::~TimeLabel()
 {
 }
 
- TimeLabel& TimeLabel::operator=(const TimeLabel& other)
+TimeLabel& TimeLabel::operator=(const TimeLabel& other)
 {
   _time=GLOBAL_TIME++;
   return *this;
 }
 
-void TimeLabel::declareAsNew()
+void TimeLabel::declareAsNew() const
 {
   _time=GLOBAL_TIME++;
 }
 
-void TimeLabel::updateTimeWith(const TimeLabel& other)
+void TimeLabel::updateTimeWith(const TimeLabel& other) const
 {
   if(_time<other._time)
     _time=other._time;
index 2a8facca71d53dc4ca24d532ba9875ddd237ecb8..786dc5b049a8f9a9fa00959e5ba9e0a0f7feb53a 100644 (file)
@@ -33,17 +33,17 @@ namespace ParaMEDMEM
   public:
     TimeLabel& operator=(const TimeLabel& other);
     //! This method should be called when write access has been done on this.
-    void declareAsNew();
+    void declareAsNew() const;
     //! This method should be called on high level classes as Field or Mesh to take into acount modifications done in aggragates objects.
-    virtual void updateTime() = 0;
+    virtual void updateTime() const = 0;
     unsigned int getTimeOfThis() const { return _time; }
   protected:
     TimeLabel();
     virtual ~TimeLabel();
-    void updateTimeWith(const TimeLabel& other);
+    void updateTimeWith(const TimeLabel& other) const;
   private:
     static unsigned int GLOBAL_TIME;
-    unsigned int _time;
+    mutable unsigned int _time;
   };
 }
 
index c4eaa64569ff1b26946b7644c33dd5238716823d..d07aff61c6eda3c3cf7f55e75b02dcbd4588cf57 100644 (file)
@@ -65,7 +65,7 @@ MEDCouplingUMesh *MEDCouplingUMesh::clone(bool recDeepCpy) const
   return new MEDCouplingUMesh(*this,recDeepCpy);
 }
 
-void MEDCouplingUMesh::updateTime()
+void MEDCouplingUMesh::updateTime() const
 {
   MEDCouplingPointSet::updateTime();
   if(_nodal_connec)
index 368d80d0f8ac251cd3f191ecf44fea168c843369..8eb9f9d61289cd8c85905358ff8dd9edef682b13 100644 (file)
@@ -35,7 +35,7 @@ namespace ParaMEDMEM
     MEDCOUPLING_EXPORT static MEDCouplingUMesh *New(const char *meshName, int meshDim);
     MEDCOUPLING_EXPORT MEDCouplingMesh *deepCpy() const;
     MEDCOUPLING_EXPORT MEDCouplingUMesh *clone(bool recDeepCpy) const;
-    MEDCOUPLING_EXPORT void updateTime();
+    MEDCOUPLING_EXPORT void updateTime() const;
     MEDCOUPLING_EXPORT MEDCouplingMeshType getType() const { return UNSTRUCTURED; }
     MEDCOUPLING_EXPORT bool isEqual(const MEDCouplingMesh *other, double prec) const;
     MEDCOUPLING_EXPORT bool isEqualWithoutConsideringStr(const MEDCouplingMesh *other, double prec) const;
index 5623de1716433acefbe91dcba950cb6533833251..53f6c52a53836599c2afa064ae60be528509b6da 100644 (file)
@@ -90,7 +90,6 @@ void MEDCouplingBasicsTest::testFieldOverTime1()
   f4bis->setTime(2.7,20,21);
   MEDCouplingFieldOverTime *fot=MEDCouplingFieldOverTime::New(fs);
   MEDCouplingDefinitionTime dt=fot->getDefinitionTimeZone();
-  dt.appendRepr(std::cout);
   std::vector<double> hs=dt.getHotSpotsTime();
   CPPUNIT_ASSERT_EQUAL(6,(int)hs.size());
   const double expected1[]={0.2,0.7,1.2,1.35,1.7,2.7};
@@ -138,6 +137,21 @@ void MEDCouplingBasicsTest::testFieldOverTime1()
   CPPUNIT_ASSERT_EQUAL(4,arrId);
   CPPUNIT_ASSERT_EQUAL(0,arrIdInField);
   CPPUNIT_ASSERT_EQUAL(4,fieldId);
+  //
+  MEDCouplingDefinitionTime dt2;
+  CPPUNIT_ASSERT(!dt2.isEqual(dt));
+  dt2.assign(dt);
+  dt2.assign(dt);//to check memory management
+  CPPUNIT_ASSERT(dt2.isEqual(dt));
+  //
+  MEDCouplingDefinitionTime dt3;
+  std::vector<int> tmp1;
+  std::vector<double> tmp2;
+  CPPUNIT_ASSERT(!dt2.isEqual(dt3));
+  dt2.getTinySerializationInformation(tmp1,tmp2);
+  dt3.unserialize(tmp1,tmp2);
+  CPPUNIT_ASSERT(dt2.isEqual(dt3));
+  //
   for(std::vector<MEDCouplingFieldDouble *>::iterator it=fs.begin();it!=fs.end();it++)
     (*it)->decrRef();
   fot->decrRef();
index 42ecdfcd9c4bfe2fa83f87fc43cb9b3bfc08b1ca..545c936ced0a24b4869f6c412ad87753f3f8ac41 100644 (file)
@@ -476,7 +476,7 @@ namespace ParaMEDMEM
   class MEDCouplingPointSet : public ParaMEDMEM::MEDCouplingMesh
     {
     public:
-      void updateTime();
+      void updateTime() const;
       void setCoords(DataArrayDouble *coords) throw(INTERP_KERNEL::Exception);
       DataArrayDouble *getCoordinatesAndOwner() const throw(INTERP_KERNEL::Exception);
       bool areCoordsEqual(const MEDCouplingPointSet& other, double prec) const throw(INTERP_KERNEL::Exception);
@@ -717,7 +717,7 @@ namespace ParaMEDMEM
     static MEDCouplingUMesh *New();
     static MEDCouplingUMesh *New(const char *meshName, int meshDim);
     MEDCouplingUMesh *clone(bool recDeepCpy) const;
-    void updateTime();
+    void updateTime() const;
     void checkCoherency() const throw(INTERP_KERNEL::Exception);
     void setMeshDimension(int meshDim) throw(INTERP_KERNEL::Exception);
     void allocateCells(int nbOfCells) throw(INTERP_KERNEL::Exception);
@@ -1868,7 +1868,7 @@ namespace ParaMEDMEM
     void setEndOrder(int order) throw(INTERP_KERNEL::Exception);
     void setTimeValue(double val) throw(INTERP_KERNEL::Exception);
     void setEndTimeValue(double val) throw(INTERP_KERNEL::Exception);
-    void updateTime() throw(INTERP_KERNEL::Exception);
+    void updateTime() const throw(INTERP_KERNEL::Exception);
     void changeUnderlyingMesh(const MEDCouplingMesh *other, int levOfCheck, double prec) throw(INTERP_KERNEL::Exception);
     void substractInPlaceDM(const MEDCouplingFieldDouble *f, int levOfCheck, double prec) throw(INTERP_KERNEL::Exception);
     bool mergeNodes(double eps, double epsOnVals=1e-15) throw(INTERP_KERNEL::Exception);
@@ -2339,6 +2339,11 @@ namespace ParaMEDMEM
   class MEDCouplingDefinitionTime
   {
   public:
+    MEDCouplingDefinitionTime();
+    void assign(const MEDCouplingDefinitionTime& other);
+    bool isEqual(const MEDCouplingDefinitionTime& other) const;
+    double getTimeResolution() const;
+    std::vector<double> getHotSpotsTime() const;
     %extend
       {
         std::string __str__() const
@@ -2347,6 +2352,30 @@ namespace ParaMEDMEM
             self->appendRepr(oss);
             return oss.str();
           }
+
+        PyObject *getIdsOnTimeRight(double tm) const throw(INTERP_KERNEL::Exception)
+        {
+          int meshId,arrId,arrIdInField,fieldId;
+          self->getIdsOnTimeRight(tm,meshId,arrId,arrIdInField,fieldId);
+          PyObject *res=PyList_New(4);
+          PyList_SetItem(res,0,PyInt_FromLong(meshId));
+          PyList_SetItem(res,1,PyInt_FromLong(arrId));
+          PyList_SetItem(res,2,PyInt_FromLong(arrIdInField));
+          PyList_SetItem(res,3,PyInt_FromLong(fieldId));
+          return res;
+        }
+
+        PyObject *getIdsOnTimeLeft(double tm) const throw(INTERP_KERNEL::Exception)
+        {
+          int meshId,arrId,arrIdInField,fieldId;
+          self->getIdsOnTimeLeft(tm,meshId,arrId,arrIdInField,fieldId);
+          PyObject *res=PyList_New(4);
+          PyList_SetItem(res,0,PyInt_FromLong(meshId));
+          PyList_SetItem(res,1,PyInt_FromLong(arrId));
+          PyList_SetItem(res,2,PyInt_FromLong(arrIdInField));
+          PyList_SetItem(res,3,PyInt_FromLong(fieldId));
+          return res;
+        }
       }
   };
 
@@ -2355,6 +2384,7 @@ namespace ParaMEDMEM
   public:
     double getTimeTolerance() const throw(INTERP_KERNEL::Exception);
     MEDCouplingDefinitionTime getDefinitionTimeZone() const;
+    
     %extend
       {
         std::string __str__() const
index 1d672befda5c90950dd0ad8a1c5855bd60ecb296..5249f0f0b9540f192c3ed59221f88b05082aa84e 100644 (file)
@@ -6006,6 +6006,73 @@ class MEDCouplingBasicsTest(unittest.TestCase):
         self.assertTrue(mfs.isEqual(mfs2,1e-12,1e-12))
         pass
 
+    def testFieldOverTime1(self):
+        fs=MEDCouplingDataForTest.buildMultiFields_2();
+        self.assertRaises(InterpKernelException,MEDCouplingFieldOverTime.New,fs);
+        f4bis=fs[4].buildNewTimeReprFromThis(ONE_TIME,False);
+        fs[4]=f4bis;
+        self.assertRaises(InterpKernelException,MEDCouplingFieldOverTime.New,fs);
+        f4bis.setTime(2.7,20,21);
+        fot=MEDCouplingFieldOverTime.New(fs);
+        dt=fot.getDefinitionTimeZone();
+        hs=dt.getHotSpotsTime();
+        self.assertEqual(6,len(hs));
+        expected1=[0.2,0.7,1.2,1.35,1.7,2.7]
+        for i in xrange(6):
+            self.assertAlmostEqual(expected1[i],hs[i],12);
+            pass
+        meshId,arrId,arrIdInField,fieldId=dt.getIdsOnTimeRight(0.2);
+        self.assertEqual(0,meshId);
+        self.assertEqual(0,arrId);
+        self.assertEqual(0,arrIdInField);
+        self.assertEqual(0,fieldId);
+        #
+        meshId,arrId,arrIdInField,fieldId=dt.getIdsOnTimeRight(0.7);
+        self.assertEqual(0,meshId);
+        self.assertEqual(1,arrId);
+        self.assertEqual(0,arrIdInField);
+        self.assertEqual(1,fieldId);
+        #
+        meshId,arrId,arrIdInField,fieldId=dt.getIdsOnTimeLeft(1.2);#**** WARNING left here
+        self.assertEqual(0,meshId);
+        self.assertEqual(2,arrId);
+        self.assertEqual(1,arrIdInField);
+        self.assertEqual(1,fieldId);
+        #
+        meshId,arrId,arrIdInField,fieldId=dt.getIdsOnTimeRight(1.2);#**** WARNING right again here
+        self.assertEqual(1,meshId);
+        self.assertEqual(3,arrId);
+        self.assertEqual(0,arrIdInField);
+        self.assertEqual(2,fieldId);
+        #
+        meshId,arrId,arrIdInField,fieldId=dt.getIdsOnTimeRight(1.35);
+        self.assertEqual(1,meshId);
+        self.assertEqual(3,arrId);
+        self.assertEqual(0,arrIdInField);
+        self.assertEqual(2,fieldId);
+        #
+        meshId,arrId,arrIdInField,fieldId=dt.getIdsOnTimeRight(1.7);
+        self.assertEqual(0,meshId);
+        self.assertEqual(3,arrId);
+        self.assertEqual(0,arrIdInField);
+        self.assertEqual(3,fieldId);
+        #
+        meshId,arrId,arrIdInField,fieldId=dt.getIdsOnTimeRight(2.7);
+        self.assertEqual(1,meshId);
+        self.assertEqual(4,arrId);
+        self.assertEqual(0,arrIdInField);
+        self.assertEqual(4,fieldId);
+        #
+        dt2=MEDCouplingDefinitionTime();
+        self.assertTrue(not dt2.isEqual(dt));
+        dt2.assign(dt);
+        dt2.assign(dt);#to check memory management
+        self.assertTrue(dt2.isEqual(dt));
+        #
+        dt3=MEDCouplingDefinitionTime();
+        #
+        pass
+
     def testDAICheckAndPreparePermutation1(self):
         vals1=[9,10,0,6,4,11,3,7];
         expect1=[5,6,0,3,2,7,1,4];
index 846495e78626f197244b45d59aab42e2a571c70f..7b57ab6634a7be722c4aaa971436383e3d5657ba 100644 (file)
@@ -376,6 +376,60 @@ class MEDCouplingDataForTest:
         ret=MEDCouplingMultiFields.New([f0,f1,f2,f3,f4]);
         return ret;
 
+    def buildMultiFields_2(cls):
+        m1=MEDCouplingDataForTest.build2DTargetMesh_1();
+        m1.setName("m1");
+        m2=MEDCouplingDataForTest.build2DTargetMesh_1();
+        m2.setName("m2");
+        vals0=[-0.7,-1.,-2.,-3.,-4.];
+        vals1=[0.,1.,2.,3.,4.];
+        vals1_1=[170.,171.,172.,173.,174.];
+        vals2=[5.,6.,7.,8.,9.];
+        vals4=[15.,16.,17.,18.,19.];
+        d0=DataArrayDouble.New();
+        d0.setValues(vals0,5,1);
+        d1=DataArrayDouble.New();
+        d1.setValues(vals1,5,1);
+        d1_1=DataArrayDouble.New();
+        d1_1.setValues(vals1_1,5,1);
+        d2=DataArrayDouble.New();
+        d2.setValues(vals2,5,1);
+        d4=DataArrayDouble.New();
+        d4.setValues(vals4,5,1);
+        d0.setName("d0"); d1.setName("d1"); d1_1.setName("d1_1"); d2.setName("d2"); d4.setName("d4");
+        d0.setInfoOnComponent(0,"c1");
+        d1.setInfoOnComponent(0,"c6");
+        d1_1.setInfoOnComponent(0,"c9");
+        d2.setInfoOnComponent(0,"c5");
+        d4.setInfoOnComponent(0,"c7");
+        f0=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME);
+        f0.setMesh(m1);
+        f0.setArray(d0);
+        f0.setTime(0.2,5,6);
+        f0.setName("f0");
+        f1=MEDCouplingFieldDouble.New(ON_CELLS,LINEAR_TIME);
+        f1.setMesh(m1);
+        f1.setArrays([d1,d1_1]);
+        f1.setStartTime(0.7,7,8);
+        f1.setEndTime(1.2,9,10);
+        f1.setName("f1");
+        f2=MEDCouplingFieldDouble.New(ON_CELLS,CONST_ON_TIME_INTERVAL);
+        f2.setMesh(m2);
+        f2.setArray(d2);
+        f2.setTime(1.2,11,12);
+        f2.setEndTime(1.5,13,14);
+        f2.setName("f2");
+        f3=MEDCouplingFieldDouble.New(ON_CELLS,ONE_TIME);
+        f3.setMesh(m1);
+        f3.setArray(d2);
+        f3.setTime(1.7,15,16);
+        f3.setName("f3");
+        f4=MEDCouplingFieldDouble.New(ON_CELLS,NO_TIME);
+        f4.setMesh(m2);
+        f4.setArray(d4);
+        f4.setName("f4");
+        return [f0,f1,f2,f3,f4]
+
     build2DTargetMesh_1=classmethod(build2DTargetMesh_1)
     build2DSourceMesh_1=classmethod(build2DSourceMesh_1)
     build3DTargetMesh_1=classmethod(build3DTargetMesh_1)
@@ -391,4 +445,5 @@ class MEDCouplingDataForTest:
     build2DTargetMesh_3=classmethod(build2DTargetMesh_3)
     build2DTargetMesh_4=classmethod(build2DTargetMesh_4)
     buildMultiFields_1=classmethod(buildMultiFields_1)
+    buildMultiFields_2=classmethod(buildMultiFields_2)
     pass