diff --git a/.gitignore b/.gitignore index f9682a84c..3870d48b5 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ modules.env /bin/extpar_topo_to_buffer.exe /bin/extpar_cdnc_to_buffer.py /bin/extpar_edgar_to_buffer.py +/bin/extpar_gfasclim_to_buffer.py /mod/* /src/info_extpar.f90 diff --git a/Makefile.in b/Makefile.in index 924582586..ef129284b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -82,6 +82,7 @@ script_files:= \ $(srcdir)/python/extpar_era_to_buffer.py \ $(srcdir)/python/extpar_ndvi_to_buffer.py \ $(srcdir)/python/extpar_edgar_to_buffer.py \ + $(srcdir)/python/extpar_gfasclim_to_buffer.py \ $(srcdir)/python/extpar_cdnc_to_buffer.py \ $(srcdir)/python/extpar_ahf_to_buffer.py \ $(srcdir)/python/extpar_aot_to_buffer.py \ diff --git a/docs/compile_run.md b/docs/compile_run.md index de30c71ba..db6d4d1a3 100755 --- a/docs/compile_run.md +++ b/docs/compile_run.md @@ -70,6 +70,7 @@ The main python scripts * *extpar_isa_to_buffer.py* * *extpar_cdnc_to_buffer.py* * *extpar_edgar_to_buffer.py* +* *extpar_gfasclim_to_buffer.py* * *extpar_art_to_buffer.py* can be treated like the Fortran binaries and copied to the `run/` directory. Make sure the *namelist.py* is also present in the `run/` directory. diff --git a/docs/index.md b/docs/index.md index 6148d3558..bedc5c7af 100644 --- a/docs/index.md +++ b/docs/index.md @@ -52,6 +52,7 @@ _1. EXTPAR settings as JSON, see official docs_ "enable_cdnc": false, "enable_edgar": false, "enable_art": false, + "enable_gfasclim": false, "use_array_cache": false, "lsgsl": false, "lfilter_oro": false, diff --git a/docs/user_manual/user_manual_01_overall_description.md b/docs/user_manual/user_manual_01_overall_description.md index 683bcf23b..23459b855 100644 --- a/docs/user_manual/user_manual_01_overall_description.md +++ b/docs/user_manual/user_manual_01_overall_description.md @@ -74,6 +74,7 @@ repository, contact the current EXTPAR source code administrator. | MODIS derived soil albedo values | Community Land Model 3.5 | 30' | | CAMEL Emissivity | NASA | 5km | | EDGAR Emissions | European Commission /JRC/PBL | 0.1 degree | +| GFAS Wildfire Emissions | Copernicus Atmosphere Monitoring Service (CAMS) | 0.1 degree | | MODIS cloud droplet number climatology Q06 | NASA | 1 degree |
*Table 1: Input raw datasets*
@@ -193,6 +194,9 @@ The output fields with the external parameters are shown here: | Annual sulfur dioxide carbon emissions | emi_so2 | $kg\,m^{-2}\,s^{-1}$ | EDGAR | | Annual ammonia emissions | emi_nh3 | $kg\,m^{-2}\,s^{-1}$ | EDGAR | | Annual nitrogen oxides emissions | emi_nox | $kg\,m^{-2}\,s^{-1}$ | EDGAR | +| Seasonal black carbon emissions due to wildfires | bcfire | $kg\,m^{-2}\,s^{-1}$ | GFAS | +| Seasonal organic carbon emissions due to wildfires | ocfire | $kg\,m^{-2}\,s^{-1}$ | GFAS | +| Seasonal sulfur dioxide carbon emissions due to wildfires | so2fire | $kg\,m^{-2}\,s^{-1}$ | GFAS | | Monthly cloud droplet number climatology | cdnc | $cm^{-3}$ | MODIS |
*Table 2: Output external parameters*
diff --git a/docs/user_manual/user_manual_02_software_modules.md b/docs/user_manual/user_manual_02_software_modules.md index aafbf6767..666b967fe 100644 --- a/docs/user_manual/user_manual_02_software_modules.md +++ b/docs/user_manual/user_manual_02_software_modules.md @@ -77,6 +77,7 @@ The interpolation algorithms selected are: - **albedo** *distance-weighted average remapping* - **NDVI** *first order conservative remapping* - **EDGAR** *first order conservative remapping* +- **GFASCLIM** *first order conservative remapping* - **CDNC** *first order conservative remapping* - **CRU climatology** *distance-weighted average remapping* - **emissivity** *first order conservative remapping* @@ -112,7 +113,9 @@ calling the final program for the important consistency check. - `extpar_emiss_to_buffer` - `extpar_art_to_buffer` - `extpar_era_to_buffer` + - `extpar_cdnc_to_buffer` - `extpar_edgar_to_buffer` + - `extpar_gfasclim_to_buffer` These programs generate intermediate NetCDF files ("buffer") with the aggregated data. diff --git a/docs/user_manual/user_manual_04_python_modules.md b/docs/user_manual/user_manual_04_python_modules.md index 1887d4658..174c132f0 100644 --- a/docs/user_manual/user_manual_04_python_modules.md +++ b/docs/user_manual/user_manual_04_python_modules.md @@ -35,7 +35,8 @@ in the paragraph *Data processing* of each Python module. The namelist `namelist.py` contains the Python dictionaries `input_alb`, `input_tclim`, `input_emiss`, `input_ndvi`, -`input_ahf`, `input_isa`, `input_art`, `input_aot` and `input_edgar`. These dictionaries +`input_ahf`, `input_isa`, `input_art`, `input_aot`, `input_cdnc`, +`input_edgar` and `input_gfasclim`. These dictionaries replace their corresponding Fortran namelist files `INPUT_`. `input_alb` provides information about the albedo data type and the @@ -48,28 +49,35 @@ or fine) as well as the paths and filenames of the input/output data. data (full range or long-wave) and the filename and paths of the input/output data. -`input_ndvi` only provides information about the the path and the +`input_ndvi` only provides information about the path and the filenames of the input/output data. -`input_era` only provides information about the the path and the +`input_era` only provides information about the path and the filenames of the input/output data. -`input_isa` contains a switch determine the type of ISA data and -provides information about the the path and the filenames of the +`input_isa` contains a switch to determine the type of ISA data and +provides information about the path and the filenames of the input/output data. -`input_ahf` contains a switch determine the type of AHF data and -provides information about the the path and the filenames of the +`input_ahf` contains a switch to determine the type of AHF data and +provides information about the path and the filenames of the input/output data. -`input_edgar` only provides information about the the path and the +`input_cdnc` contains a switch to determine the type of CDNC data and +provides information about the path and the filenames of the +input/output data. + +`input_edgar` only provides information about the path and the +filenames of the input/output data. + +`input_gfasclim` only provides information about the path and the filenames of the input/output data. `input_aot` contains a switch to select the type of AOT data and provides information about the path and the filenames of the input/output data. -`input_art` only provides information about the the path and the +`input_art` only provides information about the path and the filenames of the input/output data. ## extpar_alb_to_buffer @@ -375,6 +383,32 @@ interpolation. No other processing steps take place. - Output: buffer file with EDGAR data (input_edgar: edgar_buffer_file) +## extpar_gfasclim_to_buffer + +### Short description of the subprogram *extpar_gfasclim_to_buffer* + +The executable *extpar_gfasclim_to_buffer* allows the interpolation of +global emission data for black carbon, organic carbon and sulfur dioxide +originating from wildfires needed for the 2D-Aerosol in ICON to the target grid. + +The namelist contains only the path to the raw data, the raw data file +name and the name of the buffer file. + +The remapping to the target grid uses the *first order conservative* +interpolation. No other processing steps take place. + +### Used namelist files and data in-/output: + +- namelists files: namelist.py (dict: input_gfasclim), INPUT_grid_org, + INPUT_ICON_GRID + +- generate namelist: INPUT_gfasclim + +- data input: gfasclim2015-2024.nc + +- Output: buffer file with GFASCLIM data (input_gfasclim: + gfasclim_buffer_file) + ## extpar_cdnc_to_buffer ### Short description of the subprogram *extpar_cdnc_to_buffer* diff --git a/docs/user_manual/user_manual_06_namelist_input.md b/docs/user_manual/user_manual_06_namelist_input.md index a7edbd1fc..92d19ea98 100644 --- a/docs/user_manual/user_manual_06_namelist_input.md +++ b/docs/user_manual/user_manual_06_namelist_input.md @@ -23,6 +23,7 @@ Whereas for the Fortran namelists and the Python dictionaries the user can speci | INPUT_AOT | settings for aerosol data | `extpar_aot_to_buffer` | `extpar_aot_to_buffer` | | INPUT_ART | settings for HWSD USDA data | `extpar_art_to_buffer` | | | INPUT_EDGAR | settings for EDGAR data | `extpar_edgar_to_buffer` | `extpar_consistency_check` | +| INPUT_GFASCLIM | settings for GFASCLIM data | `extpar_gfasclim_to_buffer` | `extpar_consistency_check` | | INPUT_CDNC | settings for cdnc data | `extpar_cdnc_to_buffer` | `extpar_consistency_check` | | INPUT_ERA | settings for ERA data | `extpar_era_to_buffer` | `extpar_consistency_check` | | INPUT_CHECK | settings for the consistency check | runscript | `extpar_consistency_check` | @@ -207,6 +208,15 @@ The COSMO grid is defined by a rotated latlon-grid. | `raw_data_edgar_filename_nh3` | character | | | Filename of EDGAR ammonia raw data | | `raw_data_edgar_filename_nox` | character | | | Filename of EDGAR nitrogen oxides raw data | +## GFASCLIM Data + +### DICT `input_gfasclim` (namelist.py) + +| Parameter | Type | Default | Unit | Description | +|-----------|------|---------|------|-------------| +| `raw_data_gfasclim_path` | character | | | Path to GFASCLIM raw data | +| `raw_data_gfasclim_filename` | character | | | Filename of GFASCLIM raw data | + ## CDNC Data ### DICT `input_cdnc` (namelist.py) diff --git a/python/WrapExtpar.py b/python/WrapExtpar.py index f3676c74d..5004fe97f 100755 --- a/python/WrapExtpar.py +++ b/python/WrapExtpar.py @@ -78,6 +78,7 @@ def main(): enable_cdnc = config.get('enable_cdnc', False) enable_edgar = config.get('enable_edgar', False) enable_art = config.get('enable_art', False) + enable_gfasclim = config.get('enable_gfasclim', False) use_array_cache = config.get('use_array_cache', False) lsgsl = config.get('lsgsl', False) lfilter_oro = config.get('lfilter_oro', False) @@ -95,10 +96,10 @@ def main(): igrid_type, args.input_grid, iaot_type, ilu_type, ialb_type, isoil_type, itopo_type, it_cl_type, iera_type, iemiss_type, icdnc_type, ilookup_table_lu, enable_cdnc, enable_edgar, enable_art, - use_array_cache, nhori, radtopo_radius, tcorr_lapse_rate, tcorr_offset, - args.raw_data_path, args.run_dir, args.account, args.host, - args.no_batch_job, lurban, l_terra_urb, lsgsl, lfilter_oro, - l_use_corine, infill_corine, lradtopo) + enable_gfasclim, use_array_cache, nhori, radtopo_radius, + tcorr_lapse_rate, tcorr_offset, args.raw_data_path, args.run_dir, + args.account, args.host, args.no_batch_job, lurban, l_terra_urb, lsgsl, + lfilter_oro, l_use_corine, infill_corine, lradtopo) def generate_external_parameters(igrid_type, @@ -116,6 +117,7 @@ def generate_external_parameters(igrid_type, enable_cdnc, enable_edgar, enable_art, + enable_gfasclim, use_array_cache, nhori, radtopo_radius, @@ -158,6 +160,7 @@ def generate_external_parameters(igrid_type, 'enable_cdnc': enable_cdnc, 'enable_edgar': enable_edgar, 'enable_art': enable_art, + 'enable_gfasclim': enable_gfasclim, 'use_array_cache': use_array_cache, 'l_use_corine': l_use_corine, 'infill_corine': infill_corine, @@ -772,6 +775,16 @@ def setup_edgar_namelist(args): return namelist +def setup_gfasclim_namelist(args): + namelist = {} + + namelist['raw_data_gfasclim_path'] = args['raw_data_path'] + namelist['raw_data_gfasclim_filename'] = 'gfasclim2015-2024.nc' + namelist['gfasclim_buffer_file'] = 'gfasclim_buffer.nc' + + return namelist + + def setup_check_namelist(args): namelist = {} @@ -811,6 +824,7 @@ def setup_namelist(args) -> dict: namelist.update(setup_emiss_namelist(args)) namelist.update(setup_cdnc_namelist(args)) namelist.update(setup_edgar_namelist(args)) + namelist.update(setup_gfasclim_namelist(args)) namelist.update(setup_art_namelist(args)) namelist.update(setup_check_namelist(args)) @@ -845,6 +859,8 @@ def setup_runscript(args): executables.append('"extpar_edgar_to_buffer.py" ') if args['enable_art']: executables.append('"extpar_art_to_buffer.py" ') + if args['enable_gfasclim']: + executables.append('"extpar_gfasclim_to_buffer.py" ') executables.append('"extpar_consistency_check.exe" ') diff --git a/python/extpar_gfasclim_to_buffer.py b/python/extpar_gfasclim_to_buffer.py new file mode 100755 index 000000000..eef940ba2 --- /dev/null +++ b/python/extpar_gfasclim_to_buffer.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python3 +import logging +import netCDF4 as nc +import numpy as np + +# extpar modules from lib +try: + from extpar.lib import ( + utilities as utils, + grid_def, + buffer, + metadata, + fortran_namelist, + environment as env, + ) +except ImportError: + import utilities as utils + import grid_def + import buffer + import metadata + import fortran_namelist + import environment as env +from namelist import input_gfasclim as igfasclim + +# initialize logger +logging.basicConfig(filename='extpar_gfasclim_to_buffer.log', + level=logging.INFO, + format='%(message)s', + filemode='w') + +logging.info('============= start extpar_gfasclim_to_buffer ======') +logging.info('') + +# print a summary of the environment +env.check_environment_for_extpar(__file__) + +# check HDF5 +lock = env.check_hdf5_threadsafe() + +# get number of OpenMP threads for CDO +omp = env.get_omp_num_threads() + +# unique names for files written to system to allow parallel execution +grid = 'grid_description_gfasclim' # name for grid description file +reduced_grid = 'reduced_icon_grid_gfasclim.nc' # name for reduced icon grid +weights = 'weights_gfasclim' # name for weights of spatial interpolation + +# names for output of CDO +gfasclim_cdo = 'gfasclim_ycon.nc' + +#-------------------------------------------------------------------------- +#-------------------------------------------------------------------------- +logging.info('') +logging.info('============= delete files from old runs =======') +logging.info('') + +utils.remove(grid) +utils.remove(reduced_grid) +utils.remove(weights) +utils.remove(gfasclim_cdo) + +#-------------------------------------------------------------------------- +#-------------------------------------------------------------------------- +logging.info('') +logging.info('============= init variables from namelist =====') +logging.info('') + +igrid_type, grid_namelist = utils.check_gridtype('INPUT_grid_org') + +if (igrid_type == 1): + path_to_grid = \ + fortran_namelist.read_variable(grid_namelist, + 'icon_grid_dir', + str) + + icon_grid = \ + fortran_namelist.read_variable(grid_namelist, + 'icon_grid_nc_file', + str) + + icon_grid = utils.clean_path(path_to_grid, icon_grid) + + tg = grid_def.IconGrid(icon_grid) + + grid = tg.reduce_grid(reduced_grid) + +elif (igrid_type == 2): + error_message = "GFASCLIM emission data only works with ICON" + logging.error(error_message) + raise ValueError(error_message) + +raw_data_gfasclim = utils.clean_path(igfasclim['raw_data_gfasclim_path'], + igfasclim['raw_data_gfasclim_filename']) + +#-------------------------------------------------------------------------- +#-------------------------------------------------------------------------- +logging.info('') +logging.info('============= initialize metadata ==============') +logging.info('') + +lat_meta = metadata.Lat() +lon_meta = metadata.Lon() + +GfasClimBC_meta = metadata.GfasClimBC() +GfasClimOC_meta = metadata.GfasClimOC() +GfasClimSO2_meta = metadata.GfasClimSO2() + +#-------------------------------------------------------------------------- +#-------------------------------------------------------------------------- +logging.info('') +logging.info('============= write FORTRAN namelist ===========') +logging.info('') + +input_gfasclim = fortran_namelist.InputGfasClim() +fortran_namelist.write_fortran_namelist('INPUT_gfasclim', igfasclim, + input_gfasclim) + +#-------------------------------------------------------------------------- +#-------------------------------------------------------------------------- +logging.info('') +logging.info('============= CDO: remap to target grid ========') +logging.info('') + +# calculate weights +utils.launch_shell('cdo', lock, '-f', 'nc4', '-P', omp, f'genycon,{grid}', + tg.cdo_sellonlat(), raw_data_gfasclim, weights) + +# regrid +utils.launch_shell('cdo', lock, '-f', + 'nc4', '-P', omp, f'-remap,{grid},{weights}', + tg.cdo_sellonlat(), raw_data_gfasclim, gfasclim_cdo) + +#-------------------------------------------------------------------------- +#-------------------------------------------------------------------------- +logging.info('') +logging.info('============= reshape CDO output ===============') +logging.info('') + +gfasclim_nc = nc.Dataset(gfasclim_cdo, "r") + +# infer coordinates/dimensions from CDO file +ie_tot = len(gfasclim_nc.dimensions['cell']) +je_tot = 1 +ke_tot = 1 +seasons = 4 + +lon = np.rad2deg( + np.reshape(gfasclim_nc.variables['clon'][:], (ke_tot, je_tot, ie_tot))) +lat = np.rad2deg( + np.reshape(gfasclim_nc.variables['clat'][:], (ke_tot, je_tot, ie_tot))) + +gfasclim_bc_nc = np.reshape(gfasclim_nc.variables['bcfire'][:], + (seasons, je_tot, ie_tot)) +gfasclim_oc_nc = np.reshape(gfasclim_nc.variables['ocfire'][:], + (seasons, je_tot, ie_tot)) +gfasclim_so2_nc = np.reshape(gfasclim_nc.variables['so2fire'][:], + (seasons, je_tot, ie_tot)) + +#-------------------------------------------------------------------------- +#-------------------------------------------------------------------------- +logging.info('') +logging.info('============= write to buffer file =============') +logging.info('') + +# init buffer file +buffer_file = buffer.init_netcdf(igfasclim['gfasclim_buffer_file'], je_tot, + ie_tot) +buffer_file = buffer.add_dimension_season(buffer_file) + +# write lat/lon +buffer.write_field_to_buffer(buffer_file, lon, lon_meta) +buffer.write_field_to_buffer(buffer_file, lat, lat_meta) + +# write gfasclim fields +buffer.write_field_to_buffer(buffer_file, gfasclim_bc_nc, GfasClimBC_meta) +buffer.write_field_to_buffer(buffer_file, gfasclim_oc_nc, GfasClimOC_meta) +buffer.write_field_to_buffer(buffer_file, gfasclim_so2_nc, GfasClimSO2_meta) + +buffer.close_netcdf(buffer_file) + +#-------------------------------------------------------------------------- +#-------------------------------------------------------------------------- +logging.info('') +logging.info('============= clean up =========================') +logging.info('') + +utils.remove(grid) +utils.remove(reduced_grid) +utils.remove(weights) +utils.remove(gfasclim_cdo) + +#-------------------------------------------------------------------------- +#-------------------------------------------------------------------------- +logging.info('') +logging.info('============= extpar_gfasclim_to_buffer done =======') +logging.info('') diff --git a/python/lib/buffer.py b/python/lib/buffer.py index c2148bc78..ad9cb2e8a 100644 --- a/python/lib/buffer.py +++ b/python/lib/buffer.py @@ -64,6 +64,19 @@ def add_dimension_aerosols(buffer): return buffer +def add_dimension_season(buffer): + ''' + add 4 seasons as dimension to netCDF + ''' + + buffer.createDimension('season', None) + buffer.createVariable('season', np.int32, ('season', )) + season_var = buffer.variables["season"] + season_var.description = "0: DJF, 1: MAM, 2: JJA, 3: SON" + + return buffer + + def open_netcdf(buffer_name): ''' open netcdf with buffer_name diff --git a/python/lib/fortran_namelist.py b/python/lib/fortran_namelist.py index d5e25094c..dc5d60663 100644 --- a/python/lib/fortran_namelist.py +++ b/python/lib/fortran_namelist.py @@ -196,6 +196,16 @@ def __init__(self): self.variables = {'&edgar_io_extpar': {'edgar_buffer_file'}} +class InputGfasClim: + ''' + define structure of namelist "INPUT_GFASCLIM" + ''' + + def __init__(self): + + self.variables = {'&gfasclim_io_extpar': {'gfasclim_buffer_file'}} + + class InputCdnc: ''' define structure of namelist "INPUT_CDNC" diff --git a/python/lib/metadata.py b/python/lib/metadata.py index 7e8277cff..e5b0cee9d 100644 --- a/python/lib/metadata.py +++ b/python/lib/metadata.py @@ -23,6 +23,8 @@ -Parent: EdgarMeta -> Child: EdgarOC, EdgarSO2, EdgarNOx, EdgarNH3 + -Parent: GfasClimMeta-> Child: GfasClimBC, GfasClimOC, GfasClimSO2 + Meta-Data that is shared amongs all fields of an Extpar class is defined in the parent class, for example CoordsMeta Meta-Data that is only valid for one specific field is defined @@ -250,6 +252,50 @@ def __init__(self): self.long = 'Ammonia for year 2022. Source: European Commission, Joint Research Centre (JRC)/Netherlands Environmental Assessment Agency (PBL). Emission Databasefor Global Atmospheric Research (EDGAR), http://edgar.jrc.ec.europe.eu' +#-------------------------------------------------------------------------- +#-------------------------------------------------------------------------- +# GFAS Climatology +# ->GfasClimBC +# ->GfasClimOC +# ->GfasClimSO2 + + +class GfasClimMeta: + + def __init__(self): + self.type = np.float32 + self.units = 'kg m-2 s-1' + self.standard = '_' + self.short = '_' + + +class GfasClimBC(GfasClimMeta): + + def __init__(self): + super().__init__() + self.dim = {0: 'season', 1: 'je', 2: 'ie'} + self.name = 'bcfire' + self.long = 'Climatology of seasonal emissions of black carbon by wildfires. Based on Global Fire Assimilation System (GFAS) data for the years 2015-2024 created by Copernicus Atmosphere Monitoring Service (CAMS).' + + +class GfasClimOC(GfasClimMeta): + + def __init__(self): + super().__init__() + self.dim = {0: 'season', 1: 'je', 2: 'ie'} + self.name = 'ocfire' + self.long = 'Climatology of seasonal emissions of organic carbon by wildfires. Based on Global Fire Assimilation System (GFAS) data for the years 2015-2024 created by Copernicus Atmosphere Monitoring Service (CAMS).' + + +class GfasClimSO2(GfasClimMeta): + + def __init__(self): + super().__init__() + self.dim = {0: 'season', 1: 'je', 2: 'ie'} + self.name = 'so2fire' + self.long = 'Climatology of seasonal emissions of sulfur dioxide by wildfires. Based on Global Fire Assimilation System (GFAS) data for the years 2015-2024 created by Copernicus Atmosphere Monitoring Service (CAMS).' + + #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- # cdnc diff --git a/src/extpar_consistency_check.f90 b/src/extpar_consistency_check.f90 index 0d696785e..f81ed7ec3 100644 --- a/src/extpar_consistency_check.f90 +++ b/src/extpar_consistency_check.f90 @@ -251,7 +251,8 @@ PROGRAM extpar_consistency_check & read_namelists_extpar_t_clim, & & read_namelists_extpar_ndvi, & & read_namelists_extpar_edgar, & - & read_namelists_extpar_art, & + & read_namelists_extpar_gfasclim, & + & read_namelists_extpar_art, & & read_namelists_extpar_cdnc, & & read_namelists_extpar_alb, & & open_netcdf_ALB_data, & @@ -290,6 +291,11 @@ PROGRAM extpar_consistency_check & edgar_emi_nox, & & edgar_emi_nh3, & & allocate_edgar_target_fields, & + ! gfasclim + & gfasclim_bcfire, & + & gfasclim_ocfire, & + & gfasclim_so2fire, & + & allocate_gfasclim_target_fields, & ! cdnc & cdnc, & & allocate_cdnc_target_fields, & @@ -323,6 +329,7 @@ PROGRAM extpar_consistency_check & read_netcdf_buffer_ndvi, & & read_netcdf_buffer_art, & & read_netcdf_buffer_edgar, & + & read_netcdf_buffer_gfasclim, & & read_netcdf_buffer_cdnc, & & read_netcdf_buffer_cru, & & read_netcdf_buffer_alb, & @@ -388,6 +395,8 @@ PROGRAM extpar_consistency_check & art_buffer_file, & ! EDGAR & edgar_buffer_file, & + ! GFASCLIM + & gfasclim_buffer_file, & ! CDNC & cdnc_buffer_file, & & cdnc_output_file, & @@ -447,6 +456,7 @@ PROGRAM extpar_consistency_check & ilookup_table_lu, & !< integer switch to choose a lookup table & ilu_bare_soil, ilu_snow_ice, ilu_water, & !< dataset-dependent indices to avoid code duplication & nclass_lu, & !< number of land use classes + & nseasons, & !< number of seasons (for gfasclim) & count_ice2tclim,count_ice2tclim_tile, count_frland_ice, & & start_cell_id, & !< ID of starting cell for ICON search & isp,i_sp,j_sp,k_sp, & @@ -484,6 +494,7 @@ PROGRAM extpar_consistency_check & l_use_emiss=.FALSE., &!< flag if additional CAMEL emissivity data are present & l_use_art=.FALSE., &!< flag if art processing to be done & l_use_edgar=.FALSE., &!< flag if additional EDGAR emission data are present + & l_use_gfasclim=.FALSE., &!< flag if additional GFASCLIM wildfire emission data are present & l_use_cdnc=.FALSE., &!< flag if additional CDNC data are present & l_unified_era_buffer=.FALSE., &!< flag if ERA-data from extpar_era_to_buffer.py is used & lwrite_netcdf, & !< flag to enable netcdf output for COSMO @@ -579,6 +590,13 @@ PROGRAM extpar_consistency_check CALL read_namelists_extpar_edgar(namelist_file, edgar_buffer_file) ENDIF + ! Get gfasclim buffer file name from namelist + namelist_file = 'INPUT_gfasclim' + INQUIRE(file=TRIM(namelist_file),exist=l_use_gfasclim) + IF (l_use_gfasclim) THEN + CALL read_namelists_extpar_gfasclim(namelist_file, gfasclim_buffer_file) + ENDIF + ! Get cdnc buffer file name from namelist namelist_file = 'INPUT_CDNC' INQUIRE(file=TRIM(namelist_file),exist=l_use_cdnc) @@ -901,10 +919,16 @@ PROGRAM extpar_consistency_check CALL allocate_ndvi_target_fields(tg,ntime_ndvi, l_use_array_cache) CALL allocate_art_target_fields(tg, l_use_array_cache) + IF (igrid_type == igrid_icon .AND. l_use_edgar) THEN CALL allocate_edgar_target_fields(tg, l_use_array_cache) END IF + nseasons = 4 + IF (igrid_type == igrid_icon .AND. l_use_gfasclim) THEN + CALL allocate_gfasclim_target_fields(tg, nseasons, l_use_array_cache) + END IF + IF (igrid_type == igrid_icon .AND. l_use_cdnc) THEN CALL allocate_cdnc_target_fields(tg, ntime_cdnc, l_use_array_cache) END IF @@ -1092,6 +1116,18 @@ PROGRAM extpar_consistency_check & edgar_emi_nh3) ENDIF + !------------------------------------------------------------------------- + IF(igrid_type == igrid_icon .AND. l_use_gfasclim) THEN + CALL logging%info( '') + CALL logging%info('GFASCLIM') + CALL read_netcdf_buffer_gfasclim(gfasclim_buffer_file, & + & tg, & + & nseasons, & + & gfasclim_bcfire, & + & gfasclim_ocfire, & + & gfasclim_so2fire) + ENDIF + !------------------------------------------------------------------------- IF(igrid_type == igrid_icon .AND. l_use_cdnc) THEN CALL logging%info( '') @@ -2545,8 +2581,9 @@ PROGRAM extpar_consistency_check & l_use_isa, & & l_use_ahf, & & l_use_emiss, & - & l_use_art, & + & l_use_art, & & l_use_edgar, & + & l_use_gfasclim, & & l_use_cdnc, & & lradtopo, & & nhori, & @@ -2595,6 +2632,10 @@ PROGRAM extpar_consistency_check & edgar_emi_so2, & & edgar_emi_nox, & & edgar_emi_nh3, & + & nseasons, & + & gfasclim_bcfire, & + & gfasclim_ocfire, & + & gfasclim_so2fire, & & cdnc, & & emiss_field_mom, & & hh_topo, & diff --git a/src/mo_extpar_output_nc.f90 b/src/mo_extpar_output_nc.f90 index d7e6c9431..42a25be9e 100644 --- a/src/mo_extpar_output_nc.f90 +++ b/src/mo_extpar_output_nc.f90 @@ -812,8 +812,9 @@ SUBROUTINE write_cdi_icon_grid_extpar(netcdf_filename, & & l_use_isa, & & l_use_ahf, & & l_use_emiss, & - & l_use_art, & + & l_use_art, & & l_use_edgar, & + & l_use_gfasclim, & & l_use_cdnc, & & l_radtopo, & & nhori, & @@ -862,6 +863,10 @@ SUBROUTINE write_cdi_icon_grid_extpar(netcdf_filename, & & edgar_emi_so2, & & edgar_emi_nox, & & edgar_emi_nh3, & + & nseasons, & + & gfasclim_bcfire, & + & gfasclim_ocfire, & + & gfasclim_so2fire, & & cdnc, & & emiss_field_mom, & & hh_topo, & @@ -900,6 +905,7 @@ SUBROUTINE write_cdi_icon_grid_extpar(netcdf_filename, & & l_use_emiss, & & l_use_art, & & l_use_edgar, & + & l_use_gfasclim, & & l_use_cdnc, & & l_radtopo, & & lsso @@ -914,7 +920,7 @@ SUBROUTINE write_cdi_icon_grid_extpar(netcdf_filename, & CHARACTER (len=*), INTENT(in) :: name_lookup_table_lu, & !< name of lookup table & lu_dataset !< name of landuse data set INTEGER (KIND=i4), INTENT(in) :: nclass_lu !< number of classes for the land use description - + INTEGER (KIND=i4), INTENT(in) :: nseasons !< number of seasons (for gfasclim) REAL (KIND=wp), INTENT(in) :: lu_class_fraction(:,:,:,:), & !< fraction for each lu class & fr_land_lu(:,:,:), & !< fraction land due to lu raw data & ice_lu(:,:,:), & !< fraction of ice due to lu raw data @@ -961,6 +967,9 @@ SUBROUTINE write_cdi_icon_grid_extpar(netcdf_filename, & & edgar_emi_so2(:,:,:), & !< field for sulfur dioxide emission from edgar & edgar_emi_nox(:,:,:), & !< field for nitrogen oxides emission from edgar & edgar_emi_nh3(:,:,:), & !< field for ammonia emission from edgar + & gfasclim_bcfire(:,:,:), & !< field for black carbon emission due to wildfires from gfas + & gfasclim_ocfire(:,:,:), & !< field for organic carbon emission due to wildfires from gfas + & gfasclim_so2fire(:,:,:), & !< field for sulfur dioxide emission due to wildfires from gfas & cdnc(:,:,:,:), & !< field for cdnc climatology (12 months) & emiss_field_mom(:,:,:,:), & !< field for monthly mean emiss data (12 months) & sst_field(:,:,:,:), & !< field for monthly mean sst data (12 months) @@ -1019,6 +1028,7 @@ SUBROUTINE write_cdi_icon_grid_extpar(netcdf_filename, & & surfaceID, & & class_luID, & & nhoriID, & + & nseasonsID, & & taxisID, & & vlistID, & & tsID, & @@ -1081,6 +1091,9 @@ SUBROUTINE write_cdi_icon_grid_extpar(netcdf_filename, & & edgar_emi_so2_ID, & & edgar_emi_nox_ID, & & edgar_emi_nh3_ID, & + & gfasclim_bcfire_ID, & + & gfasclim_ocfire_ID, & + & gfasclim_so2fire_ID, & & cdnc_ID, & & emiss_field_mom_ID, & & aot_bc_ID, & @@ -1191,6 +1204,8 @@ SUBROUTINE write_cdi_icon_grid_extpar(netcdf_filename, & IF (l_use_edgar) CALL def_edgar_meta(dim_1d_icon) + IF (l_use_gfasclim) CALL def_gfasclim_meta(nseasons, dim_1d_icon) + IF (l_use_cdnc) CALL def_cdnc_meta(ntime_cdnc, dim_1d_icon) CALL def_era_meta(ntime_ndvi,dim_1d_icon) @@ -1257,6 +1272,11 @@ SUBROUTINE write_cdi_icon_grid_extpar(netcdf_filename, & CALL zaxisDefName(nhoriID, "nhori"); ENDIF + IF (l_use_gfasclim) THEN + nseasonsID = zaxisCreate(ZAXIS_GENERIC, nseasons) + CALL zaxisDefName(nseasonsID, "nseasons"); + ENDIF + taxisID = taxisCreate(TAXIS_ABSOLUTE) vlistID = vlistCreate() @@ -1371,6 +1391,12 @@ SUBROUTINE write_cdi_icon_grid_extpar(netcdf_filename, & edgar_emi_nh3_ID = defineVariable(vlistID, gridID, surfaceID, TIME_CONSTANT, edgar_emi_nh3_meta, undefined) ENDIF + IF (l_use_gfasclim) THEN + gfasclim_bcfire_ID = defineVariable(vlistID, gridID, nseasonsID, TIME_CONSTANT, gfasclim_bcfire_meta, undefined) + gfasclim_ocfire_ID = defineVariable(vlistID, gridID, nseasonsID, TIME_CONSTANT, gfasclim_ocfire_meta, undefined) + gfasclim_so2fire_ID = defineVariable(vlistID, gridID, nseasonsID, TIME_CONSTANT, gfasclim_so2fire_meta, undefined) + ENDIF + IF (l_use_cdnc) THEN cdnc_ID = defineVariable(vlistID, gridID, surfaceID, TIME_VARYING, cdnc_meta, undefined) ENDIF @@ -1658,6 +1684,12 @@ SUBROUTINE write_cdi_icon_grid_extpar(netcdf_filename, & CALL streamWriteVar(fileID, edgar_emi_nh3_ID, edgar_emi_nh3(1:icon_grid%ncell,1,1), 0_i8) ENDIF + IF (l_use_gfasclim) THEN + CALL streamWriteVar(fileID, gfasclim_bcfire_ID, gfasclim_bcfire(1:icon_grid%ncell,1,1:nseasons), 0_i8) + CALL streamWriteVar(fileID, gfasclim_ocfire_ID, gfasclim_ocfire(1:icon_grid%ncell,1,1:nseasons), 0_i8) + CALL streamWriteVar(fileID, gfasclim_so2fire_ID, gfasclim_so2fire(1:icon_grid%ncell,1,1:nseasons), 0_i8) + ENDIF + !----------------------------------------------------------------- CALL vlistDestroy(vlistID) diff --git a/src/mo_python_output_nc.f90 b/src/mo_python_output_nc.f90 index 9e051fc53..124fe7798 100644 --- a/src/mo_python_output_nc.f90 +++ b/src/mo_python_output_nc.f90 @@ -34,6 +34,11 @@ MODULE mo_python_output_nc & edgar_emi_nox_meta, & & edgar_emi_nh3_meta, & & def_edgar_meta, & + ! gfasclim + & gfasclim_bcfire_meta, & + & gfasclim_ocfire_meta, & + & gfasclim_so2fire_meta, & + & def_gfasclim_meta, & ! cdnc & cdnc_meta, & & def_cdnc_meta, & @@ -91,6 +96,8 @@ MODULE mo_python_output_nc & read_netcdf_buffer_ndvi, & ! edgar & read_netcdf_buffer_edgar, & + ! gfasclim + & read_netcdf_buffer_gfasclim, & ! cdnc & read_netcdf_buffer_cdnc, & ! cru @@ -278,6 +285,40 @@ SUBROUTINE read_netcdf_buffer_edgar(netcdf_filename, & END SUBROUTINE read_netcdf_buffer_edgar + SUBROUTINE read_netcdf_buffer_gfasclim(netcdf_filename, & + & tg, & + & nseasons, & + & gfasclim_bcfire, & + & gfasclim_ocfire, & + & gfasclim_so2fire) + + CHARACTER (len=*), INTENT(IN) :: netcdf_filename !< filename for the netcdf file + TYPE(target_grid_def), INTENT(IN) :: tg !< structure with target grid description + INTEGER (KIND=i4), INTENT(in) :: nseasons !< number of seasons (4, obviously) + + REAL (KIND=wp), INTENT(OUT) :: gfasclim_bcfire(:,:,:), & !< field for black carbon emission due to wildfires from gfas + & gfasclim_ocfire(:,:,:), & !< field for organic carbon emission due to wildfires from gfas + & gfasclim_so2fire(:,:,:) !< field for sulfur dioxide emission due to wildfires from gfas + + CALL logging%info('Enter routine: read_netcdf_buffer_gfasclim') + + !set up dimensions for buffer + CALL def_dimension_info_buffer(tg) + ! dim_2d_tg + ! define meta information for target field variables lon_geo, lat_geo + CALL def_com_target_fields_meta(dim_2d_tg) + ! lon_geo_meta and lat_geo_meta + !define meta information for various related variables for netcdf output + CALL def_gfasclim_meta(nseasons, dim_2d_tg) + + CALL netcdf_get_var(TRIM(netcdf_filename),gfasclim_bcfire_meta, gfasclim_bcfire) + CALL netcdf_get_var(TRIM(netcdf_filename),gfasclim_ocfire_meta, gfasclim_ocfire) + CALL netcdf_get_var(TRIM(netcdf_filename),gfasclim_so2fire_meta,gfasclim_so2fire) + + CALL logging%info('Exit routine: read_netcdf_buffer_gfasclim') + + END SUBROUTINE read_netcdf_buffer_gfasclim + SUBROUTINE read_netcdf_buffer_cdnc(netcdf_filename, & & tg, & & ntime, & diff --git a/src/mo_python_routines.f90 b/src/mo_python_routines.f90 index 0650135ae..cc2fac651 100644 --- a/src/mo_python_routines.f90 +++ b/src/mo_python_routines.f90 @@ -38,6 +38,8 @@ MODULE mo_python_routines & read_namelists_extpar_ndvi, & ! edgar & read_namelists_extpar_edgar, & + ! gfasclim + & read_namelists_extpar_gfasclim, & ! cdnc & read_namelists_extpar_cdnc, & ! albedo @@ -261,6 +263,34 @@ SUBROUTINE read_namelists_extpar_edgar(namelist_file, edgar_buffer_file) END SUBROUTINE read_namelists_extpar_edgar + !> subroutine to read namelist for GFASCLIM data settings for EXTPAR + SUBROUTINE read_namelists_extpar_gfasclim(namelist_file, gfasclim_buffer_file) + + CHARACTER (len=*), INTENT(IN) :: namelist_file !< filename with namelists + CHARACTER (len=filename_max), INTENT(OUT) :: gfasclim_buffer_file !< name for gfasclim buffer file + + INTEGER (KIND=i4) :: ierr, nuin + + !> namelist with filenames for GFASCLIM data output + NAMELIST /gfasclim_io_extpar/ gfasclim_buffer_file + + nuin = free_un() ! function free_un returns free Fortran unit number + OPEN(nuin,FILE=TRIM(namelist_file), IOSTAT=ierr) + IF (ierr /= 0) THEN + WRITE(message_text,*)'Cannot open ', TRIM(namelist_file) + CALL logging%error(message_text,__FILE__, __LINE__) + ENDIF + + READ(nuin, NML=gfasclim_io_extpar, IOSTAT=ierr) + IF (ierr /= 0) THEN + WRITE(message_text,*)'Cannot read in namelist gfasclim_io_extpar - reason: ', ierr + CALL logging%error(message_text,__FILE__, __LINE__) + ENDIF + + CLOSE(nuin) + + END SUBROUTINE read_namelists_extpar_gfasclim + !> subroutine to read namelist for cdnc data settings for EXTPAR SUBROUTINE read_namelists_extpar_cdnc(namelist_file, & & icdnc_type, & diff --git a/src/mo_python_tg_fields.f90 b/src/mo_python_tg_fields.f90 index 9d7831d50..d40f23a1d 100644 --- a/src/mo_python_tg_fields.f90 +++ b/src/mo_python_tg_fields.f90 @@ -30,6 +30,11 @@ MODULE mo_python_tg_fields & edgar_emi_nox, & & edgar_emi_nh3, & & allocate_edgar_target_fields, & + ! gfasclim + & gfasclim_bcfire, & + & gfasclim_ocfire, & + & gfasclim_so2fire, & + & allocate_gfasclim_target_fields, & ! cdnc & cdnc, & & allocate_cdnc_target_fields, & @@ -95,6 +100,10 @@ MODULE mo_python_tg_fields & edgar_emi_so2(:,:,:), & !< field for sulfur dioxide emission from edgar & edgar_emi_nox(:,:,:), & !< field for nitrogen oxides emission from edgar & edgar_emi_nh3(:,:,:), & !< field for ammonia emission from edgar + ! gfasclim + & gfasclim_bcfire(:,:,:), & !< field for black carbon emission due to wildfires from gfas + & gfasclim_ocfire(:,:,:), & !< field for organic carbon emission due to wildfires from gfas + & gfasclim_so2fire(:,:,:), & !< field for sulfur dioxide emission due to wildfires from gfas ! cdnc & cdnc(:,:,:,:), & !< field for cloud droplet number (12 months) ! cru @@ -283,6 +292,44 @@ SUBROUTINE allocate_edgar_target_fields(tg, l_use_array_cache) END SUBROUTINE allocate_edgar_target_fields + SUBROUTINE allocate_gfasclim_target_fields(tg, nseasons, l_use_array_cache) + + TYPE(target_grid_def), INTENT(IN) :: tg !< structure with target grid description + INTEGER (KIND=i4), INTENT(in) :: nseasons !< number of seasons (4, obviously) + LOGICAL, INTENT(in) :: l_use_array_cache + + INTEGER(KIND=i4) :: errorcode !< error status variable + + errorcode = 0 + + CALL logging%info('Enter routine: allocate_gfasclim_target_fields') + + IF (l_use_array_cache) THEN + call allocate_cached('bcfire', gfasclim_bcfire, [tg%ie,tg%je,nseasons]) + ELSE + allocate(gfasclim_bcfire(tg%ie,tg%je,nseasons), stat=errorcode) + ENDIF + IF(errorcode.NE.0) CALL logging%error('Cant allocate the array gfasclim_bcfire',__FILE__,__LINE__) + gfasclim_bcfire = 0.0 + + IF (l_use_array_cache) THEN + call allocate_cached('ocfire', gfasclim_ocfire, [tg%ie,tg%je,nseasons]) + ELSE + allocate(gfasclim_ocfire(tg%ie,tg%je,nseasons), stat=errorcode) + ENDIF + IF(errorcode.NE.0) CALL logging%error('Cant allocate the array gfasclim_ocfire',__FILE__,__LINE__) + gfasclim_ocfire = 0.0 + + IF (l_use_array_cache) THEN + call allocate_cached('so2fire', gfasclim_so2fire, [tg%ie,tg%je,nseasons]) + ELSE + allocate(gfasclim_so2fire(tg%ie,tg%je,nseasons), stat=errorcode) + ENDIF + IF(errorcode.NE.0) CALL logging%error('Cant allocate the array gfasclim_so2fire',__FILE__,__LINE__) + gfasclim_so2fire = 0.0 + + END SUBROUTINE allocate_gfasclim_target_fields + SUBROUTINE allocate_cdnc_target_fields(tg, nt, l_use_array_cache) TYPE(target_grid_def), INTENT(IN) :: tg !< structure with target grid description diff --git a/src/mo_var_meta_data.f90 b/src/mo_var_meta_data.f90 index 9b461374a..21fe51e8b 100644 --- a/src/mo_var_meta_data.f90 +++ b/src/mo_var_meta_data.f90 @@ -47,6 +47,7 @@ MODULE mo_var_meta_data USE mo_io_utilities, ONLY: dim_meta_info, var_meta_info, & & vartype_int, vartype_real, & + & vartype_char, & & netcdf_grid_mapping USE mo_grid_structures, ONLY: target_grid_def, & @@ -155,6 +156,10 @@ MODULE mo_var_meta_data & edgar_emi_bc_meta, edgar_emi_oc_meta, edgar_emi_so2_meta, & & edgar_emi_nox_meta, edgar_emi_nh3_meta, & + ! gfasclim + & dim_gfasclim_tg, def_gfasclim_meta, & + & gfasclim_bcfire_meta, gfasclim_ocfire_meta, gfasclim_so2fire_meta, & + ! cdnc & dim_cdnc_tg, def_cdnc_meta, & & cdnc_meta, & @@ -202,6 +207,7 @@ MODULE mo_var_meta_data & dim_ndvi_tg(:), & & dim_art_tg(:), & & dim_edgar_tg(:), & + & dim_gfasclim_tg(:), & & dim_cdnc_tg(:), & & dim_emiss_tg(:), & & dim_era_tg(:), & @@ -226,6 +232,9 @@ MODULE mo_var_meta_data & edgar_emi_so2_meta, & !< additional information for variable edgar_emi_so2 & edgar_emi_nox_meta, & !< additional information for variable edgar_emi_nox & edgar_emi_nh3_meta, & !< additional information for variable edgar_emi_nh3 + & gfasclim_bcfire_meta, & !< additional information for variable gfasclim_bcfire + & gfasclim_ocfire_meta, & !< additional information for variable gfasclim_ocfire + & gfasclim_so2fire_meta, & !< additional information for variable gfasclim_so2fire & cdnc_meta, & !< additional information for variable cdnc & emiss_max_meta, & !< additional information for variable & emiss_field_mom_meta, & !< additional information for variable @@ -1404,6 +1413,90 @@ SUBROUTINE def_edgar_meta(diminfo,coordinates,grid_mapping) END SUBROUTINE def_edgar_meta + !> define meta information for gfasclim data for netcdf output + SUBROUTINE def_gfasclim_meta(nseasons, diminfo,coordinates,grid_mapping) + INTEGER (KIND=i4), INTENT(IN) :: nseasons !< Number of seasons + TYPE(dim_meta_info),TARGET :: diminfo(:) !< pointer to dimensions of variable + CHARACTER (len=80), OPTIONAL :: coordinates !< netcdf attribute coordinates + CHARACTER (len=80), OPTIONAL :: grid_mapping !< netcdf attribute grid mapping + + ! local variables + INTEGER :: n_dim !< number of dimensions + CHARACTER (len=80) :: gridmp + CHARACTER (len=80) :: coord + + gridmp = c_undef + coord = c_undef + + IF (PRESENT(grid_mapping)) gridmp = TRIM(grid_mapping) + IF (PRESENT(coordinates)) coord = TRIM(coordinates) + n_dim = SIZE(diminfo) + + ! set meta information for strucutre dim_gfasclim_tg + IF (ALLOCATED(dim_gfasclim_tg)) DEALLOCATE(dim_gfasclim_tg) + ALLOCATE(dim_gfasclim_tg(1:n_dim+1)) + SELECT CASE(n_dim) + CASE (1) + dim_gfasclim_tg(1)%dimname = diminfo(1)%dimname + dim_gfasclim_tg(1)%dimsize = diminfo(1)%dimsize + dim_gfasclim_tg(2)%dimname = "season" + dim_gfasclim_tg(2)%dimsize = nseasons + CASE (2) + dim_gfasclim_tg(1)%dimname = diminfo(1)%dimname + dim_gfasclim_tg(1)%dimsize = diminfo(1)%dimsize + dim_gfasclim_tg(2)%dimname = diminfo(2)%dimname + dim_gfasclim_tg(2)%dimsize = diminfo(2)%dimsize + dim_gfasclim_tg(3)%dimname = "season" + dim_gfasclim_tg(3)%dimsize = nseasons + CASE (3) + dim_gfasclim_tg(1)%dimname = diminfo(1)%dimname + dim_gfasclim_tg(1)%dimsize = diminfo(1)%dimsize + dim_gfasclim_tg(2)%dimname = diminfo(2)%dimname + dim_gfasclim_tg(2)%dimsize = diminfo(2)%dimsize + dim_gfasclim_tg(3)%dimname = diminfo(3)%dimname + dim_gfasclim_tg(3)%dimsize = diminfo(3)%dimsize + dim_gfasclim_tg(4)%dimname = "season" + dim_gfasclim_tg(4)%dimsize = nseasons + END SELECT + + gfasclim_bcfire_meta%varname = 'bcfire' + gfasclim_bcfire_meta%n_dim = n_dim+1 + gfasclim_bcfire_meta%diminfo => dim_gfasclim_tg + gfasclim_bcfire_meta%vartype = vartype_real + gfasclim_bcfire_meta%standard_name = c_undef + gfasclim_bcfire_meta%long_name = 'tendency_of_atmosphere_mass_content_of_black_carbon_dry_aerosol_due_to_wildfire_emission' + gfasclim_bcfire_meta%shortName = 'bcfire' + gfasclim_bcfire_meta%units = "kg m-2 s-1" + gfasclim_bcfire_meta%grid_mapping = gridmp + gfasclim_bcfire_meta%coordinates = coord + gfasclim_bcfire_meta%data_set = 'Global Fire Assimilation System (GFAS) data for the years 2015-2024 created by CAMS' + + gfasclim_ocfire_meta%varname = 'ocfire' + gfasclim_ocfire_meta%n_dim = n_dim+1 + gfasclim_ocfire_meta%diminfo => dim_gfasclim_tg + gfasclim_ocfire_meta%vartype = vartype_real + gfasclim_ocfire_meta%standard_name = c_undef + gfasclim_ocfire_meta%long_name = 'tendency_of_atmosphere_mass_content_of_organic_carbon_dry_aerosol_due_to_wildfire_emission' + gfasclim_ocfire_meta%shortName = 'ocfire' + gfasclim_ocfire_meta%units = "kg m-2 s-1" + gfasclim_ocfire_meta%grid_mapping = gridmp + gfasclim_ocfire_meta%coordinates = coord + gfasclim_ocfire_meta%data_set = 'Global Fire Assimilation System (GFAS) data for the years 2015-2024 created CAMS' + + gfasclim_so2fire_meta%varname = 'so2fire' + gfasclim_so2fire_meta%n_dim = n_dim+1 + gfasclim_so2fire_meta%diminfo => dim_gfasclim_tg + gfasclim_so2fire_meta%vartype = vartype_real + gfasclim_so2fire_meta%standard_name = c_undef + gfasclim_so2fire_meta%long_name = 'tendency_of_atmosphere_mass_content_of_sulfur_dioxide_due_to_wildfire_emission' + gfasclim_so2fire_meta%shortName = 'so2fire' + gfasclim_so2fire_meta%units = "kg m-2 s-1" + gfasclim_so2fire_meta%grid_mapping = gridmp + gfasclim_so2fire_meta%coordinates = coord + gfasclim_so2fire_meta%data_set = 'Global Fire Assimilation System (GFAS) data for the years 2015-2024 created by CAMS' + + END SUBROUTINE def_gfasclim_meta + !> define meta information for cdnc data for netcdf output SUBROUTINE def_cdnc_meta(ntime,diminfo,coordinates,grid_mapping) INTEGER (KIND=i4), INTENT(IN):: ntime !< number of times diff --git a/templates/namelist b/templates/namelist index 446cc6bce..e85d0f869 100644 --- a/templates/namelist +++ b/templates/namelist @@ -71,6 +71,12 @@ input_edgar = { 'edgar_buffer_file': '@EDGAR_BUFFER_FILE@', } +input_gfasclim = { + 'raw_data_gfasclim_path': '@RAW_DATA_GFASCLIM_PATH@', + 'raw_data_gfasclim_filename': '@RAW_DATA_GFASCLIM_FILENAME@', + 'gfasclim_buffer_file': '@GFASCLIM_BUFFER_FILE@', +} + input_aot = { 'iaot_type': @IAOT_TYPE@, 'raw_data_aot_path': '@RAW_DATA_AOT_PATH@', diff --git a/test/pytest/test_wrap_extpar.py b/test/pytest/test_wrap_extpar.py index 8dd474bce..19e4e4f74 100644 --- a/test/pytest/test_wrap_extpar.py +++ b/test/pytest/test_wrap_extpar.py @@ -420,8 +420,9 @@ def test_setup_runscript_with_urban_cosmo(): 'lurban': True, 'igrid_type': 2, 'enable_cdnc': False, - 'enable_art': True, - 'enable_edgar': False + 'enable_art': False, + 'enable_edgar': False, + 'enable_gfasclim': False } expected_runscript = { 'account': @@ -447,7 +448,8 @@ def test_setup_runscript_without_urban_icon(): 'igrid_type': 1, 'enable_cdnc': False, 'enable_art': False, - 'enable_edgar': False + 'enable_edgar': False, + 'enable_gfasclim': False } expected_runscript = { 'account': @@ -473,7 +475,8 @@ def test_setup_runscript_without_urban_with_edgar_and_cdnc_icon(): 'igrid_type': 1, 'enable_cdnc': True, 'enable_art': False, - 'enable_edgar': True + 'enable_edgar': True, + 'enable_gfasclim': False } expected_runscript = { 'account': @@ -493,14 +496,15 @@ def test_setup_runscript_without_urban_with_edgar_and_cdnc_icon(): assert setup_runscript(args) == expected_runscript -def test_setup_runscript_with_art_icon(): +def test_setup_runscript_with_art_and_gfasclim_icon(): args = { 'account': 'test_account', 'lurban': False, 'igrid_type': 1, 'enable_cdnc': False, 'enable_art': True, - 'enable_edgar': False + 'enable_edgar': False, + 'enable_gfasclim': True } expected_runscript = { 'account': @@ -513,7 +517,8 @@ def test_setup_runscript_with_art_icon(): '"extpar_flake_to_buffer.exe" ', '"extpar_soil_to_buffer.exe" ', '"extpar_alb_to_buffer.py" ', '"extpar_ndvi_to_buffer.py" ', '"extpar_era_to_buffer.py" ', '"extpar_emiss_to_buffer.py" ', - '"extpar_art_to_buffer.py" ', '"extpar_consistency_check.exe" ' + '"extpar_art_to_buffer.py" ', '"extpar_gfasclim_to_buffer.py" ', + '"extpar_consistency_check.exe" ' ] } assert setup_runscript(args) == expected_runscript @@ -1053,6 +1058,7 @@ def test_all_placeholders_replaced_cosmo(tmp_dir): "enable_cdnc": False, "enable_edgar": False, "enable_art": False, + "enable_gfasclim": False, 'tile_mode': 0, "use_array_cache": False, "nhori": 24, @@ -1096,6 +1102,7 @@ def test_all_placeholders_replaced_icon(tmp_dir, icon_grid): "enable_cdnc": False, "enable_edgar": False, "enable_art": False, + "enable_gfasclim": False, 'tile_mode': 1, "use_array_cache": False, "nhori": 24, diff --git a/test/testsuite/bin/run_extpar_icon.sh b/test/testsuite/bin/run_extpar_icon.sh index 327274419..04c5b1a31 100755 --- a/test/testsuite/bin/run_extpar_icon.sh +++ b/test/testsuite/bin/run_extpar_icon.sh @@ -61,6 +61,7 @@ binary_era=extpar_era_to_buffer.py binary_isa=extpar_isa_to_buffer.py binary_ahf=extpar_ahf_to_buffer.py binary_edgar=extpar_edgar_to_buffer.py +binary_gfasclim=extpar_gfasclim_to_buffer.py binary_cdnc=extpar_cdnc_to_buffer.py binary_aot=extpar_aot_to_buffer.py binary_art=extpar_art_to_buffer.py @@ -125,17 +126,18 @@ run_sequential ${binary_soil} run_sequential ${binary_flake} -if [[ $type_of_test == mpim ]]; then +if [[ $type_of_test == mpim || $name_of_test == icon_global ]]; then run_sequential ${binary_emiss} run_sequential ${binary_edgar} + run_sequential ${binary_gfasclim} fi -if [[ $name_of_test == icon_ecci ]]; then +if [[ $name_of_test == icon_ecci || $name_of_test == icon_global ]]; then run_sequential ${binary_cdnc} run_sequential ${binary_art} fi -if [[ $name_of_test == icon_d2 || $name_of_test == icon_d2_caching || $name_of_test == ecoclimap_sg ]]; then +if [[ $name_of_test == icon_d2 || $name_of_test == icon_d2_caching || $name_of_test == ecoclimap_sg || $name_of_test == icon_global ]]; then run_sequential ${binary_era} fi diff --git a/test/testsuite/data/dwd/icon_global/INPUT_ALB b/test/testsuite/data/dwd/icon_global/INPUT_ALB new file mode 100644 index 000000000..31a3b15cf --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_ALB @@ -0,0 +1,16 @@ +&alb_raw_data + raw_data_alb_path = '', + ialb_type = 1, + raw_data_alb_filename = 'alb_new.nc', +/ +&alnid_raw_data + raw_data_alnid_filename = 'alnid_new.nc', + raw_data_alb_path = '/data/linked_data', +/ +&aluvd_raw_data + raw_data_alb_path = '', + raw_data_aluvd_filename = 'aluvd_new.nc', +/ +&alb_io_extpar + alb_buffer_file = 'alb_buffer.nc', +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_AOT b/test/testsuite/data/dwd/icon_global/INPUT_AOT new file mode 100644 index 000000000..794ad025d --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_AOT @@ -0,0 +1,6 @@ +&aerosol_raw_data + iaot_type = 1, +/ +&aerosol_io_extpar + aot_buffer_file = 'aot_buffer.nc', +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_ART b/test/testsuite/data/dwd/icon_global/INPUT_ART new file mode 100644 index 000000000..5dd8bf4cc --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_ART @@ -0,0 +1,7 @@ +&art_nml + raw_data_art_filename = 'HWSD0_USDA.nc', + raw_data_art_path = '', +/ +&art_io_extpar + art_buffer_file = 'art_buffer.nc', +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_CDNC b/test/testsuite/data/dwd/icon_global/INPUT_CDNC new file mode 100644 index 000000000..28fb038d2 --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_CDNC @@ -0,0 +1,6 @@ +&cdnc_raw_data + icdnc_type = 1, +/ +&cdnc_io_extpar + cdnc_buffer_file = 'cdnc_buffer.nc', +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_CHECK b/test/testsuite/data/dwd/icon_global/INPUT_CHECK new file mode 100644 index 000000000..865c96bca --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_CHECK @@ -0,0 +1,9 @@ +&extpar_consistency_check_io + netcdf_output_filename = "external_parameter.nc" + i_lsm_data = 1 + land_sea_mask_file = "" + number_special_points = 0 + lflake_correction = .TRUE. + tile_mode = 1 + l_use_array_cache = .FALSE. +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_EMISS b/test/testsuite/data/dwd/icon_global/INPUT_EMISS new file mode 100644 index 000000000..c0529bb24 --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_EMISS @@ -0,0 +1,7 @@ +&emiss_raw_data + raw_data_emiss_filename = 'CAMEL_bbe_full_2010-2015.nc', + raw_data_emiss_path = '', +/ +&emiss_io_extpar + emiss_buffer_file = 'emiss_buffer.nc', +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_ERA b/test/testsuite/data/dwd/icon_global/INPUT_ERA new file mode 100644 index 000000000..da8d7bb58 --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_ERA @@ -0,0 +1,6 @@ +&era_raw_data + iera_type = 2, +/ +&era_io_extpar + era_buffer_file = 'era_buffer.nc', +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_FLAKE b/test/testsuite/data/dwd/icon_global/INPUT_FLAKE new file mode 100644 index 000000000..6c5298a6d --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_FLAKE @@ -0,0 +1,7 @@ +&flake_raw_data + raw_data_flake_path = '' + raw_data_flake_filename = 'GLDB_lakedepth.nc' +/ +&flake_io_extpar + flake_buffer_file = 'flake_buffer.nc' +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_GRID b/test/testsuite/data/dwd/icon_global/INPUT_GRID new file mode 100644 index 000000000..7015af928 --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_GRID @@ -0,0 +1,4 @@ +&icon_grid_info +icon_grid_dir = "" +icon_grid_nc_file = 'icon_grid_0012_R02B04_G.nc' +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_LU b/test/testsuite/data/dwd/icon_global/INPUT_LU new file mode 100644 index 000000000..bf8f52e46 --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_LU @@ -0,0 +1,19 @@ +&lu_raw_data + raw_data_lu_path = '' + raw_data_lu_filename = 'GLOBCOVER_0_16bit.nc' 'GLOBCOVER_1_16bit.nc' 'GLOBCOVER_2_16bit.nc' 'GLOBCOVER_3_16bit.nc' 'GLOBCOVER_4_16bit.nc' 'GLOBCOVER_5_16bit.nc' + i_landuse_data = 1 + ntiles_globcover = 6 + l_use_corine = .FALSE. + l_terra_urb = .FALSE. + ilookup_table_lu = 1 +/ +&lu_io_extpar + lu_buffer_file = 'lu_buffer.nc' +/ +&glcc_raw_data + raw_data_glcc_path = '' + raw_data_glcc_filename = 'GLCC_usgs_class_byte.nc' +/ +&glcc_io_extpar + glcc_buffer_file = 'glcc_buffer.nc' +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_NDVI b/test/testsuite/data/dwd/icon_global/INPUT_NDVI new file mode 100644 index 000000000..341c7e9e5 --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_NDVI @@ -0,0 +1,7 @@ +&ndvi_raw_data + raw_data_ndvi_filename = 'NDVI_1998_2003.nc', + raw_data_ndvi_path = '', +/ +&ndvi_io_extpar + ndvi_buffer_file = 'ndvi_buffer.nc', +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_ORO b/test/testsuite/data/dwd/icon_global/INPUT_ORO new file mode 100644 index 000000000..02dc046b7 --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_ORO @@ -0,0 +1,24 @@ +&oro_runcontrol + lcompute_sgsl= .FALSE. + / + +&orography_io_extpar + orography_buffer_file = 'oro_buffer.nc' + orography_output_file = 'oro_grid.nc' +/ + +&orography_raw_data + itopo_type = 3 + lsso_param = .TRUE. + raw_data_orography_path = '' + ntiles_column = 12 + ntiles_row = 6 + topo_files = 'MERIT_N90-N60_W180-W150.nc' 'MERIT_N90-N60_W150-W120.nc' 'MERIT_N90-N60_W120-W090.nc' 'MERIT_N90-N60_W090-W060.nc' 'MERIT_N90-N60_W060-W030.nc' 'MERIT_N90-N60_W030-E000.nc' 'MERIT_N90-N60_E000-E030.nc' 'MERIT_N90-N60_E030-E060.nc' 'MERIT_N90-N60_E060-E090.nc' 'MERIT_N90-N60_E090-E120.nc' 'MERIT_N90-N60_E120-E150.nc' 'MERIT_N90-N60_E150-E180.nc' 'MERIT_N60-N30_W180-W150.nc' 'MERIT_N60-N30_W150-W120.nc' 'MERIT_N60-N30_W120-W090.nc' 'MERIT_N60-N30_W090-W060.nc' 'MERIT_N60-N30_W060-W030.nc' 'MERIT_N60-N30_W030-E000.nc' 'MERIT_N60-N30_E000-E030.nc' 'MERIT_N60-N30_E030-E060.nc' 'MERIT_N60-N30_E060-E090.nc' 'MERIT_N60-N30_E090-E120.nc' 'MERIT_N60-N30_E120-E150.nc' 'MERIT_N60-N30_E150-E180.nc' 'MERIT_N30-N00_W180-W150.nc' 'MERIT_N30-N00_W150-W120.nc' 'MERIT_N30-N00_W120-W090.nc' 'MERIT_N30-N00_W090-W060.nc' 'MERIT_N30-N00_W060-W030.nc' 'MERIT_N30-N00_W030-E000.nc' 'MERIT_N30-N00_E000-E030.nc' 'MERIT_N30-N00_E030-E060.nc' 'MERIT_N30-N00_E060-E090.nc' 'MERIT_N30-N00_E090-E120.nc' 'MERIT_N30-N00_E120-E150.nc' 'MERIT_N30-N00_E150-E180.nc' 'MERIT_N00-S30_W180-W150.nc' 'MERIT_N00-S30_W150-W120.nc' 'MERIT_N00-S30_W120-W090.nc' 'MERIT_N00-S30_W090-W060.nc' 'MERIT_N00-S30_W060-W030.nc' 'MERIT_N00-S30_W030-E000.nc' 'MERIT_N00-S30_E000-E030.nc' 'MERIT_N00-S30_E030-E060.nc' 'MERIT_N00-S30_E060-E090.nc' 'MERIT_N00-S30_E090-E120.nc' 'MERIT_N00-S30_E120-E150.nc' 'MERIT_N00-S30_E150-E180.nc' 'MERIT_S30-S60_W180-W150.nc' 'MERIT_S30-S60_W150-W120.nc' 'MERIT_S30-S60_W120-W090.nc' 'MERIT_S30-S60_W090-W060.nc' 'MERIT_S30-S60_W060-W030.nc' 'MERIT_S30-S60_W030-E000.nc' 'MERIT_S30-S60_E000-E030.nc' 'MERIT_S30-S60_E030-E060.nc' 'MERIT_S30-S60_E060-E090.nc' 'MERIT_S30-S60_E090-E120.nc' 'MERIT_S30-S60_E120-E150.nc' 'MERIT_S30-S60_E150-E180.nc' 'REMA_BKG_S60-S90_W180-W150.nc' 'REMA_BKG_S60-S90_W150-W120.nc' 'REMA_BKG_S60-S90_W120-W090.nc' 'REMA_BKG_S60-S90_W090-W060.nc' 'REMA_BKG_S60-S90_W060-W030.nc' 'REMA_BKG_S60-S90_W030-E000.nc' 'REMA_BKG_S60-S90_E000-E030.nc' 'REMA_BKG_S60-S90_E030-E060.nc' 'REMA_BKG_S60-S90_E060-E090.nc' 'REMA_BKG_S60-S90_E090-E120.nc' 'REMA_BKG_S60-S90_E120-E150.nc' 'REMA_BKG_S60-S90_E150-E180.nc' +/ + +&sgsl_io_extpar + lpreproc_oro=.FALSE. + sgsl_buffer_file = 'placeholder_file' + sgsl_files = placeholder_file + / + diff --git a/test/testsuite/data/dwd/icon_global/INPUT_OROSMOOTH b/test/testsuite/data/dwd/icon_global/INPUT_OROSMOOTH new file mode 100644 index 000000000..cbd2b6bb6 --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_OROSMOOTH @@ -0,0 +1,12 @@ +&orography_smoothing + lfilter_oro = .FALSE. + ilow_pass_oro = 4 + numfilt_oro = 1 + ilow_pass_xso = 5 + lxso_first = .FALSE. + numfilt_xso = 1 + rxso_mask = 750.0 + eps_filter = 0.1 + rfill_valley = 0.0 + ifill_valley = 1 +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_RADTOPO b/test/testsuite/data/dwd/icon_global/INPUT_RADTOPO new file mode 100644 index 000000000..0c90f82d9 --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_RADTOPO @@ -0,0 +1,8 @@ +&radtopo + lradtopo= .FALSE. + nhori= 24 + max_missing= 0.95 + min_circ_cov = 1 + radius= 40000 + itype_scaling= 0 +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_SCALE_SEP b/test/testsuite/data/dwd/icon_global/INPUT_SCALE_SEP new file mode 100644 index 000000000..86868f7a3 --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_SCALE_SEP @@ -0,0 +1,5 @@ +&scale_separated_raw_data + lscale_separation = .FALSE. + raw_data_scale_sep_path = '' + scale_sep_files = 'placeholder_file' +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_SGSL b/test/testsuite/data/dwd/icon_global/INPUT_SGSL new file mode 100644 index 000000000..d1199a446 --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_SGSL @@ -0,0 +1,10 @@ +&sgsl_io_extpar + sgsl_buffer_file = 'placeholder_file' +/ +&sgsl_raw_data + idem_type = 3 + raw_data_sgsl_path= '' + ntiles_column = 12 + ntiles_row = 6 + sgsl_files = placeholder_file +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_SOIL b/test/testsuite/data/dwd/icon_global/INPUT_SOIL new file mode 100644 index 000000000..aff99e90c --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_SOIL @@ -0,0 +1,13 @@ +&soil_raw_data + isoil_data = 1 + raw_data_soil_path = '' + raw_data_soil_filename ='FAO_DSMW_double.nc' +/ +&soil_io_extpar + soil_buffer_file = 'soil_buffer.nc' +/ +&HWSD_index_files + path_HWSD_index_files = '/data/linked_data/../soil' + lookup_table_HWSD = 'LU_TAB_HWSD_UF.data' + HWSD_data = 'HWSD_DATA_COSMO.data' +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_TCLIM b/test/testsuite/data/dwd/icon_global/INPUT_TCLIM new file mode 100644 index 000000000..649e13f5a --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_TCLIM @@ -0,0 +1,6 @@ +&t_clim_raw_data + it_cl_type = 2, +/ +&t_clim_io_extpar + t_clim_buffer_file = 'tclim_buffer.nc', +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_edgar b/test/testsuite/data/dwd/icon_global/INPUT_edgar new file mode 100644 index 000000000..164c1f98c --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_edgar @@ -0,0 +1,3 @@ +&edgar_io_extpar + edgar_buffer_file = 'edgar_buffer.nc', +/ diff --git a/test/testsuite/data/dwd/icon_global/INPUT_grid_org b/test/testsuite/data/dwd/icon_global/INPUT_grid_org new file mode 100644 index 000000000..eb6e372a4 --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/INPUT_grid_org @@ -0,0 +1,4 @@ +&GRID_DEF +igrid_type = 1 +domain_def_namelist = 'INPUT_GRID' +/ diff --git a/test/testsuite/data/dwd/icon_global/namelist.py b/test/testsuite/data/dwd/icon_global/namelist.py new file mode 100644 index 000000000..90d976f4b --- /dev/null +++ b/test/testsuite/data/dwd/icon_global/namelist.py @@ -0,0 +1,90 @@ +input_tclim = { + 'raw_data_t_clim_path': '', + 'raw_data_tclim_coarse': 'absolute_hadcrut3.nc', + 'raw_data_tclim_fine': 'CRU_T_SOIL_clim.nc', + 't_clim_buffer_file': 'tclim_buffer.nc', + 'it_cl_type': 2, + 'tcorr_lapse_rate': 0.0065, + 'tcorr_offset': 0 +} + +input_alb = { + 'ialb_type': 1, + 'raw_data_alb_path': '', + 'raw_data_alb_filename': 'alb_new.nc', + 'raw_data_alnid_filename': 'alnid_new.nc', + 'raw_data_aluvd_filename': 'aluvd_new.nc', + 'alb_buffer_file': 'alb_buffer.nc' +} + +input_ndvi = { + 'raw_data_ndvi_path': '', + 'raw_data_ndvi_filename': 'NDVI_1998_2003.nc', + 'ndvi_buffer_file': 'ndvi_buffer.nc' +} + +input_ahf = { + 'iahf_type': 1, + 'raw_data_ahf_path': '', + 'raw_data_ahf_filename': 'AHF_2006_2.5min_lonlat.nc', + 'ahf_buffer_file': 'ahf_buffer.nc' +} + +input_isa = { + 'isa_type': 1, + 'raw_data_isa_path': '', + 'raw_data_isa_filename': 'NOAA_ISA_16bit_lonlat.nc', + 'isa_buffer_file': 'isa_buffer.nc' +} + +input_era = { + 'iera_type': 2, + 'raw_data_era_path': '', + 'raw_data_era_ORO': 'ERA-I_ORO_1986.nc', + 'raw_data_era_T2M': 'ERA-I_T2M_1986_2015.nc', + 'raw_data_era_SST': 'ERA-I_SST_1986_2015.nc', + 'raw_data_era_SD': 'ERA-I_SD_1986_2015.nc', + 'era_buffer_file': 'era_buffer.nc', +} + +input_emiss = { + 'iemiss_type': 1, + 'raw_data_emiss_path': '', + 'raw_data_emiss_filename': 'CAMEL_bbe_full_2010-2015.nc', + 'emiss_buffer_file': 'emiss_buffer.nc', +} +input_cdnc = { + 'icdnc_type': 1, + 'raw_data_cdnc_path': '', + 'raw_data_cdnc_filename': 'modis_cdnc_climatology_Q06.nc', + 'cdnc_buffer_file': 'cdnc_buffer.nc', +} + +input_edgar = { + 'raw_data_edgar_path': '', + 'raw_data_edgar_filename_bc': 'v8.1_FT2022_AP_BC_2022_TOTALS_flx.nc', + 'raw_data_edgar_filename_oc': 'v8.1_FT2022_AP_OC_2022_TOTALS_flx.nc', + 'raw_data_edgar_filename_so2': 'v8.1_FT2022_AP_SO2_2022_TOTALS_flx.nc', + 'raw_data_edgar_filename_nox': 'v8.1_FT2022_AP_NOx_2022_TOTALS_flx.nc', + 'raw_data_edgar_filename_nh3': 'v8.1_FT2022_AP_NH3_2022_TOTALS_flx.nc', + 'edgar_buffer_file': 'edgar_buffer.nc', +} + +input_gfasclim = { + 'raw_data_gfasclim_path': '', + 'raw_data_gfasclim_filename': 'gfasclim2015-2024.nc', + 'gfasclim_buffer_file': 'gfasclim_buffer.nc', +} + +input_aot = { + 'iaot_type': 1, + 'raw_data_aot_path': '', + 'raw_data_aot_filename': 'aot_GACP_sea_salt_fixed.nc', + 'aot_buffer_file': 'aot_buffer.nc' +} + +input_art = { + 'raw_data_art_path': '', + 'raw_data_art_filename': 'HWSD0_USDA.nc', + 'art_buffer_file': 'art_buffer.nc', +} diff --git a/test/testsuite/data/get_data.sh b/test/testsuite/data/get_data.sh index 7ca2dcd19..6766ea7c4 100755 --- a/test/testsuite/data/get_data.sh +++ b/test/testsuite/data/get_data.sh @@ -48,13 +48,18 @@ wget --quiet 'ftp://iacftp.ethz.ch/pub_read/stelliom/clim_tsea_icon_ecci.nc' wget --quiet 'ftp://iacftp.ethz.ch/pub_read/stelliom/external_parameter_icon_ecci_PR444.nc' cd - +cd dwd/icon_global +wget --quiet 'http://icon-downloads.mpimet.mpg.de/grids/public/edzw/icon_grid_0012_R02B04_G.nc' +wget --quiet 'ftp://iacftp.ethz.ch/pub_read/stelliom/external_parameter_icon_dwd_global_PR448.nc' +cd - + # mpim test -d mpim || exit 1 cd mpim/icon_r2b4 wget --quiet 'http://icon-downloads.mpimet.mpg.de/grids/public/mpim/0013/icon_grid_0013_R02B04_G.nc' wget --quiet 'ftp://iacftp.ethz.ch/pub_read/stelliom/clim_t2m_icon_r2b4.nc' wget --quiet 'ftp://iacftp.ethz.ch/pub_read/stelliom/clim_tsea_icon_r2b4.nc' -wget --quiet 'ftp://iacftp.ethz.ch/pub_read/stelliom/external_parameter_icon_mpim_PR447.nc' +wget --quiet 'ftp://iacftp.ethz.ch/pub_read/stelliom/external_parameter_icon_mpim_PR448.nc' cd - # ecmwf diff --git a/test/testsuite/data/mpim/icon_r2b4/namelist.py b/test/testsuite/data/mpim/icon_r2b4/namelist.py index af478e588..e918f768c 100644 --- a/test/testsuite/data/mpim/icon_r2b4/namelist.py +++ b/test/testsuite/data/mpim/icon_r2b4/namelist.py @@ -38,6 +38,12 @@ 'edgar_buffer_file': 'edgar_buffer.nc', } +input_gfasclim = { + 'raw_data_gfasclim_path': '', + 'raw_data_gfasclim_filename': 'gfasclim2015-2024.nc', + 'gfasclim_buffer_file': 'gfasclim_buffer.nc', +} + input_aot = { 'iaot_type': 1, 'raw_data_aot_path': '', diff --git a/test/testsuite/src/checkers/tolerance_check_cdo.py b/test/testsuite/src/checkers/tolerance_check_cdo.py index 8c54b4279..346a432ed 100755 --- a/test/testsuite/src/checkers/tolerance_check_cdo.py +++ b/test/testsuite/src/checkers/tolerance_check_cdo.py @@ -151,7 +151,7 @@ def versiontuple(v): ref_files = glob.glob('{}/external_parameter*.nc'.format(refoutdir)) if not ref_files: - print('netCDF reference files found') + print('netCDF reference files not found') sys.exit(20) else: ref_file = ref_files[0] diff --git a/test/testsuite/testlist_icon.xml b/test/testsuite/testlist_icon.xml index bcc8f5901..bc6528872 100644 --- a/test/testsuite/testlist_icon.xml +++ b/test/testsuite/testlist_icon.xml @@ -19,6 +19,12 @@ tolerance_check_cdo.py + + MERIT/REMA input, icon_global + existence_extpar_out.sh + tolerance_check_cdo.py + +