Exemple #1
0
def write_text():
    with open("./experimetal_settings.log", "w") as f:
        f.write("# Experimental Settings\n")
        f.write("# " + pm.version() + "\n")
        f.write("# " + pm.CaMa_ver() + "\n")
        f.write("#======================================================\n")
        # Experimental Settings
        f.write("# Experiment Name: " + pm.experiment() + "\n")
        f.write("# Experiment Mode: " + "%d" % (pm.mode()) + "\n")
        # Runoff data
        f.write("# Runoff Data: " + pm.input(pm.mode()) + "\n")
        # Time domain for analysis
        f.write("# Start Date: %04d-%02d-%02d\n" % (pm.starttime()))
        f.write("# End Date: %04d-%02d-%02d\n" % (pm.endtime()))
        # Calibration
        f.write("# Model Calibration: " + calibration(pm.calibrate()) + "\n")
        # Assimilation Settings
        f.write("# Assimilation Mode: " + assimlation_mode(pm.conflag()) +
                "\n")
        f.write("# Assimilation Domain: \n")
        f.write("# \tWest : %5.2f\n" % (pm.assimW()))
        f.write("# \tSouth: %5.2f\n" % (pm.assimS()))
        f.write("# \tEest : %5.2f\n" % (pm.assimE()))
        f.write("# \tNorth: %5.2f\n" % (pm.assimN()))
        f.write("# Assimilation Settings: \n")
        f.write("# \tPatch Size : " + patch_character(pm.patch_size()) + "\n")
        f.write("# \tPatch Id : " + pm.patch_name() + " " + pm.patch_id() +
                "\n")
        f.write("# \tInflation Method : " + inflation_para(pm.rho()) + "\n")
        f.write("# Assimilation Statistics: \n")
        f.write("# \tMean : " + stat_name(pm.conflag(), pm.calibrate())[0] +
                "\n")
        f.write("# \tStandrad Deviation : " +
                stat_name(pm.conflag(), pm.calibrate())[1] + "\n")
    return 0
Exemple #2
0
def cal_monthly_mean(start_year,end_year,months=24):
    # calc monthly mean value for two years
    runname=pm.runname(pm.mode())
    true_run=pm.true_run(pm.mode())
    if runname=="ELSE_KIM2009":
        nx,ny=360,180
        prefix="Roff____"
        suffix=".one"
    if runname=="E2O":
        nx,ny=1440,720
        prefix="Roff__"
        suffix="%03d.one"%(true_run)
    if runname=="ERA20CM":
        nx,ny=360,180
        prefix="Roff__"
        suffix="%03d.one"%(true_run)
    #os.system("rm -Rf ./CaMa_in/ELSE_GPCC/mean_month/*")
    mkdir("./CaMa_in/"+runname+"/mean_month")
    #os.system("rm -Rf ./CaMa_in/ELSE_KIM2009/mean_month/*")
    threshold=0.1

    start_dt=datetime.date(start_year,1,1)
    end_dt=datetime.date(end_year,12,31)
    for month in np.arange(months):
        ynow=int(start_year+int(month/12))
        ychar="%04d"%(ynow)
        mchar="%02d"%((month%12)+1)
        #print ychar, mchar
        roff_mon=np.zeros([ny,nx],np.float32)#.reshape([180,360])
        count=np.zeros([ny,nx],np.float32)#.reshape([180,360])
        for day in np.arange(month*30,(month+1)*30):
            day_num=day-month*30
            running_dt=start_dt+datetime.timedelta(days=day)
            yyyy='%04d' % (running_dt.year)
            mm='%02d' % (running_dt.month)
            dd='%02d' % (running_dt.day)
            roff=np.fromfile("./CaMa_in/"+runname+"/Roff/"+prefix+str(yyyy)+str(mm)+str(dd)+suffix,np.float32).reshape([ny,nx]) 
            roff_mon=roff_mon+roff*(roff>threshold)
            count=count+(roff>threshold)
        roff_mean=roff_mon/(count+1e-20)
        roff_mean=roff_mean.astype(np.float32)
        roff_mean=roff_mean+threshold
        roff_mean.tofile("./CaMa_in/"+runname+"/mean_month/mean_"+ychar+mchar+".bin")
