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