]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
Addition of abs method in DataArrays.
authorageay <ageay>
Tue, 3 Apr 2012 12:28:15 +0000 (12:28 +0000)
committerageay <ageay>
Tue, 3 Apr 2012 12:28:15 +0000 (12:28 +0000)
src/MEDCoupling/MEDCouplingMemArray.cxx
src/MEDCoupling/MEDCouplingMemArray.hxx
src/MEDCoupling/Test/MEDCouplingBasicsTest5.cxx
src/MEDCoupling/Test/MEDCouplingBasicsTest5.hxx

index 0e2f6c82a71d06bb690597261896fe4505d45750..21a682366c666bcc68d01eb7d80cdd300bf802e5 100644 (file)
@@ -1834,6 +1834,14 @@ void DataArrayDouble::sortPerTuple(bool asc) throw(INTERP_KERNEL::Exception)
   declareAsNew();
 }
 
+void DataArrayDouble::abs() throw(INTERP_KERNEL::Exception)
+{
+  checkAllocated();
+  double *ptr=getPointer();
+  int nbOfElems=getNbOfElems();
+  std::transform(ptr,ptr+nbOfElems,ptr,std::ptr_fun<double,double>(fabs));
+}
+
 void DataArrayDouble::applyLin(double a, double b, int compoId) throw(INTERP_KERNEL::Exception)
 {
   checkAllocated();
@@ -4133,6 +4141,14 @@ int DataArrayInt::getMinValueInArray() const throw(INTERP_KERNEL::Exception)
   return *loc;
 }
 
+void DataArrayInt::abs() throw(INTERP_KERNEL::Exception)
+{
+  checkAllocated();
+  int *ptr=getPointer();
+  int nbOfElems=getNbOfElems();
+  std::transform(ptr,ptr+nbOfElems,ptr,std::ptr_fun<int,int>(std::abs));
+}
+
 void DataArrayInt::applyLin(int a, int b, int compoId) throw(INTERP_KERNEL::Exception)
 {
   checkAllocated();
index aadcca145301eb605443a834ec996a0450db0dfd..b830a99f348dd473dcbf92caeca82b39027453d4 100644 (file)
@@ -231,6 +231,7 @@ namespace ParaMEDMEM
     MEDCOUPLING_EXPORT DataArrayDouble *magnitude() const throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT DataArrayDouble *maxPerTuple() const throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void sortPerTuple(bool asc) throw(INTERP_KERNEL::Exception);
+    MEDCOUPLING_EXPORT void abs() throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void applyLin(double a, double b, int compoId) throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void applyLin(double a, double b) throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void applyInv(double numerator) throw(INTERP_KERNEL::Exception);
@@ -399,6 +400,7 @@ namespace ParaMEDMEM
     MEDCOUPLING_EXPORT int getMaxValueInArray() const throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT int getMinValue(int& tupleId) const throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT int getMinValueInArray() const throw(INTERP_KERNEL::Exception);
+    MEDCOUPLING_EXPORT void abs() throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void applyLin(int a, int b, int compoId) throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void applyLin(int a, int b) throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT void applyInv(int numerator) throw(INTERP_KERNEL::Exception);
index 79b351c66316311fbdbddfef4fdf771e11c84142..861554d791b0cd17c85671646f94fe8f26a87ac6 100644 (file)
@@ -568,3 +568,25 @@ void MEDCouplingBasicsTest5::testAre2DCellsNotCorrectlyOriented1()
   //
   m1->decrRef();
 }
+
+void MEDCouplingBasicsTest5::testDataArrayAbs1()
+{
+  DataArrayDouble *d1=DataArrayDouble::New();
+  const double val1[12]={2.,-3.,-5.,6.,-7.,-8.,9.,10.,-11.,-12.};
+  const double expected1[12]={2.,3.,5.,6.,7.,8.,9.,10.,11.,12.};
+  d1->alloc(6,2);
+  std::copy(val1,val1+12,d1->getPointer());
+  DataArrayInt *d2=d1->convertToIntArr();
+  //
+  d1->abs();
+  for(int i=0;i<12;i++)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(expected1[i],d1->getIJ(0,i),1e-14);
+  //
+  const int expected2[12]={2,3,5,6,7,8,9,10,11,12};
+  d2->abs();
+  for(int i=0;i<12;i++)
+    CPPUNIT_ASSERT_EQUAL(expected2[i],d2->getIJ(0,i));
+  //
+  d2->decrRef();
+  d1->decrRef();
+}
index 1252226e37668a96a54dc4adcf2a0715c860c8f3..8be6bfed66c3f03e51f0c7c409e420387ace4f27 100644 (file)
@@ -44,6 +44,7 @@ namespace ParaMEDMEM
     CPPUNIT_TEST( testDataArrayIntAdvSetting1 );
     CPPUNIT_TEST( testBuildDescendingConnec2Of3DMesh1 );
     CPPUNIT_TEST( testAre2DCellsNotCorrectlyOriented1 );
+    CPPUNIT_TEST( testDataArrayAbs1 );
     CPPUNIT_TEST_SUITE_END();
   public:
     void testUMeshTessellate2D1();
@@ -55,6 +56,7 @@ namespace ParaMEDMEM
     void testDataArrayIntAdvSetting1();
     void testBuildDescendingConnec2Of3DMesh1();
     void testAre2DCellsNotCorrectlyOriented1();
+    void testDataArrayAbs1();
   };
 }