Exemple #3
0
def cal_monthly_mean_ens(ens_num): #start_year,end_year,ens_num,months=24):
    # calc monthly mean value for two years
    start_year=pm.spinup_end_year()
    end_year,end_month,end_date=pm.starttime()
    #start_year=pm.start_year() #inputlist[0]
    #end_year=pm.end_year() #inputlist[1]
    #ens_num=inputlist[2]
    months=24 #inputlist[3]
    #threshold=inputlist[4]
    runname=pm.runname(pm.mode())
    if runname=="E2O":
        nx=1440
        ny=720
        threshold=0.1
    else:
        nx=360
        ny=180
        threshold=1.0e-8
    #os.system("rm -Rf ./CaMa_in/ELSE_GPCC/mean_month/*")
    mkdir("./CaMa_in/"+runname+"/mean_month")
    #os.system("rm -Rf ./CaMa_in/ELSE_KIM2009/mean_month/*")
    #threshold=0.1

    start_dt=datetime.date(start_year,1,1)
    end_dt=datetime.date(end_year,12,31)
    ens_char="%03d"%(ens_num)
    for month in np.arange(months):
        ynow=int(start_year+int(month/12))
        ychar="%04d"%(ynow)
        mchar="%02d"%((month%12)+1)
        #print ychar, mchar
        roff_mon=np.zeros([ny,nx],np.float32)#.reshape([180,360])
        count=np.zeros([ny,nx],np.float32)#.reshape([180,360])
        for day in np.arange(month*30,(month+1)*30):
            day_num=day-month*30
            running_dt=start_dt+datetime.timedelta(days=day)
            yyyy='%04d' % (running_dt.year)
            mm='%02d' % (running_dt.month)
            dd='%02d' % (running_dt.day)
            roff=np.fromfile(pm.DA_dir()+"/inp/"+runname+"/Roff/Roff__"+str(yyyy)+str(mm)+str(dd)+ens_char+".one",np.float32).reshape([ny,nx])
            roff_mon=roff_mon+roff*(roff>threshold)
            count=count+(roff>threshold)
        roff_mean=roff_mon/(count+1e-20)
        roff_mean=roff_mean.astype(np.float32)
        roff_mean=roff_mean+threshold
        roff_mean.tofile("./CaMa_in/"+runname+"/mean_month/mean_"+ychar+mchar+ens_char+".bin")
Exemple #4
0
def make_anomaly_data(mode=pm.mode()):
    # make directory for mean sfcelv
    mkdir("./assim_out/mean_sfcelv/")
    # copy the anomaly files
    if mode == 1:
        # for mean
        iname = pm.DA_dir() + "/dat/mean_sfcelv_E2O_" + pm.mapname(
        ) + "_1980-2014.bin"
        oname = "./assim_out/mean_sfcelv/mean_sfcelv.bin"
        os.system("cp " + iname + " " + oname)
        # for std
        iname = pm.DA_dir() + "/dat/std_sfcelv_E2O_" + pm.mapname(
        ) + "_1980-2014.bin"
        oname = "./assim_out/mean_sfcelv/std_sfcelv.bin"
        os.system("cp " + iname + " " + oname)

    if mode == 2:
        # for mean
        iname = pm.DA_dir() + "/dat/mean_sfcelv_E2O_" + pm.mapname(
        ) + "_1980-2014.bin"
        oname = "./assim_out/mean_sfcelv/mean_sfcelv.bin"
        os.system("cp " + iname + " " + oname)
        # for std
        iname = pm.DA_dir() + "/dat/std_sfcelv_E2O_" + pm.mapname(
        ) + "_1980-2014.bin"
        oname = "./assim_out/mean_sfcelv/std_sfcelv.bin"
        os.system("cp " + iname + " " + oname)

    if mode == 3:
        # for mean
        iname = pm.DA_dir() + "/dat/mean_sfcelv_VIC_BC_" + pm.mapname(
        ) + "_1979-2013.bin"
        oname = "./assim_out/mean_sfcelv/mean_sfcelv.bin"
        os.system("cp " + iname + " " + oname)
        # for std
        iname = pm.DA_dir() + "/dat/std_sfcelv_VIC_BC_" + pm.mapname(
        ) + "_1979-2013.bin"
        oname = "./assim_out/mean_sfcelv/std_sfcelv.bin"
        os.system("cp " + iname + " " + oname)
    return 0
