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

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
zcmb_iTWlOx89uYSzN}-rPU6INlP0F9ts4^OMg>X}k~G^U6~ry$v}seh%k0jqJ@M|&
zdS*6R7Y7Py5f2~)5)y@11nNtLctZlwC!Q;KLPDZE!DA8X0|Eix_np~YCrvL%yWTl_
z&VTOb|Nh$<=l?M=R(}6qwW`TJIsBf(lN23ee0&{KH|Cnt&F9RuTsNOL*9zVIkhwl=
zt_`c0GxZVE7&X^Mjl&`Grd~9SF>`IqmJ6o7!!*XtwQ-b(%xf5b!uZ3=Od5Ygnfr`C
zs?3z}i^}XY{+KemjK4#f-NqkRX4?1@%Iq=zq%wPrf1ffl#-CDV*7!S>nKS+_W$rir
zZe{ive_EOS#^0mN1IFL0%mJRj^1=*`B>XQvOA9y`la3%Md8wBKX`j%FBfnkE2s_Z?
znb;5Fz%PZ>w3<h``#gbsGK~adZ#ibh&*3qq@LXUp7h5eQyOFlr^JnIptwk@6z0Cz5
z^DQP^$xF(HO+Ty#XU;UeMzHeeOUG91O31->Tce}}<k>dmm^Zvw1h!v5*(gcQAa`^v
zY6M3sal0ACVRJRO;nj~`j{Kk=BuAH@zFfYMTy6*TdJvaS96NFHXk)V$HLDjdUby`9
zVrx@_$3e;+C!EnZQ%;r3;6uU%Jjwk?Qe&<=N^@q*aPPCX9fR+(*1lv{&2G(BI*cDL
zUTuU;ExYDbk_A?2KCcs`Lnu_EDE0@sn@NmX!`YVc1f4P_x(}3uGaI|DE*rJ2{UC#l
z*co<%orsyYus!W?Z<n3y^U$%yl<28hMv;`HvE4K2o@zs-=LfncPSrYA+r=3zho<`+
z;yG(8myod>vbY2+=ddXh=4Nl_wpC%rtkT9+wVpHaIY|nHec309In7eYZH0KO@L2Y-
zrs1V)=_oSQsI{4dt4&)~1f}k!IQmvQm5{L%2epBo24?|kfM$%o7lnjJV4TxVAt&4t
zSiMvEBMPg=fTf*lVzW4nLz%&ulvbWJxAJBy&l8!&=J$Ym-BQ8q0U&rbF5z$;igSn%
zaW?MnmWR9Lt3dVjf&r${5^Y#SWzO6xn9k#zw^xPQ(#j*87IU%Ph`@#=U`_L=#doW~
zRh-`VzPSp0x{7wAq@iX80}`7BQ_F!(<Uz)!Uqh*3qx?*r3(2Lh3I2r*CZsO#;3Rdi
z2PGjngm79xZMA}??{YY`cqNFVL@nw;Qxvp3c|w$=-H=4r!z5kcS*H}P&13c_NGXBM
zitlYE<yH`H2GCn-5T|3P!8m1GJ5W$idvVHaMvApmw8;%S_d5?dQ@NeFea@Wokh9x@
zgeHKCm+1Tu8L9w@1fT#U+|D_`4B=o|Uyv}7qrgj#1X;lsym~!v<}7P0PUa5W8WMK_
z3h;P{1`;Q|B?Ms<auf56pckkZZ^YaNhA|R(4;T%bTA|BesgziZszot`PqMZ2<dqAh
zr#@@B1RAwOJ!*>Al3by~1=YB-+#vZ6D-wDY7zWF0GQ1HaYpZeSXBwN>a35fMDd>8X
z1PeSYjbDQ;WPx%`9Zr~mwx+fcO7{>*?q}G6{n7A5X`q}YyyC#~%QRqIL~<CEgk<CF
zarT1Ulg@%O=2WQzxWOKqzm0;`kYEy+4S9;Mb7OZi9*$7KT)YG(K&ZhT2>uLMGcyO~
zWGo*d%WeMkoT-uh5M*=!hp~_*ypv%JfkOpr;Q~Q|uNS2e&};;pr7$eHk05n<KJKGj
z9M6-R6UWO5kGdJn(+3FGD97(WlB8?56*-V33=+%!Eh=a3J?KC}6AJ*Ik$be;vf;Uu
z5Q_m$QmaQE<l7?V7@P6X8uTGt<}`3Mj#?>=(5AJm@*v8!sM=24lOVe%*pkhGvhrY+
zKK&+fJ!+>gF6HCm{&8xT$553_Au-M_0AR>D?o8x{kgL*s@kA!@NX}nG25QzyI9Lq6
zf=iG>IIG|h98|cba7y8hu1=U+@(aLC8jt;S5K1f4l7ET(9DpG$ea2ixc6osiT+&Hh
z>3Tg^8eYdzaCDNKTI^MyJ@3kTqOw^JyqXFZOQqu~P+2aQ)N4KHSpDoi_hcHSl3;h)
zEw{YbYxIWW92EZLFP#?+Bh|xNAUDP3XtL&N0+&;cp0%HL7@iR5C&W3C1}d+#(5*N~
zs&QBe%68(gS;ma#QIin8CU?XsIul@DmCNPRv){i!fvQ<{5xk>4K1;o9nYbrY+fdJt
z=BxnkhNf~F32f(bzx$B7S0(RM=-4>gu7Y{1m<3uGM%kKydyK~=<N<+w0tO~SduRtO
z3^To)GaKK{yeF=H2}APp-dQQ*tYpqfKX>bXYYix6Mk46aS?#Olde}@_UNvw}gKT}Q
zJ;>qg%9W@MCszlX`CCMLXP~Sb$B2zhEF#b<I!~i)83tAz!L!TSQW{^PNHTUF>j0l1
zGnPY$KjDJFYC70COeBsCX9nS$v5J?RqJD)S(z*_r&R=N&ODlgiG>uZhkU^SI*huTo
zLR^W1(!HvSJxvS~yS?8SD&R(aaKIg?DBi1L92H|S+oRdc>(D}u164ua0E!&l#tiVY
zg$76ghY`4KpLU=RKC(s0Y?Poi5O$*@6c;3$9)Y|KId)W8OM;5x*1jyuiIS9-{h(G>
zJg}H{Qdtt2jd_<U-}>$pr7+Kg{E^L({8uA{gVi*Qnu#=ov`qvbPym!BKx`AXY_3%g
zQ<njt`vMc15qFv6k?|=JS&f>taMdoW;X%A*#JCAsBb4fvLTOK;N>ne`>fWlInu8G0
zS#Rs+z^5q3n!S$j!bYdIf$U96Xf`WlM7q`hi6EIcemCKSB@9$Dc5=-){{Fg~!Obso
za}Oe+(>dh~JD-A1I|!%K{_O%~KWgUbn~*1zbxQsPJjojn8)yZ{2~(IR$P8rRDs|O$
zxGK1?Sb3Tf0Um<{7*oelA?8i|(w$UvgkhqOlLaUTiLN`!S1F9Jd%)=^Js<!85|+8A
zm>PIQ_agP@G-RN2Nn$W&zQc8#GPibcnOP@AJf)Q>b8Fme?J!#q8!E%!P#7Q>r}1E&
zGni=O=SCAxn9d<Ck$ZuwE!fY_%eq43?e4ZFxct)_#<|K>PMXez4|F+LS~(&uk#)g*
zh<3Lo&D<Ooo{fN_rk^w$C!MP_<OS>jhWrCltvgpK)Dv70mnMB9aU{F8g~RfbG7G(#
z$Xj;zp@}=sWR%Gw6RKn@Dde>xqdsC9(Az2L+l417*CfO*$kEznrUCVs9q4~;Csz~3
z+Y;(b9@c}PB^99HnDcF)-~~yMhS^R=T!EG@N7wvMxP-W}Z4KUEcTHj`7jU35MQwo#
zIlI6z_EjT+KBa-=@NYM~`zdECzY|h43<qxllta!WO8a1pm_C3K{D{2#2wLGH9?92#
zkb!N-{S_lInR=QV#d;9B&YuV_Sfyzo2xi@fLr-P@Pj!N10AZ-7okE*+5!fI0Og1K~
zXB}E9xMLk4*6-CHnLQC6qUVUxZgdYb0C6ULjDut=nnlO%;t+OV$xuG#jtt`u3<{Y&
z03QWE3)#Hb+Qxy*KOMmlEcF8iYh4b2Xro2hihh(qwd_95WIq#u`ZRLZB&>O@KsvYK
zCF_A-zPX00Qn{FPeW}$fg?buy4Q!=rPzlYIxE)B%SJxtjmt<5*58lQV)u>Sk;V*{`
z@X46V%kqyeFPBBLz+^ysck6P}t^nOO5>BJmK+(yK*yUoH*2!asA=?SXg+V9p80MY*
z&H-ly!Kaiv51VHu@V$?W1s_<`2OppTRf`*<Kaktda$WF2i4lD7sgnhtAj#XwZQ!#I
z>eaIj;6ngv;RW#Zdu8Cm$gG73YzLoiCGG$p2DK{^__D<f--$W8*}z=hVlEHN+3Bz&
zVGehR**zk*Z^Ay(J`7rJ2kqQVCa*C0DicVSac?pC8WLSaxL;@SRU|?NuBghqz;M4o
zGWC}GO(w9J_L5vc7{E<Ahu)3>&HA}}1K|pRKsn&k(?SQ(7#o5?2j{`e+s2`<Xb*0d
zKJAL?ZFC`pWMfoFHGA|TRRpW}!dbwPD{8&%<elcJ|EDvI`}WRO$#4npY7}|u2#9Pr
zjQ28kF9B6r#T}z$OZeE%cKvrP0ZMIoffjKISj62C0*{-xms*3X!O!2eM^bNB-nQg-
zE9b&5qBd*v?pbM;x>pJ6iBz00f;S#%6220Ilu6t4)#tMjUVZ+Yz-ePKM)7{^-K<7l
zk}CE|X_-iB1VCBn!Dr?uGV#4SnpODJ^~8<>KAVPi0aqIa8t)?HxpTm*NUaBxje4yR
zS<NP}4id4@%k8)+_qwbdTp(iYeHpB&b0&An8An>BvK_(G^GSb%0`vp{izrw3WsGWM
zXW$~iwph;*DgY`U00NPB=B$(P<K4EL)ER6syZ(Yx`>?@T*yg2`Svg`DQ|fAZ4*E-e
z-&bU{dXoYDv#N98P!0hnT&;D<Y#74hOrkgqd>u552!rD!@U45M_gCCm%)r^bg515V
zn>&XJt7O<%4p3A4q5sA4#Z)kB)vw~6n(P_w)7N`#nrT><5*jEY88|W6;pjoKL=Ni8
zE4K^0+m8r?zR|3`^5RL5k1{>gp2h(KEgNyKg~R7Pwbene2R({Z4lP8FqARjK1@1Z`
z2k0jS40Le17a*jF-(bJZ<4mBj`1+#Tj8`)FLd(n{hMxnP&>ad8nq+2<c>08+BIy3a
zqXLPaa8v{}pLkTD6pj{rv>{&pE-%nOSdvto_pdL`yGN3ZwuiUJ36%#)eG0vXXXB_c
zzwp$N1aEh7OB+@nO=w+6zLQEWFGY*<&s35izJbOF*%Rr=Xz>mj5z?FEly&Z?h2*4s
zVBAxJ4+h>o#wq)Xh}gkPo`x51>ORp+$|)}*Nsoh8oflFsbGDuq?7uINlczAqdUaft
zu93?(qj+8Mg?j@ud3Npz>FO4M4Tq376wL^4iSawIm)o3wHM|j&dC<v=lpDH^yehVT
z<IW{BnZv_h>$>GpPZ^T@yn~F@fshuyPo0C=CSt9mI5{V)9a1f$gO6{45M<`VTH%!t
zX8EXb`Yk?c9EjJwRx2Az>$)T_y%OOCigK_+&~DVK^_wAo#E`1jN)#SQzujC5;qAwX
zpwI|p3w1T6wg}!@{eJ<dv@}?=;{FVS4V0;rHB9zI)VaV#C$E#OBpP_&4>}L?$y4ze
zKHQ5~Sw{x841A<>jektRy)Vmol@E983MM|x^H&{ijM4Uz>d+2#ml!~*ZbWsy>d+2#
zK3^m(Lz&r^=mg)=>c8Lo`|mGTo;{loSBDNATK($uTNnTG%4=u!PYEdh_ziyEJS$_<
zE&j^3UpVxrJ;qEdxFLmEkePv=DSh(HQ-G+%-{X<m@Mhd8z_Rq7+`>Vwf!49vZnQS7
z7MLcD3L;7tdFAJRo&+igHCn_QC&rR$g6llKxO7prFD1h?h|?&lC-%bRCD3&>=yE`p
z3e?@rgp%t%%;Yg9=b7*x(q2na<+(SRyvF2POn$)RCrp0I<Siz@MAAPx<pvNNaI2@G
z>Du++3q)LU49Pf*^SE;#FD-CwQ7jbs3>T-0#o~Bz6n}e)zbo!Qeh2;z7svhwh){h|

-- 
GitLab