diff --git a/components/mpas-framework/src/tools/registry/gen_inc.c b/components/mpas-framework/src/tools/registry/gen_inc.c index 44e5eb52a244..03403e0d0dda 100644 --- a/components/mpas-framework/src/tools/registry/gen_inc.c +++ b/components/mpas-framework/src/tools/registry/gen_inc.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "ezxml.h" #include "registry_types.h" #include "gen_inc.h" @@ -82,11 +83,11 @@ int write_field_pointer_arrays(FILE* fd){/*{{{*/ }/*}}}*/ -int set_pointer_name(int type, int ndims, char *pointer_name, int time_levs){/*{{{*/ +int set_pointer_name(int type, int ndims, char *pointer_name, bool mult_time_levs){/*{{{*/ char suffix[6]; - if (time_levs > 1) { + if (mult_time_levs) { snprintf(suffix, 6, "aPtr"); } else { snprintf(suffix, 6, "Ptr"); @@ -1109,11 +1110,11 @@ int parse_var_array(FILE *fd, ezxml_t registry, ezxml_t superStruct, ezxml_t var build_dimension_information(registry, var_arr_xml, &ndims, &hasTime, &decomp); ndims++; // Add a dimension for constituents in var_array - // Determine name of pointer for this field. - set_pointer_name(type, ndims, pointer_name, time_levs); if (time_levs > 1) { + set_pointer_name(type, ndims, pointer_name, true); fortprintf(fd, " allocate(%s(%d))\n", pointer_name, time_levs); } else { + set_pointer_name(type, ndims, pointer_name, false); fortprintf(fd, " allocate(%s)\n", pointer_name); } @@ -1685,6 +1686,8 @@ int parse_var(FILE *fd, ezxml_t registry, ezxml_t superStruct, ezxml_t currentVa char package_spacing[1024]; char default_value[1024]; char missing_value[1024]; + char config_name[1024]; + bool time_levs_from_config; var_xml = currentVar; @@ -1714,19 +1717,28 @@ int parse_var(FILE *fd, ezxml_t registry, ezxml_t superStruct, ezxml_t currentVa varname_in_code = ezxml_attr(var_xml, "name"); } - varname_in_output = ezxml_attr(var_xml, "name_in_output"); - if(!varname_in_output){ - varname_in_output = ezxml_attr(var_xml, "name"); - } + varname_in_output = ezxml_attr(var_xml, "name_in_output"); + if(!varname_in_output){ + varname_in_output = ezxml_attr(var_xml, "name"); + } if(!vartimelevs){ vartimelevs = ezxml_attr(superStruct, "time_levs"); } + time_levs_from_config = false; if(vartimelevs){ - time_levs = atoi(vartimelevs); - if(time_levs < 1){ - time_levs = 1; + if(strncmp(vartimelevs, "namelist:", 9) == 0){ + time_levs_from_config = true; + snprintf(config_name, 1024, "%s", (vartimelevs)+9); + // obtain number of time steps from namelist + fortprintf(fd, " call mpas_pool_get_config(block %% configs, '%s', config_flag_time_levs)\n", config_name); + fortprintf(fd, "\n"); + } else { + time_levs = atoi(vartimelevs); + if(time_levs < 1){ + time_levs = 1; + } } } else { time_levs = 1; @@ -1748,210 +1760,212 @@ int parse_var(FILE *fd, ezxml_t registry, ezxml_t superStruct, ezxml_t currentVa // Determine ndims, hasTime, and decomp type build_dimension_information(registry, var_xml, &ndims, &hasTime, &decomp); - // Determine name of pointer for this field. - set_pointer_name(type, ndims, pointer_name, time_levs); - if (time_levs > 1) { - fortprintf(fd, " allocate(%s(%d))\n", pointer_name, time_levs); + if (time_levs_from_config || time_levs > 1) { + set_pointer_name(type, ndims, pointer_name, true); + if (time_levs_from_config) { + fortprintf(fd, " allocate(%s(config_flag_time_levs))\n", pointer_name); + fortprintf(fd, " do iTime = 1,config_flag_time_levs\n"); + } else { + fortprintf(fd, " allocate(%s(%d))\n", pointer_name, time_levs); + fortprintf(fd, " do iTime = 1,%d\n",time_levs); + } + snprintf(pointer_name_arr, 1024, "%s(iTime)", pointer_name); } else { + set_pointer_name(type, ndims, pointer_name, false); + snprintf(pointer_name_arr, 1024, "%s", pointer_name); fortprintf(fd, " allocate(%s)\n", pointer_name); } + fortprintf(fd, "! Setting up metadata\n"); + fortprintf(fd, " %s %% fieldName = '%s'\n", pointer_name_arr, varname); + fortprintf(fd, " %s %% outputFieldName = '%s'\n", pointer_name_arr, varname_in_output); + fortprintf(fd, " %s %% isVarArray = .false.\n", pointer_name_arr); + if (decomp != -1) { + fortprintf(fd, " %s %% isDecomposed = .true.\n", pointer_name_arr); + } else { + fortprintf(fd, " %s %% isDecomposed = .false.\n", pointer_name_arr); + } - for(time_lev = 1; time_lev <= time_levs; time_lev++){ - if (time_levs > 1) { - snprintf(pointer_name_arr, 1024, "%s(%d)", pointer_name, time_lev); - } else { - snprintf(pointer_name_arr, 1024, "%s", pointer_name); - } - fortprintf(fd, "\n"); - fortprintf(fd, "! Setting up time level %d\n", time_lev); - fortprintf(fd, " %s %% fieldName = '%s'\n", pointer_name_arr, varname); - fortprintf(fd, " %s %% outputFieldName = '%s'\n", pointer_name_arr, varname_in_output); - fortprintf(fd, " %s %% isVarArray = .false.\n", pointer_name_arr); - if (decomp != -1) { - fortprintf(fd, " %s %% isDecomposed = .true.\n", pointer_name_arr); - } else { - fortprintf(fd, " %s %% isDecomposed = .false.\n", pointer_name_arr); - } + if(hasTime) { + fortprintf(fd, " %s %% hasTimeDimension = .true.\n", pointer_name_arr); + } else { + fortprintf(fd, " %s %% hasTimeDimension = .false.\n", pointer_name_arr); + } - if(hasTime) { - fortprintf(fd, " %s %% hasTimeDimension = .true.\n", pointer_name_arr); + if(ndims > 0){ + if(persistence == SCRATCH){ + fortprintf(fd, " %s %% isPersistent = .false.\n", pointer_name_arr); + fortprintf(fd, " %s %% isActive = .false.\n", pointer_name_arr); } else { - fortprintf(fd, " %s %% hasTimeDimension = .false.\n", pointer_name_arr); + fortprintf(fd, " %s %% isPersistent = .true.\n", pointer_name_arr); + fortprintf(fd, " %s %% isActive = .false.\n", pointer_name_arr); } - if(ndims > 0){ - if(persistence == SCRATCH){ - fortprintf(fd, " %s %% isPersistent = .false.\n", pointer_name_arr); - fortprintf(fd, " %s %% isActive = .false.\n", pointer_name_arr); - } else { - fortprintf(fd, " %s %% isPersistent = .true.\n", pointer_name_arr); - fortprintf(fd, " %s %% isActive = .false.\n", pointer_name_arr); - } - - // Setup dimensions - fortprintf(fd, "! Setting up dimensions\n"); - string = strdup(vardims); - tofree = string; - i = 1; - token = strsep(&string, " "); + // Setup dimensions + fortprintf(fd, "! Setting up dimensions\n"); + string = strdup(vardims); + tofree = string; + i = 1; + token = strsep(&string, " "); + if(strncmp(token, "Time", 1024) != 0){ + fortprintf(fd, " %s %% dimNames(%d) = '%s'\n", pointer_name_arr, i, token); + i++; + } + while( (token = strsep(&string, " ")) != NULL){ if(strncmp(token, "Time", 1024) != 0){ fortprintf(fd, " %s %% dimNames(%d) = '%s'\n", pointer_name_arr, i, token); i++; } - while( (token = strsep(&string, " ")) != NULL){ - if(strncmp(token, "Time", 1024) != 0){ - fortprintf(fd, " %s %% dimNames(%d) = '%s'\n", pointer_name_arr, i, token); - i++; - } - } - free(tofree); - } - - fortprintf(fd, " %s %% defaultValue = %s\n", pointer_name_arr, default_value); - if ( ndims == 0 ) { - fortprintf(fd, " %s %% scalar = %s\n", pointer_name_arr, default_value); } - fortprintf(fd, " allocate(%s %% attLists(1))\n", pointer_name_arr); - fortprintf(fd, " allocate(%s %% attLists(1) %% attList)\n", pointer_name_arr); - - if ( varunits != NULL ) { - string = strdup(varunits); - tofree = string; - token = strsep(&string, "'"); + free(tofree); + } - sprintf(temp_str, "%s", token); + fortprintf(fd, " %s %% defaultValue = %s\n", pointer_name_arr, default_value); + if ( ndims == 0 ) { + fortprintf(fd, " %s %% scalar = %s\n", pointer_name_arr, default_value); + } + fortprintf(fd, " allocate(%s %% attLists(1))\n", pointer_name_arr); + fortprintf(fd, " allocate(%s %% attLists(1) %% attList)\n", pointer_name_arr); - while ( ( token = strsep(&string, "'") ) != NULL ) { - sprintf(temp_str, "%s''%s", temp_str, token); - } + if ( varunits != NULL ) { + string = strdup(varunits); + tofree = string; + token = strsep(&string, "'"); - free(tofree); + sprintf(temp_str, "%s", token); - fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'units', '%s')\n", pointer_name_arr, temp_str); + while ( ( token = strsep(&string, "'") ) != NULL ) { + sprintf(temp_str, "%s''%s", temp_str, token); } - if ( varbounds != NULL ) { - string = strdup(varbounds); - tofree = string; - token = strsep(&string, "'"); + free(tofree); - sprintf(temp_str, "%s", token); + fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'units', '%s')\n", pointer_name_arr, temp_str); + } - while ( ( token = strsep(&string, "'") ) != NULL ) { - sprintf(temp_str, "%s''%s", temp_str, token); - } + if ( varbounds != NULL ) { + string = strdup(varbounds); + tofree = string; + token = strsep(&string, "'"); - free(tofree); + sprintf(temp_str, "%s", token); - fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'bounds', '%s')\n", pointer_name_arr, temp_str); + while ( ( token = strsep(&string, "'") ) != NULL ) { + sprintf(temp_str, "%s''%s", temp_str, token); } - if ( varcellmeasures != NULL ) { - string = strdup(varcellmeasures); - tofree = string; - token = strsep(&string, "'"); + free(tofree); - sprintf(temp_str, "%s", token); + fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'bounds', '%s')\n", pointer_name_arr, temp_str); + } - while ( ( token = strsep(&string, "'") ) != NULL ) { - sprintf(temp_str, "%s''%s", temp_str, token); - } + if ( varcellmeasures != NULL ) { + string = strdup(varcellmeasures); + tofree = string; + token = strsep(&string, "'"); - free(tofree); + sprintf(temp_str, "%s", token); - fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'cell_measures', '%s')\n", pointer_name_arr, temp_str); + while ( ( token = strsep(&string, "'") ) != NULL ) { + sprintf(temp_str, "%s''%s", temp_str, token); } - if ( varcellmethod != NULL ) { - string = strdup(varcellmethod); - tofree = string; - token = strsep(&string, "'"); + free(tofree); - sprintf(temp_str, "%s", token); + fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'cell_measures', '%s')\n", pointer_name_arr, temp_str); + } - while ( ( token = strsep(&string, "'") ) != NULL ) { - sprintf(temp_str, "%s''%s", temp_str, token); - } + if ( varcellmethod != NULL ) { + string = strdup(varcellmethod); + tofree = string; + token = strsep(&string, "'"); - free(tofree); + sprintf(temp_str, "%s", token); - fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'cell_method', '%s')\n", pointer_name_arr, temp_str); + while ( ( token = strsep(&string, "'") ) != NULL ) { + sprintf(temp_str, "%s''%s", temp_str, token); } - if ( varcoords != NULL ) { - string = strdup(varcoords); - tofree = string; - token = strsep(&string, "'"); + free(tofree); - sprintf(temp_str, "%s", token); + fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'cell_method', '%s')\n", pointer_name_arr, temp_str); + } - while ( ( token = strsep(&string, "'") ) != NULL ) { - sprintf(temp_str, "%s''%s", temp_str, token); - } + if ( varcoords != NULL ) { + string = strdup(varcoords); + tofree = string; + token = strsep(&string, "'"); - free(tofree); + sprintf(temp_str, "%s", token); - fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'coordinates', '%s')\n", pointer_name_arr, temp_str); + while ( ( token = strsep(&string, "'") ) != NULL ) { + sprintf(temp_str, "%s''%s", temp_str, token); } - if ( varstdname != NULL ) { - string = strdup(varstdname); - tofree = string; - token = strsep(&string, "'"); + free(tofree); - sprintf(temp_str, "%s", token); + fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'coordinates', '%s')\n", pointer_name_arr, temp_str); + } - while ( ( token = strsep(&string, "'") ) != NULL ) { - sprintf(temp_str, "%s''%s", temp_str, token); - } + if ( varstdname != NULL ) { + string = strdup(varstdname); + tofree = string; + token = strsep(&string, "'"); - free(tofree); + sprintf(temp_str, "%s", token); - fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'standard_name', '%s')\n", pointer_name_arr, temp_str); + while ( ( token = strsep(&string, "'") ) != NULL ) { + sprintf(temp_str, "%s''%s", temp_str, token); } - if ( vardesc != NULL ) { - string = strdup(vardesc); - tofree = string; - token = strsep(&string, "'"); + free(tofree); - sprintf(temp_str, "%s", token); + fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'standard_name', '%s')\n", pointer_name_arr, temp_str); + } - while ( ( token = strsep(&string, "'") ) != NULL ) { - sprintf(temp_str, "%s''%s", temp_str, token); - } + if ( vardesc != NULL ) { + string = strdup(vardesc); + tofree = string; + token = strsep(&string, "'"); - free(tofree); + sprintf(temp_str, "%s", token); - fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'long_name', '%s')\n", pointer_name_arr, temp_str); + while ( ( token = strsep(&string, "'") ) != NULL ) { + sprintf(temp_str, "%s''%s", temp_str, token); } - if ( varmissing_value_mask != NULL && varmissingval != NULL ) { - string = strdup(varmissing_value_mask); - tofree = string; + free(tofree); - token = strsep(&string, "'"); - sprintf(temp_str, "%s", token); + fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'long_name', '%s')\n", pointer_name_arr, temp_str); + } - while ( ( token = strsep(&string, "'") ) != NULL ) { - sprintf(temp_str, "%s''%s", temp_str, token); - } + if ( varmissing_value_mask != NULL && varmissingval != NULL ) { + string = strdup(varmissing_value_mask); + tofree = string; - free(tofree); + token = strsep(&string, "'"); + sprintf(temp_str, "%s", token); - fortprintf(fd, " %s %% maskName = '%s'\n", pointer_name_arr , temp_str); - fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'missing_value_mask', '%s')\n", pointer_name_arr, temp_str); - } else { - fortprintf(fd, " %s %% maskName = 'none'\n", pointer_name_arr , temp_str); + while ( ( token = strsep(&string, "'") ) != NULL ) { + sprintf(temp_str, "%s''%s", temp_str, token); } - if ( varmissingval != NULL ) { - fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, '_FillValue', %s)\n", pointer_name_arr, missing_value); - } - fortprintf(fd, " %s %% missingValue = %s\n", pointer_name_arr, missing_value); + free(tofree); - fortprintf(fd, " %s %% block => block\n", pointer_name_arr); + fortprintf(fd, " %s %% maskName = '%s'\n", pointer_name_arr , temp_str); + fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, 'missing_value_mask', '%s')\n", pointer_name_arr, temp_str); + } else { + fortprintf(fd, " %s %% maskName = 'none'\n", pointer_name_arr , temp_str); + } + + if ( varmissingval != NULL ) { + fortprintf(fd, " call mpas_add_att(%s %% attLists(1) %% attList, '_FillValue', %s)\n", pointer_name_arr, missing_value); + } + fortprintf(fd, " %s %% missingValue = %s\n", pointer_name_arr, missing_value); + + fortprintf(fd, " %s %% block => block\n", pointer_name_arr); + if (time_levs_from_config || time_levs > 1) { + fortprintf(fd, " enddo\n"); } // Parse packages if they are defined @@ -1972,13 +1986,19 @@ int parse_var(FILE *fd, ezxml_t registry, ezxml_t superStruct, ezxml_t currentVa fortprintf(fd, ") then\n"); } - for(time_lev = 1; time_lev <= time_levs; time_lev++){ - if (time_levs > 1) { - snprintf(pointer_name_arr, 1024, "%s(%d)", pointer_name, time_lev); + if (time_levs_from_config || time_levs > 1) { + if (time_levs_from_config) { + fortprintf(fd, " do iTime = 1,config_flag_time_levs\n"); } else { - snprintf(pointer_name_arr, 1024, "%s", pointer_name); + fortprintf(fd, " do iTime = 1,%d\n",time_levs); } - fortprintf(fd, " %s%s %% isActive = .true.\n", package_spacing, pointer_name_arr); + snprintf(pointer_name_arr, 1024, "%s(iTime)", pointer_name); + } else { + snprintf(pointer_name_arr, 1024, "%s", pointer_name); + } + fortprintf(fd, " %s%s %% isActive = .true.\n", package_spacing, pointer_name_arr); + if (time_levs_from_config || time_levs > 1) { + fortprintf(fd, " enddo\n"); } if(varpackages != NULL){ @@ -2053,6 +2073,8 @@ int parse_struct(FILE *fd, ezxml_t registry, ezxml_t superStruct, int subpool, c fortprintf(fd, " logical :: group_started\n"); fortprintf(fd, " integer :: group_start\n"); fortprintf(fd, " integer :: index_counter\n"); + fortprintf(fd, " integer :: iTime\n"); + fortprintf(fd, " integer, pointer :: config_flag_time_levs\n"); fortprintf(fd, " integer, pointer :: const_index\n"); fortprintf(fd, "\n"); diff --git a/components/mpas-framework/src/tools/registry/gen_inc.h b/components/mpas-framework/src/tools/registry/gen_inc.h index 6d59c735a49d..70d09565173b 100644 --- a/components/mpas-framework/src/tools/registry/gen_inc.h +++ b/components/mpas-framework/src/tools/registry/gen_inc.h @@ -8,10 +8,11 @@ // #include "ezxml.h" +#include void write_model_variables(ezxml_t registry); int write_field_pointer_arrays(FILE* fd); -int set_pointer_name(int type, int ndims, char *pointer_name, int time_levs); +int set_pointer_name(int type, int ndims, char *pointer_name, bool mult_time_levs); int add_package_to_list(const char * package, const char * package_list); int build_struct_package_lists(ezxml_t currentPosition, char * out_packages); int get_dimension_information(ezxml_t registry, const char *test_dimname, int *has_time, int *decomp); diff --git a/components/mpas-framework/src/tools/registry/parse.c b/components/mpas-framework/src/tools/registry/parse.c index 40182d1abd1e..7a4447388c48 100644 --- a/components/mpas-framework/src/tools/registry/parse.c +++ b/components/mpas-framework/src/tools/registry/parse.c @@ -222,7 +222,34 @@ int validate_reg_xml(ezxml_t registry)/*{{{*/ fprintf(stderr,"ERROR: time_levs attribute missing for var_struct %s.\n", structname); return 1; } else { - if (atoi(time_levs) == 0){ + if (strncmp(time_levs, "namelist:", 9) == 0){ + fprintf(stderr,"Namelist string detected in time_levs for %s.\n", structname); + found = 0; + snprintf(name_holder, 1024, "%s",time_levs); + snprintf(name_holder, 1024, "%s",(name_holder)+9); + for (nmlrecs_xml = ezxml_child(registry, "nml_record"); nmlrecs_xml; nmlrecs_xml = nmlrecs_xml->next){ + + for (nmlopt_xml = ezxml_child(nmlrecs_xml, "nml_option"); nmlopt_xml; nmlopt_xml = nmlopt_xml->next){ + nmloptname = ezxml_attr(nmlopt_xml, "name"); + nmlopttype = ezxml_attr(nmlopt_xml, "type"); + + if (strncmp(name_holder, nmloptname, 1024) == 0){ + if (strcasecmp("integer", nmlopttype) != 0){ + fprintf(stderr, "ERROR: Namelist variable %s must be an integer for namelist-derived time_levs.\n", nmloptname); + return 1; + } + + found = 1; + fprintf(stderr,"Namelist string match in time_levs for %s: %s \n", structname, nmloptname); + } + } + } + + if (!found){ + fprintf(stderr, "ERROR: Namelist variable %s not found for namelist-derived time_levs\n", name_holder); + return 1; + } + } else if (atoi(time_levs) == 0){ fprintf(stderr, "WARNING: time_levs attribute on var_struct %s is 0. It will be replaced with 1.\n", structname); } else if (atoi(time_levs) < 1){ fprintf(stderr, "ERROR: time_levs attribute on var_struct %s is negative.\n", structname); diff --git a/components/mpas-ocean/bld/build-namelist b/components/mpas-ocean/bld/build-namelist index 4fc62cc6dcac..c7030bd5fc5a 100755 --- a/components/mpas-ocean/bld/build-namelist +++ b/components/mpas-ocean/bld/build-namelist @@ -507,6 +507,7 @@ add_default($nl, 'config_proc_decomp_file_prefix'); add_default($nl, 'config_dt'); add_default($nl, 'config_time_integrator'); +add_default($nl, 'config_number_of_time_levels'); ######################## # Namelist group: hmix # diff --git a/components/mpas-ocean/bld/build-namelist-section b/components/mpas-ocean/bld/build-namelist-section index 9533b96c9a65..a47c8cc74656 100644 --- a/components/mpas-ocean/bld/build-namelist-section +++ b/components/mpas-ocean/bld/build-namelist-section @@ -46,6 +46,7 @@ add_default($nl, 'config_proc_decomp_file_prefix'); add_default($nl, 'config_dt'); add_default($nl, 'config_time_integrator'); +add_default($nl, 'config_number_of_time_levels'); ######################## # Namelist group: hmix # diff --git a/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml b/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml index e89a46a2be91..08964af1cff9 100644 --- a/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml +++ b/components/mpas-ocean/bld/namelist_files/namelist_defaults_mpaso.xml @@ -49,6 +49,7 @@ '00:10:00' '00:30:00' 'split_explicit' +2 .false. diff --git a/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml b/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml index 841a10019e0b..e11321ddd084 100644 --- a/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml +++ b/components/mpas-ocean/bld/namelist_files/namelist_definition_mpaso.xml @@ -208,6 +208,14 @@ Valid values: 'split_explicit', 'RK4', 'unsplit_explicit', 'split_implicit' Default: Defined in namelist_defaults.xml + +The number of time levels in the time-stepping scheme. This is used for array allocation. + +Valid values: Any integer greater than or equal to 2. +Default: Defined in namelist_defaults.xml + + diff --git a/components/mpas-ocean/src/Registry.xml b/components/mpas-ocean/src/Registry.xml index 9e738e61c64b..a5ad2680b170 100644 --- a/components/mpas-ocean/src/Registry.xml +++ b/components/mpas-ocean/src/Registry.xml @@ -201,6 +201,10 @@ description="Time integration method." possible_values="'split_explicit', 'RK4', 'unsplit_explicit', 'split_implicit'" /> + - +