Changeset 470
- Timestamp:
- 01/30/14 15:55:42 (10 years ago)
- Location:
- XIOS/trunk/src
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/config/field_attribute.conf
r464 r470 5 5 DECLARE_ATTRIBUTE(StdString, unit) 6 6 DECLARE_ATTRIBUTE(StdString, operation) 7 DECLARE_ATTRIBUTE(bool, detect_missing_value) 7 8 8 9 DECLARE_ATTRIBUTE(StdString, freq_op) -
XIOS/trunk/src/functor/accumulate.cpp
r443 r470 9 9 10 10 CAccumulate::CAccumulate(CArray<double,1>& doutput) 11 : SuperClass(StdString("average"), doutput) 11 : SuperClass(StdString("accumulate"), doutput) 12 { /* Ne rien faire de plus */ } 13 14 CAccumulate::CAccumulate(CArray<double,1>& doutput, double missingValue) 15 : SuperClass(StdString("accumulate"), doutput, missingValue) 12 16 { /* Ne rien faire de plus */ } 13 17 … … 20 24 CArray<double,1>& _doutput) 21 25 { 22 /*23 const double * it1 = _dinput->data(),24 * end1 = _dinput->data() + _dinput->num_elements();25 double * it = _doutput->data();26 if (this->nbcall == 1)27 for (; it1 != end1; it1++, it++) *it = *it1;28 else for (; it1 != end1; it1++, it++) *it += *it1;29 */30 26 if (this->nbcall == 1) _doutput=_dinput ; 31 else _doutput+=_dinput ; 27 else 28 { 29 if (hasMissingValue) 30 { 31 int i, n =_dinput.numElements() ; 32 const double * in=_dinput.dataFirst() ; 33 double* out=_doutput.dataFirst(); 34 for (i=0; i<n; ++i,++in,++out) 35 if (*in!=missingValue) 36 { 37 if(*out!=missingValue) *out += *in; 38 else *out=*in ; 39 } 40 } 41 else _doutput+=_dinput ; 42 } 43 } 32 44 33 }34 45 35 46 void CAccumulate::final(void) 36 47 { 37 /* double * it1 = this->getDataOutput()->data(),38 * end1 = this->getDataOutput()->data() + this->getDataOutput()->num_elements();39 for (; it1 != end1; it1++) *it1 /= this->nbcall;40 this->nbcall = 0;41 */42 // doutput/=this->nbcall;43 48 this->nbcall = 0; 44 49 } -
XIOS/trunk/src/functor/accumulate.hpp
r449 r470 22 22 //CAccumulate(const CFunData & data); 23 23 CAccumulate(CArray<double,1>& doutput); 24 CAccumulate(CArray<double,1>& doutput, double missingValue); 24 25 //CAccumulate(const CAccumulate & accumulate); // Not implemented. 25 26 //CAccumulate(const CAccumulate * const accumulate); // Not implemented. -
XIOS/trunk/src/functor/average.cpp
r380 r470 12 12 { /* Ne rien faire de plus */ } 13 13 14 CAverage::CAverage(CArray<double,1>& doutput, double missingValue) 15 : SuperClass(StdString("average"), doutput, missingValue) 16 { /* Ne rien faire de plus */ } 17 14 18 CAverage::~CAverage(void) 15 19 { /* Ne rien faire de plus */ } … … 20 24 CArray<double,1>& _doutput) 21 25 { 22 /* 23 const double * it1 = _dinput->data(), 24 * end1 = _dinput->data() + _dinput->num_elements(); 25 double * it = _doutput->data(); 26 if (this->nbcall == 1) 27 for (; it1 != end1; it1++, it++) *it = *it1; 28 else for (; it1 != end1; it1++, it++) *it += *it1; 29 */ 30 if (this->nbcall == 1) _doutput=_dinput ; 31 else _doutput+=_dinput ; 26 if (hasMissingValue) 27 { 28 if (nbcalls.numElements()==0) 29 { 30 nbcalls.resize(_dinput.numElements()) ; 31 nbcalls=0 ; 32 } 33 } 34 35 if (this->nbcall == 1) 36 { 37 _doutput=_dinput ; 38 if (hasMissingValue) 39 { 40 int i, n =_dinput.numElements() ; 41 const double * in=_dinput.dataFirst() ; 42 int* nc=nbcalls.dataFirst() ; 43 for (i=0; i<n; ++i,++nc) 44 if (*in!=missingValue) (*nc) ++; 45 } 46 } 47 else 48 { 49 if (hasMissingValue) 50 { 51 int i, n =_dinput.numElements() ; 52 const double * in=_dinput.dataFirst() ; 53 double* out=_doutput.dataFirst(); 54 int* nc=nbcalls.dataFirst() ; 55 for (i=0; i<n; ++i,++in,++out,++nc) 56 if (*in!=missingValue) 57 { 58 if (*nc != 0) (*out) += *in; 59 else *out = *in ; 60 (*nc) ++; 61 } 62 } 63 else _doutput+=_dinput ; 64 } 32 65 33 66 } … … 35 68 void CAverage::final(void) 36 69 { 37 /* double * it1 = this->getDataOutput()->data(), 38 * end1 = this->getDataOutput()->data() + this->getDataOutput()->num_elements(); 39 for (; it1 != end1; it1++) *it1 /= this->nbcall; 40 this->nbcall = 0; 41 */ 42 doutput/=this->nbcall; 70 if (hasMissingValue) 71 { 72 int i, n = nbcalls.numElements() ; 73 double* out= doutput.dataFirst(); 74 int* nc=nbcalls.dataFirst() ; 75 for (i=0; i<n; ++i, ++out,++nc) 76 if (*nc!=0) 77 { 78 *out /= *nc; 79 *nc = 0 ; 80 } 81 82 } 83 else doutput/=this->nbcall; 43 84 this->nbcall = 0; 85 44 86 } 45 87 } // namespace func -
XIOS/trunk/src/functor/average.hpp
r449 r470 22 22 //CAverage(const CFunData & data); 23 23 CAverage(CArray<double,1>& doutput); 24 CAverage(CArray<double,1>& doutput, double missingValue); 24 25 //CAverage(const CAverage & average); // Not implemented. 25 26 //CAverage(const CAverage * const average); // Not implemented. -
XIOS/trunk/src/functor/instant.cpp
r369 r470 10 10 CInstant::CInstant(CArray<double,1>& doutput) 11 11 : SuperClass(StdString("instant"), doutput) 12 { /* Ne rien faire de plus */ } 13 14 CInstant::CInstant(CArray<double,1>& doutput, double missingValue) 15 : SuperClass(StdString("instant"), doutput, missingValue) 12 16 { /* Ne rien faire de plus */ } 13 17 -
XIOS/trunk/src/functor/instant.hpp
r449 r470 22 22 //CInstant(const CFunData & data); 23 23 CInstant(CArray<double,1>& doutput); 24 //CInstant(const CInstant & instant); // Not implemented. 24 CInstant(CArray<double,1>& doutput, double missingValue); 25 //CInstant(const CInstant & instant); // Not implemented. 25 26 //CInstant(const CInstant * const instant); // Not implemented. 26 27 -
XIOS/trunk/src/functor/maximum.cpp
r369 r470 14 14 { /* Ne rien faire de plus */ } 15 15 16 CMaximum::CMaximum(CArray<double,1>& doutput, double missingValue) 17 : SuperClass(StdString("maximum"), doutput, missingValue) 18 { /* Ne rien faire de plus */ } 19 16 20 CMaximum::~CMaximum(void) 17 21 { /* Ne rien faire de plus */ } … … 26 30 double * it = _doutput.dataFirst(); 27 31 if (this->nbcall == 1) for (; it1 != end1; it1++, it++) *it = *it1; 28 else for (; it1 != end1; it1++, it++) *it = std::max(*it1, *it); 32 else 33 { 34 if (hasMissingValue) 35 { 36 for (; it1 != end1; it1++, it++) 37 if (*it1 != missingValue) 38 { 39 if ( *it != missingValue) *it = std::max(*it1, *it); 40 else *it=*it1 ; 41 } 42 } 43 else for (; it1 != end1; it1++, it++) *it = std::max(*it1, *it); 44 } 29 45 30 46 -
XIOS/trunk/src/functor/maximum.hpp
r449 r470 22 22 //CMaximum(const CFunData & data); 23 23 CMaximum(CArray<double,1>& doutput); 24 CMaximum(CArray<double,1>& doutput, double missingValue); 24 25 //CMaximum(const CMaximum & Maximum); // Not implemented. 25 26 //CMaximum(const CMaximum * const Maximum); // Not implemented. -
XIOS/trunk/src/functor/minimum.cpp
r369 r470 11 11 CMinimum::CMinimum(CArray<double,1>& doutput) 12 12 : SuperClass(StdString("minimum"), doutput) 13 { /* Ne rien faire de plus */ } 14 15 CMinimum::CMinimum(CArray<double,1>& doutput, double missingValue) 16 : SuperClass(StdString("minimum"), doutput, missingValue) 13 17 { /* Ne rien faire de plus */ } 14 18 … … 26 30 27 31 if (this->nbcall == 1) for (; it1 != end1; it1++, it++) *it = *it1; 28 else for (; it1 != end1; it1++, it++) *it = std::min(*it1, *it); 32 else 33 { 34 if (hasMissingValue) 35 { 36 for (; it1 != end1; it1++, it++) 37 if (*it1!=missingValue) 38 { 39 if (*it != missingValue) *it = std::min(*it1, *it); 40 else *it=*it1 ; 41 } 42 } 43 else for (; it1 != end1; it1++, it++) *it = std::min(*it1, *it); 44 } 29 45 30 46 } -
XIOS/trunk/src/functor/minimum.hpp
r449 r470 22 22 //CMinimum(const CFunData & data); 23 23 CMinimum(CArray<double,1>& doutput); 24 CMinimum(CArray<double,1>& doutput, double missingValue); 24 25 //CMinimum(const CMinimum & Minimum); // Not implemented. 25 26 //CMinimum(const CMinimum * const Minimum); // Not implemented. -
XIOS/trunk/src/functor/once.cpp
r369 r470 10 10 COnce::COnce(CArray<double,1>& doutput) 11 11 : SuperClass(StdString("once"), doutput) 12 { /* Ne rien faire de plus */ } 13 14 COnce::COnce(CArray<double,1>& doutput, double missingValue) 15 : SuperClass(StdString("once"), doutput, missingValue) 12 16 { /* Ne rien faire de plus */ } 13 17 -
XIOS/trunk/src/functor/once.hpp
r449 r470 21 21 //COnce(void); // Not implemented. 22 22 COnce(CArray<double,1>& doutput); 23 COnce(CArray<double,1>& doutput, double missingValue); 23 24 //COnce(const COnce & once); // Not implemented. 24 25 //COnce(const COnce * const once); // Not implemented. -
XIOS/trunk/src/node/field.cpp
r466 r470 458 458 else isOnceOperation=false; 459 459 isFirstOperation=true; 460 460 461 461 462 #define DECLARE_FUNCTOR(MType, mtype) \ 462 463 if (operation.getValue().compare(#mtype) == 0) \ 463 464 { \ 464 boost::shared_ptr<func::CFunctor> \ 465 foperation_(new C##MType(this->data)); \ 466 this->foperation = foperation_; \ 465 if (!detect_missing_value.isEmpty() && !default_value.isEmpty() && detect_missing_value==true) \ 466 { \ 467 boost::shared_ptr<func::CFunctor> foperation_(new C##MType(this->data,default_value)); \ 468 this->foperation = foperation_; \ 469 } \ 470 else \ 471 { \ 472 boost::shared_ptr<func::CFunctor> foperation_(new C##MType(this->data)); \ 473 this->foperation = foperation_; \ 474 } \ 467 475 return; \ 468 476 }
Note: See TracChangeset
for help on using the changeset viewer.