diff --git a/config/cfg.py b/config/cfg.py index acae00f59829aab718aee2a18c87710c700da4ee..cf813a24f583564d551dd3b926e38b8a24fb1428 100755 --- a/config/cfg.py +++ b/config/cfg.py @@ -7,7 +7,7 @@ class ExperimentConfiguration(object): pass exp = ExperimentConfiguration() -exp.expname = "exp_v1.19_wb-random_Radar_zero" +exp.expname = "exp_v1.19_Pwbub-1_WV_obs20_loc10" exp.model_dx = 2000 exp.n_ens = 40 exp.n_nodes = 10 @@ -22,10 +22,10 @@ exp.input_profile = '/home/fs71386/lkugler/wrf_profiles/data/wrf/ens/2021-05-04/ # localize vertically, if it has a vertical position # needs a horizontal scale too, to calculate the vertical normalization # since you can not specify different vertical localizations for diff. variables -exp.cov_loc_vert_km_horiz_km = (1, 30) +exp.cov_loc_vert_km_horiz_km = (1, 10) #exp.superob_km = 12 -n_obs = 961 #5776: 4km, 121: 30km, 256:16x16 (20km); 961: 10km resoltn # radar: n_obs for each observation height level +n_obs = 256 #5776: 4km, 121: 30km, 256:16x16 (20km); 961: 10km resoltn # radar: n_obs for each observation height level vis = dict(plotname='VIS 0.6µm', plotunits='[1]', kind='MSG_4_SEVIRI_BDRF', sat_channel=1, n_obs=n_obs, @@ -35,7 +35,7 @@ vis = dict(plotname='VIS 0.6µm', plotunits='[1]', wv73 = dict(plotname='Brightness temperature WV 7.3µm', plotunits='[K]', kind='MSG_4_SEVIRI_TB', sat_channel=6, n_obs=n_obs, error_generate=1., error_assimilate=False, - cov_loc_radius_km=30) + cov_loc_radius_km=10) ir108 = dict(plotname='Brightness temperature IR 10.8µm', plotunits='[K]', kind='MSG_4_SEVIRI_TB', sat_channel=9, n_obs=n_obs, @@ -65,7 +65,7 @@ psfc = dict(plotname='SYNOP Pressure', plotunits='[dBz]', cov_loc_radius_km=32) -exp.observations = [radar] # 108, wv73, vis] +exp.observations = [wv73] # 108, wv73, vis] #exp.update_vars = ['T', 'QVAPOR', 'QCLOUD', 'QICE','CLDFRA'] exp.update_vars = ['U', 'V', 'T', 'PH', 'MU', 'QVAPOR', 'QCLOUD', 'QICE', 'CLDFRA'] diff --git a/dartwrf/prep_IC_prior.py b/dartwrf/prep_IC_prior.py index c6775c6245553c05984f1aaec0a9732ce5cee32e..d1ef6a432450aec19fed49a19d2d637aa2f11a2b 100755 --- a/dartwrf/prep_IC_prior.py +++ b/dartwrf/prep_IC_prior.py @@ -21,6 +21,7 @@ def create_wrfrst_in_WRF_rundir(time, prior_init_time, prior_path_exp): """copies wrfrst to run_WRF directory (for next WRF run) """ # for documentation: Which prior was used? -> write into txt file + os.makedirs(cluster.archivedir + time.strftime('/%Y-%m-%d_%H:%M/'), exist_ok=True) os.system('echo "'+prior_path_exp+'\n'+prior_init_time.strftime('/%Y-%m-%d_%H:%M/') +'\n'+time.strftime('/wrfrst_d01_%Y-%m-%d_%H:%M:%S')+'" > ' +cluster.archivedir + time.strftime('/%Y-%m-%d_%H:%M/')+'link_to_prior.txt') diff --git a/generate_free.py b/generate_free.py index a3ddb07b8fcdb5aaf42dfd0fc256bc107d955940..2260ef31908fb64fe84c385999b8716810108720 100755 --- a/generate_free.py +++ b/generate_free.py @@ -25,37 +25,33 @@ id = None is_nature = False -begin = dt.datetime(2008, 7, 30, 7) +begin = dt.datetime(2008, 7, 30, 12) id = prepare_WRFrundir(begin) # create initial conditions id = run_ideal(depends_on=id) if is_nature: - id = wrfinput_insert_wbubble(perturb=False, depends_on=id) - end = dt.datetime(2008, 7, 30, 18) + #id = wrfinput_insert_wbubble(perturb=False, depends_on=id) + end = dt.datetime(2008, 7, 30, 14) id = run_ENS(begin=begin, end=end, - first_minute=False, input_is_restart=False, output_restart_interval=(end-begin).total_seconds()/60, depends_on=id) - id = create_satimages(begin, depends_on=id) + #id = create_satimages(begin, depends_on=id) else: #id = wrfinput_insert_wbubble(perturb=True, depends_on=id) - restarts = pd.date_range(start=dt.datetime(2008, 7, 30, 10), - end=dt.datetime(2008, 7, 30, 12), - freq=dt.timedelta(minutes=60)) + restarts = pd.date_range(start=dt.datetime(2008, 7, 30, 12,30), + end=dt.datetime(2008, 7, 30, 13), + freq=dt.timedelta(minutes=30)) #restarts = [dt.datetime(2008, 7, 30, 11)] input_is_restart = False time = begin last_init = dt.datetime(2008, 7, 30, 9) # dummy value - for next_restart in restarts: + for i, next_restart in enumerate(restarts): print('run_WRF from', time, 'to', next_restart) - id = run_ENS(begin=time, end=next_restart, - first_minute=False, input_is_restart=input_is_restart, - restart_path=cluster.archivedir+last_init.strftime('/%Y-%m-%d_%H:%M/'), output_restart_interval=(next_restart-time).total_seconds()/60, #output_restart_interval=720, depends_on=id) @@ -63,21 +59,24 @@ else: last_init = time time = next_restart input_is_restart = True - create_satimages(last_init, depends_on=id) + #create_satimages(last_init, depends_on=id) + + prior_path_exp = cluster.archivedir + prior_init_time = last_init + prior_valid_time = time + id = prepare_IC_from_prior(prior_path_exp, prior_init_time, prior_valid_time, depends_on=id) #sys.exit() # free run, no restart files anymore + end = dt.datetime(2008, 7, 30, 14) print('run WRF from', time, 'until', end) - end = dt.datetime(2008, 7, 30, 18) id = run_ENS(begin=time, end=end, - first_minute=False, input_is_restart=input_is_restart, - restart_path=cluster.archivedir+time.strftime('/%Y-%m-%d_%H:%M/'), #output_restart_interval=(next_restart-time).total_seconds()/60, output_restart_interval=9999, depends_on=id) - id = create_satimages(time, depends_on=id) + #id = create_satimages(time, depends_on=id) verify(depends_on=id) diff --git a/scheduler.py b/scheduler.py index 4ab73d7c18ba3d5071064a1222ff4f3802472e67..548c687a98023c89d7ad09e1706b56025b41fb35 100755 --- a/scheduler.py +++ b/scheduler.py @@ -3,7 +3,7 @@ high level control script submitting jobs into SLURM queue """ -import os, sys, shutil, glob +import os, sys, shutil, glob, warnings import datetime as dt from slurmpy import Slurm @@ -86,12 +86,6 @@ def run_ENS(begin, end, depends_on=None, first_minute=True, Then run whole timespan with 5 minutes interval. if input_is_restart: # start WRF in restart mode - if restart_path: - # restart from a wrfrst file in restart_path directory - # e.g. when restarting from a state in an archivedir (from any existing experiment) - else: - # restart from wrfrst files that are already in run_WRF directories - # e.g. after updateIC, it puts wrfrst in run_WRF directories """ id = depends_on restart_flag = '.false.' if not input_is_restart else '.true.' @@ -108,8 +102,6 @@ def run_ENS(begin, end, depends_on=None, first_minute=True, # str(hist_interval), # '--radt='+str(radt), # '--restart='+restart_flag,] - # if restart_path: # restart from a wrfrst file in restart_path directory - # args.append('--rst_inname='+restart_path) # id = s.run(' '.join(args), depends_on=[id]) # s = my_Slurm("runWRF1", cfg_update={"nodes": "1", "array": "1-"+str(exp.n_nodes), @@ -134,8 +126,6 @@ def run_ENS(begin, end, depends_on=None, first_minute=True, str(hist_interval), '--radt='+str(radt), '--restart='+restart_flag,] - # if restart_path: - # args.append('--rst_inname='+restart_path) if output_restart_interval: args.append('--restart_interval='+str(int(float(output_restart_interval)))) @@ -235,20 +225,19 @@ if __name__ == "__main__": id = None init_time = dt.datetime(2008, 7, 30, 12) - time = dt.datetime(2008, 7, 30, 13) + time = dt.datetime(2008, 7, 30, 12,30) id = prepare_WRFrundir(init_time) + #id = run_ideal(depends_on=id) #prior_path_exp = cluster.archivedir # - #prior_path_exp = '/gpfs/data/fs71386/lkugler/sim_archive/exp_v1.18_Pwbub-1-ensprof_40mem_rst' - prior_path_exp = '/gpfs/data/fs71386/lkugler/sim_archive/exp_v1.19_P1_noDA' + prior_path_exp = '/gpfs/data/fs71386/lkugler/sim_archive/exp_v1.19_Pwbub5_40mem' #id = wrfinput_insert_wbubble(depends_on=id) prior_init_time = init_time prior_valid_time = time - id = prepare_IC_from_prior(prior_path_exp, prior_init_time, prior_valid_time, depends_on=id) - while time <= dt.datetime(2008, 7, 30, 14): + while time <= dt.datetime(2008, 7, 30, 13,30): # usually we take the prior from the current time # but one could use a prior from a different time from another run @@ -265,13 +254,12 @@ if __name__ == "__main__": # How long shall we integrate? timedelta_integrate = timedelta_btw_assim - if time == dt.datetime(2008, 7, 30, 14): #this_forecast_init.minute in [0,]: # longer forecast every full hour - timedelta_integrate = dt.timedelta(hours=1) + if time == dt.datetime(2008, 7, 30, 13,30): #this_forecast_init.minute in [0,]: # longer forecast every full hour + timedelta_integrate = dt.timedelta(hours=2) # 3) Run WRF ensemble id = run_ENS(begin=time, # start integration from here end=time + timedelta_integrate, # integrate until here - restart_path=cluster.archivedir+prior_init_time.strftime('/%Y-%m-%d_%H:%M/'), output_restart_interval=timedelta_btw_assim.total_seconds()/60, depends_on=id)