Version 18 (modified by dgoll, 7 years ago) (diff) |
---|
For r4535 and newer: External nitrogen and phosphorus inputs to the ecosystem PART 1: natural inputs
WARNING: If you are running an ENSEMBLE configuration see remarks at the bottom.
WARNING: The routine will automatically set any flux to zero for which you do not give the filename. Please check your outputs to make sure you fluxes are set correctly.
External inputs of nutrient to the ecosystem can be either (1) read in from global maps, (2) prescribed from run.def (for site simulations) or (3) computed dynamically in case of biological nitrogen fixation (BNF) and phosphorus weathering. Several flags handle this.
List of natural input fluxes currently considered
natural nitrogen input (g N m-2 yr-1)
- Ndep_NHX: atmospheric NHX deposition
- Ndep_NOY: atmospheric NOY deposition
- Nbnf: Biological N2 fixation
natural phosphorus input (g P m-2 yr-1)
- Pdep_p: atmospheric P deposition (labile P)
- Pweat: P release from weathering
Flags to control the input fluxes in run.def
- Ninput_update: 0=inputs are taken from restart file / 1=inputs are taken from run.def or maps
- impose_Ninput: y=impose nutrient inputs either from map or run.def (default n)
- impose_Nmap: y=read nutrient inputs from maps (if impose_Ninput=y), n=read from run.def (if impose_Ninput=y)
For impose_Nmap=n use the following variables to set the fluxes:
- Ndep_NHX: annual NHX input by deposition,
- Ndep_NOY: annual NOY input by deposition
- Nbnf: annual N input by BNF (if read_bnf=y)
- Pdep_p: annual P input by deposition
- Pweat: annual P input by wethering (if read_pweat=y)
For impose_Nmap=y use the following variables to set the input files:
- Ndep_NHX_FILE
- Ndep_NOY_FILE
- Nbnf_FILE (if read_bnf=y)
- Pdep_p_FILE
- Pweat_FILE (if read_weat=y)
examples
Prescribe all input fluxes from run.def (useful if you run a site simulation)
# impose NP inputs(y) .... NINPUT_UPDATE=1 NINPUT_YEAR=1 IMPOSE_NINPUT=y # ... from run.def(n) IMPOSE_NMAP=n # annual fluxes [g m-2 yr-1] Ndep_NHX=0.01 Ndep_NOY=0.02 Pdep_p=.01 # also read BNF (y); instead of computing dynamically READ_BNF=y Nbnf=1. # read BNF(y); instead of computing dynamically READ_PWEAT=y Pweat=.01
Prescribe all input fluxes from maps (default procedure for regional to global simulations
# in case you run ENSEMBLE configuration: # hardcode NINPUT_UPDATE=1 in slowproc.f90 # impose NP inputs(y) .... NINPUT_UPDATE=1 NINPUT_YEAR=1 IMPOSE_NINPUT=y # ... from maps(y) IMPOSE_NMAP=y # I store the three fluxes as variables Ndep_NHX, Ndep_NOY, and Pdep in a single file: Ndep_NHX_FILE=deposition.nc Ndep_NOY_FILE=deposition.nc Pdep_p_FILE=deposition.nc # we compute BNF and weathering dynamically (input files are currently not available) READ_PWEAT=n READ_BNF=n
Deposition data
We have time series of N and P deposition from Wang et al. (2017) 'Global forest carbon uptake due to nitrogen and phosphorus deposition from 1850 to 2100' ready to use for ORCHIDEE.
since r4535
curie:/ccc/work/cont003/dsm/p529goll/NP_deposition/final_r4535
before
Mind the setup is different (other flags,etc)
curie:/ccc/work/cont003/dsm/p529goll/NP_deposition/final_NEW
use libIGCM to update yearly the fluxes in run.def in case of IMPOSE_NMAP=n
Add this to orchidee_ol.driver COMP/orchidee_ol.driver:
########################################################################## # NP DEPOSITION FROM FILE - SITE SIMULATION ############################################################################################## if [ -f NPdeposition.txt ] ; then # If this file exist, then read N and P deposition NOY=`grep Annee_${year} NPdeposition.txt | awk -F= '{print $2}'` NHX=`grep Annee_${year} NPdeposition.txt | awk -F= '{print $3}'` Pdep=`grep Annee_${year} NPdeposition.txt | awk -F= '{print $4}'` if [ X"${NOY}" = X ] ; then # The grep returned empty variable: stop execution IGCM_debug_Exit "The file NPdeposition.txt.txt do not contain the current year." IGCM_debug_Verif_Exit fi IGCM_comp_modifyDefFile nonblocker run.def Ndep_NHX ${NHX} IGCM_comp_modifyDefFile nonblocker run.def Ndep_NOY ${NOY} IGCM_comp_modifyDefFile nonblocker run.def Pdep_p ${Pdep} fi ##############################################################################################
add to COMP/stomate.card the link to your deposition file
[ParametersFiles] List= (${SUBMIT_DIR}/PARAM/run.def, .),\ (/ccc/work/cont003/dsm/p529goll/AmaFACE_forcing/v01/CO2_1850_2100_AmaFACE.txt, CO2.txt),\ (/ccc/work/cont003/dsm/p529goll/AmaFACE_forcing/AmaFACE18502100_NPdeposition.txt, NPdeposition.txt)
the deposition file should store yearly fluxes in g/m2/yr; sequence is Annee_YEAR,NOY,NHX,Pdep:
Annee_1850,0.0715,0.0715,0.0144 Annee_1851,0.0715,0.0715,0.0144 Annee_1852,0.0715,0.0715,0.0144 Annee_1853,0.0715,0.0715,0.0144 Annee_1854,0.0715,0.0715,0.0144 Annee_1855,0.0715,0.0715,0.0144 Annee_1856,0.0715,0.0715,0.0144 Annee_1857,0.072,0.072,0.0144 Annee_1858,0.072,0.072,0.0144
For ENSEMBLE setup
Currently, the flag NINPUT_UPDATE is overwritten by libIGCM so that nutrient inputs are not read from run.def.
Till I found a solution you need to hardcode the value in the source code in src_sechiba/slowproc.f90:
Ninput_update=1 !DSG AMA Ninput_update=0 !DSG AMA !JC modif just simply read the nutrient input file when Ninput_update !DSG AMA !> 0 !DSG AMA CALL getin_p('NINPUT_UPDATE', Ninput_update) !DSG AMA IF (Ninput_update .GT. 0 ) THEN !DSG AMA WRITE(numout,*) "Update Nutrient inputs",Ninput_update !DSG AMA ELSE !DSG AMA WRITE(numout,*) "DONOT update Nutrient inputs",Ninput_update !DSG AMA ENDIF
then recompile the model.