From 5ead0dfb80e4337d9a803aaae51466105c96f409 Mon Sep 17 00:00:00 2001
From: lkugler <lukas.kugler@gmail.com>
Date: Fri, 20 May 2022 17:03:03 +0200
Subject: [PATCH] spinup run

---
 generate_free.py | 124 ++++++++++++++++++++++++++++++++++++++++-------
 scheduler.py     |  32 +++++++-----
 2 files changed, 127 insertions(+), 29 deletions(-)

diff --git a/generate_free.py b/generate_free.py
index 2260ef3..b1f3cb6 100755
--- a/generate_free.py
+++ b/generate_free.py
@@ -23,27 +23,32 @@ print('starting osse')
 backup_scripts()
 id = None
 
-is_nature = False
 
-begin = dt.datetime(2008, 7, 30, 12)
-id = prepare_WRFrundir(begin)  # create initial conditions
-id = run_ideal(depends_on=id)
+if False: #True:  # is_nature
+    begin = dt.datetime(2008, 7, 30, 7)
+    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, 14)
+    end = dt.datetime(2008, 7, 30, 12)
     id = run_ENS(begin=begin, end=end,
                      input_is_restart=False,
                      output_restart_interval=(end-begin).total_seconds()/60,
                      depends_on=id)
-    #id = create_satimages(begin, depends_on=id)
-else:
+    # id = create_satimages(begin, depends_on=id)
+
+
+if False:   # if free run (all inits)
+    begin = dt.datetime(2008, 7, 30, 7)
+    id = prepare_WRFrundir(begin)  # create initial conditions
+    id = run_ideal(depends_on=id)
+
     #id = wrfinput_insert_wbubble(perturb=True, depends_on=id)
 
-    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)]
+    restarts = pd.date_range(start=dt.datetime(2008, 7, 30, 10),
+                              end=dt.datetime(2008, 7, 30, 12),
+                              freq=dt.timedelta(minutes=60))
+    #restarts = [dt.datetime(2008, 7, 30, 12, 30)]
     
     input_is_restart = False
     time = begin
@@ -59,17 +64,15 @@ 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)
+    end = dt.datetime(2008, 7, 30, 18)
     print('run WRF from', time, 'until', end)
     id = run_ENS(begin=time, end=end,
              input_is_restart=input_is_restart,
@@ -78,5 +81,92 @@ else:
              depends_on=id)
     
     
-    #id = create_satimages(time, depends_on=id)
+    id = create_satimages(time, depends_on=id)
+    verify(depends_on=id)
+
+if False:  # continuation of free run
+    start = dt.datetime(2008, 7, 30, 7)
+    end = dt.datetime(2008, 7, 30, 10)
+
+    id = prepare_WRFrundir(start)  # create initial conditions
+
+    prior_path_exp = '/gpfs/data/fs71386/lkugler/sim_archive/exp_v1.19_P5_noDA' # cluster.archivedir
+    prior_init_time = dt.datetime(2008, 7, 30, 11)
+    prior_valid_time = start
+
+    id = prepare_IC_from_prior(prior_path_exp, prior_init_time, prior_valid_time, depends_on=id)
+
+    id = run_ENS(begin=start, end=end,
+             input_is_restart=True,
+             output_restart_interval=(end-start).total_seconds()/60,
+             #output_restart_interval=9999,
+             depends_on=id)
+        
+    id = create_satimages(start, depends_on=id)
+    verify(depends_on=id)
+
+if True:  # continuation of free run after spinup
+    start = dt.datetime(2008, 7, 30, 7)
+    end = dt.datetime(2008, 7, 30, 10)
+
+    id = prepare_WRFrundir(start)  # create initial conditions
+    id = run_ideal(depends_on=id)
+
+    prior_path_exp = '/gpfs/data/fs71386/lkugler/sim_archive/exp_v1.19_P5_noDA' # cluster.archivedir
+    prior_init_time = dt.datetime(2008, 7, 30, 11)
+    prior_valid_time = dt.datetime(2008, 7, 30, 12)
+
+    id = prepare_IC_from_prior(prior_path_exp, prior_init_time, prior_valid_time, 
+            new_start_time=start, # <---------- to start again after spinup
+            depends_on=id)
+
+    id = run_ENS(begin=start, end=end,
+             input_is_restart=False,
+             output_restart_interval=(end-start).total_seconds()/60,
+             #output_restart_interval=9999,
+             depends_on=id)
+        
+    id = create_satimages(start, depends_on=id)
+    
+    # continue now with free run
+    # no restart files anymore
+    prior_path_exp = cluster.archivedir
+    prior_init_time = start
+    prior_valid_time = end
+    id = prepare_IC_from_prior(prior_path_exp, prior_init_time, prior_valid_time, depends_on=id)
+
+    start = end
+    end = dt.datetime(2008, 7, 30, 18)
+    print('run WRF from', start, 'until', end)
+    id = run_ENS(begin=start, end=end,
+             input_is_restart=True,
+             #output_restart_interval=(next_restart-time).total_seconds()/60,
+             output_restart_interval=9999,
+             depends_on=id)
+    id = create_satimages(start, depends_on=id)
+    verify(depends_on=id)
+
+if False:  # continuation of nature after spinup
+
+    start = dt.datetime(2008, 7, 30, 7)
+    end = dt.datetime(2008, 7, 30, 18)
+
+    id = prepare_WRFrundir(start)  # create initial conditions
+    id = run_ideal(depends_on=id)
+
+    prior_path_exp = '/gpfs/data/fs71386/lkugler/sim_archive/exp_v1.19_P5_nat2' # cluster.archivedir
+    prior_init_time = dt.datetime(2008, 7, 30, 7)
+    prior_valid_time = dt.datetime(2008, 7, 30, 12)
+
+    id = prepare_IC_from_prior(prior_path_exp, prior_init_time, prior_valid_time, 
+            new_start_time=start, # <---------- to start again after spinup
+            depends_on=id)
+
+    id = run_ENS(begin=start, end=end,
+             input_is_restart=False,
+             output_restart_interval=(end-start).total_seconds()/60,
+             #output_restart_interval=9999,
+             depends_on=id)
+        
+    id = create_satimages(start, depends_on=id)
     verify(depends_on=id)