Exemple #5
0
def save_statistic():
    # copy mean and std of simulated WSE
    # for anomaly and normalized assimilations
    mkdir("./assim_out/mean_sfcelv/")
    # if pm.input()=="E2O":
    #     iname = pm.DA_dir()+"/dat/mean_sfcelv_"+pm.input()+"_"+pm.mapname()+"_2000-2010"+ens_char+".bin
    #     oname = "./assim_out/mean_sfcelv/meansfcelv"+ens+".bin"

    #     os.system("cp -r "+pm.DA_dir()+"/dat/mean_sfcelv_"+pm.input()+"_"+pm.mapname()+"_2000-2014.bin ./assim_out/mean_sfcelv/mean_sfcelv.bin")
    #     os.system("cp -r "+pm.DA_dir()+"/dat/std_sfcelv_"+pm.input()+"_"+pm.mapname()+"_2000-2014.bin ./assim_out/mean_sfcelv/std_sfcelv.bin")
    #     print ("cp -r "+pm.DA_dir()+"/dat/mean_sfcelv_"+pm.input()+"_"+pm.mapname()+"_2000-2014.bin ./assim_out/mean_sfcelv/mean_sfcelv.bin")
    # if pm.input()=="VIC_BC":
    #     os.system("cp -r "+pm.DA_dir()+"/dat/mean_sfcelv_"+pm.input()+"_"+pm.mapname()+"_1979-2013.bin ./assim_out/mean_sfcelv/mean_sfcelv.bin")
    #     os.system("cp -r "+pm.DA_dir()+"/dat/std_sfcelv_"+pm.input()+"_"+pm.mapname()+"_1979-2013.bin ./assim_out/mean_sfcelv/std_sfcelv.bin")
    #     print ("cp -r "+pm.DA_dir()+"/dat/mean_sfcelv_"+pm.input()+"_"+pm.mapname()+"_1979-2013.bin ./assim_out/mean_sfcelv/mean_sfcelv.bin")

    # #===========
    # # mean
    # inputlist=[]
    # for ens in np.arange(1,pm.ens_mem(pm.mode())+1):
    #     ens_char="%03d"%(ens)
    #     if pm.input()=="E2O":
    #         iname = pm.DA_dir()+"/dat/mean_"+pm.stat_name()+"_"+ens_char+".bin"
    #         # iname = pm.DA_dir()+"/dat/mean_sfcelv_E2O_"+pm.mapname()+"_2000-2010_"+ens_char+".bin"
    #         # iname = pm.DA_dir()+"/dat/mean_sfcelv_cal_E2O_"+pm.mapname()+"_2000-2010_"+ens_char+".bin"
    #         oname = "./assim_out/mean_sfcelv/meansfcelvC"+ens_char+".bin"
    #     if pm.input()=="VIC_BC":
    #         iname = pm.DA_dir()+"/dat/mean_"+pm.stat_name()+"_"+ens_char+".bin"
    #         # iname = pm.DA_dir()+"/dat/mean_sfcelv_VIC_BC_"+pm.mapname()+"_2000-2010_"+ens_char+".bin"
    #         # iname = pm.DA_dir()+"/dat/mean_sfcelv_cal_VIC_BC_"+pm.mapname()+"_2000-2010_"+ens_char+".bin"
    #         oname = "./assim_out/mean_sfcelv/meansfcelvC"+ens_char+".bin"
    #     inputlist.append([iname,oname])
    #===========
    # mean
    inputlist = []
    for ens in np.arange(1, pm.ens_mem(pm.mode()) + 1):
        ens_char = "%03d" % (ens)
        iname = pm.DA_dir() + "/dat/mean_" + pm.stat_name(
        ) + "_" + ens_char + ".bin"
        oname = "./assim_out/mean_sfcelv/meansfcelvC" + ens_char + ".bin"
        inputlist.append([iname, oname])

    # do parallel
    p = Pool(pm.para_nums())
    p.map(copy_stat, inputlist)
    p.terminate()

    # #===========
    # # std
    # inputlist=[]
    # for ens in np.arange(1,pm.ens_mem(pm.mode())+1):
    #     ens_char="%03d"%(ens)
    #     if pm.input()=="E2O":
    #         iname = pm.DA_dir()+"/dat/std_"+pm.stat_name()+"_"+ens_char+".bin"
    #         # iname = pm.DA_dir()+"/dat/std_sfcelv_E2O_"+pm.mapname()+"_2000-2010_"+ens_char+".bin"
    #         # iname = pm.DA_dir()+"/dat/std_sfcelv_cal_E2O_"+pm.mapname()+"_2000-2010_"+ens_char+".bin"
    #         oname = "./assim_out/mean_sfcelv/stdsfcelvC"+ens_char+".bin"
    #     if pm.input()=="VIC_BC":
    #         iname = pm.DA_dir()+"/dat/std_"+pm.stat_name()+"_"+ens_char+".bin"
    #         # iname = pm.DA_dir()+"/dat/std_sfcelv_VIC_BC_"+pm.mapname()+"_2000-2010_"+ens_char+".bin"
    #         # iname = pm.DA_dir()+"/dat/std_sfcelv_cal_VIC_BC_"+pm.mapname()+"_2000-2010_"+ens_char+".bin"
    #         oname = "./assim_out/mean_sfcelv/stdsfcelvC"+ens_char+".bin"
    #     inputlist.append([iname,oname])

    #===========
    # std
    inputlist = []
    for ens in np.arange(1, pm.ens_mem(pm.mode()) + 1):
        ens_char = "%03d" % (ens)
        iname = pm.DA_dir() + "/dat/std_" + pm.stat_name(
        ) + "_" + ens_char + ".bin"
        oname = "./assim_out/mean_sfcelv/stdsfcelvC" + ens_char + ".bin"
        inputlist.append([iname, oname])

    # do parallel
    p = Pool(pm.para_nums())  #*cpu_nums())
    p.map(copy_stat, inputlist)
    p.terminate()
    return 0
Exemple #6
0
def prepare_input():
    "create a soft link to runoff data set"
    if os.path.islink("./CaMa_in/"+pm.runname(pm.mode())):
        os.system("rm -r ./CaMa_in/"+pm.runname(pm.mode()))
    os.system("ln -sf "+pm.runoff_dir()+" ./CaMa_in/")
    return 0