wiki:DevelopmentActivities/inputRoutine

Version 19 (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:

  1. Ndep_NHX: annual NHX input by deposition,
  2. Ndep_NOY: annual NOY input by deposition
  3. Nbnf: annual N input by BNF (if read_bnf=y)
  4. Pdep_p: annual P input by deposition
  5. Pweat: annual P input by wethering (if read_pweat=y)

For impose_Nmap=y use the following variables to set the input files:

  1. Ndep_NHX_FILE
  2. Ndep_NOY_FILE
  3. Nbnf_FILE (if read_bnf=y)
  4. Pdep_p_FILE
  5. 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.