diff --git a/analysis_only.py b/analysis_only.py index 840e603c24535935856591e3850aa12d270e50ba..648d2c8c91d83a07bc7e38583016d81cb3b0dcfe 100755 --- a/analysis_only.py +++ b/analysis_only.py @@ -6,12 +6,12 @@ import datetime as dt from dartwrf.workflows import WorkFlows -prior_path_exp = '/users/students/lehre/advDA_s2023/data/sample_ensemble/' +prior_path_exp = '/lehre/advDA_s2023/data/sample_ensemble/' prior_init_time = dt.datetime(2008,7,30,12) prior_valid_time = dt.datetime(2008,7,30,13) assim_time = prior_valid_time -w = WorkFlows(exp_config='exp_template.py', server_config='srvx1.py') +w = WorkFlows(exp_config='exp_template.py', server_config='teaching.py') id = w.assimilate(assim_time, prior_init_time, prior_valid_time, prior_path_exp) diff --git a/config/exp_template.py b/config/exp_template.py index 07247d7bc7265df4acae16e4800290dedc84b9b2..1aaa091a4303f6d1d2ba8424de1ed56ac9b2fe86 100755 --- a/config/exp_template.py +++ b/config/exp_template.py @@ -5,13 +5,13 @@ Copy and customize it as you wish. from dartwrf.utils import Experiment exp = Experiment() -exp.expname = "exp_test" +exp.expname = "exp_2" exp.model_dx = 2000 -exp.n_ens = 4 +exp.n_ens = 40 exp.do_quality_control = False # Path to the nature run. From there, observations are generated. Wildcards "*" are allowed in this path. -exp.nature_wrfout_pattern = '/users/students/lehre/advDA_s2023/data/sample_nature/wrfout_d01_%Y-%m-%d_%H:%M:%S' +exp.nature_wrfout_pattern = '/lehre/advDA_s2023/data/sample_nature/wrfout_d01_%Y-%m-%d_%H:%M:%S' # Path to sounding profiles for ensemble initialization. Not used in the Advanced DA course. exp.input_profile = '/mnt/jetfs/home/lkugler/data/initial_profiles/wrf/ens/2022-03-31/raso.fc.<iens>.wrfprof' @@ -31,7 +31,7 @@ exp.dart_nml = {'&assim_tools_nml': output_members='.true.', output_mean='.true.', output_sd='.true.', - stages_to_write='output', + stages_to_write=['output', 'preassim', 'postassim'], ), '&quality_control_nml': dict(outlier_threshold='-1', diff --git a/config/original_exp_template.py b/config/original_exp_template.py new file mode 100755 index 0000000000000000000000000000000000000000..9fb12c4e45335746aa699dadde52f072dc7e1edc --- /dev/null +++ b/config/original_exp_template.py @@ -0,0 +1,178 @@ +""" +This configuration file is designed for the course Advanced Data Assimilation at the University of Vienna. +Copy and customize it as you wish. +""" +from dartwrf.utils import Experiment + +exp = Experiment() +exp.expname = "exp_test11" +exp.model_dx = 2000 +exp.n_ens = 10 +exp.do_quality_control = False + +# Path to the nature run. From there, observations are generated. Wildcards "*" are allowed in this path. +exp.nature_wrfout_pattern = '/lehre/advDA_s2023/data/sample_nature/wrfout_d01_%Y-%m-%d_%H:%M:%S' + +# Path to sounding profiles for ensemble initialization. Not used in the Advanced DA course. +exp.input_profile = '/mnt/jetfs/home/lkugler/data/initial_profiles/wrf/ens/2022-03-31/raso.fc.<iens>.wrfprof' + +# Configuration of DART. For details see the DART or DART-WRF documentation. +exp.dart_nml = {'&assim_tools_nml': + dict(filter_kind='1', + sampling_error_correction='.true.', + ), + '&filter_nml': + dict( ens_size=exp.n_ens, + num_output_state_members=exp.n_ens, + num_output_obs_members=exp.n_ens, + inf_flavor=['0', '4'], + inf_initial=[1.04, 0.5], + inf_initial_from_restart='.false.', + output_members='.true.', + output_mean='.true.', + output_sd='.true.', + stages_to_write='output', + ), + '&quality_control_nml': + dict(outlier_threshold='-1', + ), + '&obs_def_radar_mod_nml': + dict(apply_ref_limit_to_obs = '.true.', + reflectivity_limit_obs = 5.0, + lowest_reflectivity_obs = 5.0, + apply_ref_limit_to_fwd_op = '.true.', + reflectivity_limit_fwd_op = 5.0, + lowest_reflectivity_fwd_op = 5.0, + microphysics_type = '5', + ), + '&location_nml': + dict(horiz_dist_only='.false.', + ), + '&model_nml': + dict(wrf_state_variables = + [['U', 'QTY_U_WIND_COMPONENT', 'TYPE_U', 'UPDATE','999',], + ['V', 'QTY_V_WIND_COMPONENT', 'TYPE_V', 'UPDATE','999',], + ['W', 'QTY_VERTICAL_VELOCITY', 'TYPE_W', 'UPDATE','999',], + ['PH', 'QTY_GEOPOTENTIAL_HEIGHT', 'TYPE_GZ', 'UPDATE','999',], + ['THM', 'QTY_POTENTIAL_TEMPERATURE','TYPE_T', 'UPDATE','999',], + ['MU', 'QTY_PRESSURE', 'TYPE_MU', 'UPDATE','999',], + + ['QVAPOR','QTY_VAPOR_MIXING_RATIO', 'TYPE_QV', 'UPDATE','999',], + ['QCLOUD','QTY_CLOUDWATER_MIXING_RATIO','TYPE_QC', 'UPDATE','999',], + ['QICE', 'QTY_ICE_MIXING_RATIO', 'TYPE_QI', 'UPDATE','999',], + # ['QRAIN','QTY_RAINWATER_MIXING_RATIO','TYPE_QR', 'UPDATE','999',], + # ['QSNOW','QTY_SNOW_MIXING_RATIO','TYPE_QS', 'UPDATE','999',], + # ['QGRAUP','QTY_GRAUPEL_MIXING_RATIO','TYPE_QG', 'UPDATE','999',], + + ['CLDFRA','QTY_CLOUD_FRACTION', 'TYPE_CFRAC','UPDATE','999',], + ['PSFC', 'QTY_SURFACE_PRESSURE', 'TYPE_PSFC', 'UPDATE','999',], + ['T2', 'QTY_2M_TEMPERATURE', 'TYPE_T', 'UPDATE','999',], + ['TSK', 'QTY_SKIN_TEMPERATURE', 'TYPE_T', 'UPDATE','999',], + ['REFL_10CM','QTY_RADAR_REFLECTIVITY','TYPE_REFL', 'UPDATE','999',]], + + wrf_state_bounds = + [['QVAPOR','0.0','NULL','CLAMP'], + ['QCLOUD','0.0','NULL','CLAMP'], + ['QICE','0.0','NULL','CLAMP'], + ['CLDFRA','0.0','1.0','CLAMP'], + + # ['QRAIN','0.0','NULL','CLAMP'], + # ['QSNOW','0.0','NULL','CLAMP'], + # ['QGRAUP','0.0','NULL','CLAMP'], + ], + ), + '&ensemble_manager_nml': + dict(layout = 1, + tasks_per_node = 12, + communication_configuration = 1, + ), + } + + + +# n_obs is the number of observations +# currently allowed values are 22500 for one observation approximately every 2km; 5776 for 4km, and 961 for 10km resolution; 256 for 20km; 121 for 30km +# Note for radar, n_obs is the number of observations at each observation height level + +# oeinf is the observation inflation factor (1 means no inflation) +oeinf = 1 + +vis = dict(var_name='VIS 0.6µm', unit='[1]', + kind='MSG_4_SEVIRI_BDRF', sat_channel=1, + n_obs=961, obs_locations='square_array_evenly_on_grid', + # n_obs=1, obs_locations=[(44.141, -0.99)], + error_generate=0.03, error_assimilate=0.03*oeinf, + loc_horiz_km=20, + #height=4000, loc_vert_km=3 + ) + +wv73 = dict(var_name='Brightness temperature WV 7.3µm', unit='[K]', + kind='MSG_4_SEVIRI_TB', sat_channel=6, + n_obs=961, obs_locations='square_array_evenly_on_grid', + error_generate=1, error_assimilate=1*oeinf, + loc_horiz_km=20, + #height=7000, loc_vert_km=3 + ) + +wv62 = dict(var_name='Brightness temperature WV 6.2µm', unit='[K]', + kind='MSG_4_SEVIRI_TB', sat_channel=5, + n_obs=961, obs_locations='square_array_evenly_on_grid', + # n_obs=1, obs_locations=[(44.141, -0.99)], + error_generate=1, error_assimilate=1*oeinf, + loc_horiz_km=20, + #height=10000, loc_vert_km=3 + ) + +ir108 = dict(var_name='Brightness temperature IR 10.8µm', unit='[K]', + kind='MSG_4_SEVIRI_TB', sat_channel=9, + n_obs=1, obs_locations='square_array_evenly_on_grid', + error_generate=5., error_assimilate=10., + loc_horiz_km=32) + +radar = dict(var_name='Radar reflectivity', unit='[dBz]', + kind='RADAR_REFLECTIVITY', + n_obs=961, obs_locations='square_array_evenly_on_grid', + # n_obs=2, obs_locations=[(45.332, 0.4735), (45.332, 0.53)], + heights=range(2000, 14001, 2000), + error_generate=2.5, error_assimilate=2.5*oeinf, + loc_horiz_km=20, loc_vert_km=3) + +t = dict(var_name='Temperature', unit='[K]', + kind='RADIOSONDE_TEMPERATURE', + #n_obs=22500, obs_locations='square_array_evenly_on_grid', + n_obs=1, obs_locations=[(45., 0.)], + error_generate=0.2, error_assimilate=0.2, + heights=[1000,], #range(1000, 17001, 2000), + loc_horiz_km=50, loc_vert_km=2.5) + +q = dict(var_name='Specific humidity', unit='[kg/kg]', + kind='RADIOSONDE_SPECIFIC_HUMIDITY', n_obs=1, + error_generate=0., error_assimilate=5*1e-5, + heights=[1000], #range(1000, 17001, 2000), + loc_horiz_km=50, loc_vert_km=2.5) + +t2m = dict(var_name='SYNOP Temperature', unit='[K]', + kind='SYNOP_TEMPERATURE', + n_obs=256, obs_locations='square_array_evenly_on_grid', + error_generate=0.3, error_assimilate=0.3, + loc_horiz_km=10, loc_vert_km=2) + +psfc = dict(var_name='SYNOP Pressure', unit='[Pa]', + kind='SYNOP_SURFACE_PRESSURE', n_obs=1, + error_generate=50., error_assimilate=100., + loc_horiz_km=32, loc_vert_km=5) + +exp.observations = [t] + +# the variables which will be replaced in the WRF initial conditions file +exp.update_vars = ['U', 'V', 'W', 'THM', 'PH', 'MU', 'QVAPOR', 'QCLOUD', 'QICE', 'PSFC'] +#exp.update_vars = ['U', 'V', 'W', 'THM', 'PH', 'MU', 'QVAPOR', 'PSFC'] +#exp.update_vars = ['U', 'V', 'W', 'THM', 'PH', 'MU', 'QVAPOR', 'QCLOUD', 'QICE', 'QRAIN', 'QSNOW', 'QGRAUP', 'PSFC'] +#exp.update_vars = ['QVAPOR', 'QCLOUD', 'QICE', 'PSFC'] + +exp.use_existing_obsseq = False +# exp.use_existing_obsseq='/jetfs/home/lkugler/data/sim_archive/exp_v1.22_P2_rr_WV73_obs10_loc20_oe1/obs_seq_out/%Y-%m-%d_%H:%M_obs_seq.out' + + + + diff --git a/config/teaching.py b/config/teaching.py new file mode 100644 index 0000000000000000000000000000000000000000..ae45fc058670f42c22e28e6b296b7c1ffa824f7c --- /dev/null +++ b/config/teaching.py @@ -0,0 +1,35 @@ +"""Cluster configuration file, see docstring of ClusterConfig class in dartwrf/utils.py for details""" +from dartwrf import utils +from dartwrf.exp_config import exp + +cluster = utils.ClusterConfig(exp) +cluster.name = 'teaching' +cluster.max_nproc = 6 +cluster.use_slurm = False + +# binaries +cluster.python = 'python' +cluster.python_verif = '/users/staff/lkugler/miniconda3/bin/python' +cluster.ncks = '/headless/envs/rttov/bin/ncks' +cluster.ideal = '' #/jetfs/home/lkugler/bin/ideal-v4.3_v1.22.exe' +cluster.wrfexe = '' #/jetfs/home/lkugler/bin/wrf-v4.3_v1.22.exe' +cluster.dart_modules = 'pip install scipy; ' +cluster.wrf_modules = '' + +# paths for data output +cluster.wrf_rundir_base = utils.userhome+'/AdvDA/run_WRF/' # path for temporary files +cluster.dart_rundir_base = utils.userhome+'/AdvDA/run_DART/' # path for temporary files +cluster.archive_base = utils.userhome+'/data/sim_archive/' + +# paths used as input +cluster.srcdir = '/users/staff/lkugler/AdvDA23/DART/WRF-4.3/run' +cluster.dart_srcdir = '/headless/envs/DART/models/wrf/work' +cluster.rttov_srcdir = '/headless/envs/rttov/rtcoef_rttov13/' +cluster.dartwrf_dir = utils.userhome+'/AdvDA/DART-WRF/' +cluster.geo_em_for_WRF_ideal = '/lehre/advDA_s2023/data/geo_em.d01.nc' + +# templates/run scripts +cluster.namelist = cluster.dartwrf_dir+'/../templates/namelist.input' +cluster.run_WRF = cluster.dartwrf_dir+'/run_ens.jet.sh' + +cluster.slurm_cfg = None diff --git a/dartwrf/exp_config.py b/dartwrf/exp_config.py index 58e71ed1b177b6febad8ad637033066a0816b91f..1aaa091a4303f6d1d2ba8424de1ed56ac9b2fe86 100644 --- a/dartwrf/exp_config.py +++ b/dartwrf/exp_config.py @@ -1,43 +1,52 @@ -from dartwrf import utils - -exp = utils.Experiment() -exp.expname = "template_experiment" +""" +This configuration file is designed for the course Advanced Data Assimilation at the University of Vienna. +Copy and customize it as you wish. +""" +from dartwrf.utils import Experiment + +exp = Experiment() +exp.expname = "exp_2" exp.model_dx = 2000 exp.n_ens = 40 -exp.superob_km = False # False or int (spatial averaging of observations, unit: km) -exp.do_quality_control = False # bool - -# Use existing observations (path to obs_seq.out) or generate observations (False) -exp.use_existing_obsseq = False -#exp.use_existing_obsseq = '/users/students/lehre/advDA_s2023/dartwrf_tutorial/very_cold_observation.out' +exp.do_quality_control = False -# path from where observations can be generated -exp.nature_wrfout_pattern = '/jetfs/home/lkugler/data/sim_archive/exp_v1.19_P3_wbub7_nat/*/1/wrfout_d01_%Y-%m-%d_%H:%M:%S' +# Path to the nature run. From there, observations are generated. Wildcards "*" are allowed in this path. +exp.nature_wrfout_pattern = '/lehre/advDA_s2023/data/sample_nature/wrfout_d01_%Y-%m-%d_%H:%M:%S' -# for initialization profiles +# Path to sounding profiles for ensemble initialization. Not used in the Advanced DA course. exp.input_profile = '/mnt/jetfs/home/lkugler/data/initial_profiles/wrf/ens/2022-03-31/raso.fc.<iens>.wrfprof' - +# Configuration of DART. For details see the DART or DART-WRF documentation. exp.dart_nml = {'&assim_tools_nml': dict(filter_kind='1', - sampling_error_correction='.false.', - # obs_impact_filename='/jetfs/home/lkugler/DART-WRF/templates/impactfactor_T.txt', + sampling_error_correction='.true.', ), '&filter_nml': - dict(ens_size=exp.n_ens, + dict( ens_size=exp.n_ens, num_output_state_members=exp.n_ens, num_output_obs_members=exp.n_ens, - inf_flavor=['0', '0'], + inf_flavor=['0', '4'], + inf_initial=[1.04, 0.5], + inf_initial_from_restart='.false.', output_members='.true.', output_mean='.true.', output_sd='.true.', - stages_to_write='output', + stages_to_write=['output', 'preassim', 'postassim'], ), - '&quality_control_nml': + '&quality_control_nml': dict(outlier_threshold='-1', ), + '&obs_def_radar_mod_nml': + dict(apply_ref_limit_to_obs = '.true.', + reflectivity_limit_obs = 5.0, + lowest_reflectivity_obs = 5.0, + apply_ref_limit_to_fwd_op = '.true.', + reflectivity_limit_fwd_op = 5.0, + lowest_reflectivity_fwd_op = 5.0, + microphysics_type = '5', + ), '&location_nml': - dict(horiz_dist_only='.true.', + dict(horiz_dist_only='.false.', ), '&model_nml': dict(wrf_state_variables = @@ -47,38 +56,72 @@ exp.dart_nml = {'&assim_tools_nml': ['PH', 'QTY_GEOPOTENTIAL_HEIGHT', 'TYPE_GZ', 'UPDATE','999',], ['THM', 'QTY_POTENTIAL_TEMPERATURE','TYPE_T', 'UPDATE','999',], ['MU', 'QTY_PRESSURE', 'TYPE_MU', 'UPDATE','999',], + ['QVAPOR','QTY_VAPOR_MIXING_RATIO', 'TYPE_QV', 'UPDATE','999',], - ['QICE', 'QTY_ICE_MIXING_RATIO', 'TYPE_QI', 'UPDATE','999',], ['QCLOUD','QTY_CLOUDWATER_MIXING_RATIO','TYPE_QC', 'UPDATE','999',], + ['QICE', 'QTY_ICE_MIXING_RATIO', 'TYPE_QI', 'UPDATE','999',], + # ['QRAIN','QTY_RAINWATER_MIXING_RATIO','TYPE_QR', 'UPDATE','999',], + # ['QSNOW','QTY_SNOW_MIXING_RATIO','TYPE_QS', 'UPDATE','999',], + # ['QGRAUP','QTY_GRAUPEL_MIXING_RATIO','TYPE_QG', 'UPDATE','999',], + ['CLDFRA','QTY_CLOUD_FRACTION', 'TYPE_CFRAC','UPDATE','999',], ['PSFC', 'QTY_SURFACE_PRESSURE', 'TYPE_PSFC', 'UPDATE','999',], ['T2', 'QTY_2M_TEMPERATURE', 'TYPE_T', 'UPDATE','999',], ['TSK', 'QTY_SKIN_TEMPERATURE', 'TYPE_T', 'UPDATE','999',], - ['REFL_10CM','QTY_RADAR_REFLECTIVITY','TYPE_REFL', 'UPDATE','999',]]), + ['REFL_10CM','QTY_RADAR_REFLECTIVITY','TYPE_REFL', 'UPDATE','999',]], + + wrf_state_bounds = + [['QVAPOR','0.0','NULL','CLAMP'], + ['QCLOUD','0.0','NULL','CLAMP'], + ['QICE','0.0','NULL','CLAMP'], + ['CLDFRA','0.0','1.0','CLAMP'], + + # ['QRAIN','0.0','NULL','CLAMP'], + # ['QSNOW','0.0','NULL','CLAMP'], + # ['QGRAUP','0.0','NULL','CLAMP'], + ], + ), + '&ensemble_manager_nml': + dict(layout = 1, + tasks_per_node = 12, + communication_configuration = 1, + ), } -# n_obs can be 22500: 2km, 5776: 4km, 121: 30km, 256:16x16 (20km); 961: 10km resoltn -# if radar: then n_obs is for each observation height level + +# n_obs is the number of observations +# currently allowed values are 22500 for one observation approximately every 2km; 5776 for 4km, and 961 for 10km resolution; 256 for 20km; 121 for 30km +# Note for radar, n_obs is the number of observations at each observation height level + +# oeinf is the observation inflation factor (1 means no inflation) +oeinf = 1 vis = dict(var_name='VIS 0.6µm', unit='[1]', kind='MSG_4_SEVIRI_BDRF', sat_channel=1, - n_obs=256, obs_locations='square_array_evenly_on_grid', + n_obs=961, obs_locations='square_array_evenly_on_grid', # n_obs=1, obs_locations=[(44.141, -0.99)], - error_generate=0.03, error_assimilate=0.03, - loc_horiz_km=10) - -wv62 = dict(var_name='Brightness temperature WV 6.2µm', unit='[K]', - kind='MSG_4_SEVIRI_TB', sat_channel=5, - n_obs=961, obs_locations='square_array_evenly_on_grid', - error_generate=1., error_assimilate=2., - loc_horiz_km=20) + error_generate=0.03, error_assimilate=0.03*oeinf, + loc_horiz_km=20, + #height=4000, loc_vert_km=3 + ) wv73 = dict(var_name='Brightness temperature WV 7.3µm', unit='[K]', kind='MSG_4_SEVIRI_TB', sat_channel=6, n_obs=961, obs_locations='square_array_evenly_on_grid', - error_generate=1., error_assimilate=3., - loc_horiz_km=20) + error_generate=1, error_assimilate=1*oeinf, + loc_horiz_km=20, + #height=7000, loc_vert_km=3 + ) + +wv62 = dict(var_name='Brightness temperature WV 6.2µm', unit='[K]', + kind='MSG_4_SEVIRI_TB', sat_channel=5, + n_obs=961, obs_locations='square_array_evenly_on_grid', + # n_obs=1, obs_locations=[(44.141, -0.99)], + error_generate=1, error_assimilate=1*oeinf, + loc_horiz_km=20, + #height=10000, loc_vert_km=3 + ) ir108 = dict(var_name='Brightness temperature IR 10.8µm', unit='[K]', kind='MSG_4_SEVIRI_TB', sat_channel=9, @@ -88,10 +131,11 @@ ir108 = dict(var_name='Brightness temperature IR 10.8µm', unit='[K]', radar = dict(var_name='Radar reflectivity', unit='[dBz]', kind='RADAR_REFLECTIVITY', - n_obs=5776, obs_locations='square_array_evenly_on_grid', - error_generate=2.5, error_assimilate=2.5, + n_obs=961, obs_locations='square_array_evenly_on_grid', + # n_obs=2, obs_locations=[(45.332, 0.4735), (45.332, 0.53)], heights=range(2000, 14001, 2000), - loc_horiz_km=20, loc_vert_km=2.5) + error_generate=2.5, error_assimilate=2.5*oeinf, + loc_horiz_km=20, loc_vert_km=3) t = dict(var_name='Temperature', unit='[K]', kind='RADIOSONDE_TEMPERATURE', @@ -102,25 +146,33 @@ t = dict(var_name='Temperature', unit='[K]', loc_horiz_km=50, loc_vert_km=2.5) q = dict(var_name='Specific humidity', unit='[kg/kg]', - kind='RADIOSONDE_SPECIFIC_HUMIDITY', - n_obs=961, obs_locations='square_array_evenly_on_grid', + kind='RADIOSONDE_SPECIFIC_HUMIDITY', n_obs=1, error_generate=0., error_assimilate=5*1e-5, heights=[1000], #range(1000, 17001, 2000), - loc_horiz_km=0.1, loc_vert_km=2.5) + loc_horiz_km=50, loc_vert_km=2.5) t2m = dict(var_name='SYNOP Temperature', unit='[K]', kind='SYNOP_TEMPERATURE', - n_obs=961, obs_locations='square_array_evenly_on_grid', - error_generate=0.1, error_assimilate=0.1, - loc_horiz_km=40, loc_vert_km=2.5) + n_obs=256, obs_locations='square_array_evenly_on_grid', + error_generate=0.3, error_assimilate=0.3, + loc_horiz_km=10, loc_vert_km=2) psfc = dict(var_name='SYNOP Pressure', unit='[Pa]', - kind='SYNOP_SURFACE_PRESSURE', - n_obs=961, obs_locations='square_array_evenly_on_grid', + kind='SYNOP_SURFACE_PRESSURE', n_obs=1, error_generate=50., error_assimilate=100., loc_horiz_km=32, loc_vert_km=5) -exp.observations = [vis] +exp.observations = [t] + +# the variables which will be replaced in the WRF initial conditions file exp.update_vars = ['U', 'V', 'W', 'THM', 'PH', 'MU', 'QVAPOR', 'QCLOUD', 'QICE', 'PSFC'] +#exp.update_vars = ['U', 'V', 'W', 'THM', 'PH', 'MU', 'QVAPOR', 'PSFC'] +#exp.update_vars = ['U', 'V', 'W', 'THM', 'PH', 'MU', 'QVAPOR', 'QCLOUD', 'QICE', 'QRAIN', 'QSNOW', 'QGRAUP', 'PSFC'] +#exp.update_vars = ['QVAPOR', 'QCLOUD', 'QICE', 'PSFC'] + +exp.use_existing_obsseq = False +# exp.use_existing_obsseq='/jetfs/home/lkugler/data/sim_archive/exp_v1.22_P2_rr_WV73_obs10_loc20_oe1/obs_seq_out/%Y-%m-%d_%H:%M_obs_seq.out' + + diff --git a/dartwrf/server_config.py b/dartwrf/server_config.py index bd9c6b174c46f698408e0759df8241ef430fad5d..ae45fc058670f42c22e28e6b296b7c1ffa824f7c 100755 --- a/dartwrf/server_config.py +++ b/dartwrf/server_config.py @@ -3,39 +3,33 @@ from dartwrf import utils from dartwrf.exp_config import exp cluster = utils.ClusterConfig(exp) -cluster.name = 'jet' -cluster.max_nproc = 12 -cluster.use_slurm = True -cluster.size_jobarray = 40 +cluster.name = 'teaching' +cluster.max_nproc = 6 +cluster.use_slurm = False # binaries -cluster.python = '/jetfs/home/lkugler/miniconda3/envs/DART/bin/python' -cluster.python_verif = '/jetfs/home/lkugler/miniconda3/envs/enstools/bin/python' -cluster.ncks = '/jetfs/spack/opt/spack/linux-rhel8-skylake_avx512/intel-2021.7.1/nco-5.1.0-izrhxv24jqco5epjhf5ledsqwanojc5m/bin/ncks' -cluster.ideal = '/jetfs/home/lkugler/bin/ideal-v4.3_v1.22.exe' -cluster.wrfexe = '/jetfs/home/lkugler/bin/wrf-v4.3_v1.22_ifort_20230413.exe' -cluster.dart_modules = 'module purge; module load netcdf-fortran/4.5.3-gcc-8.5.0-qsqbozc;' -cluster.wrf_modules = """module purge; module load intel-oneapi-compilers/2022.2.1-zkofgc5 hdf5/1.12.2-intel-2021.7.1-w5sw2dq netcdf-fortran/4.5.3-intel-2021.7.1-27ldrnt netcdf-c/4.7.4-intel-2021.7.1-lnfs5zz intel-oneapi-mpi/2021.7.1-intel-2021.7.1-pt3unoz -export HDF5=/jetfs/spack/opt/spack/linux-rhel8-skylake_avx512/intel-2021.7.1/hdf5-1.12.2-w5sw2dqpcq2orlmeowleamoxr65dhhdc -""" +cluster.python = 'python' +cluster.python_verif = '/users/staff/lkugler/miniconda3/bin/python' +cluster.ncks = '/headless/envs/rttov/bin/ncks' +cluster.ideal = '' #/jetfs/home/lkugler/bin/ideal-v4.3_v1.22.exe' +cluster.wrfexe = '' #/jetfs/home/lkugler/bin/wrf-v4.3_v1.22.exe' +cluster.dart_modules = 'pip install scipy; ' +cluster.wrf_modules = '' # paths for data output -cluster.wrf_rundir_base = '/jetfs/home/lkugler/data/run_WRF/' # path for temporary files -cluster.dart_rundir_base = '/jetfs/home/lkugler/data/run_DART/' # path for temporary files -cluster.archive_base = '/jetfs/home/lkugler/data/sim_archive/' +cluster.wrf_rundir_base = utils.userhome+'/AdvDA/run_WRF/' # path for temporary files +cluster.dart_rundir_base = utils.userhome+'/AdvDA/run_DART/' # path for temporary files +cluster.archive_base = utils.userhome+'/data/sim_archive/' # paths used as input -cluster.srcdir = '/jetfs/home/lkugler/data/compile/WRF-4.3/run' -cluster.dart_srcdir = '/jetfs/home/lkugler/data/compile/DART/DART-10.5.3/models/wrf/work' -cluster.rttov_srcdir = '/jetfs/home/lkugler/data/compile/RTTOV13/rtcoef_rttov13/' -cluster.dartwrf_dir = '/jetfs/home/lkugler/DART-WRF/' +cluster.srcdir = '/users/staff/lkugler/AdvDA23/DART/WRF-4.3/run' +cluster.dart_srcdir = '/headless/envs/DART/models/wrf/work' +cluster.rttov_srcdir = '/headless/envs/rttov/rtcoef_rttov13/' +cluster.dartwrf_dir = utils.userhome+'/AdvDA/DART-WRF/' +cluster.geo_em_for_WRF_ideal = '/lehre/advDA_s2023/data/geo_em.d01.nc' -# other inputs -cluster.geo_em_for_WRF_ideal = '/jetfs/home/lkugler/data/geo_em.d01.nc' -cluster.obs_impact_filename = cluster.dartwrf_dir+'/templates/impactfactor_T.txt' -cluster.namelist = cluster.dartwrf_dir+'/templates/namelist.input' -cluster.run_WRF = '/jetfs/home/lkugler/DART-WRF/dartwrf/run_ens.jet.sh' +# templates/run scripts +cluster.namelist = cluster.dartwrf_dir+'/../templates/namelist.input' +cluster.run_WRF = cluster.dartwrf_dir+'/run_ens.jet.sh' -cluster.slurm_cfg = {"account": "lkugler", "partition": "compute", #"nodelist": "jet07", - "ntasks": "1", "ntasks-per-core": "1", "mem": "50G", - "mail-type": "FAIL", "mail-user": "lukas.kugler@univie.ac.at"} +cluster.slurm_cfg = None