From 899e46432aeec173e0775cfc179d6eafc5f395ac Mon Sep 17 00:00:00 2001
From: lkugler <lukas.kugler@gmail.com>
Date: Thu, 16 Mar 2023 00:42:54 +0100
Subject: [PATCH] sp. var. ss inflation

---
 dartwrf/assim_synth_obs.py | 52 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/dartwrf/assim_synth_obs.py b/dartwrf/assim_synth_obs.py
index 460375e..9b96175 100755
--- a/dartwrf/assim_synth_obs.py
+++ b/dartwrf/assim_synth_obs.py
@@ -445,6 +445,52 @@ def get_obsseq_out(time):
 
     return oso
 
+def prepare_inflation_2(time, prior_init_time):
+    """Prepare inflation files
+    
+    Recycles inflation files from previous assimilations
+    or takes default files from archive.
+    
+    Args:
+        time (datetime): time of assimilation
+        prior_init_time (datetime): time of prior assimilation
+    """
+    dir_priorinf = cluster.archivedir + prior_init_time.strftime("/%Y-%m-%d_%H:%M/assim_stage0/") 
+
+    f_default = cluster.archive_basedir + "/input_priorinf_mean.nc"
+    f_prior = dir_priorinf + time.strftime("/%Y-%m-%d_%H:%M_output_priorinf_mean.nc")
+    f_new = cluster.dartrundir+'/input_priorinf_mean.nc'
+
+    if os.path.isfile(f_prior):
+        copy(f_prior, f_new)
+        print(f_prior, 'copied to', f_new)
+    else:
+        warnings.warn(f_prior + ' does not exist. Using default file instead.')
+        copy(f_default, f_new)
+
+    f_default = cluster.archive_basedir + "/input_priorinf_sd.nc"
+    f_prior = dir_priorinf + time.strftime("/%Y-%m-%d_%H:%M_output_priorinf_sd.nc")
+    f_new = cluster.dartrundir+'/input_priorinf_sd.nc'
+
+    if os.path.isfile(f_prior):
+        copy(f_prior, f_new)
+        print(f_prior, 'copied to', f_new)
+    else:
+        warnings.warn(f_prior + ' does not exist. Using default file instead.')
+        copy(f_default, f_new)
+
+def archive_inflation_2(time):
+    f_output = cluster.dartrundir + time.strftime('/%Y-%m-%d_%H:%M/assim_stage0/output_priorinf_sd.nc')
+    f_archive = cluster.archivedir + time.strftime("/%Y-%m-%d_%H:%M_output_priorinf_sd.nc")
+    copy(f_output, f_archive)
+    print(f_archive, 'saved')
+
+    f_output = cluster.dartrundir + time.strftime('/%Y-%m-%d_%H:%M/assim_stage0/output_priorinf_mean.nc')
+    f_archive = cluster.archivedir + time.strftime("/%Y-%m-%d_%H:%M_output_priorinf_mean.nc")
+    copy(f_output, f_archive)
+    print(f_archive, 'saved')
+
+
 def main(time, prior_init_time, prior_valid_time, prior_path_exp):
     """Assimilate observations
     as defined in config/cfg.py
@@ -497,11 +543,17 @@ def main(time, prior_init_time, prior_valid_time, prior_path_exp):
         print(" 2.3) reject observations? ")
         qc_obs(time, oso, osf_prior)
 
+    if exp.prior_inflation == 2:
+        prepare_inflation_2(time, prior_init_time)
+
     print(" 3) run filter ")
     set_DART_nml()
     filter(nproc=nproc)
     archive_filteroutput(time)
 
+    if exp.prior_inflation == 2:
+        archive_inflation_2(time)
+
     print(" 4) evaluate posterior observations for all observations (incl rejected)")
     write_list_of_inputfiles_posterior(time)
     if getattr(exp, "reject_smallFGD", False):
-- 
GitLab