Salome HOME
Merge branch 'master' of ssh://git.salome-platform.org/tools/medcoupling
[tools/medcoupling.git] / src / MEDCoupling / MEDCouplingFieldInt.cxx
index aab9a45f1e5091a25616ca5d74f6b183541acce3..f6b6fa2978130f15f38b684ea2e585b498b8c944 100644 (file)
 // Author : Yann Pora (EDF R&D)
 
 #include "MEDCouplingFieldInt.hxx"
+#include "MEDCouplingFieldT.txx"
+#include "MEDCouplingFieldDouble.hxx"
 #include "MEDCouplingFieldTemplate.hxx"
 #include "MEDCouplingMesh.hxx"
 
 using namespace MEDCoupling;
 
+template class MEDCouplingFieldT<int>;
+
 MEDCouplingFieldInt *MEDCouplingFieldInt::New(TypeOfField type, TypeOfTimeDiscretization td)
 {
   return new MEDCouplingFieldInt(type,td);
@@ -34,109 +38,46 @@ MEDCouplingFieldInt *MEDCouplingFieldInt::New(const MEDCouplingFieldTemplate& ft
   return new MEDCouplingFieldInt(ft,td);
 }
 
-void MEDCouplingFieldInt::checkConsistencyLight() const
-{
-  MEDCouplingField::checkConsistencyLight();
-  _time_discr->checkConsistencyLight();
-  _type->checkCoherencyBetween(_mesh,getArray());
-}
-
-std::string MEDCouplingFieldInt::simpleRepr() const
-{
-  std::ostringstream ret;
-  ret << "FieldInt with name : \"" << getName() << "\"\n";
-  ret << "Description of field is : \"" << getDescription() << "\"\n";
-  if(_type)
-    { ret << "FieldInt space discretization is : " << _type->getStringRepr() << "\n"; }
-  else
-    { ret << "FieldInt has no spatial discretization !\n"; }
-  if(_time_discr)
-    { ret << "FieldInt time discretization is : " << _time_discr->getStringRepr() << "\n"; }
-  else
-    { ret << "FieldInt has no time discretization !\n"; }
-  ret << "FieldInt nature of field is : \"" << MEDCouplingNatureOfField::GetReprNoThrow(_nature) << "\"\n";
-  if(getArray())
-    {
-      if(getArray()->isAllocated())
-        {
-          int nbOfCompo=getArray()->getNumberOfComponents();
-          ret << "FieldInt default array has " << nbOfCompo << " components and " << getArray()->getNumberOfTuples() << " tuples.\n";
-          ret << "FieldInt default array has following info on components : ";
-          for(int i=0;i<nbOfCompo;i++)
-            ret << "\"" << getArray()->getInfoOnComponent(i) << "\" ";
-          ret << "\n";
-        }
-      else
-        {
-          ret << "Array set but not allocated !\n";
-        }
-    }
-  if(_mesh)
-    ret << "Mesh support information :\n__________________________\n" << _mesh->simpleRepr();
-  else
-    ret << "Mesh support information : No mesh set !\n";
-  return ret.str();
-}
-
-void MEDCouplingFieldInt::reprQuickOverview(std::ostream& stream) const
-{
-}
-
-void MEDCouplingFieldInt::setTimeUnit(const std::string& unit)
-{
-  _time_discr->setTimeUnit(unit);
-}
-
-std::string MEDCouplingFieldInt::getTimeUnit() const
-{
-  return _time_discr->getTimeUnit();
-}
-
-void MEDCouplingFieldInt::setTime(double val, int iteration, int order) 
-{ 
-  _time_discr->setTime(val,iteration,order); 
-}
-
-double MEDCouplingFieldInt::getTime(int& iteration, int& order) const
-{
-  return _time_discr->getTime(iteration,order);
-}
-
-void MEDCouplingFieldInt::setArray(DataArrayInt *array)
-{
-  _time_discr->setArray(array,this);
-}
-
-const DataArrayInt *MEDCouplingFieldInt::getArray() const
+MEDCouplingFieldInt::MEDCouplingFieldInt(TypeOfField type, TypeOfTimeDiscretization td):MEDCouplingFieldT<int>(type,MEDCouplingTimeDiscretizationInt::New(td))
 {
-  return _time_discr->getArray();
 }
 
-DataArrayInt *MEDCouplingFieldInt::getArray()
+MEDCouplingFieldInt::MEDCouplingFieldInt(const MEDCouplingFieldInt& other, bool deepCopy):MEDCouplingFieldT<int>(other,deepCopy)
 {
-  return _time_discr->getArray();
 }
 
-MEDCouplingFieldInt::MEDCouplingFieldInt(TypeOfField type, TypeOfTimeDiscretization td):MEDCouplingField(type),_time_discr(MEDCouplingTimeDiscretizationInt::New(td))
+MEDCouplingFieldInt::MEDCouplingFieldInt(NatureOfField n, MEDCouplingTimeDiscretizationInt *td, MEDCouplingFieldDiscretization *type):MEDCouplingFieldT<int>(type,n,td)
 {
 }
 
-MEDCouplingFieldInt::MEDCouplingFieldInt(const MEDCouplingFieldInt& other, bool deepCopy):MEDCouplingField(other,deepCopy),_time_discr(dynamic_cast<MEDCouplingTimeDiscretizationInt *>(other._time_discr->performCopyOrIncrRef(deepCopy)))
+/*!
+ * ** WARINING : This method do not deeply copy neither mesh nor spatial discretization. Only a shallow copy (reference) is done for mesh and spatial discretization ! **
+ */
+MEDCouplingFieldInt::MEDCouplingFieldInt(const MEDCouplingFieldTemplate& ft, TypeOfTimeDiscretization td):MEDCouplingFieldT<int>(ft,MEDCouplingTimeDiscretizationInt::New(td),false)
 {
 }
 
-MEDCouplingFieldInt::MEDCouplingFieldInt(NatureOfField n, MEDCouplingTimeDiscretizationInt *td, MEDCouplingFieldDiscretization *type):MEDCouplingField(type,n),_time_discr(td)
+MEDCouplingFieldInt *MEDCouplingFieldInt::deepCopy() const
 {
+  return cloneWithMesh(true);
 }
 
-MEDCouplingFieldInt::~MEDCouplingFieldInt()
+MEDCouplingFieldInt *MEDCouplingFieldInt::clone(bool recDeepCpy) const
 {
-  delete _time_discr;
+  return new MEDCouplingFieldInt(*this,recDeepCpy);
 }
 
-/*!
- * ** WARINING : This method do not deeply copy neither mesh nor spatial discretization. Only a shallow copy (reference) is done for mesh and spatial discretization ! **
- */
-MEDCouplingFieldInt::MEDCouplingFieldInt(const MEDCouplingFieldTemplate& ft, TypeOfTimeDiscretization td):MEDCouplingField(ft,false),_time_discr(MEDCouplingTimeDiscretizationInt::New(td))
+MEDCouplingFieldDouble *MEDCouplingFieldInt::convertToDblField() const
 {
+  MCAuto<MEDCouplingFieldTemplate> tmp(MEDCouplingFieldTemplate::New(*this));
+  int t1,t2;
+  double t0(getTime(t1,t2));
+  MCAuto<MEDCouplingFieldDouble> ret(MEDCouplingFieldDouble::New(*tmp,getTimeDiscretization()));
+  ret->setTime(t0,t1,t2);
+  if(getArray())
+    {
+      MCAuto<DataArrayDouble> arr(getArray()->convertToDblArr());
+      ret->setArray(arr);
+    }
+  return ret.retn();
 }