diff --git a/.github/workflows/nightly-build.yml b/.github/workflows/nightly-build.yml index 02cca5a2..f2d78fef 100644 --- a/.github/workflows/nightly-build.yml +++ b/.github/workflows/nightly-build.yml @@ -21,7 +21,7 @@ jobs: C_COMPILER: clang_osx-arm64 FORTRAN_COMPILER: gfortran_osx-arm64 PROJECT_DIR: workdir/macos_arm64 - - RUNNER_OS: 'macos-13' + - RUNNER_OS: 'macos-15-intel' OS: osx-64 OS_NAME: osx_64 MINIFORGE_INSTALLER_URL: https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-x86_64.sh diff --git a/Src/cmor.c b/Src/cmor.c index 16fc86de..62f01d8a 100644 --- a/Src/cmor.c +++ b/Src/cmor.c @@ -3141,6 +3141,11 @@ int cmor_setGblAttr(int var_id) /* -------------------------------------------------------------------- */ /* Set branded variable attributes */ /* -------------------------------------------------------------------- */ + if (cmor_vars[var_id].branded_variable[0] != '\0') { + cmor_set_cur_dataset_attribute_internal(GLOBAL_ATT_BRANDEDVARIABLE, + cmor_vars[var_id].branded_variable, + 0); + } if (cmor_vars[var_id].branding_suffix[0] != '\0') { cmor_set_cur_dataset_attribute_internal(GLOBAL_ATT_BRANDINGSUFFIX, cmor_vars[var_id].branding_suffix, diff --git a/Src/cmor_tables.c b/Src/cmor_tables.c index 370564ca..5cf32a86 100644 --- a/Src/cmor_tables.c +++ b/Src/cmor_tables.c @@ -246,6 +246,7 @@ int cmor_set_variable_entry(cmor_table_t * table, &variable_entry[pmatch[2].rm_so], pmatch[5].rm_eo - pmatch[2].rm_so); variable->branding_suffix[pmatch[5].rm_eo - pmatch[2].rm_so] = '\0'; + cmor_set_var_def_att(variable, VARIABLE_ATT_BRANDEDVARIABLE, variable_entry); } regfree(®ex); diff --git a/Src/cmor_variables.c b/Src/cmor_variables.c index 5005928d..ecfd51c3 100644 --- a/Src/cmor_variables.c +++ b/Src/cmor_variables.c @@ -1165,6 +1165,7 @@ int cmor_variable(int *var_id, char *name, char *units, int ndims, strncpy(cmor_vars[vrid].id, refvar.out_name, CMOR_MAX_STRING); } + strncpy(cmor_vars[vrid].branded_variable, refvar.branded_variable, CMOR_MAX_STRING); strncpy(cmor_vars[vrid].branding_suffix, refvar.branding_suffix, CMOR_MAX_STRING); strncpy(cmor_vars[vrid].temporal_label, refvar.temporal_label, CMOR_MAX_STRING); strncpy(cmor_vars[vrid].vertical_label, refvar.vertical_label, CMOR_MAX_STRING); @@ -1979,6 +1980,7 @@ void cmor_init_var_def(cmor_var_def_t * var, int table_id) var->deflate_level = 1; var->zstandard_level = -999999; memset(var->generic_level_name, 0, sizeof(var->generic_level_name)); + memset(var->branded_variable, 0, sizeof(var->branded_variable)); memset(var->branding_suffix, 0, sizeof(var->branding_suffix)); memset(var->temporal_label, 0, sizeof(var->temporal_label)); memset(var->vertical_label, 0, sizeof(var->vertical_label)); @@ -2237,6 +2239,10 @@ int cmor_set_var_def_att(cmor_var_def_t * var, char *att, char *val) strncpy(var->out_name, val, CMOR_MAX_STRING); + } else if (strcmp(att, VARIABLE_ATT_BRANDEDVARIABLE) == 0) { + + strncpy(var->branded_variable, val, CMOR_MAX_STRING); + } else if (strcmp(att, VARIABLE_ATT_BRANDINGSUFFIX) == 0) { strncpy(var->branding_suffix, val, CMOR_MAX_STRING); diff --git a/Test/test_cmor_CMIP7.py b/Test/test_cmor_CMIP7.py index 15e01da9..0eea3697 100644 --- a/Test/test_cmor_CMIP7.py +++ b/Test/test_cmor_CMIP7.py @@ -102,6 +102,7 @@ def test_cmip7(self): ds = Dataset(filename) attrs = ds.ncattrs() test_attrs = { + 'branded_variable': 'tos_tavg-u-hxy-sea', 'branding_suffix': 'tavg-u-hxy-sea', 'temporal_label': 'tavg', 'vertical_label': 'u', @@ -178,6 +179,7 @@ def test_secondary_modeling_realm(self): ds = Dataset(filename) attrs = ds.ncattrs() test_attrs = { + 'branded_variable': 'prra_tavg-u-hxy-is', 'branding_suffix': 'tavg-u-hxy-is', 'temporal_label': 'tavg', 'vertical_label': 'u', diff --git a/include/cmor.h b/include/cmor.h index 05164426..c3f51686 100644 --- a/include/cmor.h +++ b/include/cmor.h @@ -148,6 +148,7 @@ #define VARIABLE_ATT_FLAGMEANINGS "flag_meanings" #define VARIABLE_ATT_OUTNAME "out_name" #define VARIABLE_ATT_BRANDDESCRIPTION "brand_description" +#define VARIABLE_ATT_BRANDEDVARIABLE "branded_variable" #define VARIABLE_ATT_BRANDINGSUFFIX "branding_suffix" #define VARIABLE_ATT_TEMPORALLABEL "temporal_label" #define VARIABLE_ATT_VERTICALLABEL "vertical_label" @@ -172,6 +173,7 @@ #define GLOBAL_ATT_ACTIVITY_ID "activity_id" #define GLOBAL_ATT_VAL_NODRIVER "no-driver" #define GLOBAL_ATT_VARIABLE_ID "variable_id" +#define GLOBAL_ATT_BRANDEDVARIABLE "branded_variable" #define GLOBAL_ATT_BRANDINGSUFFIX "branding_suffix" #define GLOBAL_ATT_TEMPORALLABEL "temporal_label" #define GLOBAL_ATT_VERTICALLABEL "vertical_label" @@ -494,6 +496,7 @@ typedef struct cmor_variable_def_ { char frequency[CMOR_MAX_STRING]; char out_name[CMOR_MAX_STRING]; char generic_level_name[CMOR_MAX_STRING]; + char branded_variable[CMOR_MAX_STRING]; char branding_suffix[CMOR_MAX_STRING]; char temporal_label[CMOR_MAX_STRING]; char vertical_label[CMOR_MAX_STRING]; @@ -564,6 +567,7 @@ typedef struct cmor_var_ { char suffix[CMOR_MAX_STRING]; int suffix_has_date; char frequency[CMOR_MAX_STRING]; + char branded_variable[CMOR_MAX_STRING]; char branding_suffix[CMOR_MAX_STRING]; char temporal_label[CMOR_MAX_STRING]; char vertical_label[CMOR_MAX_STRING];