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
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")
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")
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
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
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