1 #ifndef CDO_CMOR_H 2 #define CDO_CMOR_H 3 4 #include <vector> 5 #include <cdi.h> 6 7 struct CmorVar 8 { 9 bool convert = false; 10 bool remove = false; 11 // missing value 12 bool changemissval = false; 13 double missval_old = 0; 14 // 15 bool lfactor = false; 16 double factor = 0; 17 // 18 bool checkvalid = false; 19 double valid_min = 0; 20 double valid_max = 0; 21 // 22 bool check_min_mean_abs = false; 23 double ok_min_mean_abs = 0; 24 // 25 bool check_max_mean_abs = false; 26 double ok_max_mean_abs = 0; 27 // units 28 bool changeunits = false; 29 char units_old[CDI_MAX_NAME] = { 0 }; 30 char units[CDI_MAX_NAME] = { 0 }; 31 // varname 32 char name[CDI_MAX_NAME] = { 0 }; 33 // converter 34 void *ut_converter = nullptr; 35 36 double amean = 0; 37 long nvals = 0, n_lower_min = 0, n_greater_max = 0; 38 }; 39 40 void cmor_check_init(int nvars, std::vector<CmorVar> &vars); 41 void cmor_check_eval(int vlistID, int nvars, const std::vector<CmorVar> &vars); 42 void cmor_check_prep(CmorVar &var, const long gridsize, const double missval, const double *const array); 43 44 void cdo_define_var_units(CmorVar &var, int vlistID2, int varID, const char *const units); 45 46 #endif 47