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
+
+