From de6bf7b5e98c77c5cc694729f50d7b2df86e2147 Mon Sep 17 00:00:00 2001 From: Bruno Ringeval <bruno.ringeval@inrae.fr> Date: Wed, 26 Mar 2025 16:42:31 +0100 Subject: [PATCH] improve test with scale on site --- GPCROP/GPCROP.py | 3 +- .../__pycache__/myfunctionsSIM.cpython-36.pyc | Bin 7440 -> 0 bytes GPCROP/launch_GPCROP_scaleonsite.sh | 124 ++++++++++-------- GPCROP/myfunctionsSIM.pyc | Bin 8844 -> 0 bytes GPCROP/plot_multi_simul_on_site_wodata.py | 95 +++++++------- GPCROP/plot_scaleonsite_test.py | 32 +++-- .../ReadPlotOPTIM_new_v2modules_resampling.py | 2 +- .../__pycache__/myfoncGGCMI.cpython-36.pyc | Bin 7449 -> 0 bytes SIM_vsMueller_2023/myfoncGGCMI.pyc | Bin 9680 -> 0 bytes 9 files changed, 136 insertions(+), 120 deletions(-) delete mode 100644 GPCROP/__pycache__/myfunctionsSIM.cpython-36.pyc delete mode 100644 GPCROP/myfunctionsSIM.pyc delete mode 100644 SIM_vsMueller_2023/__pycache__/myfoncGGCMI.cpython-36.pyc delete mode 100644 SIM_vsMueller_2023/myfoncGGCMI.pyc diff --git a/GPCROP/GPCROP.py b/GPCROP/GPCROP.py index b66472d..b40caf2 100755 --- a/GPCROP/GPCROP.py +++ b/GPCROP/GPCROP.py @@ -80,7 +80,6 @@ else: #read_shelvefile=0 yes_remob = int(sys.argv[18]) #0 (no remobilization) or 1 flag_uncert_soilP = int(sys.argv[19]) #make sense only if many simulations. not used if prescribe_gridcond file_uncert_GPCROPparam = sys.argv[20] #'GPCROPinputfile_for_GPCROPuncertainty.txt' - #linetoread_GPCROPparam = 9 #3 cases: #case 1: flag_grid==1 and grid_index_init !=(grid_index_end-1): read successive index in lat_grid_1D and lon_grid_1D. Used for global simulations splitted within many short simulations @@ -686,7 +685,7 @@ for yr in np.arange(yri_simul,yri_simul+1): #pour l instant qu'une seule annee. ##################################################################### #a given parameter has the same value elsewhere for a given nmonte_chosen - + path_rel=path_script fic_txt_tor = open(path_rel+'/'+file_uncert_GPCROPparam, 'r') content = fic_txt_tor.readlines() diff --git a/GPCROP/__pycache__/myfunctionsSIM.cpython-36.pyc b/GPCROP/__pycache__/myfunctionsSIM.cpython-36.pyc deleted file mode 100644 index 9949e7e3d8b7d55d90b0d795a82fdb56196f9920..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7440 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 YyrNg}=y$^VL*tHDMz4&&H@wpS03w)xegFUf diff --git a/GPCROP/launch_GPCROP_scaleonsite.sh b/GPCROP/launch_GPCROP_scaleonsite.sh index 2b60d11..3bee465 100755 --- a/GPCROP/launch_GPCROP_scaleonsite.sh +++ b/GPCROP/launch_GPCROP_scaleonsite.sh @@ -22,12 +22,12 @@ max_grid=1 #14765 #14765 #previously: 17386 #excluded. 17386 for nmonte=0. max_g #for one gridcell simulation -and lat/lon defined in python script), use ini_nbgrid=0, sizepack_nbgrid=1 and max_grid=1 optimroutine=1 #1 except if want to switch off optim routine (for tests only) Pfeedback=1 #P feedbacks on the growth. has an effect only if optimroutine==1 -optimRSR=1 #RSR is optimized. has an effect only if optimroutine==1 -optimconc=1 #conc is optimized. has an effect only if optimroutine==1 +optimRSR=x #RSR is optimized. has an effect only if optimroutine==1 +optimconc=x #conc is optimized. has an effect only if optimroutine==1 yes_remob=1 #remob is activated #scalesite=0.5 #scaling factor multiplied by Pilab and Pisec as sensitivity test -flag_uncert_soilP=1 #make sense only if many simulations and if prescribe_gridcond==0 -file_uncert_GPCROPparam="GPCROPinputfile_for_GPCROPuncertainty_Tartasprescribed.txt" +flag_uncert_soilP=0 #make sense only if many simulations and if prescribe_gridcond==0 +file_uncert_GPCROPparam="GPCROPinputfile_for_GPCROPuncertainty_Tartasprescribed_LAILIN_nmonteline.txt" ########### #end flags# @@ -88,64 +88,74 @@ while [ $nmonte_chosen_init -lt $nmonte_chosen_end ];do i=8;var="nmonte_chosen_init"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) i=9;var="nmonte_chosen_endtopass"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) - deb_grid=$ini_nbgrid - pack_grid=0 - while (( deb_grid < max_grid ));do - - #compute prefix which is the number of 0 to put in front of pack_grid for the name of the different files - #len_name_pack_grid=${#pack_grid} - #nb0_repeat=$((len_max_pack-len_name_pack_grid)) - #prefix=$(yes '0' | head -$nb0_repeat | paste -s -d '' -) - - #compute fin_grid - fin_grid=$(( deb_grid + sizepack_nbgrid )) - if (( fin_grid > max_grid ));then - fin_grid=$(( max_grid )) - fi - - i=10;var="deb_grid"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) - i=11;var="fin_grid"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) - i=12;var="max_grid"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) - # - i=13;var="optimroutine"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) - i=14;var="Pfeedback"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) - i=15;var="optimRSR"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) - i=16;var="optimconc"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) - i=17;var="yes_remob"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) - i=18;var="flag_uncert_soilP"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) - i=19;var="file_uncert_GPCROPparam"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) - - for scalesite in 1.0;do #0.05 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 2.0 3.0;do - - i=20;var="scalesite"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) + + for optimRSR in 0 1;do + + for optimconc in 0 1;do - #modif .sh file - cp sbatch_GPCROP_scaleonsite_init.sh sbatch_GPCROP_scaleonsite_modif_"$deb_grid"_"$fin_grid".sh - for linechange in $(seq 0 1 $i);do #nb of lines to change in sbatch_SIM_init.sh. last $i used - eval new_line_r=\$"new_line${linechange}" - eval old_line_r=\$"old_line${linechange}" - sed -i -e 's@'"$old_line_r"'@'"$new_line_r"'@g' sbatch_GPCROP_scaleonsite_modif_"$deb_grid"_"$fin_grid".sh - done - - #launch .sh file - if [[ $server -eq 0 ]];then - chmod +x sbatch_GPCROP_scaleonsite_modif_"$deb_grid"_"$fin_grid".sh - echo $deb_grid, $fin_grid - taskset -c 2 ./sbatch_GPCROP_scaleonsite_modif_"$deb_grid"_"$fin_grid".sh #launch on proc 2 - else - echo "sbatch of GPCROP_optim" - sbatch --nodes=1 --cpus-per-task=1 --exclude=muse241,muse098,muse146,muse189,muse108,muse135,muse239,muse099,muse113,muse114,muse115,muse116 -J GP$deb_grid_$fin_grid -o GPCROP_"$treatment"_"$deb_grid"_"$fin_grid".out sbatch_GPCROP_scaleonsite_modif_"$deb_grid"_"$fin_grid".sh - sleep 1 - fi + + deb_grid=$ini_nbgrid + pack_grid=0 + while (( deb_grid < max_grid ));do + + #compute prefix which is the number of 0 to put in front of pack_grid for the name of the different files + #len_name_pack_grid=${#pack_grid} + #nb0_repeat=$((len_max_pack-len_name_pack_grid)) + #prefix=$(yes '0' | head -$nb0_repeat | paste -s -d '' -) + + #compute fin_grid + fin_grid=$(( deb_grid + sizepack_nbgrid )) + if (( fin_grid > max_grid ));then + fin_grid=$(( max_grid )) + fi - done #end scalesite + i=10;var="deb_grid"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) + i=11;var="fin_grid"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) + i=12;var="max_grid"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) + # + i=13;var="optimroutine"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) + i=14;var="Pfeedback"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) + i=15;var="optimRSR"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) + i=16;var="optimconc"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) + i=17;var="yes_remob"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) + i=18;var="flag_uncert_soilP"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) + i=19;var="file_uncert_GPCROPparam"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) + + for scalesite in 0.05 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 2.0 3.0;do + + i=20;var="scalesite"; eval old_line$i=$var"=x"; eval new_line$i=$(echo $var=${!var}) + + #modif .sh file + cp sbatch_GPCROP_scaleonsite_init.sh sbatch_GPCROP_scaleonsite_modif_"$deb_grid"_"$fin_grid".sh + for linechange in $(seq 0 1 $i);do #nb of lines to change in sbatch_SIM_init.sh. last $i used + eval new_line_r=\$"new_line${linechange}" + eval old_line_r=\$"old_line${linechange}" + sed -i -e 's@'"$old_line_r"'@'"$new_line_r"'@g' sbatch_GPCROP_scaleonsite_modif_"$deb_grid"_"$fin_grid".sh + done + + #launch .sh file + if [[ $server -eq 0 ]];then + chmod +x sbatch_GPCROP_scaleonsite_modif_"$deb_grid"_"$fin_grid".sh + echo $deb_grid, $fin_grid + taskset -c 2 ./sbatch_GPCROP_scaleonsite_modif_"$deb_grid"_"$fin_grid".sh #launch on proc 2 + else + echo "sbatch of GPCROP_optim" + sbatch --nodes=1 --cpus-per-task=1 --exclude=muse241,muse098,muse146,muse189,muse108,muse135,muse239,muse099,muse113,muse114,muse115,muse116 -J GP$deb_grid_$fin_grid -o GPCROP_"$treatment"_"$deb_grid"_"$fin_grid".out sbatch_GPCROP_scaleonsite_modif_"$deb_grid"_"$fin_grid".sh + sleep 1 + fi + + done #end scalesite + + #update deb_grid + deb_grid=$(( fin_grid )) + pack_grid=$(( pack_grid + 1 )) + done - #update deb_grid - deb_grid=$(( fin_grid )) - pack_grid=$(( pack_grid + 1 )) - done + done + done + if [[ $flag_grid -eq 1 ]];then let nmonte_chosen_init=$nmonte_chosen_end elif [[ $flag_grid -eq 0 ]]; then #global simulation: launch each global simulation for nmonte with a specific sbatch diff --git a/GPCROP/myfunctionsSIM.pyc b/GPCROP/myfunctionsSIM.pyc deleted file mode 100644 index aa9c17b8ab0c921ee62e54177f1f92476cfcbd57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8844 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�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 diff --git a/GPCROP/plot_multi_simul_on_site_wodata.py b/GPCROP/plot_multi_simul_on_site_wodata.py index ba6b999..135af17 100755 --- a/GPCROP/plot_multi_simul_on_site_wodata.py +++ b/GPCROP/plot_multi_simul_on_site_wodata.py @@ -41,21 +41,23 @@ dic_corres_treatdata_treatvar={};dic_corres_treatdata_treatvar["P0"]="P0";dic_co yri_simul = 1996 nmonte_read_init = 0 nmonte_read_end = 301 -LAIrelation="LIN" -config = 2 +LAIrelation = "LIN" +config = 2 +dir_output_to_read = "/output_selectparam_3val_Tartas_prescribed" +filter_on_plot = 1 #look at the criteria within add_filter_Tartas_simul.py -#define list of variables -list_Psoilpools = ["Pilab","Polab","Posta","Pipri","Pisec","Pxocc","Pxtot","Pisol"] -list_SIMvar_tow = ["LAI_data","nleaf_data"] -list_biomass_tow = ["root_data","shootwograin_data","grain_data","shoot_data","shootwosene_data"] # -list_biomassP_tow = ["rootP_data","shootwograinP_data","grainP_data","reserveP_data"] -list_Pdemandsupply_tow = ["Psupply_day", "Pdemand_day","Puptake_day"] -list_Psoilpools_tow = [x+"_hour_mng_keep" for x in list_Psoilpools] -list_fluxes_tow = [x+"_hour_keep" for x in ["fPdynm_ipri_ilab","fPdynm_ilab_isol","fPdynm_isec_ilab","fPdynm_otot_ilab","fPloss_ilab_out"]] -list_Pconc_tow = ["conc_root_data","conc_grain_data","concstar_shootwograin_data","conc_shootwograin_data","RSR","success_optim_data"] -list_Pindic_tow = ["RSR","success_optim_data"] -# -list_list = ['SIMvar','biomass','biomassP','Pconc','Pdemandsupply','Psoilpools','fluxes','Pconc',"Pindic"] +##define list of variables +#list_Psoilpools = ["Pilab","Polab","Posta","Pipri","Pisec","Pxocc","Pxtot","Pisol"] +#list_SIMvar_tow = ["LAI_data","nleaf_data"] +#list_biomass_tow = ["root_data","shootwograin_data","grain_data","shoot_data","shootwosene_data"] # +#list_biomassP_tow = ["rootP_data","shootwograinP_data","grainP_data","reserveP_data"] +#list_Pdemandsupply_tow = ["Psupply_day", "Pdemand_day","Puptake_day"] +#list_Psoilpools_tow = [x+"_hour_mng_keep" for x in list_Psoilpools] +#list_fluxes_tow = [x+"_hour_keep" for x in ["fPdynm_ipri_ilab","fPdynm_ilab_isol","fPdynm_isec_ilab","fPdynm_otot_ilab","fPloss_ilab_out"]] +#list_Pconc_tow = ["conc_root_data","conc_grain_data","concstar_shootwograin_data","conc_shootwograin_data","RSR","success_optim_data"] +#list_Pindic_tow = ["RSR","success_optim_data"] +## +list_list = ['SIMvar','biomass','biomassP','Pconc','Pdemandsupply','Psoilpools','fluxes',"Pindic"] #dic_name_simul = {}; #dic_name_simul["10111_"]="nointeract";dic_name_simul["11001_"]="nonoptim";dic_name_simul["11111_"]="optim" @@ -75,32 +77,27 @@ dic_conversion["Pindic"] = 1.0 #conversion from gP/gDM to gP/kgDM len_spinup=50 end_dayfocus=600 -#read output files -for namesimul in dic_name_simul.keys(): - for treat in ["P0"]:#["P0","P1.5","P3"]: - fic=path_rel+path_output+"/output_selectparam_3val_Tartas_prescribed/SIM+GPASOIL_"+namesimul+""+str(yri_simul)+"_config"+str(config)+"_nmonte"+str(nmonte_read_init)+"_"+str(nmonte_read_end)+"_grid0_1_treatment"+treat+"_LAI"+LAIrelation+".nc" - fich= Dataset(fic,'r',format='NETCDF4') - for list in list_list: - exec("list_to_read = list_"+list+"_tow") - for var in list_to_read: - exec(""+var+"_simul_"+dic_name_simul[namesimul]+"_"+dic_corres_treatdata_treatvar[treat]+"_avg = dic_conversion[list]*ma.average(fich.variables[var][:,len_spinup:end_dayfocus,0],axis=0)") - exec(""+var+"_simul_"+dic_name_simul[namesimul]+"_"+dic_corres_treatdata_treatvar[treat]+"_std = dic_conversion[list]*ma.std(fich.variables[var][:,len_spinup:end_dayfocus,0],axis=0)") - #add var (with proper std computation) - #1) shootP - dic_conversion_nb = 1.0 - exec("shootP_data_simul_"+dic_name_simul[namesimul]+"_"+dic_corres_treatdata_treatvar[treat]+"_avg = dic_conversion_nb * ma.average(fich.variables['shootwograinP_data'][:,len_spinup:end_dayfocus,0] + fich.variables['grainP_data'][:,len_spinup:end_dayfocus,0],axis=0)") - exec("shootP_data_simul_"+dic_name_simul[namesimul]+"_"+dic_corres_treatdata_treatvar[treat]+"_std = dic_conversion_nb * ma.std(fich.variables['shootwograinP_data'][:,len_spinup:end_dayfocus,0] + fich.variables['grainP_data'][:,len_spinup:end_dayfocus,0],axis=0)") - #2) RSRwosene - dic_conversion_nb = 1.0 - exec("RSRwosene_simul_"+dic_name_simul[namesimul]+"_"+dic_corres_treatdata_treatvar[treat]+"_avg = dic_conversion_nb * ma.average(fich.variables['root_data'][:,len_spinup:end_dayfocus,0] / fich.variables['shootwosene_data'][:,len_spinup:end_dayfocus,0],axis=0)") - exec("RSRwosene_simul_"+dic_name_simul[namesimul]+"_"+dic_corres_treatdata_treatvar[treat]+"_std = dic_conversion_nb * ma.std(fich.variables['root_data'][:,len_spinup:end_dayfocus,0] / fich.variables['shootwosene_data'][:,len_spinup:end_dayfocus,0],axis=0)") - # - fich.close() +#################### +#read GPCROP output# +#################### +list_treat=["P0"] +path_rel="./" +script=path_rel+"/path.txt";exec(open(script).read()) +script=path_rel+path_script+"read_Tartas_simul.py";exec(open(script).read()) + + +########################### +#add a filter before plots# +########################### + +list_suffixe_select=[""] + +path_rel="./" +script=path_rel+"/path.txt";exec(open(script).read()) +script=path_rel+path_script+"add_filter_Tartas_simul.py";exec(open(script).read()) + + -#update the lists if necessary -#list_Pconc_tow = ["conc_root_data","conc_grain_data","conc_shootwograin_data"] - -day_simul=np.arange(0,end_dayfocus-len_spinup) ############# #plot itself# @@ -166,7 +163,7 @@ exec("line"+str(line)+"_ax2_label='[-]'") exec("line"+str(line)+"_list_color=list_color") # line=6 -exec("list_var_line"+str(line)+"_ax1=['conc_root_data','conc_grain_data','concstar_shootwograin_data','conc_shootwograin_data']") +exec("list_var_line"+str(line)+"_ax1=['conc_root_data','conc_grain_data','conc_shootwograin_data','concdelta_shootwograin_data']") exec("list_var_line"+str(line)+"_ax2=[]") exec("line"+str(line)+"_ax1_bound=[0,0.008]") exec("line"+str(line)+"_ax2_bound=[]") @@ -175,10 +172,10 @@ exec("line"+str(line)+"_ax2_label=''") exec("line"+str(line)+"_list_color=list_color") - #compute xlim -var='Pilab_hour_mng_keep';exec("var=var+'_simul_'+dic_name_simul[dic_name_simul.keys()[0]]+'_P0_avg'") -exec("forxlim=ma.where(ma.getmaskarray("+var+"),0,np.arange(len("+var+")))") +#var='Pilab_hour_mng_keep';exec("var=var+'_simul_'+dic_name_simul[dic_name_simul.keys()[0]]+'_P0_avg'") +var='Pilab_hour_mng_keep';exec("var=ma.average("+var+"_simul_"+dic_name_simul[dic_name_simul.keys()[0]]+"_P0,axis=0)") +forxlim=ma.where(ma.getmaskarray(var),0,np.arange(len(var))) forxlim=ma.masked_where(forxlim==0,forxlim) dic_name_simul_title={}; @@ -211,8 +208,8 @@ dic_var_legend['RSRwosene']='root:shoot ratio wo senesc.' dic_var_legend['success_optim_data']='optimization success' dic_var_legend['conc_root_data']='$conc_{root}$' dic_var_legend['conc_grain_data']='$conc_{grain}$' -dic_var_legend['concstar_shootwograin_data']='$conc_{swog}$' -dic_var_legend['conc_shootwograin_data']='$conc_{\Delta swog}$' +dic_var_legend['conc_shootwograin_data']='$conc_{swog}$' +dic_var_legend['concdelta_shootwograin_data']='$conc_{\Delta swog}$' panel=1 @@ -229,8 +226,8 @@ for line in np.arange(1,line+1): index_var=0 for var in list_var_ax1: varplot=var+"_simul_"+dic_name_simul[namesimul]+"_P0" - exec("ax1.plot(day_simul,"+varplot+"_avg,label=dic_var_legend[var],c=line"+str(line)+"_list_color[index_var])") #,c=dic_treat_color[treat],ls=list_dash[index_var] - exec("ax1.fill_between(day_simul,"+varplot+"_avg-"+varplot+"_std,"+varplot+"_avg+"+varplot+"_std,color='lightgrey',alpha=0.3)") + exec("ax1.plot(day_simul,ma.average("+varplot+",axis=0),label=dic_var_legend[var],c=line"+str(line)+"_list_color[index_var])") #,c=dic_treat_color[treat],ls=list_dash[index_var] + exec("ax1.fill_between(day_simul,ma.average("+varplot+",axis=0)-ma.std("+varplot+",axis=0),ma.average("+varplot+",axis=0)+ma.std("+varplot+",axis=0),color='lightgrey',alpha=0.3)") index_var=index_var+1 exec("plt.ylabel(line"+str(line)+"_ax1_label)") if index_panel_line==0: @@ -245,8 +242,8 @@ for line in np.arange(1,line+1): for var in list_var_ax2: varplot=var+"_simul_"+dic_name_simul[namesimul]+"_P0" print(varplot) - exec("ax2.plot(day_simul,"+varplot+"_avg,label=dic_var_legend[var],c=line"+str(line)+"_list_color[index_var])") #,c=dic_treat_color[treat],ls=list_dash[index_var] - exec("ax2.fill_between(day_simul,"+varplot+"_avg-"+varplot+"_std,"+varplot+"_avg+"+varplot+"_std,color='lightgrey',alpha=0.3)") + exec("ax2.plot(day_simul,ma.average("+varplot+",axis=0),label=dic_var_legend[var],c=line"+str(line)+"_list_color[index_var])") #,c=dic_treat_color[treat],ls=list_dash[index_var] + exec("ax2.fill_between(day_simul,ma.average("+varplot+",axis=0)-ma.std("+varplot+",axis=0),ma.average("+varplot+",axis=0)+ma.std("+varplot+",axis=0),color='lightgrey',alpha=0.3)") index_var=index_var+1 exec("plt.ylabel(line"+str(line)+"_ax2_label)") if index_panel_line==nb_line-1: diff --git a/GPCROP/plot_scaleonsite_test.py b/GPCROP/plot_scaleonsite_test.py index 08ccc50..1405c13 100644 --- a/GPCROP/plot_scaleonsite_test.py +++ b/GPCROP/plot_scaleonsite_test.py @@ -26,8 +26,11 @@ from itertools import product path_rel="./" script=path_rel+"/path.txt";exec(open(script).read()) - +treatment="P3" scaling_factor_list=[0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 2.0, 3.0] +alpha_PUE=0.5 +lagstop=10 + combi_optimRSR_optimconc = [(0,0),(1,0),(0,1),(1,1)] #[(0,0),(1,0),(0,1),(1,1)] @@ -38,7 +41,7 @@ for combi in combi_optimRSR_optimconc: for var in list_var: exec(""+var+"_"+str(optimRSR)+"_"+str(optimconc)+"=[]") for scaling_factor_test in scaling_factor_list: - fic_txt_tor = open(path_rel+path_output+'/out_test_scaleonsite/out_test_'+str(optimRSR)+'_'+str(optimconc)+'_'+str(scaling_factor_test)+'.txt', 'r') + fic_txt_tor = open(path_rel+path_output+'/out_test_scaleonsite/out_test_'+str(optimRSR)+'_'+str(optimconc)+'_'+str(scaling_factor_test)+'_'+treatment+'_alphaPUE'+str(alpha_PUE)+'_lagstop'+str(lagstop)+'.txt', 'r') content = fic_txt_tor.readline() index_list_var=0 for var in list_var: @@ -58,14 +61,20 @@ for combi in combi_optimRSR_optimconc: ylim_biom_shoot=[0,200] ylim_biom_tot=[0,250] ylim_RSR=[0.10,0.7] -ylim_conc=[0.2,3.0] -ylim_concstar=[0.2,1.2] +ylim_conc=[0.2,4.1] +ylim_concstar=[0.2,4.1] ylim_Psupply=[0.0,0.02] ylim_Pdemand=[0.0,0.02] -conc_range=[0.0005617977528089888*1000/2.,0.0011235955056179776*1000*2.] -concstar_range=[0.0005617977528089888*1000,0.0011235955056179776*1000] -RSR_range=[0.14,0.6] +conc_min = 0.5e-3 +conc_def = 0.002 #to be read from GPCROPinputfile +conc_range=[conc_min*1000/2.,conc_def*1000*2.] +concstar_range=[conc_min*1000,conc_def*1000] +RSR_range=[0.16,0.68] + +dic_var_label={};dic_var_label["biom_shoot"]="biom$_{shoot}$";dic_var_label["biom_root"]="biom$_{root}$";dic_var_label["biom_tot"]="biom$_{tot}$";dic_var_label["RSR"]="RSR";dic_var_label["concstar"]="conc$_{swog}$";dic_var_label["conc"]="$conc_{\Delta swog}$" + +dic_combi_label={};dic_combi_label[(0,0)]="optimized: none";dic_combi_label[(1,0)]="optimized: RSR";dic_combi_label[(0,1)]="optimized: conc$_{swog}$";dic_combi_label[(1,1)]="optimized: RSR and conc$_{swog}$" index_subplot=1 for var in list_var: #line within var LOOP ON LINE FIRST @@ -77,18 +86,19 @@ for var in list_var: #line within var LOOP ON LINE FIRST if var=="RSR": legend=['RSR_default','RSRmax'] elif var=="conc": - legend=['conc_min','conc_default'] + legend=['$conc_{\Delta swog,min}$','$conc_{\Delta swog,def}$'] elif var=="concstar": - legend=['concstar_min','concstar_default'] + legend=['$conc_{swog,min}$','$conc_{swog,def}$'] exec("plt.plot([scaling_factor_list[0],scaling_factor_list[len(scaling_factor_list)-1]],["+var+"_range[0],"+var+"_range[0]],label=legend[0])") exec("plt.plot([scaling_factor_list[0],scaling_factor_list[len(scaling_factor_list)-1]],["+var+"_range[1],"+var+"_range[1]],label=legend[1])") if combi==combi_optimRSR_optimconc[0]: plt.legend() if var==list_var[0]: - plt.title(combi) + plt.title(dic_combi_label[combi]) #exec("plt.scatter(scaling_factor_list,"+var+"_"+str(optimRSR)+"_"+str(optimconc)+")") exec("plt.plot(scaling_factor_list,"+var+"_"+str(optimRSR)+"_"+str(optimconc)+",marker='o',color='k')") if combi==combi_optimRSR_optimconc[0]: - plt.ylabel(var) + plt.ylabel(dic_var_label[var]) + plt.xlabel('scaling factor') index_subplot=index_subplot+1 plt.show() diff --git a/SIM_vsMueller_2023/ReadPlotOPTIM_new_v2modules_resampling.py b/SIM_vsMueller_2023/ReadPlotOPTIM_new_v2modules_resampling.py index 888adcd..5a3111f 100644 --- a/SIM_vsMueller_2023/ReadPlotOPTIM_new_v2modules_resampling.py +++ b/SIM_vsMueller_2023/ReadPlotOPTIM_new_v2modules_resampling.py @@ -37,7 +37,7 @@ threshold = float(sys.argv[5]) LAIrelationship = "LIN" #size_sample=72 #size of the final file. At global scale, the size is imposed by the number of GPCROP parameters I want to test (i.e. the nb of lines in GPCROPinputfile_for_GPCROPuncertainty_global.txt) -size_sample=250 +size_sample=250 #size of the final file. Test on Tartas for more param values tested (following Sobol analysis) #leveloptimkeep=leveloptim diff --git a/SIM_vsMueller_2023/__pycache__/myfoncGGCMI.cpython-36.pyc b/SIM_vsMueller_2023/__pycache__/myfoncGGCMI.cpython-36.pyc deleted file mode 100644 index 0bc8bc65c8857cfec01e9f54ad89f42b44a01c0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7449 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 diff --git a/SIM_vsMueller_2023/myfoncGGCMI.pyc b/SIM_vsMueller_2023/myfoncGGCMI.pyc deleted file mode 100644 index a9b8a30423ee8ebb592b5199857569dadb812b2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9680 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 -- GitLab