diff --git a/README.md b/README.md index f4644e5..08c96ed 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,30 @@ If there are ancillary fields that should only be present in only some of the ou Example of these variables are the `latitude_longitude` found in atmosphere files or the `uarea`, `tmask`, `tarea`, `VGRDb`, `VGRDi`, `VGRDs` variables from ice files. +## Grouping Input Files + +Input file paths can be grouped together using the `--input-group-regex INPUT_GROUP_REGEX` command line option. +This can be used for example to group together 12 monthly input files into one yearly output file per variable. +This option uses a regex with a named capture group "wild" to identify the portion of the files that varies across the group. +For example, to group togther these two sets of monthly files into yearly output files: +``` +aiihca.pa-234501_mon.nc aiihca.pe-234501_dai.nc +aiihca.pa-234502_mon.nc aiihca.pe-234502_dai.nc +aiihca.pa-234503_mon.nc aiihca.pe-234503_dai.nc +aiihca.pa-234504_mon.nc aiihca.pe-234504_dai.nc +aiihca.pa-234505_mon.nc aiihca.pe-234505_dai.nc +aiihca.pa-234506_mon.nc aiihca.pe-234506_dai.nc +aiihca.pa-234507_mon.nc aiihca.pe-234507_dai.nc +aiihca.pa-234508_mon.nc aiihca.pe-234508_dai.nc +aiihca.pa-234509_mon.nc aiihca.pe-234509_dai.nc +aiihca.pa-234510_mon.nc aiihca.pe-234510_dai.nc +aiihca.pa-234511_mon.nc aiihca.pe-234511_dai.nc +aiihca.pa-234512_mon.nc aiihca.pe-234512_dai.nc +``` +use the regex `aiihca\.p[ae]-\d{4}(?P\d{2})_(mon|dai)\.nc` which uses the `wild` capture group to match the month. + +Any file paths that don't match the regex will be processed individually. + ## Config File The `-c`/`--command-line-file` option can be used to supply a filepath to a file that contains command line options. @@ -73,6 +97,7 @@ options: access-esm1p6.{component}.{dimensions}.{field}.{freq}.{time_cell_method}.{datestamp}.nc splitnc will attempt to deduce all the components of the filename. If this option is not given {field}_{original_filename} will be used. + Note: This option also enables special preprocessing for ESM1.6 files. --fix-cell-methods Correct cell_methods by adding 'time: point' to cell_methods for variables that have 'time' but not 'time_bnds' and no other 'time' cell_methods. --file-freq FILE_FREQ @@ -80,6 +105,11 @@ options: then the file-frequency is '1mon'. Used to determine the resolution of the timestamp for ESM1.6 filenames. Follows the ACCESS frequency vocabulary (e.g. '1yr', '1mon', '1day', '1hr'), any unrecognised frequency will use the full timestamp. Defaults to '1yr'. + --input-group-regex INPUT_GROUP_REGEX + Specify a regex that will be used to group a subset of the input into a single set. E.g. group together 12 + input monthly files to a single year of output. Use a named capture group "wild" to specify the portion of + the filename that varies. E.g. to group monthly files with this pattern - "aiihca.pa-YYYYMM_mon.nc" - use + the regex \"aiihca\.pa-\d{4}(?P\d{2})_mon\.nc\". --output-dir OUTPUT_DIR Output directory for the processed files. If not given output files will be placed in the same directory as the original file. diff --git a/pyproject.toml b/pyproject.toml index 534d9a4..0d43828 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ requires-python = ">=3.9" dependencies = [ "netcdf4", "xarray", + "dask", ] [project.optional-dependencies] diff --git a/src/splitnc/esm1p6.py b/src/splitnc/esm1p6.py index be22403..9070acc 100644 --- a/src/splitnc/esm1p6.py +++ b/src/splitnc/esm1p6.py @@ -131,7 +131,8 @@ def _build_datestamp(ds, field_name, file_freq): # Calculate the middle point first, last = time_arr.min(), time_arr.max() - datestamp_dt = (first + (last - first) / 2).dt + datestamp_dt = (first + (last - first) / 2).compute().dt + # Need to .compute when using open_mfdataset return "." + datestamp_dt.strftime(fmt).data.flatten()[0] @@ -156,3 +157,17 @@ def build_esm1p6_filename(ds, field_name, input_filepath, esm1p6_filename=False, raise return template.format(**d) + + +def preprocess_esm1p6_files(ds): + """ + Prepare ESM1.6 files before grouping. + - Round off surface_altitude in atmos files to remove variation due to numerical issues + """ + if 'surface_altitude' in ds: + # Surface altitude is measured in meters + # surface_altitude in different files can vary down around 10^-10 + # Round it off to 4 decimal places + ds['surface_altitude'] = ds['surface_altitude'].round(4) + + return ds diff --git a/src/splitnc/splitnc.py b/src/splitnc/splitnc.py index b3e566d..3331b80 100644 --- a/src/splitnc/splitnc.py +++ b/src/splitnc/splitnc.py @@ -10,7 +10,7 @@ import xarray as xr -from splitnc.esm1p6 import build_esm1p6_filename +from splitnc.esm1p6 import build_esm1p6_filename, preprocess_esm1p6_files def determine_field_vars(ds): @@ -272,7 +272,67 @@ def build_filename(ds, field_name, input_filepath, esm1p6_filename=False, file_f return f"{field_name}_{input_filepath.name}" -def process_file(filepath, **kwargs): +def group_filepaths(filepaths, group_regex): + r""" + Group together files from the list of filepaths that match the given regex + with only the portion in the capture group "wild" varying. + + E.g. if files follow the patterns + - aiihca.pa-YYYYMM_mon.nc and + - aiihca.pe-YYYYMM_dai.nc + use "aiihca\.p[ae]-\d{4}(?P\d{2})_(mon|dai)\.nc" to group together + months for each year and freq. Grouped filepaths will be returned as a list + + Any filepath that doesn't match the regex will be returned alone, i.e. in a + group of length 1. + + Returns a list of lists of filepath strings + """ + grouped_filepaths = [] + while len(filepaths) > 0: + f = filepaths[0] + if m:=re.search(group_regex, f): + # We need to know which indices the "wild" group has in the filepath + wild_span = m.span("wild") + + # Replace the wild match in the orginal string with a wild regex + # Use double {{ }} to escape them in f-strings + group_regx = re.compile(m.string[:wild_span[0]] + f".{{{len(m['wild'])}}}" + m.string[wild_span[1]:]) + + # Get the filepaths that match the regex and remove them from the filepaths list + group_list = [fp for fp in filepaths if group_regx.search(fp)] + filepaths = [fp for fp in filepaths if not group_regx.search(fp)] + else: + # If the regex doesn't match the group regex treat it as a solo group + group_list = [filepaths.pop(0)] + + grouped_filepaths.append(group_list) + + return grouped_filepaths + + +def process_files(**kwargs): + # Prepare the filepath list + filepaths_list = kwargs.pop("filepaths") + if input_group_regex:=kwargs['input_group_regex']: + logging.debug(f"Grouping filepaths according to regex: {input_group_regex}") + + # Group files together according to the input_file_date_regex + filepaths_list = group_filepaths(filepaths_list, input_group_regex) + else: + # Treat every filepath as a size 1 group + filepaths_list = [[f] for f in filepaths_list] + + logging.debug("Filepaths groups as follows:\n" + "\n".join( + [f"{i}: {filepaths}" for i, filepaths in enumerate(filepaths_list)] + )) + + # Process each filepath group + for filepaths in filepaths_list: + process_filegroup(filepaths, **kwargs) + + +def process_filegroup(filepaths, **kwargs): # Define default kwargs and update them with kwargs kwargs = { "excluded_vars": [], @@ -287,12 +347,51 @@ def process_file(filepath, **kwargs): "overwrite": False, } | kwargs - logging.debug(f"Processing {filepath}") - filepath = Path(filepath) + logging.debug(f"Processing {filepaths}") + + filepaths = [Path(f) for f in filepaths] + + # xarray drops .encoding when using open_mfdataset with more than one file + # So save the encodings when loading and reapply + encoding_map = {} + def save_encoding(ds): + for v in ds.variables: + enc = ds[v].encoding + + # Remove some keys from the encoding as these will not always match + # and aren't important here + keys_to_delete = ['source', 'chunksizes', 'preferred_chunks', 'original_shape'] + for del_key in keys_to_delete: + try: + del enc[del_key] + except KeyError: + # If the key isn't there do nothing + pass + + if v in encoding_map and encoding_map[v] != enc: + raise ValueError(f"Encodings for {v} doesn't match across all files: {enc}") + + encoding_map[v] = enc + + return ds + + def preprocess(ds): + ds = save_encoding(ds) + + if kwargs['use_esm1p6_filenames']: + ds = preprocess_esm1p6_files(ds) + + return ds # Use cftime to suppress warnings decoder = xr.coders.CFDatetimeCoder(time_unit='us') - with xr.open_dataset(filepath, decode_times=decoder) as ds: + with xr.open_mfdataset(filepaths, decode_times=decoder, combine="nested", + compat="no_conflicts", join="outer", preprocess=preprocess) as ds: + # Reapply the saved encodings if they're missing + for v in ds.variables: + if not ds[v].encoding: + ds[v].encoding = encoding_map[v] + # Resolve any regex in the excluded_vars list if excluded_vars:=kwargs["excluded_vars"]: excluded_vars = match_regex_list(excluded_vars, ds.variables) @@ -326,6 +425,9 @@ def process_file(filepath, **kwargs): rename_dict = {} logging.debug(f"Rename dict is {rename_dict}") + if len(field_vars) == 0: + logging.warning(f"No field variables to process for {filepaths}") + for v in field_vars: # Get the list of vars to keep for this field logging.debug(f"Determining dependent variables for field variable {v}") @@ -381,16 +483,17 @@ def process_file(filepath, **kwargs): if kwargs["fix_cell_methods"]: fix_cell_methods(ds_v, v) + # Output path construction assumes the first path can be used if output_dir:=kwargs["output_dir"]: output_dir = Path(output_dir) else: - output_dir = filepath.parent + output_dir = filepaths[0].parent # Build the output filepath filename = build_filename( ds=ds_v, field_name=v, - input_filepath=filepath, + input_filepath=filepaths[0], esm1p6_filename=kwargs["use_esm1p6_filenames"], file_freq=kwargs["file_freq"], ) @@ -489,7 +592,8 @@ def globbable_string_list(string_list): help="Use the ESM1.6 filename pattern for the output files: " "access-esm1p6.{component}.{dimensions}.{field}.{freq}.{time_cell_method}.{datestamp}.nc" " splitnc will attempt to deduce all the components of the filename. " - "If this option is not given {field}_{original_filename} will be used." + "If this option is not given {field}_{original_filename} will be used. " + "Note: This option also enables special preprocessing for ESM1.6 files." ) parser.add_argument( "--fix-cell-methods", @@ -508,6 +612,15 @@ def globbable_string_list(string_list): "'1hr'), any unrecognised frequency will use the full timestamp. " "Defaults to '1yr'." ) + parser.add_argument( + "--input-group-regex", + help="Specify a regex that will be used to group a subset of the input " + "into a single set. E.g. group together 12 input monthly files to " + "a single year of output. Use a named capture group \"wild\" to " + "specify the portion of the filename that varies. E.g. to group monthly " + "files with this pattern - \"aiihca.pa-YYYYMM_mon.nc\" - use the regex " + r"\"aiihca\.pa-\d{4}(?P\d{2})_mon\.nc\"." + ) parser.add_argument( "--output-dir", help="Output directory for the processed files. If not given output " @@ -541,9 +654,10 @@ def globbable_string_list(string_list): args = parser.parse_args(args=cmdline_args) # File paths may need flattened since glob was used - args.filepaths = [ + # Sort the list to ensure repeatable behaviour + args.filepaths = sorted([ filepath for glob_list in args.filepaths for filepath in glob_list - ] + ]) # If the command line yaml was supplied use the contents instead of argv if args.command_line_file: @@ -572,8 +686,7 @@ def main(): logging.error("No files to process.") raise ValueError("No files to process.") - for f in args.filepaths: - process_file(f, **vars(args)) + process_files(**vars(args)) if __name__ == "__main__": diff --git a/test/data/aiihca.pa-234502_mon.cdl b/test/data/aiihca.pa-234502_mon.cdl new file mode 100644 index 0000000..8fc0856 --- /dev/null +++ b/test/data/aiihca.pa-234502_mon.cdl @@ -0,0 +1,2018 @@ +netcdf aiihca.pa-234501_mon { +dimensions: + time = UNLIMITED ; // (1 currently) + lat = 145 ; + lon = 192 ; + bnds = 2 ; + model_rho_level_number = 38 ; + pseudo_level = 6 ; + pseudo_level_0 = 17 ; + lon_u = 192 ; + lat_v = 144 ; + pseudo_level_2 = 13 ; + time_0 = 1 ; + soil_model_level_number = 6 ; + pressure = 19 ; + model_theta_level_number = 38 ; +variables: + float fld_s00i023(time, lat, lon) ; + fld_s00i023:_FillValue = 1.e+20f ; + fld_s00i023:standard_name = "surface_snow_amount" ; + fld_s00i023:long_name = "SNOW AMOUNT OVER LAND AFT TSTP KG/M2" ; + fld_s00i023:units = "kg m-2" ; + fld_s00i023:um_stash_source = "m01s00i023" ; + fld_s00i023:missing_value = 1.e+20f ; + fld_s00i023:cell_methods = "time: mean" ; + fld_s00i023:grid_mapping = "latitude_longitude" ; + int latitude_longitude ; + latitude_longitude:grid_mapping_name = "latitude_longitude" ; + latitude_longitude:longitude_of_prime_meridian = 0. ; + latitude_longitude:earth_radius = 6371229. ; + double time(time) ; + time:axis = "T" ; + time:bounds = "time_bnds" ; + time:units = "days since 0001-01-01 00:00" ; + time:standard_name = "time" ; + time:calendar = "proleptic_gregorian" ; + double time_bnds(time, bnds) ; + double lat(lat) ; + lat:axis = "Y" ; + lat:bounds = "lat_bnds" ; + lat:units = "degrees_north" ; + lat:standard_name = "latitude" ; + double lat_bnds(lat, bnds) ; + double lon(lon) ; + lon:axis = "X" ; + lon:bounds = "lon_bnds" ; + lon:units = "degrees_east" ; + lon:standard_name = "longitude" ; + double lon_bnds(lon, bnds) ; + float fld_s00i024(time, lat, lon) ; + fld_s00i024:_FillValue = 1.e+20f ; + fld_s00i024:standard_name = "surface_temperature" ; + fld_s00i024:long_name = "SURFACE TEMPERATURE AFTER TIMESTEP" ; + fld_s00i024:units = "K" ; + fld_s00i024:um_stash_source = "m01s00i024" ; + fld_s00i024:missing_value = 1.e+20f ; + fld_s00i024:cell_methods = "time: mean" ; + fld_s00i024:grid_mapping = "latitude_longitude" ; + int fld_s00i030(time, lat, lon) ; + fld_s00i030:_FillValue = -2147483647 ; + fld_s00i030:standard_name = "land_binary_mask" ; + fld_s00i030:long_name = "LAND MASK (No halo) (LAND=TRUE)" ; + fld_s00i030:units = "1" ; + fld_s00i030:um_stash_source = "m01s00i030" ; + fld_s00i030:missing_value = -2147483647 ; + fld_s00i030:cell_methods = "time: mean" ; + fld_s00i030:grid_mapping = "latitude_longitude" ; + float fld_s00i031(time, lat, lon) ; + fld_s00i031:_FillValue = 1.e+20f ; + fld_s00i031:standard_name = "sea_ice_area_fraction" ; + fld_s00i031:long_name = "FRAC OF SEA ICE IN SEA AFTER TSTEP" ; + fld_s00i031:units = "1" ; + fld_s00i031:um_stash_source = "m01s00i031" ; + fld_s00i031:missing_value = 1.e+20f ; + fld_s00i031:cell_methods = "time: mean" ; + fld_s00i031:grid_mapping = "latitude_longitude" ; + float fld_s00i032(time, lat, lon) ; + fld_s00i032:_FillValue = 1.e+20f ; + fld_s00i032:standard_name = "sea_ice_thickness" ; + fld_s00i032:long_name = "SEA ICE DEPTH (MEAN OVER ICE) M" ; + fld_s00i032:units = "m" ; + fld_s00i032:um_stash_source = "m01s00i032" ; + fld_s00i032:missing_value = 1.e+20f ; + fld_s00i032:cell_methods = "time: mean" ; + fld_s00i032:grid_mapping = "latitude_longitude" ; + float fld_s00i033(time, lat, lon) ; + fld_s00i033:_FillValue = 1.e+20f ; + fld_s00i033:standard_name = "surface_altitude" ; + fld_s00i033:long_name = "OROGRAPHY (/STRAT LOWER BC)" ; + fld_s00i033:units = "m" ; + fld_s00i033:um_stash_source = "m01s00i033" ; + fld_s00i033:missing_value = 1.e+20f ; + fld_s00i033:cell_methods = "time: mean" ; + fld_s00i033:grid_mapping = "latitude_longitude" ; + float fld_s00i407(time, model_rho_level_number, lat, lon) ; + fld_s00i407:_FillValue = 1.e+20f ; + fld_s00i407:standard_name = "air_pressure" ; + fld_s00i407:long_name = "PRESSURE AT RHO LEVELS AFTER TS" ; + fld_s00i407:units = "Pa" ; + fld_s00i407:um_stash_source = "m01s00i407" ; + fld_s00i407:missing_value = 1.e+20f ; + fld_s00i407:cell_methods = "time: mean" ; + fld_s00i407:grid_mapping = "latitude_longitude" ; + fld_s00i407:coordinates = "rho_level_height sigma_rho surface_altitude" ; + int model_rho_level_number(model_rho_level_number) ; + model_rho_level_number:axis = "Z" ; + model_rho_level_number:units = "1" ; + model_rho_level_number:standard_name = "model_level_number" ; + model_rho_level_number:positive = "up" ; + double rho_level_height(model_rho_level_number) ; + rho_level_height:bounds = "rho_level_height_bnds" ; + rho_level_height:units = "m" ; + rho_level_height:long_name = "level_height" ; + rho_level_height:positive = "up" ; + rho_level_height:standard_name = "atmosphere_hybrid_height_coordinate" ; + rho_level_height:axis = "Z" ; + rho_level_height:formula_terms = "a: rho_level_height b: sigma_rho orog: surface_altitude" ; + double rho_level_height_bnds(model_rho_level_number, bnds) ; + double sigma_rho(model_rho_level_number) ; + sigma_rho:bounds = "sigma_rho_bnds" ; + sigma_rho:units = "1" ; + sigma_rho:long_name = "sigma" ; + double sigma_rho_bnds(model_rho_level_number, bnds) ; + double surface_altitude(lat, lon) ; + surface_altitude:units = "m" ; + surface_altitude:standard_name = "surface_altitude" ; + surface_altitude:um_stash_source = "m01s00i033" ; + surface_altitude:source = "Data from Met Office Unified Model" ; + surface_altitude:um_version = "7.3" ; + float fld_s00i409(time, lat, lon) ; + fld_s00i409:_FillValue = 1.e+20f ; + fld_s00i409:standard_name = "surface_air_pressure" ; + fld_s00i409:long_name = "SURFACE PRESSURE AFTER TIMESTEP" ; + fld_s00i409:units = "Pa" ; + fld_s00i409:um_stash_source = "m01s00i409" ; + fld_s00i409:missing_value = 1.e+20f ; + fld_s00i409:cell_methods = "time: mean" ; + fld_s00i409:grid_mapping = "latitude_longitude" ; + float fld_s00i507(time, lat, lon) ; + fld_s00i507:_FillValue = 1.e+20f ; + fld_s00i507:standard_name = "surface_temperature_where_open_sea" ; + fld_s00i507:long_name = "OPEN SEA SURFACE TEMP AFTER TIMESTEP" ; + fld_s00i507:units = "K" ; + fld_s00i507:um_stash_source = "m01s00i507" ; + fld_s00i507:missing_value = 1.e+20f ; + fld_s00i507:cell_methods = "time: mean" ; + fld_s00i507:grid_mapping = "latitude_longitude" ; + float fld_s00i508(time, lat, lon) ; + fld_s00i508:_FillValue = 1.e+20f ; + fld_s00i508:standard_name = "surface_temperature" ; + fld_s00i508:long_name = "SEA-ICE SURFACE TEMP AFTER TIMESTEP" ; + fld_s00i508:units = "K" ; + fld_s00i508:um_stash_source = "m01s00i508" ; + fld_s00i508:missing_value = 1.e+20f ; + fld_s00i508:cell_methods = "time: mean" ; + fld_s00i508:grid_mapping = "latitude_longitude" ; + float fld_s00i509(time, lat, lon) ; + fld_s00i509:_FillValue = 1.e+20f ; + fld_s00i509:long_name = "product_of_sea_ice_albedo_and_sunlit_binary_mask" ; + fld_s00i509:units = "1" ; + fld_s00i509:um_stash_source = "m01s00i509" ; + fld_s00i509:missing_value = 1.e+20f ; + fld_s00i509:cell_methods = "time: mean" ; + fld_s00i509:grid_mapping = "latitude_longitude" ; + float fld_s01i201(time, lat, lon) ; + fld_s01i201:_FillValue = 1.e+20f ; + fld_s01i201:standard_name = "surface_net_downward_shortwave_flux" ; + fld_s01i201:long_name = "NET DOWN SURFACE SW FLUX: SW TS ONLY" ; + fld_s01i201:units = "W m-2" ; + fld_s01i201:um_stash_source = "m01s01i201" ; + fld_s01i201:missing_value = 1.e+20f ; + fld_s01i201:cell_methods = "time: mean" ; + fld_s01i201:grid_mapping = "latitude_longitude" ; + float fld_s01i207(time, lat, lon) ; + fld_s01i207:_FillValue = 1.e+20f ; + fld_s01i207:standard_name = "toa_incoming_shortwave_flux" ; + fld_s01i207:long_name = "INCOMING SW RAD FLUX (TOA): ALL TSS" ; + fld_s01i207:units = "W m-2" ; + fld_s01i207:um_stash_source = "m01s01i207" ; + fld_s01i207:missing_value = 1.e+20f ; + fld_s01i207:cell_methods = "time: mean" ; + fld_s01i207:grid_mapping = "latitude_longitude" ; + float fld_s01i208(time, lat, lon) ; + fld_s01i208:_FillValue = 1.e+20f ; + fld_s01i208:standard_name = "toa_outgoing_shortwave_flux" ; + fld_s01i208:long_name = "OUTGOING SW RAD FLUX (TOA)" ; + fld_s01i208:units = "W m-2" ; + fld_s01i208:um_stash_source = "m01s01i208" ; + fld_s01i208:missing_value = 1.e+20f ; + fld_s01i208:cell_methods = "time: mean" ; + fld_s01i208:grid_mapping = "latitude_longitude" ; + float fld_s01i209(time, lat, lon) ; + fld_s01i209:_FillValue = 1.e+20f ; + fld_s01i209:standard_name = "toa_outgoing_shortwave_flux_assuming_clear_sky" ; + fld_s01i209:long_name = "CLEAR-SKY (II) UPWARD SW FLUX (TOA)" ; + fld_s01i209:units = "W m-2" ; + fld_s01i209:um_stash_source = "m01s01i209" ; + fld_s01i209:missing_value = 1.e+20f ; + fld_s01i209:cell_methods = "time: mean" ; + fld_s01i209:grid_mapping = "latitude_longitude" ; + float fld_s01i210(time, lat, lon) ; + fld_s01i210:_FillValue = 1.e+20f ; + fld_s01i210:standard_name = "surface_downwelling_shortwave_flux_in_air_assuming_clear_sky" ; + fld_s01i210:long_name = "CLEAR-SKY (II) DOWN SURFACE SW FLUX" ; + fld_s01i210:units = "W m-2" ; + fld_s01i210:um_stash_source = "m01s01i210" ; + fld_s01i210:missing_value = 1.e+20f ; + fld_s01i210:cell_methods = "time: mean" ; + fld_s01i210:grid_mapping = "latitude_longitude" ; + float fld_s01i211(time, lat, lon) ; + fld_s01i211:_FillValue = 1.e+20f ; + fld_s01i211:standard_name = "surface_upwelling_shortwave_flux_in_air_assuming_clear_sky" ; + fld_s01i211:long_name = "CLEAR-SKY (II) UP SURFACE SW FLUX" ; + fld_s01i211:units = "W m-2" ; + fld_s01i211:um_stash_source = "m01s01i211" ; + fld_s01i211:missing_value = 1.e+20f ; + fld_s01i211:cell_methods = "time: mean" ; + fld_s01i211:grid_mapping = "latitude_longitude" ; + float fld_s01i235(time, lat, lon) ; + fld_s01i235:_FillValue = 1.e+20f ; + fld_s01i235:standard_name = "surface_downwelling_shortwave_flux_in_air" ; + fld_s01i235:long_name = "TOTAL DOWNWARD SURFACE SW FLUX" ; + fld_s01i235:units = "W m-2" ; + fld_s01i235:um_stash_source = "m01s01i235" ; + fld_s01i235:missing_value = 1.e+20f ; + fld_s01i235:cell_methods = "time: mean" ; + fld_s01i235:grid_mapping = "latitude_longitude" ; + float fld_s02i201(time, lat, lon) ; + fld_s02i201:_FillValue = 1.e+20f ; + fld_s02i201:standard_name = "surface_net_downward_longwave_flux" ; + fld_s02i201:long_name = "NET DOWN SURFACE LW RAD FLUX" ; + fld_s02i201:units = "W m-2" ; + fld_s02i201:um_stash_source = "m01s02i201" ; + fld_s02i201:missing_value = 1.e+20f ; + fld_s02i201:cell_methods = "time: mean" ; + fld_s02i201:grid_mapping = "latitude_longitude" ; + float fld_s02i203(time, lat, lon) ; + fld_s02i203:_FillValue = 1.e+20f ; + fld_s02i203:standard_name = "surface_net_downward_longwave_flux" ; + fld_s02i203:long_name = "NET DN LW RAD FLUX:OPEN SEA:SEA MEAN" ; + fld_s02i203:units = "W m-2" ; + fld_s02i203:um_stash_source = "m01s02i203" ; + fld_s02i203:missing_value = 1.e+20f ; + fld_s02i203:cell_methods = "time: mean" ; + fld_s02i203:grid_mapping = "latitude_longitude" ; + float fld_s02i204(time, lat, lon) ; + fld_s02i204:_FillValue = 1.e+20f ; + fld_s02i204:standard_name = "cloud_area_fraction" ; + fld_s02i204:long_name = "TOTAL CLOUD AMOUNT IN LW RADIATION" ; + fld_s02i204:units = "1" ; + fld_s02i204:um_stash_source = "m01s02i204" ; + fld_s02i204:missing_value = 1.e+20f ; + fld_s02i204:cell_methods = "time: mean" ; + fld_s02i204:grid_mapping = "latitude_longitude" ; + float fld_s02i205(time, lat, lon) ; + fld_s02i205:_FillValue = 1.e+20f ; + fld_s02i205:standard_name = "toa_outgoing_longwave_flux" ; + fld_s02i205:long_name = "OUTGOING LW RAD FLUX (TOA)" ; + fld_s02i205:units = "W m-2" ; + fld_s02i205:um_stash_source = "m01s02i205" ; + fld_s02i205:missing_value = 1.e+20f ; + fld_s02i205:cell_methods = "time: mean" ; + fld_s02i205:grid_mapping = "latitude_longitude" ; + float fld_s02i206(time, lat, lon) ; + fld_s02i206:_FillValue = 1.e+20f ; + fld_s02i206:standard_name = "toa_outgoing_longwave_flux_assuming_clear_sky" ; + fld_s02i206:long_name = "CLEAR-SKY (II) UPWARD LW FLUX (TOA)" ; + fld_s02i206:units = "W m-2" ; + fld_s02i206:um_stash_source = "m01s02i206" ; + fld_s02i206:missing_value = 1.e+20f ; + fld_s02i206:cell_methods = "time: mean" ; + fld_s02i206:grid_mapping = "latitude_longitude" ; + float fld_s02i207(time, lat, lon) ; + fld_s02i207:_FillValue = 1.e+20f ; + fld_s02i207:standard_name = "surface_downwelling_longwave_flux_in_air" ; + fld_s02i207:long_name = "DOWNWARD LW RAD FLUX: SURFACE" ; + fld_s02i207:units = "W m-2" ; + fld_s02i207:um_stash_source = "m01s02i207" ; + fld_s02i207:missing_value = 1.e+20f ; + fld_s02i207:cell_methods = "time: mean" ; + fld_s02i207:grid_mapping = "latitude_longitude" ; + float fld_s02i208(time, lat, lon) ; + fld_s02i208:_FillValue = 1.e+20f ; + fld_s02i208:standard_name = "surface_downwelling_longwave_flux_in_air_assuming_clear_sky" ; + fld_s02i208:long_name = "CLEAR-SKY (II) DOWN SURFACE LW FLUX" ; + fld_s02i208:units = "W m-2" ; + fld_s02i208:um_stash_source = "m01s02i208" ; + fld_s02i208:missing_value = 1.e+20f ; + fld_s02i208:cell_methods = "time: mean" ; + fld_s02i208:grid_mapping = "latitude_longitude" ; + float fld_s02i284(time, pseudo_level, lat, lon) ; + fld_s02i284:_FillValue = 1.e+20f ; + fld_s02i284:long_name = "atmosphere_optical_thickness_due_to_sulphate_ambient_aerosol" ; + fld_s02i284:units = "1" ; + fld_s02i284:um_stash_source = "m01s02i284" ; + fld_s02i284:missing_value = 1.e+20f ; + fld_s02i284:cell_methods = "time: mean" ; + fld_s02i284:grid_mapping = "latitude_longitude" ; + int pseudo_level(pseudo_level) ; + pseudo_level:units = "1" ; + pseudo_level:long_name = "pseudo_level" ; + float fld_s02i285(time, pseudo_level, lat, lon) ; + fld_s02i285:_FillValue = 1.e+20f ; + fld_s02i285:standard_name = "atmosphere_optical_thickness_due_to_dust_ambient_aerosol" ; + fld_s02i285:long_name = "MINERAL DUST OPTICAL DEPTH IN RADN." ; + fld_s02i285:units = "1" ; + fld_s02i285:um_stash_source = "m01s02i285" ; + fld_s02i285:missing_value = 1.e+20f ; + fld_s02i285:cell_methods = "time: mean" ; + fld_s02i285:grid_mapping = "latitude_longitude" ; + float fld_s02i286(time, pseudo_level, lat, lon) ; + fld_s02i286:_FillValue = 1.e+20f ; + fld_s02i286:standard_name = "atmosphere_optical_thickness_due_to_seasalt_ambient_aerosol" ; + fld_s02i286:long_name = "SEA SALT OPTICAL DEPTH IN RADIATION" ; + fld_s02i286:units = "1" ; + fld_s02i286:um_stash_source = "m01s02i286" ; + fld_s02i286:missing_value = 1.e+20f ; + fld_s02i286:cell_methods = "time: mean" ; + fld_s02i286:grid_mapping = "latitude_longitude" ; + float fld_s02i287(time, pseudo_level, lat, lon) ; + fld_s02i287:_FillValue = 1.e+20f ; + fld_s02i287:standard_name = "atmosphere_optical_thickness_due_to_black_carbon_ambient_aerosol" ; + fld_s02i287:long_name = "SOOT OPTICAL DEPTH IN RADIATION" ; + fld_s02i287:units = "1" ; + fld_s02i287:um_stash_source = "m01s02i287" ; + fld_s02i287:missing_value = 1.e+20f ; + fld_s02i287:cell_methods = "time: mean" ; + fld_s02i287:grid_mapping = "latitude_longitude" ; + float fld_s02i288(time, pseudo_level, lat, lon) ; + fld_s02i288:_FillValue = 1.e+20f ; + fld_s02i288:long_name = "atmosphere_optical_thickness_due_to_biomass_burning_ambient_aerosol" ; + fld_s02i288:units = "1" ; + fld_s02i288:um_stash_source = "m01s02i288" ; + fld_s02i288:missing_value = 1.e+20f ; + fld_s02i288:cell_methods = "time: mean" ; + fld_s02i288:grid_mapping = "latitude_longitude" ; + float fld_s02i289(time, pseudo_level, lat, lon) ; + fld_s02i289:_FillValue = 1.e+20f ; + fld_s02i289:long_name = "atmosphere_optical_thickness_due_to_biogenic_aerosol" ; + fld_s02i289:units = "1" ; + fld_s02i289:um_stash_source = "m01s02i289" ; + fld_s02i289:missing_value = 1.e+20f ; + fld_s02i289:cell_methods = "time: mean" ; + fld_s02i289:grid_mapping = "latitude_longitude" ; + float fld_s02i295(time, pseudo_level, lat, lon) ; + fld_s02i295:_FillValue = 1.e+20f ; + fld_s02i295:long_name = "atmosphere_optical_thickness_due_to_fossil_fuel_organic_carbon_ambient_aerosol" ; + fld_s02i295:units = "1" ; + fld_s02i295:um_stash_source = "m01s02i295" ; + fld_s02i295:missing_value = 1.e+20f ; + fld_s02i295:cell_methods = "time: mean" ; + fld_s02i295:grid_mapping = "latitude_longitude" ; + float fld_s03i049(time, lat, lon) ; + fld_s03i049:_FillValue = 1.e+20f ; + fld_s03i049:long_name = "SEA-ICE TEMPERATURE AFTER B. LAYER" ; + fld_s03i049:um_stash_source = "m01s03i049" ; + fld_s03i049:missing_value = 1.e+20f ; + fld_s03i049:cell_methods = "time: mean" ; + fld_s03i049:grid_mapping = "latitude_longitude" ; + float fld_s03i100(time, lat, lon) ; + fld_s03i100:_FillValue = 1.e+20f ; + fld_s03i100:long_name = "FLUX OF TRACER 1 IN BL" ; + fld_s03i100:um_stash_source = "m01s03i100" ; + fld_s03i100:missing_value = 1.e+20f ; + fld_s03i100:cell_methods = "time: mean" ; + fld_s03i100:grid_mapping = "latitude_longitude" ; + float fld_s03i101(time, lat, lon) ; + fld_s03i101:_FillValue = 1.e+20f ; + fld_s03i101:long_name = "FLUX OF TRACER 2 IN BL" ; + fld_s03i101:um_stash_source = "m01s03i101" ; + fld_s03i101:missing_value = 1.e+20f ; + fld_s03i101:cell_methods = "time: mean" ; + fld_s03i101:grid_mapping = "latitude_longitude" ; + float fld_s03i173(time, pseudo_level_0, lat, lon) ; + fld_s03i173:_FillValue = 1.e+20f ; + fld_s03i173:long_name = "soil (heterotrophic) respiration on tiles" ; + fld_s03i173:um_stash_source = "m01s03i173" ; + fld_s03i173:missing_value = 1.e+20f ; + fld_s03i173:cell_methods = "time: mean" ; + fld_s03i173:grid_mapping = "latitude_longitude" ; + int pseudo_level_0(pseudo_level_0) ; + pseudo_level_0:units = "1" ; + pseudo_level_0:long_name = "pseudo_level" ; + float fld_s03i174(time, pseudo_level_0, lat, lon) ; + fld_s03i174:_FillValue = 1.e+20f ; + fld_s03i174:long_name = "TRANSPIRATION FROM CABLE (ON TILES)" ; + fld_s03i174:um_stash_source = "m01s03i174" ; + fld_s03i174:missing_value = 1.e+20f ; + fld_s03i174:cell_methods = "time: mean" ; + fld_s03i174:grid_mapping = "latitude_longitude" ; + float fld_s03i201(time, lat, lon) ; + fld_s03i201:_FillValue = 1.e+20f ; + fld_s03i201:standard_name = "downward_heat_flux_in_sea_ice" ; + fld_s03i201:long_name = "HT FLUX THROUGH SEAICE:SEA MEAN W/M2" ; + fld_s03i201:units = "W m-2" ; + fld_s03i201:um_stash_source = "m01s03i201" ; + fld_s03i201:missing_value = 1.e+20f ; + fld_s03i201:cell_methods = "time: mean" ; + fld_s03i201:grid_mapping = "latitude_longitude" ; + float fld_s03i209(time, lat, lon_u) ; + fld_s03i209:_FillValue = 1.e+20f ; + fld_s03i209:standard_name = "eastward_wind" ; + fld_s03i209:long_name = "10 METRE WIND U-COMP" ; + fld_s03i209:units = "m s-1" ; + fld_s03i209:um_stash_source = "m01s03i209" ; + fld_s03i209:missing_value = 1.e+20f ; + fld_s03i209:cell_methods = "time: mean" ; + fld_s03i209:grid_mapping = "latitude_longitude" ; + fld_s03i209:coordinates = "height" ; + double lon_u(lon_u) ; + lon_u:axis = "X" ; + lon_u:bounds = "lon_u_bnds" ; + lon_u:units = "degrees_east" ; + lon_u:standard_name = "longitude" ; + double lon_u_bnds(lon_u, bnds) ; + double height ; + height:units = "m" ; + height:standard_name = "height" ; + height:positive = "up" ; + float fld_s03i210(time, lat_v, lon) ; + fld_s03i210:_FillValue = 1.e+20f ; + fld_s03i210:standard_name = "northward_wind" ; + fld_s03i210:long_name = "10 METRE WIND V-COMP" ; + fld_s03i210:units = "m s-1" ; + fld_s03i210:um_stash_source = "m01s03i210" ; + fld_s03i210:missing_value = 1.e+20f ; + fld_s03i210:cell_methods = "time: mean" ; + fld_s03i210:grid_mapping = "latitude_longitude" ; + fld_s03i210:coordinates = "height" ; + double lat_v(lat_v) ; + lat_v:axis = "Y" ; + lat_v:bounds = "lat_v_bnds" ; + lat_v:units = "degrees_north" ; + lat_v:standard_name = "latitude" ; + double lat_v_bnds(lat_v, bnds) ; + float fld_s03i217(time, lat, lon) ; + fld_s03i217:_FillValue = 1.e+20f ; + fld_s03i217:standard_name = "surface_upward_sensible_heat_flux" ; + fld_s03i217:long_name = "SURFACE SENSIBLE HEAT FLUX W/M2" ; + fld_s03i217:units = "W m-2" ; + fld_s03i217:um_stash_source = "m01s03i217" ; + fld_s03i217:missing_value = 1.e+20f ; + fld_s03i217:cell_methods = "time: mean" ; + fld_s03i217:grid_mapping = "latitude_longitude" ; + float fld_s03i223(time, lat, lon) ; + fld_s03i223:_FillValue = 1.e+20f ; + fld_s03i223:standard_name = "water_evaporation_flux" ; + fld_s03i223:long_name = "SURFACE TOTAL MOISTURE FLUX KG/M2/S" ; + fld_s03i223:units = "kg m-2 s-1" ; + fld_s03i223:um_stash_source = "m01s03i223" ; + fld_s03i223:missing_value = 1.e+20f ; + fld_s03i223:cell_methods = "time: mean" ; + fld_s03i223:grid_mapping = "latitude_longitude" ; + float fld_s03i225(time, lat_v, lon_u) ; + fld_s03i225:_FillValue = 1.e+20f ; + fld_s03i225:standard_name = "eastward_wind" ; + fld_s03i225:long_name = "10 METRE WIND U-COMP B GRID" ; + fld_s03i225:units = "m s-1" ; + fld_s03i225:um_stash_source = "m01s03i225" ; + fld_s03i225:missing_value = 1.e+20f ; + fld_s03i225:cell_methods = "time: mean" ; + fld_s03i225:grid_mapping = "latitude_longitude" ; + fld_s03i225:coordinates = "height" ; + float fld_s03i226(time, lat_v, lon_u) ; + fld_s03i226:_FillValue = 1.e+20f ; + fld_s03i226:standard_name = "northward_wind" ; + fld_s03i226:long_name = "10 METRE WIND V-COMP B GRID" ; + fld_s03i226:units = "m s-1" ; + fld_s03i226:um_stash_source = "m01s03i226" ; + fld_s03i226:missing_value = 1.e+20f ; + fld_s03i226:cell_methods = "time: mean" ; + fld_s03i226:grid_mapping = "latitude_longitude" ; + fld_s03i226:coordinates = "height" ; + float fld_s03i227(time, lat_v, lon_u) ; + fld_s03i227:_FillValue = 1.e+20f ; + fld_s03i227:standard_name = "wind_speed" ; + fld_s03i227:long_name = "10 METRE WIND SPEED ON B GRID" ; + fld_s03i227:units = "m s-1" ; + fld_s03i227:um_stash_source = "m01s03i227" ; + fld_s03i227:missing_value = 1.e+20f ; + fld_s03i227:cell_methods = "time: mean" ; + fld_s03i227:grid_mapping = "latitude_longitude" ; + fld_s03i227:coordinates = "height" ; + float fld_s03i230(time, lat, lon) ; + fld_s03i230:_FillValue = 1.e+20f ; + fld_s03i230:standard_name = "wind_speed" ; + fld_s03i230:long_name = "10 METRE WIND SPEED ON C GRID" ; + fld_s03i230:units = "m s-1" ; + fld_s03i230:um_stash_source = "m01s03i230" ; + fld_s03i230:missing_value = 1.e+20f ; + fld_s03i230:cell_methods = "time: mean" ; + fld_s03i230:grid_mapping = "latitude_longitude" ; + fld_s03i230:coordinates = "height" ; + float fld_s03i234(time, lat, lon) ; + fld_s03i234:_FillValue = 1.e+20f ; + fld_s03i234:standard_name = "surface_upward_latent_heat_flux" ; + fld_s03i234:long_name = "SURFACE LATENT HEAT FLUX W/M2" ; + fld_s03i234:units = "W m-2" ; + fld_s03i234:um_stash_source = "m01s03i234" ; + fld_s03i234:missing_value = 1.e+20f ; + fld_s03i234:cell_methods = "time: mean" ; + fld_s03i234:grid_mapping = "latitude_longitude" ; + float fld_s03i236(time, lat, lon) ; + fld_s03i236:_FillValue = 1.e+20f ; + fld_s03i236:standard_name = "air_temperature" ; + fld_s03i236:long_name = "TEMPERATURE AT 1.5M" ; + fld_s03i236:units = "K" ; + fld_s03i236:um_stash_source = "m01s03i236" ; + fld_s03i236:missing_value = 1.e+20f ; + fld_s03i236:cell_methods = "time: mean" ; + fld_s03i236:grid_mapping = "latitude_longitude" ; + fld_s03i236:coordinates = "height_0" ; + double height_0 ; + height_0:units = "m" ; + height_0:standard_name = "height" ; + height_0:positive = "up" ; + float fld_s03i237(time, lat, lon) ; + fld_s03i237:_FillValue = 1.e+20f ; + fld_s03i237:standard_name = "specific_humidity" ; + fld_s03i237:long_name = "SPECIFIC HUMIDITY AT 1.5M" ; + fld_s03i237:units = "1" ; + fld_s03i237:um_stash_source = "m01s03i237" ; + fld_s03i237:missing_value = 1.e+20f ; + fld_s03i237:cell_methods = "time: mean" ; + fld_s03i237:grid_mapping = "latitude_longitude" ; + fld_s03i237:coordinates = "height_0" ; + float fld_s03i245(time, lat, lon) ; + fld_s03i245:_FillValue = 1.e+20f ; + fld_s03i245:standard_name = "relative_humidity" ; + fld_s03i245:long_name = "RELATIVE HUMIDITY AT 1.5M" ; + fld_s03i245:units = "%" ; + fld_s03i245:um_stash_source = "m01s03i245" ; + fld_s03i245:missing_value = 1.e+20f ; + fld_s03i245:cell_methods = "time: mean" ; + fld_s03i245:grid_mapping = "latitude_longitude" ; + fld_s03i245:coordinates = "height_0" ; + float fld_s03i256(time, lat, lon) ; + fld_s03i256:_FillValue = 1.e+20f ; + fld_s03i256:long_name = "Heat flux through sea ice" ; + fld_s03i256:units = "W/m^2" ; + fld_s03i256:um_stash_source = "m01s03i256" ; + fld_s03i256:missing_value = 1.e+20f ; + fld_s03i256:cell_methods = "time: mean" ; + fld_s03i256:grid_mapping = "latitude_longitude" ; + fld_s03i256:coordinates = "pseudo_level_1" ; + int pseudo_level_1 ; + pseudo_level_1:units = "1" ; + pseudo_level_1:long_name = "pseudo_level" ; + float fld_s03i257(time, lat, lon) ; + fld_s03i257:_FillValue = 1.e+20f ; + fld_s03i257:long_name = "Heat flux in sea ice surface melt" ; + fld_s03i257:units = "W m-2" ; + fld_s03i257:um_stash_source = "m01s03i257" ; + fld_s03i257:missing_value = 1.e+20f ; + fld_s03i257:cell_methods = "time: mean" ; + fld_s03i257:grid_mapping = "latitude_longitude" ; + fld_s03i257:coordinates = "pseudo_level_1" ; + float fld_s03i258(time, lat, lon) ; + fld_s03i258:_FillValue = 1.e+20f ; + fld_s03i258:standard_name = "surface_snow_melt_heat_flux" ; + fld_s03i258:long_name = "SURFACE SNOWMELT HEAT FLUX W/M2" ; + fld_s03i258:units = "W m-2" ; + fld_s03i258:um_stash_source = "m01s03i258" ; + fld_s03i258:missing_value = 1.e+20f ; + fld_s03i258:cell_methods = "time: mean" ; + fld_s03i258:grid_mapping = "latitude_longitude" ; + float fld_s03i261(time, lat, lon) ; + fld_s03i261:_FillValue = 1.e+20f ; + fld_s03i261:standard_name = "gross_primary_productivity_of_biomass_expressed_as_carbon" ; + fld_s03i261:long_name = "GROSS PRIMARY PRODUCTIVITY KG C/M2/S" ; + fld_s03i261:units = "kg m-2 s-1" ; + fld_s03i261:um_stash_source = "m01s03i261" ; + fld_s03i261:missing_value = 1.e+20f ; + fld_s03i261:cell_methods = "time: mean" ; + fld_s03i261:grid_mapping = "latitude_longitude" ; + float fld_s03i262(time, lat, lon) ; + fld_s03i262:_FillValue = 1.e+20f ; + fld_s03i262:standard_name = "net_primary_productivity_of_biomass_expressed_as_carbon" ; + fld_s03i262:long_name = "NET PRIMARY PRODUCTIVITY KG C/M2/S" ; + fld_s03i262:units = "kg m-2 s-1" ; + fld_s03i262:um_stash_source = "m01s03i262" ; + fld_s03i262:missing_value = 1.e+20f ; + fld_s03i262:cell_methods = "time: mean" ; + fld_s03i262:grid_mapping = "latitude_longitude" ; + float fld_s03i263(time, lat, lon) ; + fld_s03i263:_FillValue = 1.e+20f ; + fld_s03i263:standard_name = "plant_respiration_carbon_flux" ; + fld_s03i263:long_name = "PLANT RESPIRATION KG/M2/S" ; + fld_s03i263:units = "kg m-2 s-1" ; + fld_s03i263:um_stash_source = "m01s03i263" ; + fld_s03i263:missing_value = 1.e+20f ; + fld_s03i263:cell_methods = "time: mean" ; + fld_s03i263:grid_mapping = "latitude_longitude" ; + float fld_s03i287(time, pseudo_level_0, lat, lon) ; + fld_s03i287:_FillValue = 1.e+20f ; + fld_s03i287:standard_name = "water_evaporation_flux_from_canopy" ; + fld_s03i287:long_name = "CANOPY EVAPORATION ON TILES" ; + fld_s03i287:units = "kg m-2 s-1" ; + fld_s03i287:um_stash_source = "m01s03i287" ; + fld_s03i287:missing_value = 1.e+20f ; + fld_s03i287:cell_methods = "time: mean" ; + fld_s03i287:grid_mapping = "latitude_longitude" ; + float fld_s03i288(time, pseudo_level_0, lat, lon) ; + fld_s03i288:_FillValue = 1.e+20f ; + fld_s03i288:standard_name = "water_evaporation_flux" ; + fld_s03i288:long_name = "TRANSPIRATION+SOIL EVP ON TILES" ; + fld_s03i288:units = "kg m-2 s-1" ; + fld_s03i288:um_stash_source = "m01s03i288" ; + fld_s03i288:missing_value = 1.e+20f ; + fld_s03i288:cell_methods = "time: mean" ; + fld_s03i288:grid_mapping = "latitude_longitude" ; + float fld_s03i289(time, pseudo_level_2, lat, lon) ; + fld_s03i289:_FillValue = 1.e+20f ; + fld_s03i289:standard_name = "gross_primary_productivity_of_biomass_expressed_as_carbon" ; + fld_s03i289:long_name = "GROSS PRIMARY PRODUCTIVITY ON PFTS" ; + fld_s03i289:units = "kg m-2 s-1" ; + fld_s03i289:um_stash_source = "m01s03i289" ; + fld_s03i289:missing_value = 1.e+20f ; + fld_s03i289:cell_methods = "time: mean" ; + fld_s03i289:grid_mapping = "latitude_longitude" ; + int pseudo_level_2(pseudo_level_2) ; + pseudo_level_2:units = "1" ; + pseudo_level_2:long_name = "pseudo_level" ; + float fld_s03i291(time, pseudo_level_2, lat, lon) ; + fld_s03i291:_FillValue = 1.e+20f ; + fld_s03i291:standard_name = "net_primary_productivity_of_biomass_expressed_as_carbon" ; + fld_s03i291:long_name = "NET PRIMARY PRODUCTIVITY ON PFTS" ; + fld_s03i291:units = "kg m-2 s-1" ; + fld_s03i291:um_stash_source = "m01s03i291" ; + fld_s03i291:missing_value = 1.e+20f ; + fld_s03i291:cell_methods = "time: mean" ; + fld_s03i291:grid_mapping = "latitude_longitude" ; + float fld_s03i292(time, pseudo_level_2, lat, lon) ; + fld_s03i292:_FillValue = 1.e+20f ; + fld_s03i292:long_name = "PLANT RESPIRATION ON PFTS KG C/M2/S" ; + fld_s03i292:units = "kg m-2 s-1" ; + fld_s03i292:um_stash_source = "m01s03i292" ; + fld_s03i292:missing_value = 1.e+20f ; + fld_s03i292:cell_methods = "time: mean" ; + fld_s03i292:grid_mapping = "latitude_longitude" ; + float fld_s03i293(time, lat, lon) ; + fld_s03i293:_FillValue = 1.e+20f ; + fld_s03i293:standard_name = "soil_respiration_carbon_flux" ; + fld_s03i293:long_name = "SOIL RESPIRATION KG C/M2/S" ; + fld_s03i293:units = "kg m-2 s-1" ; + fld_s03i293:um_stash_source = "m01s03i293" ; + fld_s03i293:missing_value = 1.e+20f ; + fld_s03i293:cell_methods = "time: mean" ; + fld_s03i293:grid_mapping = "latitude_longitude" ; + float fld_s03i296(time, lat, lon) ; + fld_s03i296:_FillValue = 1.e+20f ; + fld_s03i296:standard_name = "water_evaporation_flux_from_soil" ; + fld_s03i296:long_name = "Evaporation from soil surface" ; + fld_s03i296:units = "kg m-2 s-1" ; + fld_s03i296:um_stash_source = "m01s03i296" ; + fld_s03i296:missing_value = 1.e+20f ; + fld_s03i296:cell_methods = "time: mean" ; + fld_s03i296:grid_mapping = "latitude_longitude" ; + float fld_s03i297(time, lat, lon) ; + fld_s03i297:_FillValue = 1.e+20f ; + fld_s03i297:standard_name = "water_evaporation_flux_from_canopy" ; + fld_s03i297:long_name = "Evaporation from canopy" ; + fld_s03i297:units = "kg m-2 s-1" ; + fld_s03i297:um_stash_source = "m01s03i297" ; + fld_s03i297:missing_value = 1.e+20f ; + fld_s03i297:cell_methods = "time: mean" ; + fld_s03i297:grid_mapping = "latitude_longitude" ; + float fld_s03i298(time, lat, lon) ; + fld_s03i298:_FillValue = 1.e+20f ; + fld_s03i298:standard_name = "surface_snow_and_ice_sublimation_flux" ; + fld_s03i298:long_name = "SUBLIM. SURFACE (GBM) : RATE KG/M2/S" ; + fld_s03i298:units = "kg m-2 s-1" ; + fld_s03i298:um_stash_source = "m01s03i298" ; + fld_s03i298:missing_value = 1.e+20f ; + fld_s03i298:cell_methods = "time: mean" ; + fld_s03i298:grid_mapping = "latitude_longitude" ; + float fld_s03i314(time, pseudo_level_0, lat, lon) ; + fld_s03i314:_FillValue = 1.e+20f ; + fld_s03i314:long_name = "SURFACE NET RADIATION ON TILES" ; + fld_s03i314:units = "W m-2" ; + fld_s03i314:um_stash_source = "m01s03i314" ; + fld_s03i314:missing_value = 1.e+20f ; + fld_s03i314:cell_methods = "time: mean" ; + fld_s03i314:grid_mapping = "latitude_longitude" ; + float fld_s03i317(time, pseudo_level_0, lat, lon) ; + fld_s03i317:_FillValue = 1.e+20f ; + fld_s03i317:long_name = "SURFACE TILE FRACTIONS" ; + fld_s03i317:units = "1" ; + fld_s03i317:um_stash_source = "m01s03i317" ; + fld_s03i317:missing_value = 1.e+20f ; + fld_s03i317:cell_methods = "time: mean" ; + fld_s03i317:grid_mapping = "latitude_longitude" ; + float fld_s03i318(time, pseudo_level_2, lat, lon) ; + fld_s03i318:_FillValue = 1.e+20f ; + fld_s03i318:long_name = "LEAF AREA INDICES ON PFTS" ; + fld_s03i318:units = "1" ; + fld_s03i318:um_stash_source = "m01s03i318" ; + fld_s03i318:missing_value = 1.e+20f ; + fld_s03i318:cell_methods = "time: mean" ; + fld_s03i318:grid_mapping = "latitude_longitude" ; + float fld_s03i319(time, pseudo_level_2, lat, lon) ; + fld_s03i319:_FillValue = 1.e+20f ; + fld_s03i319:long_name = "CANOPY HEIGHT ON PFTS" ; + fld_s03i319:units = "m" ; + fld_s03i319:um_stash_source = "m01s03i319" ; + fld_s03i319:missing_value = 1.e+20f ; + fld_s03i319:cell_methods = "time: mean" ; + fld_s03i319:grid_mapping = "latitude_longitude" ; + float fld_s03i321(time, pseudo_level_0, lat, lon) ; + fld_s03i321:_FillValue = 1.e+20f ; + fld_s03i321:long_name = "Canopy water on tiles" ; + fld_s03i321:units = "kg m-2" ; + fld_s03i321:um_stash_source = "m01s03i321" ; + fld_s03i321:missing_value = 1.e+20f ; + fld_s03i321:cell_methods = "time: mean" ; + fld_s03i321:grid_mapping = "latitude_longitude" ; + float fld_s03i325(time, pseudo_level_0, lat, lon) ; + fld_s03i325:_FillValue = 1.e+20f ; + fld_s03i325:long_name = "LEAF TURNOVER RATE ON PFTS" ; + fld_s03i325:um_stash_source = "m01s03i325" ; + fld_s03i325:missing_value = 1.e+20f ; + fld_s03i325:cell_methods = "time: mean" ; + fld_s03i325:grid_mapping = "latitude_longitude" ; + float fld_s03i331(time, pseudo_level_0, lat, lon) ; + fld_s03i331:_FillValue = 1.e+20f ; + fld_s03i331:long_name = "Sublimation moisture flux on tiles" ; + fld_s03i331:units = "kg m-2 s-1" ; + fld_s03i331:um_stash_source = "m01s03i331" ; + fld_s03i331:missing_value = 1.e+20f ; + fld_s03i331:cell_methods = "time: mean" ; + fld_s03i331:grid_mapping = "latitude_longitude" ; + float fld_s03i332(time, lat, lon) ; + fld_s03i332:_FillValue = 1.e+20f ; + fld_s03i332:standard_name = "toa_outgoing_longwave_flux" ; + fld_s03i332:long_name = "TOA OUTGOING LW RAD AFTER B.LAYER" ; + fld_s03i332:units = "W m-2" ; + fld_s03i332:um_stash_source = "m01s03i332" ; + fld_s03i332:missing_value = 1.e+20f ; + fld_s03i332:cell_methods = "time: mean" ; + fld_s03i332:grid_mapping = "latitude_longitude" ; + float fld_s03i353(time, lat, lon) ; + fld_s03i353:_FillValue = 1.e+20f ; + fld_s03i353:long_name = "Sublimation of sea ice meaned over sea portion of grid box" ; + fld_s03i353:units = "kg m-2 s-1" ; + fld_s03i353:um_stash_source = "m01s03i353" ; + fld_s03i353:missing_value = 1.e+20f ; + fld_s03i353:cell_methods = "time: mean" ; + fld_s03i353:grid_mapping = "latitude_longitude" ; + float fld_s03i395(time, lat, lon) ; + fld_s03i395:_FillValue = 1.e+20f ; + fld_s03i395:standard_name = "land_area_fraction" ; + fld_s03i395:long_name = "FRACTION OF LAND" ; + fld_s03i395:units = "1" ; + fld_s03i395:um_stash_source = "m01s03i395" ; + fld_s03i395:missing_value = 1.e+20f ; + fld_s03i395:cell_methods = "time: mean" ; + fld_s03i395:grid_mapping = "latitude_longitude" ; + float fld_s03i460(time, lat, lon_u) ; + fld_s03i460:_FillValue = 1.e+20f ; + fld_s03i460:standard_name = "surface_downward_eastward_stress" ; + fld_s03i460:long_name = "X-COMP SURFACE BL STRESS" ; + fld_s03i460:units = "Pa" ; + fld_s03i460:um_stash_source = "m01s03i460" ; + fld_s03i460:missing_value = 1.e+20f ; + fld_s03i460:cell_methods = "time: mean" ; + fld_s03i460:grid_mapping = "latitude_longitude" ; + float fld_s03i461(time, lat_v, lon) ; + fld_s03i461:_FillValue = 1.e+20f ; + fld_s03i461:standard_name = "surface_downward_northward_stress" ; + fld_s03i461:long_name = "Y-COMP SURFACE BL STRESS" ; + fld_s03i461:units = "Pa" ; + fld_s03i461:um_stash_source = "m01s03i461" ; + fld_s03i461:missing_value = 1.e+20f ; + fld_s03i461:cell_methods = "time: mean" ; + fld_s03i461:grid_mapping = "latitude_longitude" ; + float fld_s03i801(time, pseudo_level_0, lat, lon) ; + fld_s03i801:_FillValue = 1.e+20f ; + fld_s03i801:standard_name = "soil_temperature" ; + fld_s03i801:long_name = "CABLE SOIL TEMPERATURE ON TILES LAYER 1" ; + fld_s03i801:units = "K" ; + fld_s03i801:um_stash_source = "m01s03i801" ; + fld_s03i801:missing_value = 1.e+20f ; + fld_s03i801:cell_methods = "time: mean" ; + fld_s03i801:grid_mapping = "latitude_longitude" ; + float fld_s03i802(time, pseudo_level_0, lat, lon) ; + fld_s03i802:_FillValue = 1.e+20f ; + fld_s03i802:standard_name = "soil_temperature" ; + fld_s03i802:long_name = "CABLE SOIL TEMPERATURE ON TILES LAYER 2" ; + fld_s03i802:units = "K" ; + fld_s03i802:um_stash_source = "m01s03i802" ; + fld_s03i802:missing_value = 1.e+20f ; + fld_s03i802:cell_methods = "time: mean" ; + fld_s03i802:grid_mapping = "latitude_longitude" ; + float fld_s03i803(time, pseudo_level_0, lat, lon) ; + fld_s03i803:_FillValue = 1.e+20f ; + fld_s03i803:standard_name = "soil_temperature" ; + fld_s03i803:long_name = "CABLE SOIL TEMPERATURE ON TILES LAYER 3" ; + fld_s03i803:units = "K" ; + fld_s03i803:um_stash_source = "m01s03i803" ; + fld_s03i803:missing_value = 1.e+20f ; + fld_s03i803:cell_methods = "time: mean" ; + fld_s03i803:grid_mapping = "latitude_longitude" ; + float fld_s03i804(time, pseudo_level_0, lat, lon) ; + fld_s03i804:_FillValue = 1.e+20f ; + fld_s03i804:standard_name = "soil_temperature" ; + fld_s03i804:long_name = "CABLE SOIL TEMPERATURE ON TILES LAYER 4" ; + fld_s03i804:units = "K" ; + fld_s03i804:um_stash_source = "m01s03i804" ; + fld_s03i804:missing_value = 1.e+20f ; + fld_s03i804:cell_methods = "time: mean" ; + fld_s03i804:grid_mapping = "latitude_longitude" ; + float fld_s03i805(time, pseudo_level_0, lat, lon) ; + fld_s03i805:_FillValue = 1.e+20f ; + fld_s03i805:standard_name = "soil_temperature" ; + fld_s03i805:long_name = "CABLE SOIL TEMPERATURE ON TILES LAYER 5" ; + fld_s03i805:units = "K" ; + fld_s03i805:um_stash_source = "m01s03i805" ; + fld_s03i805:missing_value = 1.e+20f ; + fld_s03i805:cell_methods = "time: mean" ; + fld_s03i805:grid_mapping = "latitude_longitude" ; + float fld_s03i806(time, pseudo_level_0, lat, lon) ; + fld_s03i806:_FillValue = 1.e+20f ; + fld_s03i806:standard_name = "soil_temperature" ; + fld_s03i806:long_name = "CABLE SOIL TEMPERATURE ON TILES LAYER 6" ; + fld_s03i806:units = "K" ; + fld_s03i806:um_stash_source = "m01s03i806" ; + fld_s03i806:missing_value = 1.e+20f ; + fld_s03i806:cell_methods = "time: mean" ; + fld_s03i806:grid_mapping = "latitude_longitude" ; + float fld_s03i807(time, pseudo_level_0, lat, lon) ; + fld_s03i807:_FillValue = 1.e+20f ; + fld_s03i807:standard_name = "moisture_content_of_soil_layer" ; + fld_s03i807:long_name = "CABLE SOIL MOISTURE ON TILES LAYER 1" ; + fld_s03i807:units = "kg m-2" ; + fld_s03i807:um_stash_source = "m01s03i807" ; + fld_s03i807:missing_value = 1.e+20f ; + fld_s03i807:cell_methods = "time: mean" ; + fld_s03i807:grid_mapping = "latitude_longitude" ; + float fld_s03i808(time, pseudo_level_0, lat, lon) ; + fld_s03i808:_FillValue = 1.e+20f ; + fld_s03i808:standard_name = "moisture_content_of_soil_layer" ; + fld_s03i808:long_name = "CABLE SOIL MOISTURE ON TILES LAYER 2" ; + fld_s03i808:units = "kg m-2" ; + fld_s03i808:um_stash_source = "m01s03i808" ; + fld_s03i808:missing_value = 1.e+20f ; + fld_s03i808:cell_methods = "time: mean" ; + fld_s03i808:grid_mapping = "latitude_longitude" ; + float fld_s03i809(time, pseudo_level_0, lat, lon) ; + fld_s03i809:_FillValue = 1.e+20f ; + fld_s03i809:standard_name = "moisture_content_of_soil_layer" ; + fld_s03i809:long_name = "CABLE SOIL MOISTURE ON TILES LAYER 3" ; + fld_s03i809:units = "kg m-2" ; + fld_s03i809:um_stash_source = "m01s03i809" ; + fld_s03i809:missing_value = 1.e+20f ; + fld_s03i809:cell_methods = "time: mean" ; + fld_s03i809:grid_mapping = "latitude_longitude" ; + float fld_s03i810(time, pseudo_level_0, lat, lon) ; + fld_s03i810:_FillValue = 1.e+20f ; + fld_s03i810:standard_name = "moisture_content_of_soil_layer" ; + fld_s03i810:long_name = "CABLE SOIL MOISTURE ON TILES LAYER 4" ; + fld_s03i810:units = "kg m-2" ; + fld_s03i810:um_stash_source = "m01s03i810" ; + fld_s03i810:missing_value = 1.e+20f ; + fld_s03i810:cell_methods = "time: mean" ; + fld_s03i810:grid_mapping = "latitude_longitude" ; + float fld_s03i811(time, pseudo_level_0, lat, lon) ; + fld_s03i811:_FillValue = 1.e+20f ; + fld_s03i811:standard_name = "moisture_content_of_soil_layer" ; + fld_s03i811:long_name = "CABLE SOIL MOISTURE ON TILES LAYER 5" ; + fld_s03i811:units = "kg m-2" ; + fld_s03i811:um_stash_source = "m01s03i811" ; + fld_s03i811:missing_value = 1.e+20f ; + fld_s03i811:cell_methods = "time: mean" ; + fld_s03i811:grid_mapping = "latitude_longitude" ; + float fld_s03i812(time, pseudo_level_0, lat, lon) ; + fld_s03i812:_FillValue = 1.e+20f ; + fld_s03i812:standard_name = "moisture_content_of_soil_layer" ; + fld_s03i812:long_name = "CABLE SOIL MOISTURE ON TILES LAYER 6" ; + fld_s03i812:units = "kg m-2" ; + fld_s03i812:um_stash_source = "m01s03i812" ; + fld_s03i812:missing_value = 1.e+20f ; + fld_s03i812:cell_methods = "time: mean" ; + fld_s03i812:grid_mapping = "latitude_longitude" ; + float fld_s03i813(time, pseudo_level_0, lat, lon) ; + fld_s03i813:_FillValue = 1.e+20f ; + fld_s03i813:standard_name = "mass_fraction_of_frozen_water_in_soil_moisture" ; + fld_s03i813:long_name = "CABLE FROZEN SOIL MOIST FRAC ON TILES LAYER 1" ; + fld_s03i813:units = "1" ; + fld_s03i813:um_stash_source = "m01s03i813" ; + fld_s03i813:missing_value = 1.e+20f ; + fld_s03i813:cell_methods = "time: mean" ; + fld_s03i813:grid_mapping = "latitude_longitude" ; + float fld_s03i814(time, pseudo_level_0, lat, lon) ; + fld_s03i814:_FillValue = 1.e+20f ; + fld_s03i814:standard_name = "mass_fraction_of_frozen_water_in_soil_moisture" ; + fld_s03i814:long_name = "CABLE FROZEN SOIL MOIST FRAC ON TILES LAYER 2" ; + fld_s03i814:units = "1" ; + fld_s03i814:um_stash_source = "m01s03i814" ; + fld_s03i814:missing_value = 1.e+20f ; + fld_s03i814:cell_methods = "time: mean" ; + fld_s03i814:grid_mapping = "latitude_longitude" ; + float fld_s03i815(time, pseudo_level_0, lat, lon) ; + fld_s03i815:_FillValue = 1.e+20f ; + fld_s03i815:standard_name = "mass_fraction_of_frozen_water_in_soil_moisture" ; + fld_s03i815:long_name = "CABLE FROZEN SOIL MOIST FRAC ON TILES LAYER 3" ; + fld_s03i815:units = "1" ; + fld_s03i815:um_stash_source = "m01s03i815" ; + fld_s03i815:missing_value = 1.e+20f ; + fld_s03i815:cell_methods = "time: mean" ; + fld_s03i815:grid_mapping = "latitude_longitude" ; + float fld_s03i816(time, pseudo_level_0, lat, lon) ; + fld_s03i816:_FillValue = 1.e+20f ; + fld_s03i816:standard_name = "mass_fraction_of_frozen_water_in_soil_moisture" ; + fld_s03i816:long_name = "CABLE FROZEN SOIL MOIST FRAC ON TILES LAYER 4" ; + fld_s03i816:units = "1" ; + fld_s03i816:um_stash_source = "m01s03i816" ; + fld_s03i816:missing_value = 1.e+20f ; + fld_s03i816:cell_methods = "time: mean" ; + fld_s03i816:grid_mapping = "latitude_longitude" ; + float fld_s03i817(time, pseudo_level_0, lat, lon) ; + fld_s03i817:_FillValue = 1.e+20f ; + fld_s03i817:standard_name = "mass_fraction_of_frozen_water_in_soil_moisture" ; + fld_s03i817:long_name = "CABLE FROZEN SOIL MOIST FRAC ON TILES LAYER 5" ; + fld_s03i817:units = "1" ; + fld_s03i817:um_stash_source = "m01s03i817" ; + fld_s03i817:missing_value = 1.e+20f ; + fld_s03i817:cell_methods = "time: mean" ; + fld_s03i817:grid_mapping = "latitude_longitude" ; + float fld_s03i818(time, pseudo_level_0, lat, lon) ; + fld_s03i818:_FillValue = 1.e+20f ; + fld_s03i818:standard_name = "mass_fraction_of_frozen_water_in_soil_moisture" ; + fld_s03i818:long_name = "CABLE FROZEN SOIL MOIST FRAC ON TILES LAYER 6" ; + fld_s03i818:units = "1" ; + fld_s03i818:um_stash_source = "m01s03i818" ; + fld_s03i818:missing_value = 1.e+20f ; + fld_s03i818:cell_methods = "time: mean" ; + fld_s03i818:grid_mapping = "latitude_longitude" ; + float fld_s03i819(time, pseudo_level_0, lat, lon) ; + fld_s03i819:_FillValue = 1.e+20f ; + fld_s03i819:standard_name = "surface_snow_thickness" ; + fld_s03i819:long_name = "CABLE SNOW DEPTH ON TILES LAYER 1" ; + fld_s03i819:units = "m" ; + fld_s03i819:um_stash_source = "m01s03i819" ; + fld_s03i819:missing_value = 1.e+20f ; + fld_s03i819:cell_methods = "time: mean" ; + fld_s03i819:grid_mapping = "latitude_longitude" ; + float fld_s03i820(time, pseudo_level_0, lat, lon) ; + fld_s03i820:_FillValue = 1.e+20f ; + fld_s03i820:standard_name = "surface_snow_thickness" ; + fld_s03i820:long_name = "CABLE SNOW DEPTH ON TILES LAYER 2" ; + fld_s03i820:units = "m" ; + fld_s03i820:um_stash_source = "m01s03i820" ; + fld_s03i820:missing_value = 1.e+20f ; + fld_s03i820:cell_methods = "time: mean" ; + fld_s03i820:grid_mapping = "latitude_longitude" ; + float fld_s03i821(time, pseudo_level_0, lat, lon) ; + fld_s03i821:_FillValue = 1.e+20f ; + fld_s03i821:standard_name = "surface_snow_thickness" ; + fld_s03i821:long_name = "CABLE SNOW DEPTH ON TILES LAYER 3" ; + fld_s03i821:units = "m" ; + fld_s03i821:um_stash_source = "m01s03i821" ; + fld_s03i821:missing_value = 1.e+20f ; + fld_s03i821:cell_methods = "time: mean" ; + fld_s03i821:grid_mapping = "latitude_longitude" ; + float fld_s03i822(time, pseudo_level_0, lat, lon) ; + fld_s03i822:_FillValue = 1.e+20f ; + fld_s03i822:standard_name = "surface_snow_amount" ; + fld_s03i822:long_name = "CABLE SNOW MASS ON TILES LAYER 1" ; + fld_s03i822:units = "kg m-2" ; + fld_s03i822:um_stash_source = "m01s03i822" ; + fld_s03i822:missing_value = 1.e+20f ; + fld_s03i822:cell_methods = "time: mean" ; + fld_s03i822:grid_mapping = "latitude_longitude" ; + float fld_s03i823(time, pseudo_level_0, lat, lon) ; + fld_s03i823:_FillValue = 1.e+20f ; + fld_s03i823:standard_name = "surface_snow_amount" ; + fld_s03i823:long_name = "CABLE SNOW MASS ON TILES LAYER 2" ; + fld_s03i823:units = "kg m-2" ; + fld_s03i823:um_stash_source = "m01s03i823" ; + fld_s03i823:missing_value = 1.e+20f ; + fld_s03i823:cell_methods = "time: mean" ; + fld_s03i823:grid_mapping = "latitude_longitude" ; + float fld_s03i824(time, pseudo_level_0, lat, lon) ; + fld_s03i824:_FillValue = 1.e+20f ; + fld_s03i824:standard_name = "surface_snow_amount" ; + fld_s03i824:long_name = "CABLE SNOW MASS ON TILES LAYER 3" ; + fld_s03i824:units = "kg m-2" ; + fld_s03i824:um_stash_source = "m01s03i824" ; + fld_s03i824:missing_value = 1.e+20f ; + fld_s03i824:cell_methods = "time: mean" ; + fld_s03i824:grid_mapping = "latitude_longitude" ; + float fld_s03i825(time, pseudo_level_0, lat, lon) ; + fld_s03i825:_FillValue = 1.e+20f ; + fld_s03i825:standard_name = "temperature_in_surface_snow" ; + fld_s03i825:long_name = "CABLE SNOW TEMPERATURE ON TILES LAYER 1" ; + fld_s03i825:units = "K" ; + fld_s03i825:um_stash_source = "m01s03i825" ; + fld_s03i825:missing_value = 1.e+20f ; + fld_s03i825:cell_methods = "time: mean" ; + fld_s03i825:grid_mapping = "latitude_longitude" ; + float fld_s03i826(time, pseudo_level_0, lat, lon) ; + fld_s03i826:_FillValue = 1.e+20f ; + fld_s03i826:standard_name = "temperature_in_surface_snow" ; + fld_s03i826:long_name = "CABLE SNOW TEMPERATURE ON TILES LAYER 2" ; + fld_s03i826:units = "K" ; + fld_s03i826:um_stash_source = "m01s03i826" ; + fld_s03i826:missing_value = 1.e+20f ; + fld_s03i826:cell_methods = "time: mean" ; + fld_s03i826:grid_mapping = "latitude_longitude" ; + float fld_s03i827(time, pseudo_level_0, lat, lon) ; + fld_s03i827:_FillValue = 1.e+20f ; + fld_s03i827:standard_name = "temperature_in_surface_snow" ; + fld_s03i827:long_name = "CABLE SNOW TEMPERATURE ON TILES LAYER 3" ; + fld_s03i827:units = "K" ; + fld_s03i827:um_stash_source = "m01s03i827" ; + fld_s03i827:missing_value = 1.e+20f ; + fld_s03i827:cell_methods = "time: mean" ; + fld_s03i827:grid_mapping = "latitude_longitude" ; + float fld_s03i828(time, pseudo_level_0, lat, lon) ; + fld_s03i828:_FillValue = 1.e+20f ; + fld_s03i828:standard_name = "snow_density" ; + fld_s03i828:long_name = "CABLE SNOW DENSITY ON TILES LAYER 1" ; + fld_s03i828:units = "kg m-3" ; + fld_s03i828:um_stash_source = "m01s03i828" ; + fld_s03i828:missing_value = 1.e+20f ; + fld_s03i828:cell_methods = "time: mean" ; + fld_s03i828:grid_mapping = "latitude_longitude" ; + float fld_s03i829(time, pseudo_level_0, lat, lon) ; + fld_s03i829:_FillValue = 1.e+20f ; + fld_s03i829:standard_name = "snow_density" ; + fld_s03i829:long_name = "CABLE SNOW DENSITY ON TILES LAYER 2" ; + fld_s03i829:units = "kg m-3" ; + fld_s03i829:um_stash_source = "m01s03i829" ; + fld_s03i829:missing_value = 1.e+20f ; + fld_s03i829:cell_methods = "time: mean" ; + fld_s03i829:grid_mapping = "latitude_longitude" ; + float fld_s03i830(time, pseudo_level_0, lat, lon) ; + fld_s03i830:_FillValue = 1.e+20f ; + fld_s03i830:standard_name = "snow_density" ; + fld_s03i830:long_name = "CABLE SNOW DENSITY ON TILES LAYER 3" ; + fld_s03i830:units = "kg m-3" ; + fld_s03i830:um_stash_source = "m01s03i830" ; + fld_s03i830:missing_value = 1.e+20f ; + fld_s03i830:cell_methods = "time: mean" ; + fld_s03i830:grid_mapping = "latitude_longitude" ; + float fld_s03i831(time, pseudo_level_0, lat, lon) ; + fld_s03i831:_FillValue = 1.e+20f ; + fld_s03i831:standard_name = "snow_density" ; + fld_s03i831:long_name = "CABLE MEAN SNOW DENSITY ON TILES" ; + fld_s03i831:units = "kg m-3" ; + fld_s03i831:um_stash_source = "m01s03i831" ; + fld_s03i831:missing_value = 1.e+20f ; + fld_s03i831:cell_methods = "time: mean" ; + fld_s03i831:grid_mapping = "latitude_longitude" ; + float fld_s03i832(time, pseudo_level_0, lat, lon) ; + fld_s03i832:_FillValue = 1.e+20f ; + fld_s03i832:standard_name = "age_of_surface_snow" ; + fld_s03i832:long_name = "CABLE SNOW AGE ON TILES" ; + fld_s03i832:units = "day" ; + fld_s03i832:um_stash_source = "m01s03i832" ; + fld_s03i832:missing_value = 1.e+20f ; + fld_s03i832:cell_methods = "time: mean" ; + fld_s03i832:grid_mapping = "latitude_longitude" ; + float fld_s03i835(time, pseudo_level_0, lat, lon) ; + fld_s03i835:_FillValue = 1.e+20f ; + fld_s03i835:long_name = "PREVIOUS YEAR SURF FRACTIONS (TILES)" ; + fld_s03i835:um_stash_source = "m01s03i835" ; + fld_s03i835:missing_value = 1.e+20f ; + fld_s03i835:cell_methods = "time: mean" ; + fld_s03i835:grid_mapping = "latitude_longitude" ; + float fld_s03i851(time_0, pseudo_level_0, lat, lon) ; + fld_s03i851:_FillValue = 1.e+20f ; + fld_s03i851:long_name = "CARBON POOL LABILE ON TILES" ; + fld_s03i851:um_stash_source = "m01s03i851" ; + fld_s03i851:missing_value = 1.e+20f ; + fld_s03i851:grid_mapping = "latitude_longitude" ; + double time_0(time_0) ; + time_0:axis = "T" ; + time_0:units = "days since 0001-01-01 00:00" ; + time_0:standard_name = "time" ; + time_0:calendar = "proleptic_gregorian" ; + float fld_s03i852(time_0, pseudo_level_0, lat, lon) ; + fld_s03i852:_FillValue = 1.e+20f ; + fld_s03i852:long_name = "CARBON POOL PLANT - LEAF ON TILES " ; + fld_s03i852:um_stash_source = "m01s03i852" ; + fld_s03i852:missing_value = 1.e+20f ; + fld_s03i852:grid_mapping = "latitude_longitude" ; + float fld_s03i853(time_0, pseudo_level_0, lat, lon) ; + fld_s03i853:_FillValue = 1.e+20f ; + fld_s03i853:long_name = "CARBON POOL PLANT - WOOD ON TILES" ; + fld_s03i853:um_stash_source = "m01s03i853" ; + fld_s03i853:missing_value = 1.e+20f ; + fld_s03i853:grid_mapping = "latitude_longitude" ; + float fld_s03i854(time_0, pseudo_level_0, lat, lon) ; + fld_s03i854:_FillValue = 1.e+20f ; + fld_s03i854:long_name = "CARBON POOL PLANT - ROOT ON TILES" ; + fld_s03i854:um_stash_source = "m01s03i854" ; + fld_s03i854:missing_value = 1.e+20f ; + fld_s03i854:grid_mapping = "latitude_longitude" ; + float fld_s03i855(time_0, pseudo_level_0, lat, lon) ; + fld_s03i855:_FillValue = 1.e+20f ; + fld_s03i855:long_name = "CARBON POOL LITTER - METB ON TILES" ; + fld_s03i855:um_stash_source = "m01s03i855" ; + fld_s03i855:missing_value = 1.e+20f ; + fld_s03i855:grid_mapping = "latitude_longitude" ; + float fld_s03i856(time_0, pseudo_level_0, lat, lon) ; + fld_s03i856:_FillValue = 1.e+20f ; + fld_s03i856:long_name = "CARBON POOL LITTER - STR ON TILES" ; + fld_s03i856:um_stash_source = "m01s03i856" ; + fld_s03i856:missing_value = 1.e+20f ; + fld_s03i856:grid_mapping = "latitude_longitude" ; + float fld_s03i857(time_0, pseudo_level_0, lat, lon) ; + fld_s03i857:_FillValue = 1.e+20f ; + fld_s03i857:long_name = "CARBON POOL LITTER - CWD ON TILES" ; + fld_s03i857:um_stash_source = "m01s03i857" ; + fld_s03i857:missing_value = 1.e+20f ; + fld_s03i857:grid_mapping = "latitude_longitude" ; + float fld_s03i858(time_0, pseudo_level_0, lat, lon) ; + fld_s03i858:_FillValue = 1.e+20f ; + fld_s03i858:long_name = "CARBON POOL SOIL - MIC ON TILES" ; + fld_s03i858:um_stash_source = "m01s03i858" ; + fld_s03i858:missing_value = 1.e+20f ; + fld_s03i858:grid_mapping = "latitude_longitude" ; + float fld_s03i859(time_0, pseudo_level_0, lat, lon) ; + fld_s03i859:_FillValue = 1.e+20f ; + fld_s03i859:long_name = "CARBON POOL SOIL - SLOW ON TILES" ; + fld_s03i859:um_stash_source = "m01s03i859" ; + fld_s03i859:missing_value = 1.e+20f ; + fld_s03i859:grid_mapping = "latitude_longitude" ; + float fld_s03i860(time_0, pseudo_level_0, lat, lon) ; + fld_s03i860:_FillValue = 1.e+20f ; + fld_s03i860:long_name = "CARBON POOL SOIL - PASS ON TILES" ; + fld_s03i860:um_stash_source = "m01s03i860" ; + fld_s03i860:missing_value = 1.e+20f ; + fld_s03i860:grid_mapping = "latitude_longitude" ; + float fld_s03i861(time_0, pseudo_level_0, lat, lon) ; + fld_s03i861:_FillValue = 1.e+20f ; + fld_s03i861:long_name = "NITROGEN POOL PLANT - LEAF ON TILES" ; + fld_s03i861:um_stash_source = "m01s03i861" ; + fld_s03i861:missing_value = 1.e+20f ; + fld_s03i861:grid_mapping = "latitude_longitude" ; + float fld_s03i862(time_0, pseudo_level_0, lat, lon) ; + fld_s03i862:_FillValue = 1.e+20f ; + fld_s03i862:long_name = "NITROGEN POOL PLANT - WOOD ON TILES" ; + fld_s03i862:um_stash_source = "m01s03i862" ; + fld_s03i862:missing_value = 1.e+20f ; + fld_s03i862:grid_mapping = "latitude_longitude" ; + float fld_s03i863(time_0, pseudo_level_0, lat, lon) ; + fld_s03i863:_FillValue = 1.e+20f ; + fld_s03i863:long_name = "NITROGEN POOL PLANT - ROOT ON TILES" ; + fld_s03i863:um_stash_source = "m01s03i863" ; + fld_s03i863:missing_value = 1.e+20f ; + fld_s03i863:grid_mapping = "latitude_longitude" ; + float fld_s03i864(time_0, pseudo_level_0, lat, lon) ; + fld_s03i864:_FillValue = 1.e+20f ; + fld_s03i864:long_name = "NITROGEN POOL LITTER - METB ON TILES" ; + fld_s03i864:um_stash_source = "m01s03i864" ; + fld_s03i864:missing_value = 1.e+20f ; + fld_s03i864:grid_mapping = "latitude_longitude" ; + float fld_s03i865(time_0, pseudo_level_0, lat, lon) ; + fld_s03i865:_FillValue = 1.e+20f ; + fld_s03i865:long_name = "NITROGEN POOL LITTER - STR ON TILES" ; + fld_s03i865:um_stash_source = "m01s03i865" ; + fld_s03i865:missing_value = 1.e+20f ; + fld_s03i865:grid_mapping = "latitude_longitude" ; + float fld_s03i866(time_0, pseudo_level_0, lat, lon) ; + fld_s03i866:_FillValue = 1.e+20f ; + fld_s03i866:long_name = "NITROGEN POOL LITTER - CWD ON TILES" ; + fld_s03i866:um_stash_source = "m01s03i866" ; + fld_s03i866:missing_value = 1.e+20f ; + fld_s03i866:grid_mapping = "latitude_longitude" ; + float fld_s03i867(time_0, pseudo_level_0, lat, lon) ; + fld_s03i867:_FillValue = 1.e+20f ; + fld_s03i867:long_name = "NITROGEN POOL SOIL - MIC ON TILE" ; + fld_s03i867:um_stash_source = "m01s03i867" ; + fld_s03i867:missing_value = 1.e+20f ; + fld_s03i867:grid_mapping = "latitude_longitude" ; + float fld_s03i868(time_0, pseudo_level_0, lat, lon) ; + fld_s03i868:_FillValue = 1.e+20f ; + fld_s03i868:long_name = "NITROGEN POOL SOIL - SLOW ON TILES" ; + fld_s03i868:um_stash_source = "m01s03i868" ; + fld_s03i868:missing_value = 1.e+20f ; + fld_s03i868:grid_mapping = "latitude_longitude" ; + float fld_s03i869(time_0, pseudo_level_0, lat, lon) ; + fld_s03i869:_FillValue = 1.e+20f ; + fld_s03i869:long_name = "NITROGEN POOL SOIL - PASS ON TILES" ; + fld_s03i869:um_stash_source = "m01s03i869" ; + fld_s03i869:missing_value = 1.e+20f ; + fld_s03i869:grid_mapping = "latitude_longitude" ; + float fld_s03i870(time_0, pseudo_level_0, lat, lon) ; + fld_s03i870:_FillValue = 1.e+20f ; + fld_s03i870:long_name = "NITROGEN POOL SOIL MINIMUM (TILES)" ; + fld_s03i870:um_stash_source = "m01s03i870" ; + fld_s03i870:missing_value = 1.e+20f ; + fld_s03i870:grid_mapping = "latitude_longitude" ; + float fld_s03i871(time_0, pseudo_level_0, lat, lon) ; + fld_s03i871:_FillValue = 1.e+20f ; + fld_s03i871:long_name = "PHOSPHORUS POOL PLANT - LEAF (TILES)" ; + fld_s03i871:um_stash_source = "m01s03i871" ; + fld_s03i871:missing_value = 1.e+20f ; + fld_s03i871:grid_mapping = "latitude_longitude" ; + float fld_s03i872(time_0, pseudo_level_0, lat, lon) ; + fld_s03i872:_FillValue = 1.e+20f ; + fld_s03i872:long_name = "PHOSPHORUS POOL PLANT - WOOD (TILES)" ; + fld_s03i872:um_stash_source = "m01s03i872" ; + fld_s03i872:missing_value = 1.e+20f ; + fld_s03i872:grid_mapping = "latitude_longitude" ; + float fld_s03i873(time_0, pseudo_level_0, lat, lon) ; + fld_s03i873:_FillValue = 1.e+20f ; + fld_s03i873:long_name = "PHOSPHORUS POOL PLANT - ROOT (TILES)" ; + fld_s03i873:um_stash_source = "m01s03i873" ; + fld_s03i873:missing_value = 1.e+20f ; + fld_s03i873:grid_mapping = "latitude_longitude" ; + float fld_s03i874(time_0, pseudo_level_0, lat, lon) ; + fld_s03i874:_FillValue = 1.e+20f ; + fld_s03i874:long_name = "PHOSPHORUS POOL LITTER- METB (TILES)" ; + fld_s03i874:um_stash_source = "m01s03i874" ; + fld_s03i874:missing_value = 1.e+20f ; + fld_s03i874:grid_mapping = "latitude_longitude" ; + float fld_s03i875(time_0, pseudo_level_0, lat, lon) ; + fld_s03i875:_FillValue = 1.e+20f ; + fld_s03i875:long_name = "PHOSPHORUS POOL LITTER - STR (TILES)" ; + fld_s03i875:um_stash_source = "m01s03i875" ; + fld_s03i875:missing_value = 1.e+20f ; + fld_s03i875:grid_mapping = "latitude_longitude" ; + float fld_s03i876(time_0, pseudo_level_0, lat, lon) ; + fld_s03i876:_FillValue = 1.e+20f ; + fld_s03i876:long_name = "PHOSPHORUS POOL LITTER - CWD (TILES)" ; + fld_s03i876:um_stash_source = "m01s03i876" ; + fld_s03i876:missing_value = 1.e+20f ; + fld_s03i876:grid_mapping = "latitude_longitude" ; + float fld_s03i877(time_0, pseudo_level_0, lat, lon) ; + fld_s03i877:_FillValue = 1.e+20f ; + fld_s03i877:long_name = "PHOSPHORUS POOL SOIL - MIC (TILES)" ; + fld_s03i877:um_stash_source = "m01s03i877" ; + fld_s03i877:missing_value = 1.e+20f ; + fld_s03i877:grid_mapping = "latitude_longitude" ; + float fld_s03i878(time_0, pseudo_level_0, lat, lon) ; + fld_s03i878:_FillValue = 1.e+20f ; + fld_s03i878:long_name = "PHOSPHORUS POOL SOIL - SLOW (TILES)" ; + fld_s03i878:um_stash_source = "m01s03i878" ; + fld_s03i878:missing_value = 1.e+20f ; + fld_s03i878:grid_mapping = "latitude_longitude" ; + float fld_s03i879(time_0, pseudo_level_0, lat, lon) ; + fld_s03i879:_FillValue = 1.e+20f ; + fld_s03i879:long_name = "PHOSPHORUS POOL SOIL - PASS (TILES)" ; + fld_s03i879:um_stash_source = "m01s03i879" ; + fld_s03i879:missing_value = 1.e+20f ; + fld_s03i879:grid_mapping = "latitude_longitude" ; + float fld_s03i880(time_0, pseudo_level_0, lat, lon) ; + fld_s03i880:_FillValue = 1.e+20f ; + fld_s03i880:long_name = "PHOSPHORUS POOL SOIL LABILE (TILES)" ; + fld_s03i880:um_stash_source = "m01s03i880" ; + fld_s03i880:missing_value = 1.e+20f ; + fld_s03i880:grid_mapping = "latitude_longitude" ; + float fld_s03i881(time_0, pseudo_level_0, lat, lon) ; + fld_s03i881:_FillValue = 1.e+20f ; + fld_s03i881:long_name = "PHOSPHORUS POOL SOIL SORB ON TILES" ; + fld_s03i881:um_stash_source = "m01s03i881" ; + fld_s03i881:missing_value = 1.e+20f ; + fld_s03i881:grid_mapping = "latitude_longitude" ; + float fld_s03i882(time_0, pseudo_level_0, lat, lon) ; + fld_s03i882:_FillValue = 1.e+20f ; + fld_s03i882:long_name = "PHOSPHORUS POOL SOIL OCC ON TILES" ; + fld_s03i882:um_stash_source = "m01s03i882" ; + fld_s03i882:missing_value = 1.e+20f ; + fld_s03i882:grid_mapping = "latitude_longitude" ; + float fld_s03i884(time, pseudo_level_0, lat, lon) ; + fld_s03i884:_FillValue = 1.e+20f ; + fld_s03i884:long_name = "NITROGEN DEPOSITION" ; + fld_s03i884:um_stash_source = "m01s03i884" ; + fld_s03i884:missing_value = 1.e+20f ; + fld_s03i884:cell_methods = "time: mean" ; + fld_s03i884:grid_mapping = "latitude_longitude" ; + float fld_s03i885(time, pseudo_level_0, lat, lon) ; + fld_s03i885:_FillValue = 1.e+20f ; + fld_s03i885:long_name = "NITROGEN FIXATION" ; + fld_s03i885:um_stash_source = "m01s03i885" ; + fld_s03i885:missing_value = 1.e+20f ; + fld_s03i885:cell_methods = "time: mean" ; + fld_s03i885:grid_mapping = "latitude_longitude" ; + float fld_s03i893(time, pseudo_level_0, lat, lon) ; + fld_s03i893:_FillValue = 1.e+20f ; + fld_s03i893:long_name = "LEAF AREA INDEX (CASA-CNP GLAI)" ; + fld_s03i893:um_stash_source = "m01s03i893" ; + fld_s03i893:missing_value = 1.e+20f ; + fld_s03i893:cell_methods = "time: mean" ; + fld_s03i893:grid_mapping = "latitude_longitude" ; + float fld_s03i895(time, pseudo_level_0, lat, lon) ; + fld_s03i895:_FillValue = 1.e+20f ; + fld_s03i895:long_name = "WOOD FLUX CARBON (CASA-CNP)" ; + fld_s03i895:um_stash_source = "m01s03i895" ; + fld_s03i895:missing_value = 1.e+20f ; + fld_s03i895:cell_methods = "time: mean" ; + fld_s03i895:grid_mapping = "latitude_longitude" ; + float fld_s03i896(time, pseudo_level_0, lat, lon) ; + fld_s03i896:_FillValue = 1.e+20f ; + fld_s03i896:long_name = "WOOD FLUX NITROGEN (CASA-CNP)" ; + fld_s03i896:um_stash_source = "m01s03i896" ; + fld_s03i896:missing_value = 1.e+20f ; + fld_s03i896:cell_methods = "time: mean" ; + fld_s03i896:grid_mapping = "latitude_longitude" ; + float fld_s03i897(time, pseudo_level_0, lat, lon) ; + fld_s03i897:_FillValue = 1.e+20f ; + fld_s03i897:long_name = "WOOD FLUX PHOSPHOR (CASA-CNP)" ; + fld_s03i897:um_stash_source = "m01s03i897" ; + fld_s03i897:missing_value = 1.e+20f ; + fld_s03i897:cell_methods = "time: mean" ; + fld_s03i897:grid_mapping = "latitude_longitude" ; + float fld_s03i898(time_0, pseudo_level_0, lat, lon) ; + fld_s03i898:_FillValue = 1.e+20f ; + fld_s03i898:long_name = "WOOD HARVEST CARBON1(CASA-CNP)" ; + fld_s03i898:um_stash_source = "m01s03i898" ; + fld_s03i898:missing_value = 1.e+20f ; + fld_s03i898:grid_mapping = "latitude_longitude" ; + float fld_s03i899(time_0, pseudo_level_0, lat, lon) ; + fld_s03i899:_FillValue = 1.e+20f ; + fld_s03i899:long_name = "WOOD HARVEST CARBON2(CASA-CNP)" ; + fld_s03i899:um_stash_source = "m01s03i899" ; + fld_s03i899:missing_value = 1.e+20f ; + fld_s03i899:grid_mapping = "latitude_longitude" ; + float fld_s03i900(time_0, pseudo_level_0, lat, lon) ; + fld_s03i900:_FillValue = 1.e+20f ; + fld_s03i900:long_name = "WOOD HARVEST CARBON3(CASA-CNP)" ; + fld_s03i900:um_stash_source = "m01s03i900" ; + fld_s03i900:missing_value = 1.e+20f ; + fld_s03i900:grid_mapping = "latitude_longitude" ; + float fld_s03i901(time_0, pseudo_level_0, lat, lon) ; + fld_s03i901:_FillValue = 1.e+20f ; + fld_s03i901:long_name = "WOOD HARVEST NITROG1(CASA-CNP)" ; + fld_s03i901:um_stash_source = "m01s03i901" ; + fld_s03i901:missing_value = 1.e+20f ; + fld_s03i901:grid_mapping = "latitude_longitude" ; + float fld_s03i902(time_0, pseudo_level_0, lat, lon) ; + fld_s03i902:_FillValue = 1.e+20f ; + fld_s03i902:long_name = "WOOD HARVEST NITROG2(CASA-CNP)" ; + fld_s03i902:um_stash_source = "m01s03i902" ; + fld_s03i902:missing_value = 1.e+20f ; + fld_s03i902:grid_mapping = "latitude_longitude" ; + float fld_s03i903(time_0, pseudo_level_0, lat, lon) ; + fld_s03i903:_FillValue = 1.e+20f ; + fld_s03i903:long_name = "WOOD HARVEST NITROG3(CASA-CNP)" ; + fld_s03i903:um_stash_source = "m01s03i903" ; + fld_s03i903:missing_value = 1.e+20f ; + fld_s03i903:grid_mapping = "latitude_longitude" ; + float fld_s03i904(time_0, pseudo_level_0, lat, lon) ; + fld_s03i904:_FillValue = 1.e+20f ; + fld_s03i904:long_name = "WOOD HARVEST PHOSPH1(CASA-CNP)" ; + fld_s03i904:um_stash_source = "m01s03i904" ; + fld_s03i904:missing_value = 1.e+20f ; + fld_s03i904:grid_mapping = "latitude_longitude" ; + float fld_s03i905(time_0, pseudo_level_0, lat, lon) ; + fld_s03i905:_FillValue = 1.e+20f ; + fld_s03i905:long_name = "WOOD HARVEST PHOSPH2(CASA-CNP)" ; + fld_s03i905:um_stash_source = "m01s03i905" ; + fld_s03i905:missing_value = 1.e+20f ; + fld_s03i905:grid_mapping = "latitude_longitude" ; + float fld_s03i906(time_0, pseudo_level_0, lat, lon) ; + fld_s03i906:_FillValue = 1.e+20f ; + fld_s03i906:long_name = "WOOD HARVEST PHOSPH3(CASA-CNP)" ; + fld_s03i906:um_stash_source = "m01s03i906" ; + fld_s03i906:missing_value = 1.e+20f ; + fld_s03i906:grid_mapping = "latitude_longitude" ; + float fld_s03i907(time, pseudo_level_0, lat, lon) ; + fld_s03i907:_FillValue = 1.e+20f ; + fld_s03i907:long_name = "WOOD RESPIRA CARBON1(CASA-CNP)" ; + fld_s03i907:um_stash_source = "m01s03i907" ; + fld_s03i907:missing_value = 1.e+20f ; + fld_s03i907:cell_methods = "time: mean" ; + fld_s03i907:grid_mapping = "latitude_longitude" ; + float fld_s03i908(time, pseudo_level_0, lat, lon) ; + fld_s03i908:_FillValue = 1.e+20f ; + fld_s03i908:long_name = "WOOD RESPIRA CARBON2(CASA-CNP)" ; + fld_s03i908:um_stash_source = "m01s03i908" ; + fld_s03i908:missing_value = 1.e+20f ; + fld_s03i908:cell_methods = "time: mean" ; + fld_s03i908:grid_mapping = "latitude_longitude" ; + float fld_s03i909(time, pseudo_level_0, lat, lon) ; + fld_s03i909:_FillValue = 1.e+20f ; + fld_s03i909:long_name = "WOOD RESPIRA CARBON3(CASA-CNP)" ; + fld_s03i909:um_stash_source = "m01s03i909" ; + fld_s03i909:missing_value = 1.e+20f ; + fld_s03i909:cell_methods = "time: mean" ; + fld_s03i909:grid_mapping = "latitude_longitude" ; + float fld_s03i910(time, pseudo_level_0, lat, lon) ; + fld_s03i910:_FillValue = 1.e+20f ; + fld_s03i910:long_name = "WOOD RESPIRA NITROG1(CASA-CNP)" ; + fld_s03i910:um_stash_source = "m01s03i910" ; + fld_s03i910:missing_value = 1.e+20f ; + fld_s03i910:cell_methods = "time: mean" ; + fld_s03i910:grid_mapping = "latitude_longitude" ; + float fld_s03i911(time, pseudo_level_0, lat, lon) ; + fld_s03i911:_FillValue = 1.e+20f ; + fld_s03i911:long_name = "WOOD RESPIRA NITROG2(CASA-CNP)" ; + fld_s03i911:um_stash_source = "m01s03i911" ; + fld_s03i911:missing_value = 1.e+20f ; + fld_s03i911:cell_methods = "time: mean" ; + fld_s03i911:grid_mapping = "latitude_longitude" ; + float fld_s03i912(time, pseudo_level_0, lat, lon) ; + fld_s03i912:_FillValue = 1.e+20f ; + fld_s03i912:long_name = "WOOD RESPIRA NITROG3(CASA-CNP)" ; + fld_s03i912:um_stash_source = "m01s03i912" ; + fld_s03i912:missing_value = 1.e+20f ; + fld_s03i912:cell_methods = "time: mean" ; + fld_s03i912:grid_mapping = "latitude_longitude" ; + float fld_s03i913(time, pseudo_level_0, lat, lon) ; + fld_s03i913:_FillValue = 1.e+20f ; + fld_s03i913:long_name = "WOOD RESPIRA PHOSPH1(CASA-CNP)" ; + fld_s03i913:um_stash_source = "m01s03i913" ; + fld_s03i913:missing_value = 1.e+20f ; + fld_s03i913:cell_methods = "time: mean" ; + fld_s03i913:grid_mapping = "latitude_longitude" ; + float fld_s03i914(time, pseudo_level_0, lat, lon) ; + fld_s03i914:_FillValue = 1.e+20f ; + fld_s03i914:long_name = "WOOD RESPIRA PHOSPH2(CASA-CNP)" ; + fld_s03i914:um_stash_source = "m01s03i914" ; + fld_s03i914:missing_value = 1.e+20f ; + fld_s03i914:cell_methods = "time: mean" ; + fld_s03i914:grid_mapping = "latitude_longitude" ; + float fld_s03i915(time, pseudo_level_0, lat, lon) ; + fld_s03i915:_FillValue = 1.e+20f ; + fld_s03i915:long_name = "WOOD RESPIRA PHOSPH3(CASA-CNP)" ; + fld_s03i915:um_stash_source = "m01s03i915" ; + fld_s03i915:missing_value = 1.e+20f ; + fld_s03i915:cell_methods = "time: mean" ; + fld_s03i915:grid_mapping = "latitude_longitude" ; + float fld_s03i916(time, pseudo_level_0, lat, lon) ; + fld_s03i916:_FillValue = 1.e+20f ; + fld_s03i916:long_name = "THIN RATIO FOR FOREST (CASA-CNP)" ; + fld_s03i916:um_stash_source = "m01s03i916" ; + fld_s03i916:missing_value = 1.e+20f ; + fld_s03i916:cell_methods = "time: mean" ; + fld_s03i916:grid_mapping = "latitude_longitude" ; + float fld_s03i917(time, pseudo_level_0, lat, lon) ; + fld_s03i917:_FillValue = 1.e+20f ; + fld_s03i917:long_name = "NITROGEN NET RELEASE (CASA-CNP)" ; + fld_s03i917:um_stash_source = "m01s03i917" ; + fld_s03i917:missing_value = 1.e+20f ; + fld_s03i917:cell_methods = "time: mean" ; + fld_s03i917:grid_mapping = "latitude_longitude" ; + float fld_s03i918(time, pseudo_level_0, lat, lon) ; + fld_s03i918:_FillValue = 1.e+20f ; + fld_s03i918:long_name = "NITROGEN LEACHING (CASA-CNP)" ; + fld_s03i918:um_stash_source = "m01s03i918" ; + fld_s03i918:missing_value = 1.e+20f ; + fld_s03i918:cell_methods = "time: mean" ; + fld_s03i918:grid_mapping = "latitude_longitude" ; + float fld_s03i919(time, pseudo_level_0, lat, lon) ; + fld_s03i919:_FillValue = 1.e+20f ; + fld_s03i919:long_name = "NITROGEN UPTAKE (CASA-CNP)" ; + fld_s03i919:um_stash_source = "m01s03i919" ; + fld_s03i919:missing_value = 1.e+20f ; + fld_s03i919:cell_methods = "time: mean" ; + fld_s03i919:grid_mapping = "latitude_longitude" ; + float fld_s03i920(time, pseudo_level_0, lat, lon) ; + fld_s03i920:_FillValue = 1.e+20f ; + fld_s03i920:long_name = "NITROGEN LOSS (CASA-CNP)" ; + fld_s03i920:um_stash_source = "m01s03i920" ; + fld_s03i920:missing_value = 1.e+20f ; + fld_s03i920:cell_methods = "time: mean" ; + fld_s03i920:grid_mapping = "latitude_longitude" ; + float fld_s04i203(time, lat, lon) ; + fld_s04i203:_FillValue = 1.e+20f ; + fld_s04i203:standard_name = "stratiform_rainfall_flux" ; + fld_s04i203:long_name = "LARGE SCALE RAINFALL RATE KG/M2/S" ; + fld_s04i203:units = "kg m-2 s-1" ; + fld_s04i203:um_stash_source = "m01s04i203" ; + fld_s04i203:missing_value = 1.e+20f ; + fld_s04i203:cell_methods = "time: mean" ; + fld_s04i203:grid_mapping = "latitude_longitude" ; + float fld_s04i204(time, lat, lon) ; + fld_s04i204:_FillValue = 1.e+20f ; + fld_s04i204:standard_name = "stratiform_snowfall_flux" ; + fld_s04i204:long_name = "LARGE SCALE SNOWFALL RATE KG/M2/S" ; + fld_s04i204:units = "kg m-2 s-1" ; + fld_s04i204:um_stash_source = "m01s04i204" ; + fld_s04i204:missing_value = 1.e+20f ; + fld_s04i204:cell_methods = "time: mean" ; + fld_s04i204:grid_mapping = "latitude_longitude" ; + float fld_s05i205(time, lat, lon) ; + fld_s05i205:_FillValue = 1.e+20f ; + fld_s05i205:standard_name = "convective_rainfall_flux" ; + fld_s05i205:long_name = "CONVECTIVE RAINFALL RATE KG/M2/S" ; + fld_s05i205:units = "kg m-2 s-1" ; + fld_s05i205:um_stash_source = "m01s05i205" ; + fld_s05i205:missing_value = 1.e+20f ; + fld_s05i205:cell_methods = "time: mean" ; + fld_s05i205:grid_mapping = "latitude_longitude" ; + float fld_s05i206(time, lat, lon) ; + fld_s05i206:_FillValue = 1.e+20f ; + fld_s05i206:standard_name = "convective_snowfall_flux" ; + fld_s05i206:long_name = "CONVECTIVE SNOWFALL RATE KG/M2/S" ; + fld_s05i206:units = "kg m-2 s-1" ; + fld_s05i206:um_stash_source = "m01s05i206" ; + fld_s05i206:missing_value = 1.e+20f ; + fld_s05i206:cell_methods = "time: mean" ; + fld_s05i206:grid_mapping = "latitude_longitude" ; + float fld_s05i208(time, lat, lon) ; + fld_s05i208:_FillValue = 1.e+20f ; + fld_s05i208:standard_name = "air_pressure_at_convective_cloud_top" ; + fld_s05i208:long_name = "PRESSURE AT CONVECTIVE CLOUD TOP" ; + fld_s05i208:units = "Pa" ; + fld_s05i208:um_stash_source = "m01s05i208" ; + fld_s05i208:missing_value = 1.e+20f ; + fld_s05i208:cell_methods = "time: mean" ; + fld_s05i208:grid_mapping = "latitude_longitude" ; + float fld_s05i214(time, lat, lon) ; + fld_s05i214:_FillValue = 1.e+20f ; + fld_s05i214:standard_name = "rainfall_flux" ; + fld_s05i214:long_name = "TOTAL RAINFALL RATE: LS+CONV KG/M2/S" ; + fld_s05i214:units = "kg m-2 s-1" ; + fld_s05i214:um_stash_source = "m01s05i214" ; + fld_s05i214:missing_value = 1.e+20f ; + fld_s05i214:cell_methods = "time: mean" ; + fld_s05i214:grid_mapping = "latitude_longitude" ; + float fld_s05i215(time, lat, lon) ; + fld_s05i215:_FillValue = 1.e+20f ; + fld_s05i215:standard_name = "snowfall_flux" ; + fld_s05i215:long_name = "TOTAL SNOWFALL RATE: LS+CONV KG/M2/S" ; + fld_s05i215:units = "kg m-2 s-1" ; + fld_s05i215:um_stash_source = "m01s05i215" ; + fld_s05i215:missing_value = 1.e+20f ; + fld_s05i215:cell_methods = "time: mean" ; + fld_s05i215:grid_mapping = "latitude_longitude" ; + float fld_s05i216(time, lat, lon) ; + fld_s05i216:_FillValue = 1.e+20f ; + fld_s05i216:standard_name = "precipitation_flux" ; + fld_s05i216:long_name = "TOTAL PRECIPITATION RATE KG/M2/S" ; + fld_s05i216:units = "kg m-2 s-1" ; + fld_s05i216:um_stash_source = "m01s05i216" ; + fld_s05i216:missing_value = 1.e+20f ; + fld_s05i216:cell_methods = "time: mean" ; + fld_s05i216:grid_mapping = "latitude_longitude" ; + float fld_s05i222(time, lat, lon) ; + fld_s05i222:_FillValue = 1.e+20f ; + fld_s05i222:standard_name = "air_pressure_at_convective_cloud_base" ; + fld_s05i222:long_name = "PRESSURE AT LOWEST CONV CLOUD BASE" ; + fld_s05i222:units = "Pa" ; + fld_s05i222:um_stash_source = "m01s05i222" ; + fld_s05i222:missing_value = 1.e+20f ; + fld_s05i222:cell_methods = "time: mean" ; + fld_s05i222:grid_mapping = "latitude_longitude" ; + float fld_s05i270(time, lat, lon) ; + fld_s05i270:_FillValue = 1.e+20f ; + fld_s05i270:long_name = "shallow convection indicator" ; + fld_s05i270:units = "1" ; + fld_s05i270:um_stash_source = "m01s05i270" ; + fld_s05i270:missing_value = 1.e+20f ; + fld_s05i270:cell_methods = "time: mean" ; + fld_s05i270:grid_mapping = "latitude_longitude" ; + float fld_s05i284(time, lat, lon) ; + fld_s05i284:_FillValue = 1.e+20f ; + fld_s05i284:long_name = "Dust wet deposition flux due to convective precipitation division 4" ; + fld_s05i284:units = "kg m-2 s-1" ; + fld_s05i284:um_stash_source = "m01s05i284" ; + fld_s05i284:missing_value = 1.e+20f ; + fld_s05i284:cell_methods = "time: mean" ; + fld_s05i284:grid_mapping = "latitude_longitude" ; + float fld_s08i023(time, lat, lon) ; + fld_s08i023:_FillValue = 1.e+20f ; + fld_s08i023:standard_name = "surface_snow_amount" ; + fld_s08i023:long_name = "SNOW MASS AFTER HYDROLOGY KG/M2" ; + fld_s08i023:units = "kg m-2" ; + fld_s08i023:um_stash_source = "m01s08i023" ; + fld_s08i023:missing_value = 1.e+20f ; + fld_s08i023:cell_methods = "time: mean" ; + fld_s08i023:grid_mapping = "latitude_longitude" ; + float fld_s08i202(time, lat, lon) ; + fld_s08i202:_FillValue = 1.e+20f ; + fld_s08i202:long_name = "surface_snow_melt_flux_where_land" ; + fld_s08i202:units = "W m-2" ; + fld_s08i202:um_stash_source = "m01s08i202" ; + fld_s08i202:missing_value = 1.e+20f ; + fld_s08i202:cell_methods = "time: mean" ; + fld_s08i202:grid_mapping = "latitude_longitude" ; + float fld_s08i208(time, lat, lon) ; + fld_s08i208:_FillValue = 1.e+20f ; + fld_s08i208:standard_name = "mass_content_of_water_in_soil" ; + fld_s08i208:long_name = "SOIL MOISTURE CONTENT" ; + fld_s08i208:units = "kg m-2" ; + fld_s08i208:um_stash_source = "m01s08i208" ; + fld_s08i208:missing_value = 1.e+20f ; + fld_s08i208:cell_methods = "time: mean" ; + fld_s08i208:grid_mapping = "latitude_longitude" ; + float fld_s08i223(time, soil_model_level_number, lat, lon) ; + fld_s08i223:_FillValue = 1.e+20f ; + fld_s08i223:standard_name = "mass_content_of_water_in_soil_layer" ; + fld_s08i223:long_name = "SOIL MOISTURE CONTENT IN A LAYER" ; + fld_s08i223:units = "kg m-2" ; + fld_s08i223:um_stash_source = "m01s08i223" ; + fld_s08i223:missing_value = 1.e+20f ; + fld_s08i223:cell_methods = "time: mean" ; + fld_s08i223:grid_mapping = "latitude_longitude" ; + int soil_model_level_number(soil_model_level_number) ; + soil_model_level_number:axis = "Z" ; + soil_model_level_number:units = "1" ; + soil_model_level_number:long_name = "soil_model_level_number" ; + soil_model_level_number:positive = "down" ; + float fld_s08i225(time, soil_model_level_number, lat, lon) ; + fld_s08i225:_FillValue = 1.e+20f ; + fld_s08i225:standard_name = "soil_temperature" ; + fld_s08i225:long_name = "DEEP SOIL TEMP. AFTER HYDROLOGY DEGK" ; + fld_s08i225:units = "K" ; + fld_s08i225:um_stash_source = "m01s08i225" ; + fld_s08i225:missing_value = 1.e+20f ; + fld_s08i225:cell_methods = "time: mean" ; + fld_s08i225:grid_mapping = "latitude_longitude" ; + float fld_s08i229(time, soil_model_level_number, lat, lon) ; + fld_s08i229:_FillValue = 1.e+20f ; + fld_s08i229:standard_name = "mass_fraction_of_unfrozen_water_in_soil_moisture" ; + fld_s08i229:long_name = "UNFROZEN SOIL MOISTURE FRACTION" ; + fld_s08i229:units = "1" ; + fld_s08i229:um_stash_source = "m01s08i229" ; + fld_s08i229:missing_value = 1.e+20f ; + fld_s08i229:cell_methods = "time: mean" ; + fld_s08i229:grid_mapping = "latitude_longitude" ; + float fld_s08i230(time, soil_model_level_number, lat, lon) ; + fld_s08i230:_FillValue = 1.e+20f ; + fld_s08i230:standard_name = "mass_fraction_of_frozen_water_in_soil_moisture" ; + fld_s08i230:long_name = "FROZEN SOIL MOISTURE FRACTION" ; + fld_s08i230:units = "1" ; + fld_s08i230:um_stash_source = "m01s08i230" ; + fld_s08i230:missing_value = 1.e+20f ; + fld_s08i230:cell_methods = "time: mean" ; + fld_s08i230:grid_mapping = "latitude_longitude" ; + float fld_s08i231(time, lat, lon) ; + fld_s08i231:_FillValue = 1.e+20f ; + fld_s08i231:standard_name = "surface_snow_melt_flux" ; + fld_s08i231:long_name = "surface_snow_melt_flux_where_land" ; + fld_s08i231:units = "kg m-2 s-1" ; + fld_s08i231:um_stash_source = "m01s08i231" ; + fld_s08i231:missing_value = 1.e+20f ; + fld_s08i231:cell_methods = "time: mean" ; + fld_s08i231:grid_mapping = "latitude_longitude" ; + float fld_s08i233(time, lat, lon) ; + fld_s08i233:_FillValue = 1.e+20f ; + fld_s08i233:standard_name = "canopy_throughfall_flux" ; + fld_s08i233:long_name = "CANOPY THROUGHFALL RATE KG/M2/S" ; + fld_s08i233:units = "kg m-2 s-1" ; + fld_s08i233:um_stash_source = "m01s08i233" ; + fld_s08i233:missing_value = 1.e+20f ; + fld_s08i233:cell_methods = "time: mean" ; + fld_s08i233:grid_mapping = "latitude_longitude" ; + float fld_s08i234(time, lat, lon) ; + fld_s08i234:_FillValue = 1.e+20f ; + fld_s08i234:standard_name = "surface_runoff_flux" ; + fld_s08i234:long_name = "SURFACE RUNOFF RATE KG/M2/S" ; + fld_s08i234:units = "kg m-2 s-1" ; + fld_s08i234:um_stash_source = "m01s08i234" ; + fld_s08i234:missing_value = 1.e+20f ; + fld_s08i234:cell_methods = "time: mean" ; + fld_s08i234:grid_mapping = "latitude_longitude" ; + float fld_s08i235(time, lat, lon) ; + fld_s08i235:_FillValue = 1.e+20f ; + fld_s08i235:standard_name = "subsurface_runoff_flux" ; + fld_s08i235:long_name = "SUB-SURFACE RUNOFF RATE KG/M2/S" ; + fld_s08i235:units = "kg m-2 s-1" ; + fld_s08i235:um_stash_source = "m01s08i235" ; + fld_s08i235:missing_value = 1.e+20f ; + fld_s08i235:cell_methods = "time: mean" ; + fld_s08i235:grid_mapping = "latitude_longitude" ; + float fld_s08i236(time, pseudo_level_0, lat, lon) ; + fld_s08i236:_FillValue = 1.e+20f ; + fld_s08i236:long_name = "SNOW AMOUNT ON TILES KG/M2" ; + fld_s08i236:units = "kg m-2" ; + fld_s08i236:um_stash_source = "m01s08i236" ; + fld_s08i236:missing_value = 1.e+20f ; + fld_s08i236:cell_methods = "time: mean" ; + fld_s08i236:grid_mapping = "latitude_longitude" ; + float fld_s08i237(time, pseudo_level_0, lat, lon) ; + fld_s08i237:_FillValue = 1.e+20f ; + fld_s08i237:standard_name = "surface_snow_melt_flux" ; + fld_s08i237:long_name = "SNOW MELT RATE ON TILES KG/M2/S" ; + fld_s08i237:units = "kg m-2 s-1" ; + fld_s08i237:um_stash_source = "m01s08i237" ; + fld_s08i237:missing_value = 1.e+20f ; + fld_s08i237:cell_methods = "time: mean" ; + fld_s08i237:grid_mapping = "latitude_longitude" ; + float fld_s16i222(time, lat, lon) ; + fld_s16i222:_FillValue = 1.e+20f ; + fld_s16i222:standard_name = "air_pressure_at_sea_level" ; + fld_s16i222:long_name = "PRESSURE AT MEAN SEA LEVEL" ; + fld_s16i222:units = "Pa" ; + fld_s16i222:um_stash_source = "m01s16i222" ; + fld_s16i222:missing_value = 1.e+20f ; + fld_s16i222:cell_methods = "time: mean" ; + fld_s16i222:grid_mapping = "latitude_longitude" ; + float fld_s17i205(time, lat, lon) ; + fld_s17i205:_FillValue = 1.e+20f ; + fld_s17i205:long_name = "DIMETHYL SULPHIDE EMISSIONS" ; + fld_s17i205:um_stash_source = "m01s17i205" ; + fld_s17i205:missing_value = 1.e+20f ; + fld_s17i205:cell_methods = "time: mean" ; + fld_s17i205:grid_mapping = "latitude_longitude" ; + float fld_s30i201(time, pressure, lat_v, lon_u) ; + fld_s30i201:_FillValue = 1.e+20f ; + fld_s30i201:standard_name = "eastward_wind" ; + fld_s30i201:long_name = "U COMPNT OF WIND ON P LEV/UV GRID" ; + fld_s30i201:units = "m s-1" ; + fld_s30i201:um_stash_source = "m01s30i201" ; + fld_s30i201:missing_value = 1.e+20f ; + fld_s30i201:cell_methods = "time: mean" ; + fld_s30i201:grid_mapping = "latitude_longitude" ; + double pressure(pressure) ; + pressure:axis = "Z" ; + pressure:units = "Pa" ; + pressure:long_name = "pressure" ; + pressure:positive = "down" ; + float fld_s30i202(time, pressure, lat_v, lon_u) ; + fld_s30i202:_FillValue = 1.e+20f ; + fld_s30i202:standard_name = "northward_wind" ; + fld_s30i202:long_name = "V COMPNT OF WIND ON P LEV/UV GRID" ; + fld_s30i202:units = "m s-1" ; + fld_s30i202:um_stash_source = "m01s30i202" ; + fld_s30i202:missing_value = 1.e+20f ; + fld_s30i202:cell_methods = "time: mean" ; + fld_s30i202:grid_mapping = "latitude_longitude" ; + float fld_s30i203(time, pressure, lat_v, lon_u) ; + fld_s30i203:_FillValue = 1.e+20f ; + fld_s30i203:standard_name = "upward_air_velocity" ; + fld_s30i203:long_name = "W COMPNT OF WIND ON P LEV/UV GRID" ; + fld_s30i203:units = "m s-1" ; + fld_s30i203:um_stash_source = "m01s30i203" ; + fld_s30i203:missing_value = 1.e+20f ; + fld_s30i203:cell_methods = "time: mean" ; + fld_s30i203:grid_mapping = "latitude_longitude" ; + float fld_s30i204(time, pressure, lat_v, lon_u) ; + fld_s30i204:_FillValue = 1.e+20f ; + fld_s30i204:standard_name = "air_temperature" ; + fld_s30i204:long_name = "TEMPERATURE ON P LEV/UV GRID" ; + fld_s30i204:units = "K" ; + fld_s30i204:um_stash_source = "m01s30i204" ; + fld_s30i204:missing_value = 1.e+20f ; + fld_s30i204:cell_methods = "time: mean" ; + fld_s30i204:grid_mapping = "latitude_longitude" ; + float fld_s30i205(time, pressure, lat_v, lon_u) ; + fld_s30i205:_FillValue = 1.e+20f ; + fld_s30i205:standard_name = "specific_humidity" ; + fld_s30i205:long_name = "SPECIFIC HUMIDITY ON P LEV/UV GRID" ; + fld_s30i205:units = "1" ; + fld_s30i205:um_stash_source = "m01s30i205" ; + fld_s30i205:missing_value = 1.e+20f ; + fld_s30i205:cell_methods = "time: mean" ; + fld_s30i205:grid_mapping = "latitude_longitude" ; + float fld_s30i206(time, pressure, lat_v, lon_u) ; + fld_s30i206:_FillValue = 1.e+20f ; + fld_s30i206:standard_name = "relative_humidity" ; + fld_s30i206:long_name = "RELATIVE HUMIDITY ON P LEV/UV GRID" ; + fld_s30i206:units = "%" ; + fld_s30i206:um_stash_source = "m01s30i206" ; + fld_s30i206:missing_value = 1.e+20f ; + fld_s30i206:cell_methods = "time: mean" ; + fld_s30i206:grid_mapping = "latitude_longitude" ; + float fld_s30i207(time, pressure, lat_v, lon_u) ; + fld_s30i207:_FillValue = 1.e+20f ; + fld_s30i207:standard_name = "geopotential_height" ; + fld_s30i207:long_name = "GEOPOTENTIAL HEIGHT ON P LEV/UV GRID" ; + fld_s30i207:units = "m" ; + fld_s30i207:um_stash_source = "m01s30i207" ; + fld_s30i207:missing_value = 1.e+20f ; + fld_s30i207:cell_methods = "time: mean" ; + fld_s30i207:grid_mapping = "latitude_longitude" ; + float fld_s30i208(time, pressure, lat_v, lon_u) ; + fld_s30i208:_FillValue = 1.e+20f ; + fld_s30i208:standard_name = "lagrangian_tendency_of_air_pressure" ; + fld_s30i208:long_name = "OMEGA ON P LEV/UV GRID" ; + fld_s30i208:units = "Pa s-1" ; + fld_s30i208:um_stash_source = "m01s30i208" ; + fld_s30i208:missing_value = 1.e+20f ; + fld_s30i208:cell_methods = "time: mean" ; + fld_s30i208:grid_mapping = "latitude_longitude" ; + float fld_s30i215(time, pressure, lat_v, lon_u) ; + fld_s30i215:_FillValue = 1.e+20f ; + fld_s30i215:standard_name = "product_of_eastward_wind_and_specific_humidity" ; + fld_s30i215:long_name = "UQ ON P LEV/UV GRID" ; + fld_s30i215:units = "m s-1" ; + fld_s30i215:um_stash_source = "m01s30i215" ; + fld_s30i215:missing_value = 1.e+20f ; + fld_s30i215:cell_methods = "time: mean" ; + fld_s30i215:grid_mapping = "latitude_longitude" ; + float fld_s30i225(time, pressure, lat_v, lon_u) ; + fld_s30i225:_FillValue = 1.e+20f ; + fld_s30i225:standard_name = "product_of_northward_wind_and_specific_humidity" ; + fld_s30i225:long_name = "VQ ON P LEV/UV GRID" ; + fld_s30i225:units = "m s-1" ; + fld_s30i225:um_stash_source = "m01s30i225" ; + fld_s30i225:missing_value = 1.e+20f ; + fld_s30i225:cell_methods = "time: mean" ; + fld_s30i225:grid_mapping = "latitude_longitude" ; + float fld_s30i301(time, pressure, lat_v, lon_u) ; + fld_s30i301:_FillValue = 1.e+20f ; + fld_s30i301:long_name = "Heavyside function on pressure levels" ; + fld_s30i301:units = "1" ; + fld_s30i301:um_stash_source = "m01s30i301" ; + fld_s30i301:missing_value = 1.e+20f ; + fld_s30i301:cell_methods = "time: mean" ; + fld_s30i301:grid_mapping = "latitude_longitude" ; + float fld_s30i403(time, lat, lon) ; + fld_s30i403:_FillValue = 1.e+20f ; + fld_s30i403:long_name = "TOTAL COLUMN DRY MASS RHO GRID" ; + fld_s30i403:units = "kg m-2" ; + fld_s30i403:um_stash_source = "m01s30i403" ; + fld_s30i403:missing_value = 1.e+20f ; + fld_s30i403:cell_methods = "time: mean" ; + fld_s30i403:grid_mapping = "latitude_longitude" ; + float fld_s30i404(time, lat, lon) ; + fld_s30i404:_FillValue = 1.e+20f ; + fld_s30i404:standard_name = "atmosphere_mass_per_unit_area" ; + fld_s30i404:long_name = "TOTAL COLUMN WET MASS RHO GRID" ; + fld_s30i404:units = "kg m-2" ; + fld_s30i404:um_stash_source = "m01s30i404" ; + fld_s30i404:missing_value = 1.e+20f ; + fld_s30i404:cell_methods = "time: mean" ; + fld_s30i404:grid_mapping = "latitude_longitude" ; + float fld_s30i405(time, lat, lon) ; + fld_s30i405:_FillValue = 1.e+20f ; + fld_s30i405:standard_name = "atmosphere_cloud_liquid_water_content" ; + fld_s30i405:long_name = "TOTAL COLUMN QCL RHO GRID" ; + fld_s30i405:units = "kg m-2" ; + fld_s30i405:um_stash_source = "m01s30i405" ; + fld_s30i405:missing_value = 1.e+20f ; + fld_s30i405:cell_methods = "time: mean" ; + fld_s30i405:grid_mapping = "latitude_longitude" ; + float fld_s30i406(time, lat, lon) ; + fld_s30i406:_FillValue = 1.e+20f ; + fld_s30i406:standard_name = "atmosphere_cloud_ice_content" ; + fld_s30i406:long_name = "TOTAL COLUMN QCF RHO GRID" ; + fld_s30i406:units = "kg m-2" ; + fld_s30i406:um_stash_source = "m01s30i406" ; + fld_s30i406:missing_value = 1.e+20f ; + fld_s30i406:cell_methods = "time: mean" ; + fld_s30i406:grid_mapping = "latitude_longitude" ; + float fld_s30i428(time, lat, lon) ; + fld_s30i428:_FillValue = 1.e+20f ; + fld_s30i428:long_name = "dry mass col int u*q per unit area" ; + fld_s30i428:um_stash_source = "m01s30i428" ; + fld_s30i428:missing_value = 1.e+20f ; + fld_s30i428:cell_methods = "time: mean" ; + fld_s30i428:grid_mapping = "latitude_longitude" ; + float fld_s30i429(time, lat, lon) ; + fld_s30i429:_FillValue = 1.e+20f ; + fld_s30i429:long_name = "dry mass col int v*q per unit area" ; + fld_s30i429:um_stash_source = "m01s30i429" ; + fld_s30i429:missing_value = 1.e+20f ; + fld_s30i429:cell_methods = "time: mean" ; + fld_s30i429:grid_mapping = "latitude_longitude" ; + float fld_s30i453(time, lat, lon) ; + fld_s30i453:_FillValue = 1.e+20f ; + fld_s30i453:standard_name = "tropopause_altitude" ; + fld_s30i453:long_name = "Height at Tropopause Level" ; + fld_s30i453:units = "m" ; + fld_s30i453:um_stash_source = "m01s30i453" ; + fld_s30i453:missing_value = 1.e+20f ; + fld_s30i453:cell_methods = "time: mean" ; + fld_s30i453:grid_mapping = "latitude_longitude" ; + float fld_s33i001(time, model_theta_level_number, lat, lon) ; + fld_s33i001:_FillValue = 1.e+20f ; + fld_s33i001:standard_name = "mole_fraction_of_ozone_in_air" ; + fld_s33i001:long_name = "ATM TRACER 1 AFTER TS" ; + fld_s33i001:units = "mole mole-1" ; + fld_s33i001:um_stash_source = "m01s33i001" ; + fld_s33i001:missing_value = 1.e+20f ; + fld_s33i001:cell_methods = "time: mean" ; + fld_s33i001:grid_mapping = "latitude_longitude" ; + fld_s33i001:coordinates = "sigma_theta surface_altitude theta_level_height" ; + int model_theta_level_number(model_theta_level_number) ; + model_theta_level_number:axis = "Z" ; + model_theta_level_number:units = "1" ; + model_theta_level_number:standard_name = "model_level_number" ; + model_theta_level_number:positive = "up" ; + double theta_level_height(model_theta_level_number) ; + theta_level_height:bounds = "theta_level_height_bnds" ; + theta_level_height:units = "m" ; + theta_level_height:long_name = "level_height" ; + theta_level_height:positive = "up" ; + theta_level_height:standard_name = "atmosphere_hybrid_height_coordinate" ; + theta_level_height:axis = "Z" ; + theta_level_height:formula_terms = "a: theta_level_height b: sigma_theta orog: surface_altitude" ; + double theta_level_height_bnds(model_theta_level_number, bnds) ; + double sigma_theta(model_theta_level_number) ; + sigma_theta:bounds = "sigma_theta_bnds" ; + sigma_theta:units = "1" ; + sigma_theta:long_name = "sigma" ; + double sigma_theta_bnds(model_theta_level_number, bnds) ; + float fld_s33i002(time, model_theta_level_number, lat, lon) ; + fld_s33i002:_FillValue = 1.e+20f ; + fld_s33i002:long_name = "ATM TRACER 2 AFTER TS" ; + fld_s33i002:um_stash_source = "m01s33i002" ; + fld_s33i002:missing_value = 1.e+20f ; + fld_s33i002:cell_methods = "time: mean" ; + fld_s33i002:grid_mapping = "latitude_longitude" ; + fld_s33i002:coordinates = "sigma_theta surface_altitude theta_level_height" ; + float fld_artificial(time, model_theta_level_number, lat, lon) ; + fld_artificial:_FillValue = 1.e+20f ; + fld_artificial:long_name = "ATM TRACER 2 AFTER TS" ; + fld_artificial:um_stash_source = "m01s33i002" ; + fld_artificial:missing_value = 1.e+20f ; + fld_artificial:cell_methods = "time: point" ; + fld_artificial:grid_mapping = "latitude_longitude" ; + fld_artificial:coordinates = "sigma_theta surface_altitude theta_level_height" ; + fld_artificial:notes = "this variable was added manually to test 'time: point' filenames" ; + + +// global attributes: + :history = "File /scratch/p66/jxs599/access-esm/archive/Nov25-NewNitrogen-Nov25-NewNitrogen-6a5acd30/output200/atmosphere/aiihca.pai5jan converted with /g/data/vk83/apps/base_conda/envs/payu-1.2.0/lib/python3.10/site-packages/um2nc/um2netcdf.py 1.1.0 at 2025-12-04 20:03:16" ; + :Conventions = "CF-1.6" ; + :source = "Data from Met Office Unified Model" ; + :um_version = "7.3" ; +data: + + time = 856174.5 ; + + time_bnds = + 856159, 856187 ; + + lat = -90, -88.75, -87.5, -86.25, -85, -83.75, -82.5, -81.25, -80, -78.75, + -77.5, -76.25, -75, -73.75, -72.5, -71.25, -70, -68.75, -67.5, -66.25, + -65, -63.75, -62.5, -61.25, -60, -58.75, -57.5, -56.25, -55, -53.75, + -52.5, -51.25, -50, -48.75, -47.5, -46.25, -45, -43.75, -42.5, -41.25, + -40, -38.75, -37.5, -36.25, -35, -33.75, -32.5, -31.25, -30, -28.75, + -27.5, -26.25, -25, -23.75, -22.5, -21.25, -20, -18.75, -17.5, -16.25, + -15, -13.75, -12.5, -11.25, -10, -8.75, -7.5, -6.25, -5, -3.75, -2.5, + -1.25, 0, 1.25, 2.5, 3.75, 5, 6.25, 7.5, 8.75, 10, 11.25, 12.5, 13.75, + 15, 16.25, 17.5, 18.75, 20, 21.25, 22.5, 23.75, 25, 26.25, 27.5, 28.75, + 30, 31.25, 32.5, 33.75, 35, 36.25, 37.5, 38.75, 40, 41.25, 42.5, 43.75, + 45, 46.25, 47.5, 48.75, 50, 51.25, 52.5, 53.75, 55, 56.25, 57.5, 58.75, + 60, 61.25, 62.5, 63.75, 65, 66.25, 67.5, 68.75, 70, 71.25, 72.5, 73.75, + 75, 76.25, 77.5, 78.75, 80, 81.25, 82.5, 83.75, 85, 86.25, 87.5, 88.75, 90 ; + + lon = 0, 1.875, 3.75, 5.625, 7.5, 9.375, 11.25, 13.125, 15, 16.875, 18.75, + 20.625, 22.5, 24.375, 26.25, 28.125, 30, 31.875, 33.75, 35.625, 37.5, + 39.375, 41.25, 43.125, 45, 46.875, 48.75, 50.625, 52.5, 54.375, 56.25, + 58.125, 60, 61.875, 63.75, 65.625, 67.5, 69.375, 71.25, 73.125, 75, + 76.875, 78.75, 80.625, 82.5, 84.375, 86.25, 88.125, 90, 91.875, 93.75, + 95.625, 97.5, 99.375, 101.25, 103.125, 105, 106.875, 108.75, 110.625, + 112.5, 114.375, 116.25, 118.125, 120, 121.875, 123.75, 125.625, 127.5, + 129.375, 131.25, 133.125, 135, 136.875, 138.75, 140.625, 142.5, 144.375, + 146.25, 148.125, 150, 151.875, 153.75, 155.625, 157.5, 159.375, 161.25, + 163.125, 165, 166.875, 168.75, 170.625, 172.5, 174.375, 176.25, 178.125, + 180, 181.875, 183.75, 185.625, 187.5, 189.375, 191.25, 193.125, 195, + 196.875, 198.75, 200.625, 202.5, 204.375, 206.25, 208.125, 210, 211.875, + 213.75, 215.625, 217.5, 219.375, 221.25, 223.125, 225, 226.875, 228.75, + 230.625, 232.5, 234.375, 236.25, 238.125, 240, 241.875, 243.75, 245.625, + 247.5, 249.375, 251.25, 253.125, 255, 256.875, 258.75, 260.625, 262.5, + 264.375, 266.25, 268.125, 270, 271.875, 273.75, 275.625, 277.5, 279.375, + 281.25, 283.125, 285, 286.875, 288.75, 290.625, 292.5, 294.375, 296.25, + 298.125, 300, 301.875, 303.75, 305.625, 307.5, 309.375, 311.25, 313.125, + 315, 316.875, 318.75, 320.625, 322.5, 324.375, 326.25, 328.125, 330, + 331.875, 333.75, 335.625, 337.5, 339.375, 341.25, 343.125, 345, 346.875, + 348.75, 350.625, 352.5, 354.375, 356.25, 358.125 ; + + model_rho_level_number = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38 ; + + pseudo_level = 1, 2, 3, 4, 5, 6 ; + + pseudo_level_0 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 ; + + lon_u = 0.9375, 2.8125, 4.6875, 6.5625, 8.4375, 10.3125, 12.1875, 14.0625, + 15.9375, 17.8125, 19.6875, 21.5625, 23.4375, 25.3125, 27.1875, 29.0625, + 30.9375, 32.8125, 34.6875, 36.5625, 38.4375, 40.3125, 42.1875, 44.0625, + 45.9375, 47.8125, 49.6875, 51.5625, 53.4375, 55.3125, 57.1875, 59.0625, + 60.9375, 62.8125, 64.6875, 66.5625, 68.4375, 70.3125, 72.1875, 74.0625, + 75.9375, 77.8125, 79.6875, 81.5625, 83.4375, 85.3125, 87.1875, 89.0625, + 90.9375, 92.8125, 94.6875, 96.5625, 98.4375, 100.3125, 102.1875, + 104.0625, 105.9375, 107.8125, 109.6875, 111.5625, 113.4375, 115.3125, + 117.1875, 119.0625, 120.9375, 122.8125, 124.6875, 126.5625, 128.4375, + 130.3125, 132.1875, 134.0625, 135.9375, 137.8125, 139.6875, 141.5625, + 143.4375, 145.3125, 147.1875, 149.0625, 150.9375, 152.8125, 154.6875, + 156.5625, 158.4375, 160.3125, 162.1875, 164.0625, 165.9375, 167.8125, + 169.6875, 171.5625, 173.4375, 175.3125, 177.1875, 179.0625, 180.9375, + 182.8125, 184.6875, 186.5625, 188.4375, 190.3125, 192.1875, 194.0625, + 195.9375, 197.8125, 199.6875, 201.5625, 203.4375, 205.3125, 207.1875, + 209.0625, 210.9375, 212.8125, 214.6875, 216.5625, 218.4375, 220.3125, + 222.1875, 224.0625, 225.9375, 227.8125, 229.6875, 231.5625, 233.4375, + 235.3125, 237.1875, 239.0625, 240.9375, 242.8125, 244.6875, 246.5625, + 248.4375, 250.3125, 252.1875, 254.0625, 255.9375, 257.8125, 259.6875, + 261.5625, 263.4375, 265.3125, 267.1875, 269.0625, 270.9375, 272.8125, + 274.6875, 276.5625, 278.4375, 280.3125, 282.1875, 284.0625, 285.9375, + 287.8125, 289.6875, 291.5625, 293.4375, 295.3125, 297.1875, 299.0625, + 300.9375, 302.8125, 304.6875, 306.5625, 308.4375, 310.3125, 312.1875, + 314.0625, 315.9375, 317.8125, 319.6875, 321.5625, 323.4375, 325.3125, + 327.1875, 329.0625, 330.9375, 332.8125, 334.6875, 336.5625, 338.4375, + 340.3125, 342.1875, 344.0625, 345.9375, 347.8125, 349.6875, 351.5625, + 353.4375, 355.3125, 357.1875, 359.0625 ; + + lat_v = -89.375, -88.125, -86.875, -85.625, -84.375, -83.125, -81.875, + -80.625, -79.375, -78.125, -76.875, -75.625, -74.375, -73.125, -71.875, + -70.625, -69.375, -68.125, -66.875, -65.625, -64.375, -63.125, -61.875, + -60.625, -59.375, -58.125, -56.875, -55.625, -54.375, -53.125, -51.875, + -50.625, -49.375, -48.125, -46.875, -45.625, -44.375, -43.125, -41.875, + -40.625, -39.375, -38.125, -36.875, -35.625, -34.375, -33.125, -31.875, + -30.625, -29.375, -28.125, -26.875, -25.625, -24.375, -23.125, -21.875, + -20.625, -19.375, -18.125, -16.875, -15.625, -14.375, -13.125, -11.875, + -10.625, -9.375, -8.125, -6.875, -5.625, -4.375, -3.125, -1.875, -0.625, + 0.625, 1.875, 3.125, 4.375, 5.625, 6.875, 8.125, 9.375, 10.625, 11.875, + 13.125, 14.375, 15.625, 16.875, 18.125, 19.375, 20.625, 21.875, 23.125, + 24.375, 25.625, 26.875, 28.125, 29.375, 30.625, 31.875, 33.125, 34.375, + 35.625, 36.875, 38.125, 39.375, 40.625, 41.875, 43.125, 44.375, 45.625, + 46.875, 48.125, 49.375, 50.625, 51.875, 53.125, 54.375, 55.625, 56.875, + 58.125, 59.375, 60.625, 61.875, 63.125, 64.375, 65.625, 66.875, 68.125, + 69.375, 70.625, 71.875, 73.125, 74.375, 75.625, 76.875, 78.125, 79.375, + 80.625, 81.875, 83.125, 84.375, 85.625, 86.875, 88.125, 89.375 ; + + pseudo_level_2 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ; + + time_0 = 856190 ; + + soil_model_level_number = 1, 2, 3, 4, 5, 6 ; + + pressure = 100000, 92500, 85000, 70000, 60000, 50000, 40000, 30000, 25000, + 20000, 15000, 10000, 7000, 5000, 3000, 2000, 1000, 500, 100 ; + + model_theta_level_number = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38 ; +} diff --git a/test/data/iceh-1monthly-mean_2345-02.cdl b/test/data/iceh-1monthly-mean_2345-02.cdl new file mode 100644 index 0000000..0cd68af --- /dev/null +++ b/test/data/iceh-1monthly-mean_2345-02.cdl @@ -0,0 +1,610 @@ +netcdf iceh-1monthly-mean_2345-01 { +dimensions: + d2 = 2 ; + ni = 360 ; + nj = 300 ; + nc = 5 ; + nkice = 1 ; + nksnow = 1 ; + nkbio = 2 ; + time = UNLIMITED ; // (1 currently) + nvertices = 4 ; +variables: + float time(time) ; + time:long_name = "model time" ; + time:units = "days since 0001-01-01 00:00:00" ; + time:calendar = "proleptic_gregorian" ; + time:bounds = "time_bounds" ; + float time_bounds(time, d2) ; + time_bounds:long_name = "boundaries for time-averaging interval" ; + time_bounds:units = "days since 0001-01-01 00:00:00" ; + float TLON(nj, ni) ; + TLON:long_name = "T grid center longitude" ; + TLON:units = "degrees_east" ; + TLON:missing_value = 1.e+30f ; + TLON:_FillValue = 1.e+30f ; + float TLAT(nj, ni) ; + TLAT:long_name = "T grid center latitude" ; + TLAT:units = "degrees_north" ; + TLAT:missing_value = 1.e+30f ; + TLAT:_FillValue = 1.e+30f ; + float ULON(nj, ni) ; + ULON:long_name = "U grid center longitude" ; + ULON:units = "degrees_east" ; + ULON:missing_value = 1.e+30f ; + ULON:_FillValue = 1.e+30f ; + float ULAT(nj, ni) ; + ULAT:long_name = "U grid center latitude" ; + ULAT:units = "degrees_north" ; + ULAT:missing_value = 1.e+30f ; + ULAT:_FillValue = 1.e+30f ; + ULAT:comment = "Latitude of NE corner of T grid cell" ; + float NCAT(nc) ; + NCAT:long_name = "category maximum thickness" ; + NCAT:units = "m" ; + float VGRDi(nkice) ; + VGRDi:long_name = "vertical ice levels" ; + VGRDi:units = "1" ; + float VGRDs(nksnow) ; + VGRDs:long_name = "vertical snow levels" ; + VGRDs:units = "1" ; + float VGRDb(nkbio) ; + VGRDb:long_name = "vertical ice-bio levels" ; + VGRDb:units = "1" ; + float tmask(nj, ni) ; + tmask:long_name = "ocean grid mask" ; + tmask:coordinates = "TLON TLAT" ; + tmask:comment = "0 = land, 1 = ocean" ; + tmask:missing_value = 1.e+30f ; + tmask:_FillValue = 1.e+30f ; + float tarea(nj, ni) ; + tarea:long_name = "area of T grid cells" ; + tarea:units = "m^2" ; + tarea:coordinates = "TLON TLAT" ; + tarea:missing_value = 1.e+30f ; + tarea:_FillValue = 1.e+30f ; + float uarea(nj, ni) ; + uarea:long_name = "area of U grid cells" ; + uarea:units = "m^2" ; + uarea:coordinates = "ULON ULAT" ; + uarea:missing_value = 1.e+30f ; + uarea:_FillValue = 1.e+30f ; + float aice(time, nj, ni) ; + aice:units = "1" ; + aice:long_name = "ice area (aggregate)" ; + aice:coordinates = "TLON TLAT time" ; + aice:cell_measures = "area: tarea" ; + aice:missing_value = 1.e+30f ; + aice:_FillValue = 1.e+30f ; + aice:cell_methods = "time: mean" ; + aice:time_rep = "averaged" ; + float dvsdtt(time, nj, ni) ; + dvsdtt:units = "cm/day" ; + dvsdtt:long_name = "snow volume tendency thermo" ; + dvsdtt:coordinates = "TLON TLAT time" ; + dvsdtt:cell_measures = "area: tarea" ; + dvsdtt:missing_value = 1.e+30f ; + dvsdtt:_FillValue = 1.e+30f ; + dvsdtt:cell_methods = "time: mean" ; + dvsdtt:time_rep = "averaged" ; + float dvsdtd(time, nj, ni) ; + dvsdtd:units = "cm/day" ; + dvsdtd:long_name = "snow volume tendency dynamics" ; + dvsdtd:coordinates = "TLON TLAT time" ; + dvsdtd:cell_measures = "area: tarea" ; + dvsdtd:missing_value = 1.e+30f ; + dvsdtd:_FillValue = 1.e+30f ; + dvsdtd:cell_methods = "time: mean" ; + dvsdtd:time_rep = "averaged" ; + float siconc(time, nj, ni) ; + siconc:units = "%" ; + siconc:long_name = "Sea-Ice Area Percentage (Ocean Grid)" ; + siconc:coordinates = "TLON TLAT time" ; + siconc:cell_measures = "area: tarea" ; + siconc:missing_value = 1.e+30f ; + siconc:_FillValue = 1.e+30f ; + siconc:cell_methods = "area: mean where sea time: mean" ; + siconc:time_rep = "averaged" ; + float sitimefrac(time, nj, ni) ; + sitimefrac:units = "1" ; + sitimefrac:long_name = "fraction of time-avg interval that ice is present" ; + sitimefrac:coordinates = "TLON TLAT time" ; + sitimefrac:cell_measures = "area: tarea" ; + sitimefrac:comment = "ice extent flag" ; + sitimefrac:missing_value = 1.e+30f ; + sitimefrac:_FillValue = 1.e+30f ; + sitimefrac:cell_methods = "area: mean where sea time: mean" ; + sitimefrac:time_rep = "averaged" ; + float sivol(time, nj, ni) ; + sivol:units = "m" ; + sivol:long_name = "Sea-Ice Volume per Area" ; + sivol:coordinates = "TLON TLAT time" ; + sivol:cell_measures = "area: tarea" ; + sivol:comment = "ice volume per unit grid cell area" ; + sivol:missing_value = 1.e+30f ; + sivol:_FillValue = 1.e+30f ; + sivol:cell_methods = "area: mean where sea time: mean" ; + sivol:time_rep = "averaged" ; + float sithick(time, nj, ni) ; + sithick:units = "m" ; + sithick:long_name = "Sea-Ice Thickness" ; + sithick:coordinates = "TLON TLAT time" ; + sithick:cell_measures = "area: tarea" ; + sithick:comment = "area weighted average of volume divided by ice area" ; + sithick:missing_value = 1.e+30f ; + sithick:_FillValue = 1.e+30f ; + sithick:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + sithick:time_rep = "averaged" ; + float simass(time, nj, ni) ; + simass:units = "kg m^-2" ; + simass:long_name = "Sea-Ice Mass" ; + simass:coordinates = "TLON TLAT time" ; + simass:cell_measures = "area: tarea" ; + simass:comment = "ice mass per unit grid cell area" ; + simass:missing_value = 1.e+30f ; + simass:_FillValue = 1.e+30f ; + simass:cell_methods = "area: mean where sea time: mean" ; + simass:time_rep = "averaged" ; + float siage(time, nj, ni) ; + siage:units = "s" ; + siage:long_name = "Age of Sea Ice" ; + siage:coordinates = "TLON TLAT time" ; + siage:cell_measures = "area: tarea" ; + siage:comment = "area weighted average of age of sea ice" ; + siage:missing_value = 1.e+30f ; + siage:_FillValue = 1.e+30f ; + siage:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + siage:time_rep = "averaged" ; + float sifb(time, nj, ni) ; + sifb:units = "m" ; + sifb:long_name = "Sea-Ice Freeboard" ; + sifb:coordinates = "TLON TLAT time" ; + sifb:cell_measures = "area: tarea" ; + sifb:comment = "area weighted average of height of sea ice above ocean surface" ; + sifb:missing_value = 1.e+30f ; + sifb:_FillValue = 1.e+30f ; + sifb:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + sifb:time_rep = "averaged" ; + float sisnmass(time, nj, ni) ; + sisnmass:units = "kg m^-2" ; + sisnmass:long_name = "Snow Mass per Area" ; + sisnmass:coordinates = "TLON TLAT time" ; + sisnmass:cell_measures = "area: tarea" ; + sisnmass:comment = "snow mass per unit grid cell area" ; + sisnmass:missing_value = 1.e+30f ; + sisnmass:_FillValue = 1.e+30f ; + sisnmass:cell_methods = "area: mean where sea time: mean" ; + sisnmass:time_rep = "averaged" ; + float sitempbot(time, nj, ni) ; + sitempbot:units = "K" ; + sitempbot:long_name = "Temperature at Ice-Ocean Interface" ; + sitempbot:coordinates = "TLON TLAT time" ; + sitempbot:cell_measures = "area: tarea" ; + sitempbot:comment = "area weighted average of ice-ocean interface temperature" ; + sitempbot:missing_value = 1.e+30f ; + sitempbot:_FillValue = 1.e+30f ; + sitempbot:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + sitempbot:time_rep = "averaged" ; + float siu(time, nj, ni) ; + siu:units = "m/s" ; + siu:long_name = "X-Component of Sea-Ice Velocity" ; + siu:coordinates = "ULON ULAT time" ; + siu:cell_measures = "area: uarea" ; + siu:comment = "area weighted average" ; + siu:missing_value = 1.e+30f ; + siu:_FillValue = 1.e+30f ; + siu:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + siu:time_rep = "averaged" ; + float siv(time, nj, ni) ; + siv:units = "m/s" ; + siv:long_name = "Y-Component of Sea-Ice Velocity" ; + siv:coordinates = "ULON ULAT time" ; + siv:cell_measures = "area: uarea" ; + siv:comment = "area weighted average" ; + siv:missing_value = 1.e+30f ; + siv:_FillValue = 1.e+30f ; + siv:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + siv:time_rep = "averaged" ; + float sidmasstranx(time, nj, ni) ; + sidmasstranx:units = "kg/s" ; + sidmasstranx:long_name = "X-Component of Sea-Ice Mass Transport" ; + sidmasstranx:coordinates = "ULON ULAT time" ; + sidmasstranx:cell_measures = "area: uarea" ; + sidmasstranx:comment = "includes sea-ice and snow transport" ; + sidmasstranx:missing_value = 1.e+30f ; + sidmasstranx:_FillValue = 1.e+30f ; + sidmasstranx:cell_methods = "area: mean where sea time: mean" ; + sidmasstranx:time_rep = "averaged" ; + float sidmasstrany(time, nj, ni) ; + sidmasstrany:units = "kg/s" ; + sidmasstrany:long_name = "Y-Component of Sea-Ice Mass Transport" ; + sidmasstrany:coordinates = "ULON ULAT time" ; + sidmasstrany:cell_measures = "area: uarea" ; + sidmasstrany:comment = "includes sea-ice and snow transport" ; + sidmasstrany:missing_value = 1.e+30f ; + sidmasstrany:_FillValue = 1.e+30f ; + sidmasstrany:cell_methods = "area: mean where sea time: mean" ; + sidmasstrany:time_rep = "averaged" ; + float sistrxdtop(time, nj, ni) ; + sistrxdtop:units = "N m^-2" ; + sistrxdtop:long_name = "X-Component of Atmospheric Stress on Sea Ice" ; + sistrxdtop:coordinates = "ULON ULAT time" ; + sistrxdtop:cell_measures = "area: uarea" ; + sistrxdtop:comment = "area weighted average" ; + sistrxdtop:missing_value = 1.e+30f ; + sistrxdtop:_FillValue = 1.e+30f ; + sistrxdtop:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + sistrxdtop:time_rep = "averaged" ; + float sistrydtop(time, nj, ni) ; + sistrydtop:units = "N m^-2" ; + sistrydtop:long_name = "Y-Component of Atmospheric Stress on Sea Ice" ; + sistrydtop:coordinates = "ULON ULAT time" ; + sistrydtop:cell_measures = "area: uarea" ; + sistrydtop:comment = "area weighted average" ; + sistrydtop:missing_value = 1.e+30f ; + sistrydtop:_FillValue = 1.e+30f ; + sistrydtop:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + sistrydtop:time_rep = "averaged" ; + float sistrxubot(time, nj, ni) ; + sistrxubot:units = "N m^-2" ; + sistrxubot:long_name = "X-Component of Ocean Stress on Sea Ice" ; + sistrxubot:coordinates = "ULON ULAT time" ; + sistrxubot:cell_measures = "area: uarea" ; + sistrxubot:comment = "area weighted average" ; + sistrxubot:missing_value = 1.e+30f ; + sistrxubot:_FillValue = 1.e+30f ; + sistrxubot:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + sistrxubot:time_rep = "averaged" ; + float sistryubot(time, nj, ni) ; + sistryubot:units = "N m^-2" ; + sistryubot:long_name = "Y-Component of Ocean Stress on Sea Ice" ; + sistryubot:coordinates = "ULON ULAT time" ; + sistryubot:cell_measures = "area: uarea" ; + sistryubot:comment = "area weighted average" ; + sistryubot:missing_value = 1.e+30f ; + sistryubot:_FillValue = 1.e+30f ; + sistryubot:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + sistryubot:time_rep = "averaged" ; + float siforcetiltx(time, nj, ni) ; + siforcetiltx:units = "N m^-2" ; + siforcetiltx:long_name = "Sea-Surface Tilt Term in Force Balance (X-Component)" ; + siforcetiltx:coordinates = "ULON ULAT time" ; + siforcetiltx:cell_measures = "area: uarea" ; + siforcetiltx:comment = "area weighted average" ; + siforcetiltx:missing_value = 1.e+30f ; + siforcetiltx:_FillValue = 1.e+30f ; + siforcetiltx:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + siforcetiltx:time_rep = "averaged" ; + float siforcetilty(time, nj, ni) ; + siforcetilty:units = "N m^-2" ; + siforcetilty:long_name = "Sea-Surface Tilt Term in Force Balance (Y-Component)" ; + siforcetilty:coordinates = "ULON ULAT time" ; + siforcetilty:cell_measures = "area: uarea" ; + siforcetilty:comment = "area weighted average" ; + siforcetilty:missing_value = 1.e+30f ; + siforcetilty:_FillValue = 1.e+30f ; + siforcetilty:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + siforcetilty:time_rep = "averaged" ; + float siforcecoriolx(time, nj, ni) ; + siforcecoriolx:units = "N m^-2" ; + siforcecoriolx:long_name = "Coriolis Force Term in Force Balance (X-Component)" ; + siforcecoriolx:coordinates = "ULON ULAT time" ; + siforcecoriolx:cell_measures = "area: uarea" ; + siforcecoriolx:comment = "area weighted average" ; + siforcecoriolx:missing_value = 1.e+30f ; + siforcecoriolx:_FillValue = 1.e+30f ; + siforcecoriolx:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + siforcecoriolx:time_rep = "averaged" ; + float siforcecorioly(time, nj, ni) ; + siforcecorioly:units = "N m^-2" ; + siforcecorioly:long_name = "Coriolis Force Term in Force Balance (Y-Component)" ; + siforcecorioly:coordinates = "ULON ULAT time" ; + siforcecorioly:cell_measures = "area: uarea" ; + siforcecorioly:comment = "area weighted average" ; + siforcecorioly:missing_value = 1.e+30f ; + siforcecorioly:_FillValue = 1.e+30f ; + siforcecorioly:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + siforcecorioly:time_rep = "averaged" ; + float siforceintstrx(time, nj, ni) ; + siforceintstrx:units = "N m^-2" ; + siforceintstrx:long_name = "Internal Stress Term in Force Balance (X-Component)" ; + siforceintstrx:coordinates = "ULON ULAT time" ; + siforceintstrx:cell_measures = "area: uarea" ; + siforceintstrx:comment = "area weighted average" ; + siforceintstrx:missing_value = 1.e+30f ; + siforceintstrx:_FillValue = 1.e+30f ; + siforceintstrx:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + siforceintstrx:time_rep = "averaged" ; + float siforceintstry(time, nj, ni) ; + siforceintstry:units = "N m^-2" ; + siforceintstry:long_name = "Internal Stress Term in Force Balance (Y-Component)" ; + siforceintstry:coordinates = "ULON ULAT time" ; + siforceintstry:cell_measures = "area: uarea" ; + siforceintstry:comment = "area weighted average" ; + siforceintstry:missing_value = 1.e+30f ; + siforceintstry:_FillValue = 1.e+30f ; + siforceintstry:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + siforceintstry:time_rep = "averaged" ; + float sicompstren(time, nj, ni) ; + sicompstren:units = "N/m" ; + sicompstren:long_name = "Compressive Sea Ice Strength" ; + sicompstren:coordinates = "ULON ULAT time" ; + sicompstren:cell_measures = "area: uarea" ; + sicompstren:comment = "area weighted average" ; + sicompstren:missing_value = 1.e+30f ; + sicompstren:_FillValue = 1.e+30f ; + sicompstren:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + sicompstren:time_rep = "averaged" ; + float sidivvel(time, nj, ni) ; + sidivvel:units = "1/s" ; + sidivvel:long_name = "Divergence of the Sea-Ice Velocity Field" ; + sidivvel:coordinates = "ULON ULAT time" ; + sidivvel:cell_measures = "area: uarea" ; + sidivvel:comment = "area weighted average" ; + sidivvel:missing_value = 1.e+30f ; + sidivvel:_FillValue = 1.e+30f ; + sidivvel:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + sidivvel:time_rep = "averaged" ; + float sispeed(time, nj, ni) ; + sispeed:units = "m/s" ; + sispeed:long_name = "Sea-Ice Speed" ; + sispeed:coordinates = "ULON ULAT time" ; + sispeed:cell_measures = "area: uarea" ; + sispeed:comment = "area weighted average" ; + sispeed:missing_value = 1.e+30f ; + sispeed:_FillValue = 1.e+30f ; + sispeed:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + sispeed:time_rep = "averaged" ; + float sihc(time, nj, ni) ; + sihc:units = "J m^-2" ; + sihc:long_name = "Sea-Ice Heat Content" ; + sihc:coordinates = "TLON TLAT time" ; + sihc:cell_measures = "area: tarea" ; + sihc:comment = "per unit grid cell area" ; + sihc:missing_value = 1.e+30f ; + sihc:_FillValue = 1.e+30f ; + sihc:cell_methods = "area: mean where sea time: mean" ; + sihc:time_rep = "averaged" ; + float sisnhc(time, nj, ni) ; + sisnhc:units = "J m^-2" ; + sisnhc:long_name = "Snow Heat Content" ; + sisnhc:coordinates = "TLON TLAT time" ; + sisnhc:cell_measures = "area: tarea" ; + sisnhc:comment = "per unit grid cell area" ; + sisnhc:missing_value = 1.e+30f ; + sisnhc:_FillValue = 1.e+30f ; + sisnhc:cell_methods = "area: mean where sea time: mean" ; + sisnhc:time_rep = "averaged" ; + float sidconcth(time, nj, ni) ; + sidconcth:units = "1/s" ; + sidconcth:long_name = "Sea-Ice Area Fraction Tendency Due to Thermodynamics" ; + sidconcth:coordinates = "TLON TLAT time" ; + sidconcth:cell_measures = "area: tarea" ; + sidconcth:missing_value = 1.e+30f ; + sidconcth:_FillValue = 1.e+30f ; + sidconcth:cell_methods = "area: mean where sea time: mean" ; + sidconcth:time_rep = "averaged" ; + float sidconcdyn(time, nj, ni) ; + sidconcdyn:units = "1/s" ; + sidconcdyn:long_name = "Sea-Ice Area Fraction Tendency Due to Dynamics" ; + sidconcdyn:coordinates = "TLON TLAT time" ; + sidconcdyn:cell_measures = "area: tarea" ; + sidconcdyn:missing_value = 1.e+30f ; + sidconcdyn:_FillValue = 1.e+30f ; + sidconcdyn:cell_methods = "area: mean where sea time: mean" ; + sidconcdyn:time_rep = "averaged" ; + float sidmassth(time, nj, ni) ; + sidmassth:units = "kg m^-2 s^-1" ; + sidmassth:long_name = "Sea-Ice Mass Change from Thermodynamics" ; + sidmassth:coordinates = "TLON TLAT time" ; + sidmassth:cell_measures = "area: tarea" ; + sidmassth:comment = "per unit grid cell area" ; + sidmassth:missing_value = 1.e+30f ; + sidmassth:_FillValue = 1.e+30f ; + sidmassth:cell_methods = "area: mean where sea time: mean" ; + sidmassth:time_rep = "averaged" ; + float sidmassdyn(time, nj, ni) ; + sidmassdyn:units = "kg m^-2 s^-1" ; + sidmassdyn:long_name = "Sea-Ice Mass Change from Dynamics" ; + sidmassdyn:coordinates = "TLON TLAT time" ; + sidmassdyn:cell_measures = "area: tarea" ; + sidmassdyn:comment = "per unit grid cell area" ; + sidmassdyn:missing_value = 1.e+30f ; + sidmassdyn:_FillValue = 1.e+30f ; + sidmassdyn:cell_methods = "area: mean where sea time: mean" ; + sidmassdyn:time_rep = "averaged" ; + float sidmassgrowthwat(time, nj, ni) ; + sidmassgrowthwat:units = "kg m^-2 s^-1" ; + sidmassgrowthwat:long_name = "Sea-Ice Mass Change Through Growth in Supercooled Open Water (Frazil)" ; + sidmassgrowthwat:coordinates = "TLON TLAT time" ; + sidmassgrowthwat:cell_measures = "area: tarea" ; + sidmassgrowthwat:comment = "per unit grid cell area" ; + sidmassgrowthwat:missing_value = 1.e+30f ; + sidmassgrowthwat:_FillValue = 1.e+30f ; + sidmassgrowthwat:cell_methods = "area: mean where sea time: mean" ; + sidmassgrowthwat:time_rep = "averaged" ; + float sidmassgrowthbot(time, nj, ni) ; + sidmassgrowthbot:units = "kg m^-2 s^-1" ; + sidmassgrowthbot:long_name = "Sea-Ice Mass Change Through Basal Growth" ; + sidmassgrowthbot:coordinates = "TLON TLAT time" ; + sidmassgrowthbot:cell_measures = "area: tarea" ; + sidmassgrowthbot:comment = "per unit grid cell area" ; + sidmassgrowthbot:missing_value = 1.e+30f ; + sidmassgrowthbot:_FillValue = 1.e+30f ; + sidmassgrowthbot:cell_methods = "area: mean where sea time: mean" ; + sidmassgrowthbot:time_rep = "averaged" ; + float sidmassgrowthsi(time, nj, ni) ; + sidmassgrowthsi:units = "kg m^-2 s^-1" ; + sidmassgrowthsi:long_name = "Sea-Ice Mass Change Through Snow-to-Ice Conversion" ; + sidmassgrowthsi:coordinates = "TLON TLAT time" ; + sidmassgrowthsi:cell_measures = "area: tarea" ; + sidmassgrowthsi:comment = "per unit grid cell area" ; + sidmassgrowthsi:missing_value = 1.e+30f ; + sidmassgrowthsi:_FillValue = 1.e+30f ; + sidmassgrowthsi:cell_methods = "area: mean where sea time: mean" ; + sidmassgrowthsi:time_rep = "averaged" ; + float sidmassevapsubl(time, nj, ni) ; + sidmassevapsubl:units = "kg m^-2 s^-1" ; + sidmassevapsubl:long_name = "Sea-Ice Mass Change Through Evaporation and Sublimation" ; + sidmassevapsubl:coordinates = "TLON TLAT time" ; + sidmassevapsubl:cell_measures = "area: tarea" ; + sidmassevapsubl:comment = "per unit grid cell area" ; + sidmassevapsubl:missing_value = 1.e+30f ; + sidmassevapsubl:_FillValue = 1.e+30f ; + sidmassevapsubl:cell_methods = "area: mean where sea time: mean" ; + sidmassevapsubl:time_rep = "averaged" ; + float sisndmasssubl(time, nj, ni) ; + sisndmasssubl:units = "kg m^-2 s^-1" ; + sisndmasssubl:long_name = "Snow Mass Rate of Change Through Evaporation or Sublimation" ; + sisndmasssubl:coordinates = "TLON TLAT time" ; + sisndmasssubl:cell_measures = "area: tarea" ; + sisndmasssubl:comment = "per unit grid cell area" ; + sisndmasssubl:missing_value = 1.e+30f ; + sisndmasssubl:_FillValue = 1.e+30f ; + sisndmasssubl:cell_methods = "area: mean where sea time: mean" ; + sisndmasssubl:time_rep = "averaged" ; + float sidmassmelttop(time, nj, ni) ; + sidmassmelttop:units = "kg m^-2 s^-1" ; + sidmassmelttop:long_name = "Sea-Ice Mass Change Through Surface Melting" ; + sidmassmelttop:coordinates = "TLON TLAT time" ; + sidmassmelttop:cell_measures = "area: tarea" ; + sidmassmelttop:comment = "per unit grid cell area" ; + sidmassmelttop:missing_value = 1.e+30f ; + sidmassmelttop:_FillValue = 1.e+30f ; + sidmassmelttop:cell_methods = "area: mean where sea time: mean" ; + sidmassmelttop:time_rep = "averaged" ; + float sidmassmeltbot(time, nj, ni) ; + sidmassmeltbot:units = "kg m^-2 s^-1" ; + sidmassmeltbot:long_name = "Sea-Ice Mass Change Through Bottom Melting" ; + sidmassmeltbot:coordinates = "TLON TLAT time" ; + sidmassmeltbot:cell_measures = "area: tarea" ; + sidmassmeltbot:comment = "per unit grid cell area" ; + sidmassmeltbot:missing_value = 1.e+30f ; + sidmassmeltbot:_FillValue = 1.e+30f ; + sidmassmeltbot:cell_methods = "area: mean where sea time: mean" ; + sidmassmeltbot:time_rep = "averaged" ; + float sidmassmeltlat(time, nj, ni) ; + sidmassmeltlat:units = "kg m^-2 s^-1" ; + sidmassmeltlat:long_name = "Sea-Ice Mass Change Through Lateral Melting" ; + sidmassmeltlat:coordinates = "TLON TLAT time" ; + sidmassmeltlat:cell_measures = "area: tarea" ; + sidmassmeltlat:comment = "per unit grid cell area" ; + sidmassmeltlat:missing_value = 1.e+30f ; + sidmassmeltlat:_FillValue = 1.e+30f ; + sidmassmeltlat:cell_methods = "area: mean where sea time: mean" ; + sidmassmeltlat:time_rep = "averaged" ; + float sisndmasssnf(time, nj, ni) ; + sisndmasssnf:units = "kg m^-2 s^-1" ; + sisndmasssnf:long_name = "Snow Mass Change Through Snowfall" ; + sisndmasssnf:coordinates = "TLON TLAT time" ; + sisndmasssnf:cell_measures = "area: tarea" ; + sisndmasssnf:comment = "Always positive or zero, per unit grid cell area" ; + sisndmasssnf:missing_value = 1.e+30f ; + sisndmasssnf:_FillValue = 1.e+30f ; + sisndmasssnf:cell_methods = "area: mean where sea time: mean" ; + sisndmasssnf:time_rep = "averaged" ; + float sisndmassmelt(time, nj, ni) ; + sisndmassmelt:units = "kg m^-2 s^-1" ; + sisndmassmelt:long_name = "Snow Mass Rate of Change Through Melt" ; + sisndmassmelt:coordinates = "TLON TLAT time" ; + sisndmassmelt:cell_measures = "area: tarea" ; + sisndmassmelt:comment = "Always negative or zero, per unit grid cell area" ; + sisndmassmelt:missing_value = 1.e+30f ; + sisndmassmelt:_FillValue = 1.e+30f ; + sisndmassmelt:cell_methods = "area: mean where sea time: mean" ; + sisndmassmelt:time_rep = "averaged" ; + float sisndmasssi(time, nj, ni) ; + sisndmasssi:units = "kg m^-2 s^-1" ; + sisndmasssi:long_name = "Snow Mass Rate of Change Through Snow-to-Ice Conversion" ; + sisndmasssi:coordinates = "TLON TLAT time" ; + sisndmasssi:cell_measures = "area: tarea" ; + sisndmasssi:comment = "Always negative or zero, per unit grid cell area" ; + sisndmasssi:missing_value = 1.e+30f ; + sisndmasssi:_FillValue = 1.e+30f ; + sisndmasssi:cell_methods = "area: mean where sea time: mean" ; + sisndmasssi:time_rep = "averaged" ; + float sisndmassdyn(time, nj, ni) ; + sisndmassdyn:units = "kg m-2 s-1" ; + sisndmassdyn:long_name = "Snow Mass Rate of Change Through Advection by Sea-Ice Dynamics" ; + sisndmassdyn:coordinates = "TLON TLAT time" ; + sisndmassdyn:cell_measures = "area: tarea" ; + sisndmassdyn:comment = "per unit grid cell area" ; + sisndmassdyn:missing_value = 1.e+30f ; + sisndmassdyn:_FillValue = 1.e+30f ; + sisndmassdyn:cell_methods = "area: mean where sea time: mean" ; + sisndmassdyn:time_rep = "averaged" ; + float siflsensbot(time, nj, ni) ; + siflsensbot:units = "W m^-2" ; + siflsensbot:long_name = "Net Upward Sensible Heat Flux under Sea Ice" ; + siflsensbot:coordinates = "TLON TLAT time" ; + siflsensbot:cell_measures = "area: tarea" ; + siflsensbot:comment = "area weighted average, positive downward, per sea ice area" ; + siflsensbot:missing_value = 1.e+30f ; + siflsensbot:_FillValue = 1.e+30f ; + siflsensbot:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + siflsensbot:time_rep = "averaged" ; + float siflcondtop(time, nj, ni) ; + siflcondtop:units = "W m^-2" ; + siflcondtop:long_name = "Net Conductive Heat Flux in Sea Ice at the Surface" ; + siflcondtop:coordinates = "TLON TLAT time" ; + siflcondtop:cell_measures = "area: tarea" ; + siflcondtop:comment = "area weighted average, positive downward, per sea ice area" ; + siflcondtop:missing_value = 1.e+30f ; + siflcondtop:_FillValue = 1.e+30f ; + siflcondtop:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + siflcondtop:time_rep = "averaged" ; + float siflcondbot(time, nj, ni) ; + siflcondbot:units = "W m^-2" ; + siflcondbot:long_name = "Net Conductive Heat Flux in Sea Ice at the Base" ; + siflcondbot:coordinates = "TLON TLAT time" ; + siflcondbot:cell_measures = "area: tarea" ; + siflcondbot:comment = "area weighted average, positive downward, per sea ice area" ; + siflcondbot:missing_value = 1.e+30f ; + siflcondbot:_FillValue = 1.e+30f ; + siflcondbot:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + siflcondbot:time_rep = "averaged" ; + float siflfwbot(time, nj, ni) ; + siflfwbot:units = "kg m^-2 s^-1" ; + siflfwbot:long_name = "Freshwater Flux from Sea Ice" ; + siflfwbot:coordinates = "TLON TLAT time" ; + siflfwbot:cell_measures = "area: tarea" ; + siflfwbot:comment = "area weighted average, positive downward, per unit grid cell area" ; + siflfwbot:missing_value = 1.e+30f ; + siflfwbot:_FillValue = 1.e+30f ; + siflfwbot:cell_methods = "area: time: mean where sea_ice (mask=siconc)" ; + siflfwbot:time_rep = "averaged" ; + float sisaltmass(time, nj, ni) ; + sisaltmass:units = "kg m^-2" ; + sisaltmass:long_name = "Mass of Salt in Sea Ice" ; + sisaltmass:coordinates = "TLON TLAT time" ; + sisaltmass:cell_measures = "area: tarea" ; + sisaltmass:comment = "per unit grid cell area" ; + sisaltmass:missing_value = 1.e+30f ; + sisaltmass:_FillValue = 1.e+30f ; + sisaltmass:cell_methods = "area: mean where sea time: mean" ; + sisaltmass:time_rep = "averaged" ; + float siitdconc(time, nc, nj, ni) ; + siitdconc:units = "%" ; + siitdconc:long_name = "Sea-Ice Area Percentage in Ice Thickness Categories" ; + siitdconc:coordinates = "TLON TLAT NCAT time" ; + siitdconc:cell_measures = "area: tarea" ; + siitdconc:missing_value = 1.e+30f ; + siitdconc:_FillValue = 1.e+30f ; + siitdconc:cell_methods = "time: mean" ; + siitdconc:time_rep = "averaged" ; + +// global attributes: + :title = "sea ice model output for CICE" ; + :contents = "Diagnostic and Prognostic Variables" ; + :source = "Los Alamos Sea Ice Model (CICE) Version 5" ; + :comment = "This year has 365 days" ; + :comment2 = "File started on model date 23450201" ; + :history = "This dataset was created on 2025-12-04 at 19:07:59.0" ; + :io_flavor = "io_netcdf" ; +data: + + time = 856174.5 ; + + time_bounds = + 856128, 856159 ; +} diff --git a/test/test_splitnc.py b/test/test_splitnc.py index 30b6cec..47f55eb 100644 --- a/test/test_splitnc.py +++ b/test/test_splitnc.py @@ -6,7 +6,7 @@ import xarray as xr from common import runcmd, make_nc -from splitnc import determine_field_vars, build_filename, fix_cell_methods +from splitnc import determine_field_vars, build_filename, fix_cell_methods, group_filepaths @pytest.mark.parametrize( @@ -240,6 +240,69 @@ def test_splitnc(tmp_path, cdl_file, cmd_options, rename_regex, excluded_vars, os.remove(ncfile) +@pytest.mark.parametrize( + "cdl_files,cmd_options,excluded_vars,field_regex,num_nc_files", + [ + ( + # Test two monthly ice file with esm1.6 filenames + ["iceh-1monthly-mean_2345-01.cdl", "iceh-1monthly-mean_2345-02.cdl"], + r"--shared-vars uarea,tmask,tarea --excluded-vars VGRDb,VGRDi,VGRDs --use-esm1p6-filenames --input-group-regex 'iceh-1monthly-mean_\d{4}-(?P\d{2})\.nc'", + ["VGRDb", "VGRDi", "VGRDs"], + r"(ai|dv|si).+", + 53, + ), + ( + # Test a monthly atmosphere file (which will have extra time axes) + [ "aiihca.pa-234501_mon.cdl", "aiihca.pa-234502_mon.cdl"], + r"--shared-vars latitude_longitude --rename-regex '(?P.+)_\d+' --input-group-regex 'aiihca\.pa-\d{4}(?P\d{2})_mon\.nc'", + None, + "fld_.+", + 218, + ), + ] +) +def test_file_grouping(tmp_path, cdl_files, cmd_options, excluded_vars, + field_regex, num_nc_files): + """ + Test grouping of files, e.g. 12 monthly files into a yearly file or in this + case 2 monthly files into a 2-month long file + """ + # Create a file to test on + ncfiles = [make_nc(tmp_path, f"test/data/{cdl_file}") for cdl_file in cdl_files] + + output_dir = tmp_path / "single_field" + + cmd_options += f" --output-dir {output_dir} {' '.join(ncfiles)}" + + cmd = f"splitnc {cmd_options}" + + # Attempt to split the file + runcmd(cmd) + + # Check the output files + output_files = list(output_dir.glob("*.nc")) + + # Check the number of files + assert len(output_files) == num_nc_files + + # Check all the time values in the orginal files are in the new files + # Get all the times as a single xarray object + decoder = xr.coders.CFDatetimeCoder(use_cftime=True) + ds_in = xr.open_mfdataset(ncfiles, decode_times=decoder, combine="nested", compat="no_conflicts", join="outer") + for output_file in output_files: + with xr.open_dataset(output_file, decode_times=decoder) as ds_out: + output_times = ds_out['time'] + + # Atmos file have multiple time axes - need to figure out which + # Use the field regex to figure out which is data variable + v = [v for v in ds_out.variables if re.fullmatch(field_regex, v)][0] + # Look for a time* dimension on the matching data variable in input + time_var = [d for d in ds_in[v].dims if 'time' in d][0] + input_times = ds_in[time_var] + + assert all(output_times.data == input_times.data) + + @pytest.mark.parametrize( "cdl_file,field_regex", [ @@ -513,3 +576,65 @@ def test_fix_time_cell_methods(time, time_bnds, cell_methods, expected_cell_meth assert ds[varname].attrs["cell_methods"] == expected_cell_methods else: assert "cell_methods" not in ds[varname].attrs.keys() + + +@pytest.mark.parametrize( + "glob_regex, filepath_list, expected_lists", + [ + # Each group has only one item + (r"\w(?P\d)", ["a1", "b1", "c1", "d1"], [["a1"], ["b1"], ["c1"], ["d1"]]), + # Each group has 2 items + (r"\w(?P\d)", ["a1", "a2", "b1", "b2"], [["a1", "a2"], ["b1", "b2"]]), + # 3 groups but only two match the regex + (r"[ab](?P\d)", ["a1", "a2", "b1", "b2", "c1", "c2"], [["a1", "a2"], ["b1", "b2"], ["c1"], ["c2"]]), + # Extra capture groups + ( + r"(x|ex|y)-[abc](?P\d)", + ["x-a1", "x-a2", "ex-b1", "ex-b2", "y-c1", "y-c2"], + [["x-a1", "x-a2"], ["ex-b1", "ex-b2"], ["y-c1", "y-c2"]] + ), + # Out of order + (r"[ab](?P\d)", ["c1", "b2", "a1", "a2", "c2", "b1"], [["c1"], ["b2", "b1"], ["a1", "a2"], ["c2"]]), + # No regex matches + (r"no matches", ["a1", "b1", "c1", "d1"], [["a1"], ["b1"], ["c1"], ["d1"]]), + (r"no matches", ["a1", "a2", "b1", "b2"], [["a1"], ["a2"], ["b1"], ["b2"]]), + # Files with parent directories absent from regex + ( + r"\w(?P\d)", + ["/rootdir/a1", "/rootdir/a2", "/rootdir/b1", "/rootdir/b2"], + [["/rootdir/a1", "/rootdir/a2"], ["/rootdir/b1", "/rootdir/b2"]] + ), + # Files with parent directories where files in different dirs should not be grouped + ( + r"out\d/\w(?P\d)", + ["/root/out1/a1", "/root/out1/a2", "/root/out1/b1", "/root/out1/b2", + "/root/out2/a3", "/root/out2/a4", "/root/out2/b3", "/root/out2/b4"], + [["/root/out1/a1", "/root/out1/a2"], ["/root/out1/b1", "/root/out1/b2"], + ["/root/out2/a3", "/root/out2/a4"], ["/root/out2/b3", "/root/out2/b4"]] + ), + # Real filenames, two groups of 12 files + ( + r"aiihca\.p[ae]-\d{4}(?P\d{2})_(mon|dai)\.nc", + ["aiihca.pa-234501_mon.nc", "aiihca.pa-234502_mon.nc", "aiihca.pa-234503_mon.nc", + "aiihca.pa-234504_mon.nc", "aiihca.pa-234505_mon.nc", "aiihca.pa-234506_mon.nc", + "aiihca.pa-234507_mon.nc", "aiihca.pa-234508_mon.nc", "aiihca.pa-234509_mon.nc", + "aiihca.pa-234510_mon.nc", "aiihca.pa-234511_mon.nc", "aiihca.pa-234512_mon.nc", + "aiihca.pe-234501_dai.nc", "aiihca.pe-234502_dai.nc", "aiihca.pe-234503_dai.nc", + "aiihca.pe-234504_dai.nc", "aiihca.pe-234505_dai.nc", "aiihca.pe-234506_dai.nc", + "aiihca.pe-234507_dai.nc", "aiihca.pe-234508_dai.nc", "aiihca.pe-234509_dai.nc", + "aiihca.pe-234510_dai.nc", "aiihca.pe-234511_dai.nc", "aiihca.pe-234512_dai.nc"], + [["aiihca.pa-234501_mon.nc", "aiihca.pa-234502_mon.nc", "aiihca.pa-234503_mon.nc", + "aiihca.pa-234504_mon.nc", "aiihca.pa-234505_mon.nc", "aiihca.pa-234506_mon.nc", + "aiihca.pa-234507_mon.nc", "aiihca.pa-234508_mon.nc", "aiihca.pa-234509_mon.nc", + "aiihca.pa-234510_mon.nc", "aiihca.pa-234511_mon.nc", "aiihca.pa-234512_mon.nc"], + ["aiihca.pe-234501_dai.nc", "aiihca.pe-234502_dai.nc", "aiihca.pe-234503_dai.nc", + "aiihca.pe-234504_dai.nc", "aiihca.pe-234505_dai.nc", "aiihca.pe-234506_dai.nc", + "aiihca.pe-234507_dai.nc", "aiihca.pe-234508_dai.nc", "aiihca.pe-234509_dai.nc", + "aiihca.pe-234510_dai.nc", "aiihca.pe-234511_dai.nc", "aiihca.pe-234512_dai.nc"]] + ), + ] +) +def test_filepath_grouping(glob_regex, filepath_list, expected_lists): + actual_lists = group_filepaths(filepath_list, glob_regex) + + assert actual_lists == expected_lists