diff --git a/scheduler.py b/scheduler.py
index 8020212..3885d0f 100755
--- a/scheduler.py
+++ b/scheduler.py
@@ -176,12 +176,19 @@ def assimilate(assim_time, prior_init_time, prior_valid_time, prior_path_exp,
     return id
 
 
-def prepare_IC_from_prior(prior_path_exp, prior_init_time, prior_valid_time, depends_on=None):
+def prepare_IC_from_prior(prior_path_exp, prior_init_time, prior_valid_time, new_start_time=None, depends_on=None):
+
+    if new_start_time != None:
+        tnew = new_start_time.strftime(' %Y-%m-%d_%H:%M')
+    else:
+        tnew = ''
+
     id = my_Slurm("IC-prior", cfg_update=dict(time="8")
             ).run(cluster.python+' '+cluster.scripts_rundir+'/prep_IC_prior.py '
                 +prior_path_exp 
                 +prior_init_time.strftime(' %Y-%m-%d_%H:%M')
-                +prior_valid_time.strftime(' %Y-%m-%d_%H:%M'), depends_on=[depends_on])
+                +prior_valid_time.strftime(' %Y-%m-%d_%H:%M')
+                +tnew, depends_on=[depends_on])
     return id
 
 
@@ -216,8 +223,8 @@ def gen_obsseq(depends_on=None):
 def verify(depends_on=None):
     s = my_Slurm("verify-"+exp.expname, cfg_update={"time": "240", "mail-type": "FAIL,END", "ntasks": "1", 
             "ntasks-per-node": "1", "ntasks-per-core": "1"})
-    s.run(cluster.python_enstools+' /home/fs71386/lkugler/osse_analysis/analyze_fc.py '+exp.expname+' has_node plot',
-          depends_on=[depends_on])
+    cmd = cluster.python_enstools+' /home/fs71386/lkugler/osse_analysis/plot_from_raw/analyze_fc.py '+exp.expname+' has_node sat wrf verif1d FSS BS'
+    s.run(cmd, depends_on=[depends_on])
 
 
 ################################
@@ -231,19 +238,20 @@ 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.19_P1_noDA'
+    #prior_path_exp = '/gpfs/data/fs71386/lkugler/sim_archive/exp_v1.19_P2_noDA'
+    prior_path_exp = '/gpfs/data/fs71386/lkugler/sim_archive/exp_v1.19_P3_wbub7_noDA'
     #id = wrfinput_insert_wbubble(depends_on=id)
     
     prior_init_time = init_time
     prior_valid_time = time
 
-    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
@@ -251,7 +259,7 @@ if __name__ == "__main__":
         prior_valid_time = time
 
         id = assimilate(time, prior_init_time, prior_valid_time, prior_path_exp, depends_on=id)
-
+        
         # 1) Set posterior = prior
         id = prepare_IC_from_prior(prior_path_exp, prior_init_time, prior_valid_time, depends_on=id)
 
@@ -261,8 +269,8 @@ if __name__ == "__main__":
         # How long shall we integrate?
         timedelta_integrate = timedelta_btw_assim
         output_restart_interval = timedelta_btw_assim.total_seconds()/60
-        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=4.5)
             output_restart_interval = 9999
 
         # 3) Run WRF ensemble
@@ -274,7 +282,7 @@ if __name__ == "__main__":
         # as we have WRF output, we can use own exp path as prior
         prior_path_exp = cluster.archivedir       
  
-        create_satimages(time, depends_on=id)
+        id_sat = create_satimages(time, depends_on=id)
 
         # increment time
         time += timedelta_btw_assim
@@ -283,4 +291,4 @@ if __name__ == "__main__":
         prior_init_time = time - timedelta_btw_assim
 
     id = gen_obsseq(id)
-    verify(id)
+    verify(id_sat)
-- 
GitLab