Skip to content
Snippets Groups Projects
Select Git revision
  • 71b2b104fe8d70bab74d999449c0b3538abb3dea
  • consistent_config default protected
2 results

assim_synth_obs.py

Blame
  • create_obs_upfront.py 2.38 KiB
    from multiprocessing.sharedctypes import Value
    import os, sys, shutil, warnings
    import time as time_module
    import datetime as dt
    import numpy as np
    
    from config.cfg import exp
    from config.cluster import cluster
    from dartwrf.utils import copy, print
    import dartwrf.create_obsseq as osq
    from dartwrf import obsseq
    
    from dartwrf import assim_synth_obs as aso
    
    tformat = '%Y-%m-%d_%H:%M'
    
    
    if __name__ == "__main__":
        """Create observations for multiple times upfront
        """
    
        args = sys.argv[1:]
        times = []
        for tstr in args:
            times.append(dt.datetime.strptime(tstr, tformat))
    
        # strange path?
        # dir_for_obsseqout = exp.nature_wrfout + '/../../../obs_seq_out/'+exp.use_existing_obsseq  
        raise NotImplementedError('where to save obsseq to?')  
        dir_for_obsseqout = ''  # TODO: solve this when necessary
        print('will save obsseq to', dir_for_obsseqout)
        os.makedirs(dir_for_obsseqout, exist_ok=True) 
    
        os.chdir(cluster.dartrundir)
    
        # link DART binaries to run_DART
        os.system(cluster.python + " " + cluster.scripts_rundir + "/link_dart_rttov.py")  
    
        # remove any existing observation files
        os.system("rm -f input.nml obs_seq.in obs_seq.out obs_seq.out-orig obs_seq.final")  
        aso.set_DART_nml()
    
        for time in times:
            print('obsseq for time', time)
    
            aso.prepare_nature_dart(time)  # link WRF files to DART directory
    
            osq.create_obsseqin_alltypes(time, exp.observations)  # obs_seq.in
    
            aso.run_perfect_model_obs(nproc=6)  # create observations (obs_seq.out)
    
            oso = obsseq.ObsSeq(cluster.dartrundir + "/obs_seq.out")
    
            if True:  # set reflectance < surface albedo to surface albedo
                print(" 2.2) removing obs below surface albedo ")
                if_vis_obs = oso.df['kind'].values == 262
                if_obs_below_surface_albedo = oso.df['observations'].values < 0.2928
    
                oso.df.loc[if_vis_obs & if_obs_below_surface_albedo, ('observations')] = 0.2928
                oso.to_dart(f=cluster.dartrundir + "/obs_seq.out")
    
            if getattr(exp, "superob_km", False):
                print(" 2.3) superobbing to", exp.superob_km, "km")
                oso.df = oso.df.superob(window_km=exp.superob_km)
                copy(cluster.dartrundir + "/obs_seq.out", cluster.dartrundir + "/obs_seq.out-orig")
                oso.to_dart(f=cluster.dartrundir + "/obs_seq.out")
    
            aso.archive_osq_out(time, dir_obsseq=dir_for_obsseqout)