diff --git a/namelists/real-from-d2-ana/icon_atmosphere.namelist b/namelists/real-from-d2-ana/icon_atmosphere.namelist index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d30514538b4a3103695e14754bbd29105ed2abcc 100644 --- a/namelists/real-from-d2-ana/icon_atmosphere.namelist +++ b/namelists/real-from-d2-ana/icon_atmosphere.namelist @@ -0,0 +1,348 @@ + +¶llel_nml + nproma = 32 +/ + +&run_nml + num_lev = 65 + lvert_nest = .false. ! use vertical nesting if a nest is active + dtime = 20 ! timestep in seconds + ldynamics = .true. ! dynamics + ltransport = .true. + iforcing = 3 ! NWP forcing + lart = .false. ! ICON-ART main switch + ltestcase = .false. ! false: run with real data + msg_level = 20 ! default: 5, much more: 20 + ltimer = .true. ! set .true. for detailed timer output + timers_level = 1 ! can be increased up to 10 for detailed timer output + ntracer = 5 + check_uuid_gracefully = .true. + output = "nml" + ldass_lhn = .False. + debug_check_level = 1 +/ + +&grid_nml + dynamics_parent_grid_id = 0 + dynamics_grid_filename = 'icon_grid_0047_R19B07_L.nc' + radiation_grid_filename = 'icon_grid_0046_R19B06_LR.nc', + lredgrid_phys = .true. + l_limited_area = .true. +/ + +&nwp_phy_nml + inwp_psp = 1 ! PSP scheme 0(turn off) 1(turn one) 2(turn on with non-D wind pert) + psp_scale = 5.0 ! scaling factor for stochastic perturbations scheme + psp_rnd_seed = 31 + psp_apply_ddt_core = .False. ! True if vertical wind perturbations should be applied at the explicit dynamical core timestep + inwp_gscp = 4 ! 1: default, 2: graupel scheme for convection-permitting scales + ccn_type_gscp4 = 8 ! CB new namelist parameter: + ccn_type_gscp5 = 8 ! CB new namelist parameter: + !6: 100 maritime, 7: 500 intermediate, 8: 1700 continental, 9: 3200 polluted continental + cloudnue_value = 0 ! CB new namelist parameter for shape parameter (nu) of CDSD: + ! -> cloud_cosmo5 (mu=1/3): 0 (REF), 1, 2, 4, 8 + ! -> cloud_nue1mue1 (mu=1): 1 (REF), 2, 4, 8 + mu_rain = 0.5 ! new tuning becoming operational in July 2018 + rain_n0_factor = 0.1 ! " + inwp_convection = 1 + lshallowconv_only = .true. + inwp_radiation = 1 + inwp_cldcover = 1 ! 0: no cld, 1: new diagnostic, 3: COSMO, 5: grid scale + inwp_turb = 1 + inwp_satad = 1 + inwp_sso = 1 + inwp_gwd = 0 + inwp_surface = 1 + icapdcycl = 3 ! CAPE modification, improve diurnal cycle over tropical land + latm_above_top = .true. + efdt_min_raylfric = 7200. + itype_z0 = 2 ! 1: default, 2: turn off SSO part of z0 + icpl_aero_conv = 1 + icpl_aero_gscp = 0 + icpl_o3_tp = 1 + dt_conv = 120 + dt_rad = 720 + dt_sso = 120 + dt_gwd = 120 + ldetrain_conv_prec = .true. ! .true. should be used in R03B08 EU-nest only + lrtm_filename = 'rrtmg_lw.nc' + cldopt_filename = 'ECHAM6_CldOptProps.nc' +/ + +&turbdiff_nml + tkhmin = 0.5 ! new default since rev. 16527 + tkmmin = 0.75 ! + tkmmin_strat = 4 + pat_len = 750. + c_diff = 0.2 + rat_sea = 7.0 ! operational since May 2017 + ltkesso = .true. + frcsmot = 0.2 ! these 2 switches together apply vertical smoothing of the TKE source terms + imode_frcsmot = 2 ! in the tropics (only), which reduces the moist bias in the tropical lower troposphere + itype_sher = 2 + ltkeshs = .true. + a_hshr = 2.0 + alpha0 = 0.0123 + alpha0_max = 0.0335 ! Charnock parameter tuning + alpha1 = 0.75 + icldm_turb = 2 ! ** new recommendation for v2.0.15 in conjunction with evaporation fix for grid-scale rain ** + tur_len = 300. + q_crit = 2.0 + imode_tkesso = 2 +/ + + +&radiation_nml + irad_o3 = 79 + irad_aero = 6 + albedo_type = 2 ! 1: default, 2: MODIS + vmr_co2 = 390.e-06 ! values representative for 2012 + vmr_ch4 = 1800.e-09 + vmr_n2o = 322.0e-09 + vmr_o2 = 0.20946 + vmr_cfc11 = 240.e-12 + vmr_cfc12 = 532.e-12 +/ + +&nonhydrostatic_nml + iadv_rhotheta = 2 + ivctype = 2 + itime_scheme = 4 + exner_expol = 0.333 + vwind_offctr = 0.2 + damp_height = 12500. + rayleigh_coeff = 5.0 + lhdiff_rcf = .true. + divdamp_fac = 0.004 ! factor 8 iff divdamp_order=2 !!! + divdamp_order = 24 ! use 24 for forecast, 2 for IAU + divdamp_type = 32 ! (3): 2 for assimilation cycle + divdamp_trans_start = 12500. ! use 2500. in assimilation cycle + divdamp_trans_end = 17500. ! use 5000. in assimilation cycle + ndyn_substeps = 5 + l_open_ubc = .false. + igradp_method = 3 + l_zdiffu_t = .true. + thslp_zdiffu = 0.02 + thhgtd_zdiffu = 125. + htop_moist_proc = 22500. + hbot_qvsubstep = 22500 ! revised (to avoid too large CFL) +/ + +&sleve_nml + min_lay_thckn = 20. + max_lay_thckn = 25000. + htop_thcknlimit = 15000. ! 15 km is the default + top_height = 22000. + stretch_fac = 0.65 + decay_scale_1 = 4000. + decay_scale_2 = 2500. + decay_exp = 1.2 + flat_height = 16000. +/ + +&dynamics_nml + iequations = 3 + idiv_method = 1 + divavg_cntrwgt = 0.50 + lcoriolis = .true. +/ + +&transport_nml + ctracer_list = '12345' + ivadv_tracer = 3,3,3,3,3 + itype_hlimit = 3,4,4,4,4 + ihadv_tracer = 52,2,2,2,2 +/ + +&diffusion_nml + hdiff_order = 5 + itype_vn_diffu = 1 + itype_t_diffu = 2 + hdiff_efdt_ratio = 24. ! 24.0 for R2B6; recommendation for R3B7: 30.0 + hdiff_smag_fac = 0.025 ! 0.025 for R2B6; recommendation for R3B7: 0.02 + lhdiff_vn = .true. + lhdiff_temp = .true. +/ + +&interpol_nml + nudge_zone_width = 10 + nudge_max_coeff = 0.075 + lsq_high_ord = 3 + l_intp_c2l = .true. + l_mono_c2l = .true. + support_baryctr_intp = .false. +/ + +&gridref_nml + grf_intmethod_e = 6 + grf_intmethod_ct = 2 + grf_tracfbk = 2 + denom_diffu_v = 150. +/ + +&nwp_tuning_nml + itune_albedo = 1 ! somewhat reduced albedo (w.r.t. MODIS data) over Sahara + tune_gkdrag = 0.0 + tune_gkwake = 0.25 + tune_gfrcrit = 0.333 + tune_gust_factor = 7.25 + tune_dust_abs = 1. + tune_zvz0i = 1.25 ! new tuning since June 2018 + tune_box_liq_asy = 3.5 ! new tuning becoming operational in July 2018 + tune_minsnowfrac = 0.3 + tune_sgsclifac = 1.0 ! new tuning becoming operational in July 2019 +/ + +&extpar_nml +! extpar_filename = 'icon_extpar_0044_R19B07_L_20180625_tiles.nc' + itype_vegetation_cycle = 1 !operational using 2(ihan) + itopo = 1 + n_iter_smooth_topo = 1,1 + heightdiff_threshold = 2250. + hgtdiff_max_smooth_topo = 750.,750., + read_nc_via_cdi = .true. +/ + +&lnd_nml + ntiles = 3 + lmulti_snow = .false. + itype_heatcond = 3 + idiag_snowfrac = 20 + itype_snowevap = 2 + lsnowtile = .true. !.false. + lseaice = .true. + llake = .true. + lprog_albsi = .true. + itype_lndtbl = 4 + itype_root = 2 + itype_evsl = 4 + itype_trvg = 3 ! operational since 14 March 2018, requires FG cycling of EVAP_PL (internal name plantevap) + cwimax_ml = 5.e-4 + c_soil = 1.25 + c_soil_urb = 0.5 + sstice_mode = 2 ! requires extpar >= 20170202 +/ + +&limarea_nml + itype_latbc = 1 + latbc_filename = './icbc/M031/latbc_<dddhh>.grib' + latbc_boundary_grid = 'icon_grid_0047_R19B07_L_lbc.nc' + dtime_latbc = 10800 !3600 + init_latbc_from_fg = .true. + latbc_varnames_map_file = 'map_file.latbc' +/ + +&initicon_nml + init_mode = 5 ! 1: operation mode, 5: IAU, 6: 5+sma_inc + dt_iau = 600 ! Window for incr.analysis update + dt_shift = -300 ! Offset for incr.analysis update + type_iau_wgt = 1 ! IAU weighting function (const.) + iterate_iau = .true. ! iterate IAU cycle with one-sided and centered windows + zpbl1 = 500. + zpbl2 = 1000. + lread_ana = .true. ! (T) Read dwdana + lp2cintp_incr = .false. ! parent-to-child-interpolation + lp2cintp_sfcana = .false. ! of analyses (.false. for DET!) + dwdfg_filename = 'icbc/M031/fc.grib' +! lread_ana = .False. + dwdana_filename = 'icbc/M031/an_inc.grib' + ana_varnames_map_file = 'map_file.ana' +! check_ana(1)%list = 'P','QV','T','U','V' +! check_ana(2)%list = 'FRESHSNW','H_SNOW' + ltile_coldstart = .false. ! intermediate mode until tile-based I/O is available + ltile_init = .false. + use_lakeiceana = .false. + qcana_mode = 2 ! (0) no QC-increments, + qiana_mode = 1 ! 0/1: ignore/use QI increments + qrsgana_mode = 1 ! 0/1: ignore/use QR,QS,QG increments +/ + +&ensemble_pert_nml + use_ensemble_pert = .true. + itype_pert_gen = 2 + timedep_pert = 2 +/ + +&gribout_nml + perturbationNumber = 9 +/ + + ! ----------------------------------------------- ! + ! --- ICON-D2: output fields - regular grid at pressure levels --- ! + ! ----------------------------------------------- +&output_nml + filetype = 4 + output_time_unit = 1 ! 1: seconds + file_interval = 'PT3600S' + output_interval = 'PT3600S' + output_start = '#OUTPUT_START#' + output_end = '#OUTPUT_END#' + steps_per_file = 1 + taxis_tunit = 2 + mode = 1 ! 1: forecast mode (relative t-axis), 2: climate mode (absolute t-axis) + include_last = .true. + output_filename = 'idfrf' ! file name base + filename_format = 'output/<output_filename><ddhhmmss><levtype>' + remap = 1, + reg_def_mode = 1 + north_pole = -170.0,40.0 + reg_lon_def = -7.5, 0.02, 5.5 + reg_lat_def = -6.3, 0.02, 8.0 + pl_varlist = 'geopot','temp','THETA_V','U','V','W','RH','TKE','QV','QC','QR','RHO' + p_levels = 95000., 85000., 50000., 25000., + output_grid = .false. +/ + + + ! ----------------------------------------------- ! + ! --- ICON-D2: output fields - regular grid at model levels --- ! + ! ----------------------------------------------- +&output_nml + filetype = 4 + output_time_unit = 1 ! 1: seconds + file_interval = 'PT3600S' + output_interval = 'PT3600S' + output_start = '#OUTPUT_START#' + output_end = '#OUTPUT_END#' + steps_per_file = 1 + taxis_tunit = 2 + mode = 1 ! 1: forecast mode (relative t-axis), 2: climate mode (absolute t-axis) + include_last = .true. + output_filename = 'idfrf' ! file name base + filename_format = 'output/<output_filename><ddhhmmss><levtype>' + remap = 1, + reg_def_mode = 1 + north_pole = -170.0,40.0 + reg_lon_def = -7.5, 0.02, 5.5 + reg_lat_def = -6.3, 0.02, 8.0 + ml_varlist = 'CAPE_ML', 'CIN_ML','tqc','tqv','tqr','tqi','tqs','tqg','tqh','pres_msl','pres_sfc','T_2m','U_10m','V_10m','TOT_PREC','CLDEPTH','CLCT_MOD','HZEROCL','TMIN_2M','TMAX_2M','dbz_cmax', !,'group:pbl_vars' + output_grid = .false. +/ + + + ! ----------------------------------------------- ! + ! --- ICON-D2: PSP output fields - regular grid at model levels --- ! + ! ----------------------------------------------- +&output_nml + filetype = 4 + output_time_unit = 1 ! 1: seconds + file_interval = 'PT3600S' + output_interval = 'PT3600S' + output_start = '#OUTPUT_START#' + output_end = '#OUTPUT_END#' + steps_per_file = 1 + taxis_tunit = 2 + mode = 1 ! 1: forecast mode (relative t-axis), 2: climate mode (absolute t-axis) + include_last = .true. + output_filename = 'idfrf' ! file name base + filename_format = 'output/<output_filename><ddhhmmss><levtype>_psp' + remap = 1, + reg_def_mode = 1 + north_pole = -170.0,40.0 + reg_lon_def = -7.5, 0.02, 5.5 + reg_lat_def = -6.3, 0.02, 8.0 +! ml_varlist = 'group:psp', + output_grid = .false. +/ + + diff --git a/templates/real-from-d2-ana/prepare_namelist.py b/templates/real-from-d2-ana/prepare_namelist.py index 48c4d8a38842e4144313c5db616ac75fa767b21f..ffb8d7d56d57d5b03ac32202099a59d270fd6b3c 100644 --- a/templates/real-from-d2-ana/prepare_namelist.py +++ b/templates/real-from-d2-ana/prepare_namelist.py @@ -35,9 +35,11 @@ Chunk_START_DATE = datetime(year=int(START_YEAR), month=int(START_MONTH), day=in Chunk_END_DATE = datetime(year=int(END_YEAR), month=int(END_MONTH), day=int(END_DAY), hour=int(END_HOUR)) # Read first-guess and analysis filenames from files: -first_guess_filename = (RUNDIR / f"fc_R19B07.{(Chunk_START_DATE-timedelta(minutes=5)).strftime('%Y%m%d%H%M')}00_an.{MEMBER[1:]}") -analysis_filename = (RUNDIR / f"an_R19B07.{Chunk_START_DATE.strftime('%Y%m%d%H%M')}00_an.{MEMBER[1:]}") -analysis_inc_filename = (RUNDIR / f"an_R19B07.{Chunk_START_DATE.strftime('%Y%m%d%H%M')}00_inc.{MEMBER[1:]}") +first_guess_filename = ( + RUNDIR / f"fc_R19B07.{(Chunk_START_DATE-timedelta(minutes=5)).strftime('%Y%m%d%H%M')}00_an.{MEMBER[1:]}" +) +analysis_filename = RUNDIR / f"an_R19B07.{Chunk_START_DATE.strftime('%Y%m%d%H%M')}00_an.{MEMBER[1:]}" +analysis_inc_filename = RUNDIR / f"an_R19B07.{Chunk_START_DATE.strftime('%Y%m%d%H%M')}00_inc.{MEMBER[1:]}" # Read custom namelist parameters from configuration atmosphere_namelist_string = """ @@ -53,29 +55,38 @@ checkpoint_time = int((Chunk_END_DATE - Chunk_START_DATE).total_seconds()) # TODO: Is that really necessary? # Add 10 minutes to allow the model to write the restarts -#Chunk_END_DATE = Chunk_END_DATE + timedelta(minutes=10) +# Chunk_END_DATE = Chunk_END_DATE + timedelta(minutes=10) atmosphere_namelist_replacements = { - "time_nml": { - "dt_restart": checkpoint_time - }, - "io_nml": { - "dt_checkpoint": checkpoint_time - }, - + "time_nml": {"dt_restart": checkpoint_time}, + "io_nml": {"dt_checkpoint": checkpoint_time}, "grid_nml": { "dynamics_grid_filename": "%simulation.dynamics_grid_filename%", "radiation_grid_filename": "%simulation.radiation_grid_filename%", }, - "extpar_nml": { "extpar_filename": "%simulation.external_parameters_filename%", }, - "initicon_nml": { "dwdfg_filename": first_guess_filename, - "dwdana_filename": analysis_filename, - } + "dwdana_filename": analysis_inc_filename, + }, + "limarea_nml": { + "latbc_filename": "./icbc/M031/latbc_<dddhh>.grib", + "latbc_boundary_grid": "icon_grid_0047_R19B07_L_lbc.nc", + }, + "nwp_phy_nml": { + "psp_rnd_seed": int(MEMBER[1:]), + "psp_apply_ddt_core": '.False.', # True if vertical wind perturbations should be applied at the explicit dynamical core timestep + "inwp_gscp": 4 , # 1: default, 2: graupel scheme for convection-permitting scales + "ccn_type_gscp4": 8, # CB new namelist parameter: + "ccn_type_gscp5": 8, # CB new namelist parameter: + # 6: 100 maritime, 7: 500 intermediate, 8: 1700 continental, 9: 3200 polluted continental + "cloudnue_value": 0, # CB new namelist parameter for shape parameter (nu) of CDSD: + # -> cloud_cosmo5 (mu=1/3): 0 (REF), 1, 2, 4, 8 + # -> cloud_nue1mue1 (mu=1): 1 (REF), 2, 4, 8 + }, + } master_namelist_replacements = { @@ -85,7 +96,7 @@ master_namelist_replacements = { "master_time_control_nml": { "experimentStartDate": Chunk_START_DATE.strftime(date_format), "experimentStopDate": Chunk_END_DATE.strftime(date_format), - } + }, } @@ -142,7 +153,7 @@ def main(): print("Patched atmosphere namelist:") print(atmosphere_namelist) - atmosphere_output_namelist = (RUNDIR / "icon_atmosphere.namelist") + atmosphere_output_namelist = RUNDIR / "icon_atmosphere.namelist" f90nml.write(nml=atmosphere_namelist, nml_path=atmosphere_output_namelist.as_posix(), force=True) master_namelist = f90nml.read(MASTER_NAMELIST_PATH.as_posix()) @@ -156,10 +167,9 @@ def main(): master_namelist.patch(master_custom_namelist) print("Patched master namelist:") print(master_namelist) - master_output_namelist = (RUNDIR / "icon_master.namelist") + master_output_namelist = RUNDIR / "icon_master.namelist" f90nml.write(nml=master_namelist, nml_path=master_output_namelist.as_posix(), force=True) -if __name__ == '__main__': +if __name__ == "__main__": main() -