source: branches/publications/ORCHIDEE-GMv3.2/ORCHIDEE/src_parameters/constantes_var.f90 @ 6939

Last change on this file since 6939 was 6939, checked in by jinfeng.chang, 20 months ago

Update ORCHIDEE-GMv3.2 for publication

  • Property svn:keywords set to Date Revision
File size: 66.1 KB
Line 
1! =================================================================================================================================
2! MODULE       : constantes_var
3!
4! CONTACT      : orchidee-help _at_ listes.ipsl.fr
5!
6! LICENCE      : IPSL (2006)
7! This software is governed by the CeCILL licence see ORCHIDEE/ORCHIDEE_CeCILL.LIC
8!
9!>\BRIEF        constantes_var module contains most constantes like pi, Earth radius, etc...
10!!              and all externalized parameters except pft-dependent constants.
11!!
12!!\n DESCRIPTION: This module contains most constantes and the externalized parameters of ORCHIDEE which
13!!                are not pft-dependent.\n
14!!                In this module, you can set the flag diag_qsat in order to detect the pixel where the
15!!                temperature is out of range (look qsatcalc and dev_qsatcalc in qsat_moisture.f90).\n
16!!                The Earth radius is approximated by the Equatorial radius.The Earth's equatorial radius a,
17!!                or semi-major axis, is the distance from its center to the equator and equals 6,378.1370 km.
18!!                The equatorial radius is often used to compare Earth with other planets.\n
19!!                The meridional mean is well approximated by the semicubic mean of the two axe yielding
20!!                6367.4491 km or less accurately by the quadratic mean of the two axes about 6,367.454 km
21!!                or even just the mean of the two axes about 6,367.445 km.\n
22!!                This module is already USE in module constantes. Therefor no need to USE it seperatly except
23!!                if the subroutines in module constantes are not needed.\n
24!!               
25!! RECENT CHANGE(S):
26!!
27!! REFERENCE(S) :
28!! - Louis, Jean-Francois (1979), A parametric model of vertical eddy fluxes in the atmosphere.
29!! Boundary Layer Meteorology, 187-202.\n
30!!
31!! SVN          :
32!! $HeadURL: $
33!! $Date$
34!! $Revision$
35!! \n
36!_ ================================================================================================================================
37
38MODULE constantes_var
39
40  USE defprec
41
42  IMPLICIT NONE
43!-
44
45                         !-----------------------!
46                         !  ORCHIDEE CONSTANTS   !
47                         !-----------------------!
48
49  !
50  ! FLAGS
51  !
52  LOGICAL, SAVE :: NC_COMPRESSION_ENABLE !! activate netcdf output compression
53!$OMP THREADPRIVATE(NC_COMPRESSION_ENABLE)
54  LOGICAL :: river_routing      !! activate river routing
55!$OMP THREADPRIVATE(river_routing)
56  LOGICAL :: hydrol_cwrr        !! activate 11 layers hydrolgy model
57!$OMP THREADPRIVATE(hydrol_cwrr)
58  LOGICAL, SAVE :: ok_nudge_mc  !! Activate nudging of soil moisture
59!$OMP THREADPRIVATE(ok_nudge_mc)
60  LOGICAL, SAVE :: ok_nudge_snow!! Activate nudging of snow variables
61!$OMP THREADPRIVATE(ok_nudge_snow)
62  LOGICAL, SAVE :: nudge_interpol_with_xios  !! Activate reading and interpolation with XIOS for nudging fields
63!$OMP THREADPRIVATE(nudge_interpol_with_xios)
64  LOGICAL :: do_floodplains     !! activate flood plains
65!$OMP THREADPRIVATE(do_floodplains)
66  LOGICAL :: do_irrigation      !! activate computation of irrigation flux
67!$OMP THREADPRIVATE(do_irrigation)
68  LOGICAL :: do_fullirr         !! activate idealized irrigation scheme
69!$OMP THREADPRIVATE(do_fullirr)
70  LOGICAL :: ok_sechiba         !! activate physic of the model
71!$OMP THREADPRIVATE(ok_sechiba)
72  LOGICAL :: ok_co2             !! activate photosynthesis
73!$OMP THREADPRIVATE(ok_co2)
74  LOGICAL :: ok_stomate         !! activate carbon cycle
75!$OMP THREADPRIVATE(ok_stomate)
76  LOGICAL :: ok_dgvm            !! activate dynamic vegetation
77!$OMP THREADPRIVATE(ok_dgvm)
78  LOGICAL :: ok_pheno           !! activate the calculation of lai using stomate rather than a prescription
79!$OMP THREADPRIVATE(ok_pheno)
80  LOGICAL :: ok_bvoc            !! activate biogenic volatile organic coumpounds
81!$OMP THREADPRIVATE(ok_bvoc)
82  LOGICAL :: ok_leafage         !! activate leafage
83!$OMP THREADPRIVATE(ok_leafage)
84  LOGICAL :: ok_radcanopy       !! use canopy radiative transfer model
85!$OMP THREADPRIVATE(ok_radcanopy)
86  LOGICAL :: ok_multilayer      !! use canopy radiative transfer model with multi-layers
87!$OMP THREADPRIVATE(ok_multilayer)
88  LOGICAL :: ok_pulse_NOx       !! calculate NOx emissions with pulse
89!$OMP THREADPRIVATE(ok_pulse_NOx)
90  LOGICAL :: ok_bbgfertil_NOx   !! calculate NOx emissions with bbg fertilizing effect
91!$OMP THREADPRIVATE(ok_bbgfertil_NOx)
92  LOGICAL :: ok_cropsfertil_NOx !! calculate NOx emissions with fertilizers use
93!$OMP THREADPRIVATE(ok_cropsfertil_NOx)
94!!!! crop rotation
95  LOGICAL,SAVE :: ok_rotate     !! activate crop rotation
96!$OMP THREADPRIVATE(ok_rotate)
97  INTEGER(i_std), SAVE :: rotation_update !!number of years to update rotation system
98!$OMP THREADPRIVATE(rotation_update)
99  LOGICAL, SAVE :: nvm_rot       !! flag to read rotation command for nvm than for standard PFT setting
100!$OMP THREADPRIVATE(nvm_rot)
101  LOGICAL, SAVE :: nvm_plnt      !! flag to read planting date for nvm than for standard PFT setting
102!$OMP THREADPRIVATE(nvm_plnt)
103  LOGICAL, SAVE :: nvm_nfert     !! flag to read fertilizer for nvm than for standard PFT setting
104!$OMP THREADPRIVATE(nvm_nfert)
105  INTEGER(i_std),SAVE :: cyc_rot_max !! maximum length of rotation cycle
106!$OMP THREADPRIVATE(cyc_rot_max)
107  INTEGER(i_std),SAVE :: rot_cmd_max = 5     !! maximum number of transfering command in one rotation
108!$OMP THREADPRIVATE(rot_cmd_max)
109  LOGICAL :: dyn_plntdt
110!$OMP THREADPRIVATE(dyn_plntdt)
111  LOGICAL :: dyn_cropfert
112!$OMP THREADPRIVATE(dyn_cropfert)
113!!!! end crop rotation, xuhui
114  LOGICAL :: ok_co2bvoc_poss    !! CO2 inhibition on isoprene activated following Possell et al. (2005) model
115!$OMP THREADPRIVATE(ok_co2bvoc_poss)
116  LOGICAL :: ok_co2bvoc_wilk    !! CO2 inhibition on isoprene activated following Wilkinson et al. (2006) model
117!$OMP THREADPRIVATE(ok_co2bvoc_wilk)
118 
119  LOGICAL, SAVE :: OFF_LINE_MODE = .FALSE.  !! ORCHIDEE detects if it is coupled with a GCM or
120                                            !! just use with one driver in OFF-LINE. (true/false)
121!$OMP THREADPRIVATE(OFF_LINE_MODE) 
122  LOGICAL, SAVE :: impose_param = .TRUE.    !! Flag impos_param : read all the parameters in the run.def file
123!$OMP THREADPRIVATE(impose_param)
124  CHARACTER(LEN=80), SAVE     :: restname_in       = 'NONE'                 !! Input Restart files name for Sechiba component 
125!$OMP THREADPRIVATE(restname_in)
126  CHARACTER(LEN=80), SAVE     :: restname_out      = 'sechiba_rest_out.nc'  !! Output Restart files name for Sechiba component
127!$OMP THREADPRIVATE(restname_out)
128  CHARACTER(LEN=80), SAVE     :: stom_restname_in  = 'NONE'                 !! Input Restart files name for Stomate component
129!$OMP THREADPRIVATE(stom_restname_in)
130  CHARACTER(LEN=80), SAVE     :: stom_restname_out = 'stomate_rest_out.nc'  !! Output Restart files name for Stomate component
131!$OMP THREADPRIVATE(stom_restname_out)
132  INTEGER, SAVE :: printlev=2       !! Standard level for text output [0, 1, 2, 3]
133!$OMP THREADPRIVATE(printlev)
134
135  !
136  ! TIME
137  !
138  INTEGER(i_std), PARAMETER  :: spring_days_max = 40  !! Maximum number of days during which we watch for possible spring frost damage
139
140  !
141  ! SPECIAL VALUES
142  !
143  INTEGER(i_std), PARAMETER :: undef_int = 999999999     !! undef integer for integer arrays (unitless)
144  !-
145  REAL(r_std), SAVE :: val_exp = 999999.                 !! Specific value if no restart value  (unitless)
146!$OMP THREADPRIVATE(val_exp)
147  REAL(r_std), PARAMETER :: undef = -9999.               !! Special value for stomate (unitless)
148 
149  REAL(r_std), PARAMETER :: min_sechiba = 1.E-8_r_std    !! Epsilon to detect a near zero floating point (unitless)
150  REAL(r_std), PARAMETER :: undef_sechiba = 1.E+20_r_std !! The undef value used in SECHIBA (unitless)
151 
152  REAL(r_std), PARAMETER :: min_stomate = 1.E-8_r_std    !! Epsilon to detect a near zero floating point (unitless)
153  REAL(r_std), PARAMETER :: large_value = 1.E33_r_std    !! some large value (for stomate) (unitless)
154
155  REAL(r_std), SAVE :: alpha_nudge_mc                    !! Nudging constant for soil moisture
156!$OMP THREADPRIVATE(alpha_nudge_mc)
157  REAL(r_std), SAVE :: alpha_nudge_snow                  !! Nudging constant for snow variables
158!$OMP THREADPRIVATE(alpha_nudge_snow)
159
160  !
161  !  DIMENSIONING AND INDICES PARAMETERS 
162  !
163  INTEGER(i_std), PARAMETER :: ibare_sechiba = 1 !! Index for bare soil in Sechiba (unitless)
164  INTEGER(i_std), PARAMETER :: ivis = 1          !! index for albedo in visible range (unitless)
165  INTEGER(i_std), PARAMETER :: inir = 2          !! index for albeod i near-infrared range (unitless)
166  INTEGER(i_std), PARAMETER :: nnobio = 1        !! Number of other surface types: land ice (lakes,cities, ...) (unitless)
167  INTEGER(i_std), PARAMETER :: iice = 1          !! Index for land ice (see nnobio) (unitless)
168  !-
169  !! Soil
170  INTEGER(i_std), PARAMETER :: classnb = 9       !! Levels of soil colour classification (unitless)
171  !-
172  INTEGER(i_std), PARAMETER :: nleafages = 4     !! leaf age discretisation ( 1 = no discretisation )(unitless)
173  !-
174  !! litter fractions: indices (unitless)
175  INTEGER(i_std), PARAMETER :: ileaf = 1         !! Index for leaf compartment (unitless)
176  INTEGER(i_std), PARAMETER :: isapabove = 2     !! Index for sapwood above compartment (unitless)
177  INTEGER(i_std), PARAMETER :: isapbelow = 3     !! Index for sapwood below compartment (unitless)
178  INTEGER(i_std), PARAMETER :: iheartabove = 4   !! Index for heartwood above compartment (unitless)
179  INTEGER(i_std), PARAMETER :: iheartbelow = 5   !! Index for heartwood below compartment (unitless)
180  INTEGER(i_std), PARAMETER :: iroot = 6         !! Index for roots compartment (unitless)
181  INTEGER(i_std), PARAMETER :: ifruit = 7        !! Index for fruits compartment (unitless)
182  INTEGER(i_std), PARAMETER :: icarbres = 8      !! Index for reserve compartment (unitless)
183  INTEGER(i_std), PARAMETER :: nparts = 8        !! Number of biomass compartments (unitless)
184  !-
185  !! indices for assimilation parameters
186  INTEGER(i_std), PARAMETER :: ivcmax = 1        !! Index for vcmax (assimilation parameters) (unitless)
187  INTEGER(i_std), PARAMETER :: npco2 = 1         !! Number of assimilation parameters (unitless)
188  !-
189  !! trees and litter: indices for the parts of heart-
190  !! and sapwood above and below the ground
191  INTEGER(i_std), PARAMETER :: iabove = 1       !! Index for above part (unitless)
192  INTEGER(i_std), PARAMETER :: ibelow = 2       !! Index for below part (unitless)
193  INTEGER(i_std), PARAMETER :: nlevs = 2        !! Number of levels for trees and litter (unitless)
194  !-
195  !! litter: indices for metabolic and structural part
196  INTEGER(i_std), PARAMETER :: imetabolic = 1   !! Index for metabolic litter (unitless)
197  INTEGER(i_std), PARAMETER :: istructural = 2  !! Index for structural litter (unitless)
198  INTEGER(i_std), PARAMETER :: nlitt = 2        !! Number of levels for litter compartments (unitless)
199  !-
200  !! carbon pools: indices
201  INTEGER(i_std), PARAMETER :: iactive = 1      !! Index for active carbon pool (unitless)
202  INTEGER(i_std), PARAMETER :: islow = 2        !! Index for slow carbon pool (unitless)
203  INTEGER(i_std), PARAMETER :: ipassive = 3     !! Index for passive carbon pool (unitless)
204  INTEGER(i_std), PARAMETER :: ncarb = 3        !! Number of soil carbon pools (unitless)
205  !-
206  !! For isotopes and nitrogen
207  INTEGER(i_std), PARAMETER :: nelements = 1    !! Number of isotopes considered
208  INTEGER(i_std), PARAMETER :: icarbon = 1      !! Index for carbon
209  !-
210  !! For wood product pool
211  INTEGER(i_std)            :: nwp = 2         !! Number of types of wood product pool considered
212  INTEGER(i_std), PARAMETER :: iwplcc = 1      !! Index for wood product pool from land cover change
213  INTEGER(i_std), PARAMETER :: iwphar = 2      !! Index for wood product pool from forest harvest
214  !
215  !! Indices used for analytical spin-up
216  INTEGER(i_std), PARAMETER :: nbpools = 7              !! Total number of carbon pools (unitless)
217  INTEGER(i_std), PARAMETER :: istructural_above = 1    !! Index for structural litter above (unitless)
218  INTEGER(i_std), PARAMETER :: istructural_below = 2    !! Index for structural litter below (unitless)
219  INTEGER(i_std), PARAMETER :: imetabolic_above = 3     !! Index for metabolic litter above (unitless)
220  INTEGER(i_std), PARAMETER :: imetabolic_below = 4     !! Index for metabolic litter below (unitless)
221  INTEGER(i_std), PARAMETER :: iactive_pool = 5         !! Index for active carbon pool (unitless)
222  INTEGER(i_std), PARAMETER :: islow_pool   = 6         !! Index for slow carbon pool (unitless)
223  INTEGER(i_std), PARAMETER :: ipassive_pool = 7        !! Index for passive carbon pool (unitless)
224
225  !! Indices used to check the mass balance closure
226  INTEGER(i_std), PARAMETER :: nmbcomp = 5               !! The total nomber of components in our mass balance check
227  INTEGER(i_std), PARAMETER :: iatm2land = 1             !! atmosphere to land fluxes such as GPP and co2_2_bm
228  INTEGER(i_std), PARAMETER :: iland2atm = 2             !! land to atmosphere fluxes such as Rh, Ra and product decomposition
229  INTEGER(i_std), PARAMETER :: ilat2out = 3              !! outgoing lateral flux i.e. DOC leaching for the litter routine
230  INTEGER(i_std), PARAMETER :: ilat2in = 4               !! incoming lateral flux i.e. N deposition for the land
231  INTEGER(i_std), PARAMETER :: ipoolchange = 5           !! change in pool size i.e. change in biomass
232
233  !
234  ! NUMERICAL AND PHYSICS CONSTANTS
235  !
236  !
237
238  !-
239  ! 1. Mathematical and numerical constants
240  !-
241  REAL(r_std), PARAMETER :: pi = 3.141592653589793238   !! pi souce : http://mathworld.wolfram.com/Pi.html (unitless)
242  REAL(r_std), PARAMETER :: euler = 2.71828182845904523 !! e source : http://mathworld.wolfram.com/e.html (unitless)
243  REAL(r_std), PARAMETER :: zero = 0._r_std             !! Numerical constant set to 0 (unitless)
244  REAL(r_std), PARAMETER :: undemi = 0.5_r_std          !! Numerical constant set to 1/2 (unitless)
245  REAL(r_std), PARAMETER :: un = 1._r_std               !! Numerical constant set to 1 (unitless)
246  REAL(r_std), PARAMETER :: moins_un = -1._r_std        !! Numerical constant set to -1 (unitless)
247  REAL(r_std), PARAMETER :: deux = 2._r_std             !! Numerical constant set to 2 (unitless)
248  REAL(r_std), PARAMETER :: trois = 3._r_std            !! Numerical constant set to 3 (unitless)
249  REAL(r_std), PARAMETER :: quatre = 4._r_std           !! Numerical constant set to 4 (unitless)
250  REAL(r_std), PARAMETER :: cinq = 5._r_std             !![DISPENSABLE] Numerical constant set to 5 (unitless)
251  REAL(r_std), PARAMETER :: six = 6._r_std              !![DISPENSABLE] Numerical constant set to 6 (unitless)
252  REAL(r_std), PARAMETER :: huit = 8._r_std             !! Numerical constant set to 8 (unitless)
253  REAL(r_std), PARAMETER :: mille = 1000._r_std         !! Numerical constant set to 1000 (unitless)
254
255  !-
256  ! 2 . Physics
257  !-
258  REAL(r_std), PARAMETER :: R_Earth = 6378000.              !! radius of the Earth : Earth radius ~= Equatorial radius (m)
259  REAL(r_std), PARAMETER :: mincos  = 0.0001                !! Minimum cosine value used for interpolation (unitless)
260  REAL(r_std), PARAMETER :: pb_std = 1013.                  !! standard pressure (hPa)
261  REAL(r_std), PARAMETER :: ZeroCelsius = 273.15            !! 0 degre Celsius in degre Kelvin (K)
262  REAL(r_std), PARAMETER :: tp_00 = 273.15                  !! 0 degre Celsius in degre Kelvin (K)
263  REAL(r_std), PARAMETER :: chalsu0 = 2.8345E06             !! Latent heat of sublimation (J.kg^{-1})
264  REAL(r_std), PARAMETER :: chalev0 = 2.5008E06             !! Latent heat of evaporation (J.kg^{-1})
265  REAL(r_std), PARAMETER :: chalfu0 = chalsu0-chalev0       !! Latent heat of fusion (J.kg^{-1})
266  REAL(r_std), PARAMETER :: c_stefan = 5.6697E-8            !! Stefan-Boltzman constant (W.m^{-2}.K^{-4})
267  REAL(r_std), PARAMETER :: cp_air = 1004.675               !! Specific heat of dry air (J.kg^{-1}.K^{-1})
268  REAL(r_std), PARAMETER :: cte_molr = 287.05               !! Specific constant of dry air (kg.mol^{-1})
269  REAL(r_std), PARAMETER :: kappa = cte_molr/cp_air         !! Kappa : ratio between specific constant and specific heat
270                                                            !! of dry air (unitless)
271  REAL(r_std), PARAMETER :: msmlr_air = 28.964E-03          !! Molecular weight of dry air (kg.mol^{-1})
272  REAL(r_std), PARAMETER :: msmlr_h2o = 18.02E-03           !! Molecular weight of water vapor (kg.mol^{-1})
273  REAL(r_std), PARAMETER :: cp_h2o = &                      !! Specific heat of water vapor (J.kg^{-1}.K^{-1})
274       & cp_air*(quatre*msmlr_air)/( 3.5_r_std*msmlr_h2o) 
275  REAL(r_std), PARAMETER :: cte_molr_h2o = cte_molr/quatre  !! Specific constant of water vapor (J.kg^{-1}.K^{-1})
276  REAL(r_std), PARAMETER :: retv = msmlr_air/msmlr_h2o-un   !! Ratio between molecular weight of dry air and water
277                                                            !! vapor minus 1(unitless) 
278  REAL(r_std), PARAMETER :: rvtmp2 = cp_h2o/cp_air-un       !! Ratio between specific heat of water vapor and dry air
279                                                            !! minus 1 (unitless)
280  REAL(r_std), PARAMETER :: cepdu2 = (0.1_r_std)**2         !! Squared wind shear (m^2.s^{-2})
281  REAL(r_std), PARAMETER :: ct_karman = 0.41_r_std          !! Van Karmann Constant (unitless)
282  REAL(r_std), PARAMETER :: cte_grav = 9.80665_r_std        !! Acceleration of the gravity (m.s^{-2})
283  REAL(r_std), PARAMETER :: pa_par_hpa = 100._r_std         !! Transform pascal into hectopascal (unitless)
284  REAL(r_std), PARAMETER :: RR = 8.314                      !! Ideal gas constant (J.mol^{-1}.K^{-1})
285  REAL(r_std), PARAMETER :: Sct = 1370.                     !! Solar constant (W.m^{-2})
286
287
288  INTEGER(i_std), SAVE :: testpft = 6
289  !-
290  ! 3. Climatic constants
291  !-
292  !! Constantes of the Louis scheme
293  REAL(r_std), SAVE :: cb = 5._r_std              !! Constant of the Louis scheme (unitless);
294                                                  !! reference to Louis (1979)
295!$OMP THREADPRIVATE(cb)
296  REAL(r_std), SAVE :: cc = 5._r_std              !! Constant of the Louis scheme (unitless);
297                                                  !! reference to Louis (1979)
298!$OMP THREADPRIVATE(cc)
299  REAL(r_std), SAVE :: cd = 5._r_std              !! Constant of the Louis scheme (unitless);
300                                                  !! reference to Louis (1979)
301!$OMP THREADPRIVATE(cd)
302  REAL(r_std), SAVE :: rayt_cste = 125.           !! Constant in the computation of surface resistance (W.m^{-2})
303!$OMP THREADPRIVATE(rayt_cste)
304  REAL(r_std), SAVE :: defc_plus = 23.E-3         !! Constant in the computation of surface resistance (K.W^{-1})
305!$OMP THREADPRIVATE(defc_plus)
306  REAL(r_std), SAVE :: defc_mult = 1.5            !! Constant in the computation of surface resistance (K.W^{-1})
307!$OMP THREADPRIVATE(defc_mult)
308
309  !-
310  ! 4. Soil thermodynamics constants
311  !-
312  ! Look at constantes_soil.f90
313
314
315  !
316  ! OPTIONAL PARTS OF THE MODEL
317  !
318  LOGICAL,PARAMETER :: diag_qsat = .TRUE.         !! One of the most frequent problems is a temperature out of range
319                                                  !! we provide here a way to catch that in the calling procedure.
320                                                  !! (from Jan Polcher)(true/false)
321  LOGICAL, SAVE     :: almaoutput =.FALSE.        !! Selects the type of output for the model.(true/false)
322                                                  !! Value is read from run.def in intersurf_history
323!$OMP THREADPRIVATE(almaoutput)
324
325  !
326  ! DIVERSE
327  !
328  CHARACTER(LEN=100), SAVE :: stomate_forcing_name='NONE'  !! NV080800 Name of STOMATE forcing file (unitless)
329                                                           ! Compatibility with Nicolas Viovy driver.
330!$OMP THREADPRIVATE(stomate_forcing_name)
331  CHARACTER(LEN=100), SAVE :: stomate_Cforcing_name='NONE' !! NV080800 Name of soil forcing file (unitless)
332                                                           ! Compatibility with Nicolas Viovy driver.
333!$OMP THREADPRIVATE(stomate_Cforcing_name)
334  INTEGER(i_std), SAVE :: forcing_id                 !! Index of the forcing file (unitless)
335!$OMP THREADPRIVATE(forcing_id)
336  LOGICAL, SAVE :: allow_forcing_write=.TRUE.        !! Allow writing of stomate_forcing file.
337                                                     !! This variable will be set to false for teststomate.
338
339
340
341                         !------------------------!
342                         !  SECHIBA PARAMETERS    !
343                         !------------------------!
344 
345
346  !
347  ! GLOBAL PARAMETERS   
348  !
349  REAL(r_std), SAVE :: min_wind = 0.1      !! The minimum wind (m.s^{-1})
350!$OMP THREADPRIVATE(min_wind)
351  REAL(r_std), SAVE :: snowcri = 1.5       !! Sets the amount above which only sublimation occures (kg.m^{-2})
352!$OMP THREADPRIVATE(snowcri)
353  REAL(r_std), SAVE :: irrig_dosmax = 1.25 !! The maximum irrigation water injected for half-hour (kg.m^{-2}/30min)
354!$OMP THREADPRIVATE(irrig_dosmax)
355  LOGICAL, SAVE :: irrig_drip = .FALSE. !! Do we activate drip irrigation? (true/false)
356!$OMP THREADPRIVATE(irrig_drip)
357
358
359  !
360  ! FLAGS ACTIVATING SUB-MODELS
361  !
362  LOGICAL, SAVE :: treat_expansion = .FALSE.   !! Do we treat PFT expansion across a grid point after introduction? (true/false)
363!$OMP THREADPRIVATE(treat_expansion)
364  LOGICAL, SAVE :: ok_herbivores = .FALSE.     !! flag to activate herbivores (true/false)
365!$OMP THREADPRIVATE(ok_herbivores)
366  LOGICAL, SAVE :: harvest_agri = .TRUE.       !! flag to harvest aboveground biomass from agricultural PFTs)(true/false)
367!$OMP THREADPRIVATE(harvest_agri)
368  LOGICAL, SAVE :: lpj_gap_const_mort          !! constant moratlity (true/false). Default value depend on OK_DGVM.
369!$OMP THREADPRIVATE(lpj_gap_const_mort)
370  LOGICAL, SAVE :: disable_fire = .FALSE.      !! flag that disable fire (true/false)
371!$OMP THREADPRIVATE(disable_fire)
372  LOGICAL, SAVE :: allow_deforest_fire = .FALSE. !! flag that allows deforestation fire (true/false)
373!$OMP THREADPRIVATE(allow_deforest_fire)
374  LOGICAL, SAVE :: spinup_analytic = .FALSE.   !! Flag to activate analytical resolution for spinup (true/false)
375!$OMP THREADPRIVATE(spinup_analytic)
376  LOGICAL, SAVE :: ok_explicitsnow             !! Flag to activate explicit snow scheme instead of default snow scheme
377!$OMP THREADPRIVATE(ok_explicitsnow)
378  LOGICAL, SAVE :: ok_pc                       !! Flag to activate permafrost carbon (vertical carbon and soil carbon thermal insulation)
379!$OMP THREADPRIVATE(ok_pc)
380
381  !
382  ! CONFIGURATION VEGETATION
383  !
384  LOGICAL, SAVE :: agriculture = .TRUE.    !! allow agricultural PFTs (true/false)
385!$OMP THREADPRIVATE(agriculture)
386  LOGICAL, SAVE :: impveg = .FALSE.        !! Impose vegetation ? (true/false)
387!$OMP THREADPRIVATE(impveg)
388  LOGICAL, SAVE :: impsoilt = .FALSE.      !! Impose soil ? (true/false)
389!$OMP THREADPRIVATE(impsoilt)
390  LOGICAL, SAVE :: do_now_stomate_lcchange = .FALSE.  !! Time to call lcchange in stomate_lpj
391!$OMP THREADPRIVATE(do_now_stomate_lcchange)
392  LOGICAL, SAVE :: do_now_stomate_woodharvest = .FALSE.  !! Time to call woodharvest in stomate_lpj
393!$OMP THREADPRIVATE(do_now_stomate_woodharvest)
394  LOGICAL, SAVE :: done_stomate_lcchange = .FALSE.    !! If true, call lcchange in stomate_lpj has just been done.
395!$OMP THREADPRIVATE(done_stomate_lcchange)
396  LOGICAL, SAVE :: read_lai = .FALSE.      !! Flag to read a map of LAI if STOMATE is not activated (true/false)
397!$OMP THREADPRIVATE(read_lai)
398  LOGICAL, SAVE :: map_pft_format = .TRUE. !! Read a land use vegetation map on PFT format (true/false)
399!$OMP THREADPRIVATE(map_pft_format)
400  LOGICAL, SAVE :: veget_reinit = .TRUE.   !! To change LAND USE file in a run. (true/false)
401!$OMP THREADPRIVATE(veget_reinit)
402
403
404  !
405  ! Some debugging flags
406  !
407  LOGICAL,PARAMETER                       :: ld_massbal=.FALSE.   ! a flag to turn on debug statements
408                                                                  ! related to mass balance closure
409  LOGICAL,PARAMETER                       :: ld_agec=.FALSE.      ! a flag to turn on debug statements
410                                                                  ! related to age classes
411
412
413  !
414  ! PARAMETERS USED BY BOTH HYDROLOGY MODELS
415  !
416  REAL(r_std), SAVE :: max_snow_age = 50._r_std !! Maximum period of snow aging (days)
417!$OMP THREADPRIVATE(max_snow_age)
418  REAL(r_std), SAVE :: snow_trans = 0.2_r_std   !! Transformation time constant for snow (m), reduced from the value 0.3 (04/07/2016)
419!$OMP THREADPRIVATE(snow_trans)
420  REAL(r_std), SAVE :: sneige                   !! Lower limit of snow amount (kg.m^{-2})
421!$OMP THREADPRIVATE(sneige)
422  REAL(r_std), SAVE :: maxmass_snow = 3000.     !! The maximum mass of snow (kg.m^{-2})
423!$OMP THREADPRIVATE(maxmass_snow)
424
425  !! Heat capacity
426  REAL(r_std), PARAMETER :: capa_ice = 2.228*1.E3       !! Heat capacity of ice (J/kg/K)
427  REAL(r_std), SAVE      :: so_capa_ice=2.11E6          !! Heat capacity of saturated frozen soil (J/K/m3)
428!$OMP THREADPRIVATE(so_capa_ice)
429  REAL(r_std), PARAMETER :: rho_water = 1000.           !! Density of water (kg/m3)
430  REAL(r_std), PARAMETER :: rho_ice = 920.              !! Density of ice (kg/m3)
431
432  !! Thermal conductivities
433  REAL(r_std), PARAMETER :: cond_water = 0.6            !! Thermal conductivity of liquid water (W/m/K)
434  REAL(r_std), PARAMETER :: cond_ice = 2.2              !! Thermal conductivity of ice (W/m/K)
435  REAL(r_std), PARAMETER :: cond_solid = 2.32           !! Thermal conductivity of mineral soil particles (W/m/K)
436
437  !! Time constant of long-term soil humidity (s)
438  REAL(r_std), PARAMETER :: lhf = 0.3336*1.E6           !! Latent heat of fusion (J/kg)
439
440  INTEGER(i_std), PARAMETER :: nsnow=3                  !! Number of levels in the snow for explicit snow scheme   
441  REAL(r_std), PARAMETER    :: XMD    = 28.9644E-3 
442  REAL(r_std), PARAMETER    :: XBOLTZ      = 1.380658E-23 
443  REAL(r_std), PARAMETER    :: XAVOGADRO   = 6.0221367E+23 
444  REAL(r_std), PARAMETER    :: XRD    = XAVOGADRO * XBOLTZ / XMD 
445  REAL(r_std), PARAMETER    :: XCPD   = 7.* XRD /2. 
446  REAL(r_std), PARAMETER    :: phigeoth = 0.057 ! 0. DKtest
447  REAL(r_std), PARAMETER    :: thick_min_snow = .01 
448
449  !! The maximum snow density and water holding characterisicts
450  REAL(r_std), SAVE         :: xrhosmax = 750.  ! (kg m-3)
451  REAL(r_std), SAVE         :: xwsnowholdmax1   = 0.03  ! (-)
452  REAL(r_std), SAVE         :: xwsnowholdmax2   = 0.10  ! (-)
453  REAL(r_std), SAVE         :: xsnowrhohold     = 200.0 ! (kg/m3)
454  REAL(r_std), SAVE         :: xrhosmin = 50. 
455  REAL(r_std), PARAMETER    :: xci = 2.106e+3 
456  REAL(r_std), PARAMETER    :: xrv = 6.0221367e+23 * 1.380658e-23 /18.0153e-3 
457
458  !! ISBA-ES Critical snow depth at which snow grid thicknesses constant
459  REAL(r_std), PARAMETER    :: xsnowcritd = 0.03  ! (m)
460
461  !! The threshold of snow depth used for preventing numerical problem in thermal calculations
462  REAL(r_std), PARAMETER    :: snowcritd_thermal = 0.01  ! (m) 
463 
464  !! ISBA-ES CROCUS (Pahaut 1976): snowfall density coefficients:
465  REAL(r_std), PARAMETER       :: snowfall_a_sn = 109.0  !! (kg/m3)
466  REAL(r_std), PARAMETER       :: snowfall_b_sn =   6.0  !! (kg/m3/K)
467  REAL(r_std), PARAMETER       :: snowfall_c_sn =  26.0  !! [kg/(m7/2 s1/2)]
468
469  REAL(r_std), PARAMETER       :: dgrain_new_max=  2.0e-4!! (m) : Maximum grain size of new snowfall
470 
471  !! Used in explicitsnow to prevent numerical problems as snow becomes vanishingly thin.
472  REAL(r_std), PARAMETER                :: psnowdzmin = .0001   ! m
473  REAL(r_std), PARAMETER                :: xsnowdmin = .000001  ! m
474
475  REAL(r_std), PARAMETER                :: ph2o = 1000.         !! Water density [kg/m3]
476 
477  ! ISBA-ES Thermal conductivity coefficients from Anderson (1976):
478  ! see Boone, Meteo-France/CNRM Note de Centre No. 70 (2002)
479  REAL(r_std), SAVE                     :: ZSNOWTHRMCOND1 = 0.02    ! [W/m/K]
480  REAL(r_std), SAVE                     :: ZSNOWTHRMCOND2 = 2.5E-6  ! [W m5/(kg2 K)]
481 
482  ! ISBA-ES Thermal conductivity: Implicit vapor diffn effects
483  ! (sig only for new snow OR high altitudes)
484  ! from Sun et al. (1999): based on data from Jordan (1991)
485  ! see Boone, Meteo-France/CNRM Note de Centre No. 70 (2002)
486  !
487  REAL(r_std), SAVE                       :: ZSNOWTHRMCOND_AVAP  = -0.06023 ! (W/m/K)
488  REAL(r_std), SAVE                       :: ZSNOWTHRMCOND_BVAP  = -2.5425  ! (W/m)
489  REAL(r_std), SAVE                       :: ZSNOWTHRMCOND_CVAP  = -289.99  ! (K)
490 
491  REAL(r_std),SAVE :: xansmax = 0.85      !! Maxmimum snow albedo
492  REAL(r_std),SAVE :: xansmin = 0.50      !! Miniumum snow albedo
493  REAL(r_std),SAVE :: xans_todry = 0.008  !! Albedo decay rate for dry snow
494  REAL(r_std),SAVE :: xans_t = 0.240      !! Albedo decay rate for wet snow
495
496  ! ISBA-ES Thermal conductivity coefficients from Anderson (1976):
497  ! see Boone, Meteo-France/CNRM Note de Centre No. 70 (2002)
498  REAL(r_std), PARAMETER                  :: XP00 = 1.E5
499
500  ! ISBA-ES Thermal conductivity: Implicit vapor diffn effects
501  ! (sig only for new snow OR high altitudes)
502  ! from Sun et al. (1999): based on data from Jordan (1991)
503  ! see Boone, Meteo-France/CNRM Note de Centre No. 70 (2002)
504  !
505  REAL(r_std), SAVE          :: ZSNOWCMPCT_RHOD  = 150.0        !! (kg/m3)
506  REAL(r_std), SAVE          :: ZSNOWCMPCT_ACM   = 2.8e-6       !! (1/s)
507  REAL(r_std), SAVE          :: ZSNOWCMPCT_BCM   = 0.04         !! (1/K)
508  REAL(r_std), SAVE          :: ZSNOWCMPCT_CCM   = 460.         !! (m3/kg)
509  REAL(r_std), SAVE          :: ZSNOWCMPCT_V0    = 3.7e7        !! (Pa/s)
510  REAL(r_std), SAVE          :: ZSNOWCMPCT_VT    = 0.081        !! (1/K)
511  REAL(r_std), SAVE          :: ZSNOWCMPCT_VR    = 0.018        !! (m3/kg)
512
513  !
514  ! BVOC : Biogenic activity  for each age class
515  !
516  REAL(r_std), SAVE, DIMENSION(nleafages) :: iso_activity = (/0.5, 1.5, 1.5, 0.5/)     !! Biogenic activity for each
517                                                                                       !! age class : isoprene (unitless)
518!$OMP THREADPRIVATE(iso_activity)
519  REAL(r_std), SAVE, DIMENSION(nleafages) :: methanol_activity = (/1., 1., 0.5, 0.5/)  !! Biogenic activity for each
520                                                                                       !! age class : methanol (unnitless)
521!$OMP THREADPRIVATE(methanol_activity)
522
523  !
524  ! condveg.f90
525  !
526
527  ! 1. Scalar
528
529  ! 1.1 Flags used inside the module
530
531  LOGICAL, SAVE :: alb_bare_model = .FALSE. !! Switch for choosing values of bare soil
532                                            !! albedo (see header of subroutine)
533                                            !! (true/false)
534!$OMP THREADPRIVATE(alb_bare_model)
535  LOGICAL, SAVE :: alb_bg_modis = .FALSE.   !! Switch for choosing values of bare soil
536                                            !! albedo read from file
537                                            !! (true/false)
538!$OMP THREADPRIVATE(alb_bg_modis)
539  LOGICAL, SAVE :: impaze = .FALSE.         !! Switch for choosing surface parameters
540                                            !! (see header of subroutine). 
541                                            !! (true/false)
542!$OMP THREADPRIVATE(impaze)
543  LOGICAL, SAVE :: rough_dyn = .FALSE.      !! Chooses between two methods to calculate the
544                                            !! the roughness height : static or dynamic (varying with LAI)
545                                            !! (true/false)
546!$OMP THREADPRIVATE(rough_dyn)
547
548  LOGICAL, SAVE :: new_watstress = .FALSE.
549!$OMP THREADPRIVATE(new_watstress)
550
551  REAL(r_std), SAVE :: alpha_watstress = 1.
552!$OMP THREADPRIVATE(alpha_watstress)
553
554  ! 1.2 Others
555
556
557  REAL(r_std), SAVE :: height_displacement = 0.66        !! Factor to calculate the zero-plane displacement
558                                                         !! height from vegetation height (m)
559!$OMP THREADPRIVATE(height_displacement)
560  REAL(r_std), SAVE :: z0_bare = 0.01                    !! bare soil roughness length (m)
561!$OMP THREADPRIVATE(z0_bare)
562  REAL(r_std), SAVE :: z0_ice = 0.001                    !! ice roughness length (m)
563!$OMP THREADPRIVATE(z0_ice)
564  REAL(r_std), SAVE :: tcst_snowa = 10.0                 !! Time constant of the albedo decay of snow (days), increased from the value 5.0 (04/07/2016)
565!$OMP THREADPRIVATE(tcst_snowa)
566  REAL(r_std), SAVE :: snowcri_alb = 10.                 !! Critical value for computation of snow albedo (cm)
567!$OMP THREADPRIVATE(snowcri_alb)
568  REAL(r_std), SAVE :: fixed_snow_albedo = undef_sechiba !! To choose a fixed snow albedo value (unitless)
569!$OMP THREADPRIVATE(fixed_snow_albedo)
570  REAL(r_std), SAVE :: z0_scal = 0.15                    !! Surface roughness height imposed (m)
571!$OMP THREADPRIVATE(z0_scal)
572  REAL(r_std), SAVE :: roughheight_scal = zero           !! Effective roughness Height depending on zero-plane
573                                                         !! displacement height (m) (imposed)
574!$OMP THREADPRIVATE(roughheight_scal)
575  REAL(r_std), SAVE :: emis_scal = 1.0                   !! Surface emissivity imposed (unitless)
576!$OMP THREADPRIVATE(emis_scal)
577
578  REAL(r_std), SAVE :: c1 = 0.32                         !! Constant used in the formulation of the ratio of
579!$OMP THREADPRIVATE(c1)                                  !! friction velocity to the wind speed at the canopy top
580                                                         !! see Ershadi et al. (2015) for more info
581  REAL(r_std), SAVE :: c2 = 0.264                        !! Constant used in the formulation of the ratio of
582!$OMP THREADPRIVATE(c2)                                  !! friction velocity to the wind speed at the canopy top
583                                                         !! see Ershadi et al. (2015) for more info
584  REAL(r_std), SAVE :: c3 = 15.1                         !! Constant used in the formulation of the ratio of
585!$OMP THREADPRIVATE(c3)                                  !! friction velocity to the wind speed at the canopy top
586                                                         !! see Ershadi et al. (2015) for more info
587  REAL(r_std), SAVE :: Cdrag_foliage = 0.2               !! Drag coefficient of the foliage
588!$OMP THREADPRIVATE(Cdrag_foliage)                       !! See Ershadi et al. (2015) and Su et. al (2001) for more info
589  REAL(r_std), SAVE :: Ct = 0.01                         !! Heat transfer coefficient of the leaf
590!$OMP THREADPRIVATE(Ct)                                  !! See Ershadi et al. (2015) and Su et. al (2001) for more info
591  REAL(r_std), SAVE :: Prandtl = 0.71                    !! Prandtl number used in the calculation of Ct_star
592!$OMP THREADPRIVATE(Prandtl)                             !! See Su et. al (2001) for more info
593
594
595
596  ! 2. Arrays
597
598  REAL(r_std), SAVE, DIMENSION(2) :: alb_deadleaf = (/ .12, .35/)    !! albedo of dead leaves, VIS+NIR (unitless)
599!$OMP THREADPRIVATE(alb_deadleaf)
600  REAL(r_std), SAVE, DIMENSION(2) :: alb_ice = (/ .60, .20/)         !! albedo of ice, VIS+NIR (unitless)
601!$OMP THREADPRIVATE(alb_ice)
602  REAL(r_std), SAVE, DIMENSION(2) :: albedo_scal = (/ 0.25, 0.25 /)  !! Albedo values for visible and near-infrared
603                                                                     !! used imposed (unitless)
604!$OMP THREADPRIVATE(albedo_scal)
605  REAL(r_std) , SAVE, DIMENSION(classnb) :: vis_dry = (/0.24,&
606       &0.22, 0.20, 0.18, 0.16, 0.14, 0.12, 0.10, 0.27/)  !! Soil albedo values to soil colour classification:
607                                                          !! dry soil albedo values in visible range
608!$OMP THREADPRIVATE(vis_dry)
609  REAL(r_std), SAVE, DIMENSION(classnb) :: nir_dry = (/0.48,&
610       &0.44, 0.40, 0.36, 0.32, 0.28, 0.24, 0.20, 0.55/)  !! Soil albedo values to soil colour classification:
611                                                          !! dry soil albedo values in near-infrared range
612!$OMP THREADPRIVATE(nir_dry)
613  REAL(r_std), SAVE, DIMENSION(classnb) :: vis_wet = (/0.12,&
614       &0.11, 0.10, 0.09, 0.08, 0.07, 0.06, 0.05, 0.15/)  !! Soil albedo values to soil colour classification:
615                                                          !! wet soil albedo values in visible range
616!$OMP THREADPRIVATE(vis_wet)
617  REAL(r_std), SAVE, DIMENSION(classnb) :: nir_wet = (/0.24,&
618       &0.22, 0.20, 0.18, 0.16, 0.14, 0.12, 0.10, 0.31/)  !! Soil albedo values to soil colour classification:
619                                                          !! wet soil albedo values in near-infrared range
620!$OMP THREADPRIVATE(nir_wet)
621  REAL(r_std), SAVE, DIMENSION(classnb) :: albsoil_vis = (/ &
622       &0.18, 0.16, 0.16, 0.15, 0.12, 0.105, 0.09, 0.075, 0.25/)   !! Soil albedo values to soil colour classification:
623                                                                   !! Averaged of wet and dry soil albedo values
624                                                                   !! in visible and near-infrared range
625!$OMP THREADPRIVATE(albsoil_vis)
626  REAL(r_std), SAVE, DIMENSION(classnb) :: albsoil_nir = (/ &
627       &0.36, 0.34, 0.34, 0.33, 0.30, 0.25, 0.20, 0.15, 0.45/)  !! Soil albedo values to soil colour classification:
628                                                                !! Averaged of wet and dry soil albedo values
629                                                                !! in visible and near-infrared range
630!$OMP THREADPRIVATE(albsoil_nir)
631
632  !
633  ! diffuco.f90
634  !
635
636  ! 0. Constants
637
638  REAL(r_std), PARAMETER :: Tetens_1 = 0.622         !! Ratio between molecular weight of water vapor and molecular weight 
639                                                     !! of dry air (unitless)
640  REAL(r_std), PARAMETER :: Tetens_2 = 0.378         !!
641  REAL(r_std), PARAMETER :: ratio_H2O_to_CO2 = 1.6   !! Ratio of water vapor diffusivity to the CO2 diffusivity (unitless)
642  REAL(r_std), PARAMETER :: mol_to_m_1 = 0.0244      !!
643  REAL(r_std), PARAMETER :: RG_to_PAR = 0.5          !!
644  REAL(r_std), PARAMETER :: W_to_mol = 4.6          !! W_to_mmol * RG_to_PAR = 2.3
645
646  ! 1. Scalar
647
648  INTEGER(i_std), SAVE :: nlai = 20             !! Number of LAI levels (unitless)
649!$OMP THREADPRIVATE(nlai)
650  LOGICAL, SAVE :: ldq_cdrag_from_gcm = .FALSE. !! Set to .TRUE. if you want q_cdrag coming from GCM
651!$OMP THREADPRIVATE(ldq_cdrag_from_gcm)
652  REAL(r_std), SAVE :: laimax = 12.             !! Maximal LAI used for splitting LAI into N layers (m^2.m^{-2})
653!$OMP THREADPRIVATE(laimax)
654  LOGICAL, SAVE :: downregulation_co2 = .FALSE.            !! Set to .TRUE. if you want CO2 downregulation.
655!$OMP THREADPRIVATE(downregulation_co2)
656  REAL(r_std), SAVE :: downregulation_co2_baselevel = 280. !! CO2 base level (ppm)
657!$OMP THREADPRIVATE(downregulation_co2_baselevel)
658
659  REAL(r_std), SAVE :: gb_ref = 1./25.                     !! Leaf bulk boundary layer resistance (s m-1)
660
661  ! 3. Coefficients of equations
662
663  REAL(r_std), SAVE :: lai_level_depth = 0.15  !!
664!$OMP THREADPRIVATE(lai_level_depth)
665!
666  REAL(r_std), SAVE, DIMENSION(6) :: dew_veg_poly_coeff = &            !! coefficients of the 5 degree polynomomial used
667  & (/ 0.887773, 0.205673, 0.110112, 0.014843,  0.000824,  0.000017 /) !! in the equation of coeff_dew_veg
668!$OMP THREADPRIVATE(dew_veg_poly_coeff)
669!
670  REAL(r_std), SAVE               :: Oi=210000.    !! Intercellular oxygen partial pressure (ubar)
671!$OMP THREADPRIVATE(Oi)
672  !
673  ! slowproc.f90
674  !
675
676  ! 1. Scalar
677
678  INTEGER(i_std), SAVE :: veget_year_orig = 0        !!  first year for landuse (number)
679!$OMP THREADPRIVATE(veget_year_orig)
680  REAL(r_std), SAVE :: clayfraction_default = 0.2    !! Default value for clay fraction (0-1, unitless)
681!$OMP THREADPRIVATE(clayfraction_default)
682  REAL(r_std), SAVE :: min_vegfrac = 1E-8           !! Minimal fraction of mesh a vegetation type can occupy (0-1, unitless)
683!$OMP THREADPRIVATE(min_vegfrac)
684  REAL(r_std), SAVE :: frac_nobio_fixed_test_1 = 0.0 !! Value for frac_nobio for tests in 0-dim simulations (0-1, unitless)
685!$OMP THREADPRIVATE(frac_nobio_fixed_test_1)
686 
687  REAL(r_std), SAVE :: stempdiag_bid = 280.          !! only needed for an initial LAI if there is no restart file
688!$OMP THREADPRIVATE(stempdiag_bid)
689
690
691                           !-----------------------------!
692                           !  STOMATE AND LPJ PARAMETERS !
693                           !-----------------------------!
694
695
696  !
697  ! lpj_constraints.f90
698  !
699 
700  ! 1. Scalar
701
702  REAL(r_std), SAVE  :: too_long = 5.      !! longest sustainable time without
703                                           !! regeneration (vernalization) (years)
704!$OMP THREADPRIVATE(too_long)
705
706
707  !
708  ! lpj_establish.f90
709  !
710
711  ! 1. Scalar
712
713  REAL(r_std), SAVE :: estab_max_tree = 0.12   !! Maximum tree establishment rate (ind/m2/dt_stomate)
714!$OMP THREADPRIVATE(estab_max_tree)
715  REAL(r_std), SAVE :: estab_max_grass = 0.12  !! Maximum grass establishment rate (ind/m2/dt_stomate)
716!$OMP THREADPRIVATE(estab_max_grass)
717 
718  ! 3. Coefficients of equations
719
720  REAL(r_std), SAVE :: establish_scal_fact = 5.  !!
721!$OMP THREADPRIVATE(establish_scal_fact)
722  REAL(r_std), SAVE :: max_tree_coverage = 0.98  !! (0-1, unitless)
723!$OMP THREADPRIVATE(max_tree_coverage)
724  REAL(r_std), SAVE :: ind_0_estab = 0.2         !! = ind_0 * 10.
725!$OMP THREADPRIVATE(ind_0_estab)
726
727
728  !
729  ! lpj_fire.f90
730  !
731
732  ! 1. Scalar
733
734  REAL(r_std), SAVE :: tau_fire = 30.           !! Time scale for memory of the fire index (days).
735!$OMP THREADPRIVATE(tau_fire)
736  REAL(r_std), SAVE :: litter_crit = 200.       !! Critical litter quantity for fire
737                                                !! below which iginitions extinguish
738                                                !! @tex $(gC m^{-2})$ @endtex
739!$OMP THREADPRIVATE(litter_crit)
740  REAL(r_std), SAVE :: fire_resist_struct = 0.5 !!
741!$OMP THREADPRIVATE(fire_resist_struct)
742  ! 2. Arrays
743
744  REAL(r_std), SAVE, DIMENSION(nparts) :: co2frac = &    !! The fraction of the different biomass
745       & (/ .95, .95, 0., 0.3, 0., 0., .95, .95 /)       !! compartments emitted to the atmosphere
746!$OMP THREADPRIVATE(co2frac)                                                         !! when burned (unitless, 0-1) 
747
748  ! 3. Coefficients of equations
749
750  REAL(r_std), SAVE, DIMENSION(3) :: bcfrac_coeff = (/ .3,  1.3,  88.2 /)         !! (unitless)
751!$OMP THREADPRIVATE(bcfrac_coeff)
752  REAL(r_std), SAVE, DIMENSION(4) :: firefrac_coeff = (/ 0.45, 0.8, 0.6, 0.13 /)  !! (unitless)
753!$OMP THREADPRIVATE(firefrac_coeff)
754
755  !
756  ! lpj_gap.f90
757  !
758
759  ! 1. Scalar
760
761  REAL(r_std), SAVE :: ref_greff = 0.035         !! Asymptotic maximum mortality rate
762                                                 !! @tex $(year^{-1})$ @endtex
763!$OMP THREADPRIVATE(ref_greff)
764
765  !               
766  ! lpj_light.f90
767  !             
768
769  ! 1. Scalar
770 
771  LOGICAL, SAVE :: annual_increase = .TRUE. !! for diagnosis of fpc increase, compare today's fpc to last year's maximum (T) or
772                                            !! to fpc of last time step (F)? (true/false)
773!$OMP THREADPRIVATE(annual_increase)
774  REAL(r_std), SAVE :: min_cover = 0.05     !! For trees, minimum fraction of crown area occupied
775                                            !! (due to its branches etc.) (0-1, unitless)
776                                            !! This means that only a small fraction of its crown area
777                                            !! can be invaded by other trees.
778!$OMP THREADPRIVATE(min_cover)
779  !
780  ! lpj_pftinout.f90
781  !
782
783  ! 1. Scalar
784
785  REAL(r_std), SAVE :: min_avail = 0.01         !! minimum availability
786!$OMP THREADPRIVATE(min_avail)
787  REAL(r_std), SAVE :: ind_0 = 0.02             !! initial density of individuals
788!$OMP THREADPRIVATE(ind_0)
789  ! 3. Coefficients of equations
790 
791  REAL(r_std), SAVE :: RIP_time_min = 1.25      !! test whether the PFT has been eliminated lately (years)
792!$OMP THREADPRIVATE(RIP_time_min)
793  REAL(r_std), SAVE :: npp_longterm_init = 10.  !! Initialisation value for npp_longterm (gC.m^{-2}.year^{-1})
794!$OMP THREADPRIVATE(npp_longterm_init)
795  REAL(r_std), SAVE :: everywhere_init = 0.05   !!
796!$OMP THREADPRIVATE(everywhere_init)
797
798
799  !
800  ! stomate_alloc.f90
801  !
802
803  ! 0. Constants
804
805  REAL(r_std), PARAMETER :: max_possible_lai = 10. !! (m^2.m^{-2})
806  REAL(r_std), PARAMETER :: Nlim_Q10 = 10.         !!
807!gmjc
808   REAL(r_std), SAVE  ::  reserve_time_cut = 20.
809   REAL(r_std), SAVE  ::  lai_happy_cut = 0.25
810   REAL(r_std), SAVE  ::  tau_leafinit_cut = 10
811   REAL(r_std), SAVE  ::  tau_t2m_14 = 14.
812!end gmjc
813  ! 1. Scalar
814
815  LOGICAL, SAVE :: ok_minres = .TRUE.              !! [DISPENSABLE] Do we try to reach a minimum reservoir even if
816                                                   !! we are severely stressed? (true/false)
817!$OMP THREADPRIVATE(ok_minres)
818  REAL(r_std), SAVE :: reserve_time_tree = 30.     !! Maximum number of days during which
819                                                   !! carbohydrate reserve may be used for
820                                                   !! trees (days)
821!$OMP THREADPRIVATE(reserve_time_tree)
822  REAL(r_std), SAVE :: reserve_time_grass = 20.    !! Maximum number of days during which
823                                                   !! carbohydrate reserve may be used for
824                                                   !! grasses (days)
825!$OMP THREADPRIVATE(reserve_time_grass)
826
827  REAL(r_std), SAVE :: f_fruit = 0.1               !! Default fruit allocation (0-1, unitless)
828!$OMP THREADPRIVATE(f_fruit)
829  REAL(r_std), SAVE :: alloc_sap_above_grass = 1.0 !! fraction of sapwood allocation above ground
830                                                   !! for grass (0-1, unitless)
831!$OMP THREADPRIVATE(alloc_sap_above_grass)
832  REAL(r_std), SAVE :: min_LtoLSR = 0.2            !! Prescribed lower bounds for leaf
833                                                   !! allocation (0-1, unitless)
834!$OMP THREADPRIVATE(min_LtoLSR)
835  REAL(r_std), SAVE :: max_LtoLSR = 0.5            !! Prescribed upper bounds for leaf
836                                                   !! allocation (0-1, unitless)
837!$OMP THREADPRIVATE(max_LtoLSR)
838  REAL(r_std), SAVE :: z_nitrogen = 0.2            !! Curvature of the root profile (m)
839!$OMP THREADPRIVATE(z_nitrogen)
840
841  ! 3. Coefficients of equations
842
843  REAL(r_std), SAVE :: Nlim_tref = 25.             !! (C)
844!$OMP THREADPRIVATE(Nlim_tref)
845
846  !
847  ! Age groups
848  !
849  LOGICAL, SAVE :: use_age_class                    !! Number of age classes used to calculate C allocation
850                                                   !! Used in forestry.f90 and lcchange.f90 - this mimics age classes
851!$OMP THREADPRIVATE(use_age_class)
852  LOGICAL, SAVE :: SingleAgeClass                  !! Is age class is simulated but with only a single age class for
853                                                   !! each MTC?
854!$OMP THREADPRIVATE(SingleAgeClass)
855  LOGICAL, SAVE :: allow_forestry_harvest          !! Wood harvest from forestry?
856!$OMP THREADPRIVATE(allow_forestry_harvest)
857  LOGICAL, SAVE :: gluc_use_harvest_biomass        !! Use harvest biomass ?
858!$OMP THREADPRIVATE(gluc_use_harvest_biomass)
859  LOGICAL, SAVE :: gluc_allow_trans_bioe          !! Transitions to bioenergy ?
860!$OMP THREADPRIVATE(gluc_allow_trans_bioe)
861  LOGICAL, SAVE :: use_bound_spa                   !! Use spatial age boundary?
862!$OMP THREADPRIVATE(use_bound_spa)
863  INTEGER, SAVE :: nagec_tree                    !! Number of age classes for tree MTC
864!$OMP THREADPRIVATE(nagec_tree)
865  INTEGER, SAVE :: nagec_herb                    !! Number of age classes for herbaceous MTC
866!$OMP THREADPRIVATE(nagec_herb)
867  INTEGER, SAVE :: nagec_bioe1                    !! Number of age classes for bioe1 MTC
868!$OMP THREADPRIVATE(nagec_bioe1)
869  LOGICAL, SAVE :: gluc_newfrac_guide            !! Use guided new vegetfrac in gross LUC?
870!$OMP THREADPRIVATE(gluc_newfrac_guide)
871
872  !
873  ! stomate_data.f90
874  !
875
876  ! 1. Scalar
877
878  ! 1.1 Parameters for the pipe model
879
880  REAL(r_std), SAVE :: pipe_tune1 = 100.0        !! crown area = pipe_tune1. stem diameter**(1.6) (Reinicke's theory) (unitless)
881!$OMP THREADPRIVATE(pipe_tune1)
882  REAL(r_std), SAVE :: pipe_tune2 = 40.0         !! height=pipe_tune2 * diameter**pipe_tune3 (unitless)
883!$OMP THREADPRIVATE(pipe_tune2)
884  REAL(r_std), SAVE :: pipe_tune3 = 0.5          !! height=pipe_tune2 * diameter**pipe_tune3 (unitless)
885!$OMP THREADPRIVATE(pipe_tune3)
886  REAL(r_std), SAVE :: pipe_tune4 = 0.3          !! needed for stem diameter (unitless)
887!$OMP THREADPRIVATE(pipe_tune4)
888  REAL(r_std), SAVE :: pipe_density = 2.e5       !! Density
889!$OMP THREADPRIVATE(pipe_density)
890  REAL(r_std), SAVE :: pipe_k1 = 8.e3            !! one more SAVE
891!$OMP THREADPRIVATE(pipe_k1)
892  REAL(r_std), SAVE :: pipe_tune_exp_coeff = 1.6 !! pipe tune exponential coeff (unitless)
893!$OMP THREADPRIVATE(pipe_tune_exp_coeff)
894
895  ! 1.2 climatic parameters
896
897  REAL(r_std), SAVE :: precip_crit = 100.        !! minimum precip, in (mm/year)
898!$OMP THREADPRIVATE(precip_crit)
899  REAL(r_std), SAVE :: gdd_crit_estab = 150.     !! minimum gdd for establishment of saplings
900!$OMP THREADPRIVATE(gdd_crit_estab)
901  REAL(r_std), SAVE :: fpc_crit = 0.95           !! critical fpc, needed for light competition and establishment (0-1, unitless)
902!$OMP THREADPRIVATE(fpc_crit)
903
904  ! 1.3 sapling characteristics
905
906  REAL(r_std), SAVE :: alpha_grass = 0.5         !! alpha coefficient for grasses (unitless)
907!$OMP THREADPRIVATE(alpha_grass)
908  REAL(r_std), SAVE :: alpha_tree = 1.           !! alpha coefficient for trees (unitless)
909!$OMP THREADPRIVATE(alpha_tree)
910  REAL(r_std), SAVE :: mass_ratio_heart_sap = 3. !! mass ratio (heartwood+sapwood)/sapwood (unitless)
911!$OMP THREADPRIVATE(mass_ratio_heart_sap)
912
913  ! 1.4  time scales for phenology and other processes (in days)
914
915  REAL(r_std), SAVE :: tau_hum_month = 20.        !! (days)       
916!$OMP THREADPRIVATE(tau_hum_month)
917  REAL(r_std), SAVE :: tau_hum_week = 7.          !! (days) 
918!$OMP THREADPRIVATE(tau_hum_week)
919  REAL(r_std), SAVE :: tau_t2m_month = 20.        !! (days)     
920!$OMP THREADPRIVATE(tau_t2m_month)
921  REAL(r_std), SAVE :: tau_t2m_week = 7.          !! (days) 
922!$OMP THREADPRIVATE(tau_t2m_week)
923  REAL(r_std), SAVE :: tau_tsoil_month = 20.      !! (days)     
924!$OMP THREADPRIVATE(tau_tsoil_month)
925  REAL(r_std), SAVE :: tau_soilhum_month = 20.    !! (days)     
926!$OMP THREADPRIVATE(tau_soilhum_month)
927  REAL(r_std), SAVE :: tau_gpp_week = 7.          !! (days) 
928!$OMP THREADPRIVATE(tau_gpp_week)
929  REAL(r_std), SAVE :: tau_gdd = 40.              !! (days) 
930!$OMP THREADPRIVATE(tau_gdd)
931  REAL(r_std), SAVE :: tau_ngd = 50.              !! (days) 
932!$OMP THREADPRIVATE(tau_ngd)
933  REAL(r_std), SAVE :: coeff_tau_longterm = 3.    !! (unitless)
934!$OMP THREADPRIVATE(coeff_tau_longterm)
935  REAL(r_std), SAVE :: tau_longterm_max           !! (days) 
936!$OMP THREADPRIVATE(tau_longterm_max)
937
938  ! 3. Coefficients of equations
939
940  REAL(r_std), SAVE :: bm_sapl_carbres = 5.             !!
941!$OMP THREADPRIVATE(bm_sapl_carbres)
942  REAL(r_std), SAVE :: bm_sapl_sapabove = 0.5           !!
943!$OMP THREADPRIVATE(bm_sapl_sapabove)
944  REAL(r_std), SAVE :: bm_sapl_heartabove = 2.          !!
945!$OMP THREADPRIVATE(bm_sapl_heartabove)
946  REAL(r_std), SAVE :: bm_sapl_heartbelow = 2.          !!
947!$OMP THREADPRIVATE(bm_sapl_heartbelow)
948  REAL(r_std), SAVE :: init_sapl_mass_leaf_nat = 0.1    !!
949!$OMP THREADPRIVATE(init_sapl_mass_leaf_nat)
950  REAL(r_std), SAVE :: init_sapl_mass_leaf_agri = 1.    !!
951!$OMP THREADPRIVATE(init_sapl_mass_leaf_agri)
952  REAL(r_std), SAVE :: init_sapl_mass_carbres = 5.      !!
953!$OMP THREADPRIVATE(init_sapl_mass_carbres)
954  REAL(r_std), SAVE :: init_sapl_mass_root = 0.1        !!
955!$OMP THREADPRIVATE(init_sapl_mass_root)
956  REAL(r_std), SAVE :: init_sapl_mass_fruit = 0.3       !! 
957!$OMP THREADPRIVATE(init_sapl_mass_fruit)
958  REAL(r_std), SAVE :: cn_sapl_init = 0.5               !!
959!$OMP THREADPRIVATE(cn_sapl_init)
960  REAL(r_std), SAVE :: migrate_tree = 10.*1.E3          !!
961!$OMP THREADPRIVATE(migrate_tree)
962  REAL(r_std), SAVE :: migrate_grass = 10.*1.E3         !!
963!$OMP THREADPRIVATE(migrate_grass)
964  REAL(r_std), SAVE :: lai_initmin_tree = 0.3           !!
965!$OMP THREADPRIVATE(lai_initmin_tree)
966  REAL(r_std), SAVE :: lai_initmin_grass = 0.1          !!
967!$OMP THREADPRIVATE(lai_initmin_grass)
968  REAL(r_std), SAVE, DIMENSION(2) :: dia_coeff = (/ 4., 0.5 /)            !!
969!$OMP THREADPRIVATE(dia_coeff)
970  REAL(r_std), SAVE, DIMENSION(2) :: maxdia_coeff =(/ 100., 0.01/)        !!
971!$OMP THREADPRIVATE(maxdia_coeff)
972  REAL(r_std), SAVE, DIMENSION(4) :: bm_sapl_leaf = (/ 4., 4., 0.8, 5./)  !!
973!$OMP THREADPRIVATE(bm_sapl_leaf)
974
975
976
977  !
978  ! stomate_litter.f90
979  !
980
981  ! 0. Constants
982
983  REAL(r_std), PARAMETER :: Q10 = 10.               !!
984
985  ! 1. Scalar
986
987  REAL(r_std), SAVE :: z_decomp = 0.2               !!  Maximum depth for soil decomposer's activity (m)
988!$OMP THREADPRIVATE(z_decomp)
989
990  ! 2. Arrays
991
992  REAL(r_std), SAVE :: frac_soil_struct_aa = 0.55   !! corresponding to frac_soil(istructural,iactive,iabove)
993!$OMP THREADPRIVATE(frac_soil_struct_aa)
994  REAL(r_std), SAVE :: frac_soil_struct_ab = 0.45   !! corresponding to frac_soil(istructural,iactive,ibelow)
995!$OMP THREADPRIVATE(frac_soil_struct_ab)
996  REAL(r_std), SAVE :: frac_soil_struct_sa = 0.7    !! corresponding to frac_soil(istructural,islow,iabove)
997!$OMP THREADPRIVATE(frac_soil_struct_sa)
998  REAL(r_std), SAVE :: frac_soil_struct_sb = 0.7    !! corresponding to frac_soil(istructural,islow,ibelow)
999!$OMP THREADPRIVATE(frac_soil_struct_sb)
1000  REAL(r_std), SAVE :: frac_soil_metab_aa = 0.45    !! corresponding to frac_soil(imetabolic,iactive,iabove)
1001!$OMP THREADPRIVATE(frac_soil_metab_aa)
1002  REAL(r_std), SAVE :: frac_soil_metab_ab = 0.45    !! corresponding to frac_soil(imetabolic,iactive,ibelow)
1003!$OMP THREADPRIVATE(frac_soil_metab_ab)
1004  REAL(r_std), SAVE, DIMENSION(nparts) :: CN = &    !! C/N ratio of each plant pool (0-100, unitless)
1005       & (/ 40., 40., 40., 40., 40., 40., 40., 40. /) 
1006!$OMP THREADPRIVATE(CN)
1007  REAL(r_std), SAVE, DIMENSION(nparts) :: LC = &    !! Lignin/C ratio of different plant parts (0,22-0,35, unitless)
1008       & (/ 0.22, 0.35, 0.35, 0.35, 0.35, 0.22, 0.22, 0.22 /)
1009!$OMP THREADPRIVATE(LC)
1010
1011  ! 3. Coefficients of equations
1012
1013  REAL(r_std), SAVE :: metabolic_ref_frac = 0.85    !! used by litter and soilcarbon (0-1, unitless)
1014!$OMP THREADPRIVATE(metabolic_ref_frac)
1015  REAL(r_std), SAVE :: metabolic_LN_ratio = 0.018   !! (0-1, unitless)   
1016!$OMP THREADPRIVATE(metabolic_LN_ratio)
1017  REAL(r_std), SAVE :: tau_metabolic = 0.066        !!
1018!$OMP THREADPRIVATE(tau_metabolic)
1019  REAL(r_std), SAVE :: tau_struct = 0.245           !!
1020!$OMP THREADPRIVATE(tau_struct)
1021  REAL(r_std), SAVE :: soil_Q10 = 0.69              !!= ln 2
1022!$OMP THREADPRIVATE(soil_Q10)
1023  REAL(r_std), SAVE :: tsoil_ref = 30.              !!
1024!$OMP THREADPRIVATE(tsoil_ref)
1025  REAL(r_std), SAVE :: litter_struct_coef = 3.      !!
1026!$OMP THREADPRIVATE(litter_struct_coef)
1027  REAL(r_std), SAVE, DIMENSION(3) :: moist_coeff = (/ 1.1,  2.4,  0.29 /) !!
1028!$OMP THREADPRIVATE(moist_coeff)
1029  REAL(r_std), SAVE :: moistcont_min = 0.25  !! minimum soil wetness to limit the heterotrophic respiration
1030!$OMP THREADPRIVATE(moistcont_min)
1031
1032
1033  !
1034  ! stomate_lpj.f90
1035  !
1036
1037  ! 1. Scalar
1038
1039  REAL(r_std), SAVE :: frac_turnover_daily = 0.55  !! (0-1, unitless)
1040!$OMP THREADPRIVATE(frac_turnover_daily)
1041
1042
1043  !
1044  ! stomate_npp.f90
1045  !
1046
1047  ! 1. Scalar
1048
1049  REAL(r_std), SAVE :: tax_max = 0.8 !! Maximum fraction of allocatable biomass used
1050                                     !! for maintenance respiration (0-1, unitless)
1051!$OMP THREADPRIVATE(tax_max)
1052
1053
1054  !
1055  ! stomate_phenology.f90
1056  !
1057
1058  ! 1. Scalar
1059
1060  LOGICAL, SAVE :: always_init = .FALSE.           !! take carbon from atmosphere if carbohydrate reserve too small? (true/false)
1061!$OMP THREADPRIVATE(always_init)
1062  REAL(r_std), SAVE :: min_growthinit_time = 300.  !! minimum time since last beginning of a growing season (days)
1063!$OMP THREADPRIVATE(min_growthinit_time)
1064  REAL(r_std), SAVE :: moiavail_always_tree = 1.0  !! moisture monthly availability above which moisture tendency doesn't matter
1065                                                   !!  - for trees (0-1, unitless)
1066!$OMP THREADPRIVATE(moiavail_always_tree)
1067  REAL(r_std), SAVE :: moiavail_always_grass = 0.6 !! moisture monthly availability above which moisture tendency doesn't matter
1068                                                   !! - for grass (0-1, unitless)
1069!$OMP THREADPRIVATE(moiavail_always_grass)
1070  REAL(r_std), SAVE :: t_always                    !! monthly temp. above which temp. tendency doesn't matter
1071!$OMP THREADPRIVATE(t_always)
1072  REAL(r_std), SAVE :: t_always_add = 10.          !! monthly temp. above which temp. tendency doesn't matter (C)
1073!$OMP THREADPRIVATE(t_always_add)
1074
1075  ! 3. Coefficients of equations
1076 
1077  REAL(r_std), SAVE :: gddncd_ref = 603.           !!
1078!$OMP THREADPRIVATE(gddncd_ref)
1079  REAL(r_std), SAVE :: gddncd_curve = 0.0091       !!
1080!$OMP THREADPRIVATE(gddncd_curve)
1081  REAL(r_std), SAVE :: gddncd_offset = 64.         !!
1082!$OMP THREADPRIVATE(gddncd_offset)
1083
1084
1085  !
1086  ! stomate_prescribe.f90
1087  !
1088
1089  ! 3. Coefficients of equations
1090
1091  REAL(r_std), SAVE :: bm_sapl_rescale = 40.       !!
1092!$OMP THREADPRIVATE(bm_sapl_rescale)
1093
1094
1095  !
1096  ! stomate_resp.f90
1097  !
1098
1099  ! 3. Coefficients of equations
1100
1101  REAL(r_std), SAVE :: maint_resp_min_vmax = 0.3   !!
1102!$OMP THREADPRIVATE(maint_resp_min_vmax)
1103  REAL(r_std), SAVE :: maint_resp_coeff = 1.4      !!
1104!$OMP THREADPRIVATE(maint_resp_coeff)
1105
1106
1107  !
1108  ! stomate_soilcarbon.f90
1109  !
1110
1111  ! 2. Arrays
1112
1113  ! 2.1 frac_carb_coefficients
1114
1115  REAL(r_std), SAVE :: frac_carb_ap = 0.004  !! from active pool: depends on clay content  (0-1, unitless)
1116                                             !! corresponding to frac_carb(:,iactive,ipassive)
1117!$OMP THREADPRIVATE(frac_carb_ap)
1118  REAL(r_std), SAVE :: frac_carb_sa = 0.42   !! from slow pool (0-1, unitless)
1119                                             !! corresponding to frac_carb(:,islow,iactive)
1120!$OMP THREADPRIVATE(frac_carb_sa)
1121  REAL(r_std), SAVE :: frac_carb_sp = 0.03   !! from slow pool (0-1, unitless)
1122                                             !! corresponding to frac_carb(:,islow,ipassive)
1123!$OMP THREADPRIVATE(frac_carb_sp)
1124  REAL(r_std), SAVE :: frac_carb_pa = 0.45   !! from passive pool (0-1, unitless)
1125                                             !! corresponding to frac_carb(:,ipassive,iactive)
1126!$OMP THREADPRIVATE(frac_carb_pa)
1127  REAL(r_std), SAVE :: frac_carb_ps = 0.0    !! from passive pool (0-1, unitless)
1128                                             !! corresponding to frac_carb(:,ipassive,islow)
1129!$OMP THREADPRIVATE(frac_carb_ps)
1130
1131  ! 3. Coefficients of equations
1132
1133  REAL(r_std), SAVE :: active_to_pass_clay_frac = 0.68  !! (0-1, unitless)
1134!$OMP THREADPRIVATE(active_to_pass_clay_frac)
1135  !! residence times in carbon pools (days)
1136  REAL(r_std), SAVE :: carbon_tau_iactive = 0.149   !! residence times in active pool (days)
1137!$OMP THREADPRIVATE(carbon_tau_iactive)
1138  REAL(r_std), SAVE :: carbon_tau_islow = 5.48      !! residence times in slow pool (days)
1139!$OMP THREADPRIVATE(carbon_tau_islow)
1140  REAL(r_std), SAVE :: carbon_tau_ipassive = 241.   !! residence times in passive pool (days)
1141!$OMP THREADPRIVATE(carbon_tau_ipassive)
1142  REAL(r_std), SAVE, DIMENSION(3) :: flux_tot_coeff = (/ 1.2, 1.4, .75/)
1143!$OMP THREADPRIVATE(flux_tot_coeff)
1144
1145  !
1146  ! stomate_turnover.f90
1147  !
1148
1149  ! 3. Coefficients of equations
1150
1151  REAL(r_std), SAVE :: new_turnover_time_ref = 20. !!(days)
1152!$OMP THREADPRIVATE(new_turnover_time_ref)
1153  REAL(r_std), SAVE :: leaf_age_crit_tref = 20.    !! (C)
1154!$OMP THREADPRIVATE(leaf_age_crit_tref)
1155  REAL(r_std), SAVE, DIMENSION(3) :: leaf_age_crit_coeff = (/ 1.5, 0.75, 10./) !! (unitless)
1156!$OMP THREADPRIVATE(leaf_age_crit_coeff)
1157
1158
1159  !
1160  ! stomate_vmax.f90
1161  !
1162 
1163  ! 1. Scalar
1164
1165  REAL(r_std), SAVE :: vmax_offset = 0.3        !! minimum leaf efficiency (unitless)
1166!$OMP THREADPRIVATE(vmax_offset)
1167  REAL(r_std), SAVE :: leafage_firstmax = 0.03  !! relative leaf age at which efficiency
1168                                                !! reaches 1 (unitless)
1169!$OMP THREADPRIVATE(leafage_firstmax)
1170  REAL(r_std), SAVE :: leafage_lastmax = 0.5    !! relative leaf age at which efficiency
1171                                                !! falls below 1 (unitless)
1172!$OMP THREADPRIVATE(leafage_lastmax)
1173  REAL(r_std), SAVE :: leafage_old = 1.         !! relative leaf age at which efficiency
1174                                                !! reaches its minimum (vmax_offset)
1175                                                !! (unitless)
1176!$OMP THREADPRIVATE(leafage_old)
1177  !
1178  ! stomate_season.f90
1179  !
1180
1181  ! 1. Scalar
1182
1183  REAL(r_std), SAVE :: gppfrac_dormance = 0.2  !! report maximal GPP/GGP_max for dormance (0-1, unitless)
1184!$OMP THREADPRIVATE(gppfrac_dormance)
1185  REAL(r_std), SAVE :: tau_climatology = 20.   !! tau for "climatologic variables (years)
1186!$OMP THREADPRIVATE(tau_climatology)
1187  REAL(r_std), SAVE :: hvc1 = 0.019            !! parameters for herbivore activity (unitless)
1188!$OMP THREADPRIVATE(hvc1)
1189  REAL(r_std), SAVE :: hvc2 = 1.38             !! parameters for herbivore activity (unitless)
1190!$OMP THREADPRIVATE(hvc2)
1191  REAL(r_std), SAVE :: leaf_frac_hvc = 0.33    !! leaf fraction (0-1, unitless)
1192!$OMP THREADPRIVATE(leaf_frac_hvc)
1193  REAL(r_std), SAVE :: tlong_ref_max = 303.1   !! maximum reference long term temperature (K)
1194!$OMP THREADPRIVATE(tlong_ref_max)
1195  REAL(r_std), SAVE :: tlong_ref_min = 253.1   !! minimum reference long term temperature (K)
1196!$OMP THREADPRIVATE(tlong_ref_min)
1197
1198  ! 3. Coefficients of equations
1199
1200  REAL(r_std), SAVE :: ncd_max_year = 3.
1201!$OMP THREADPRIVATE(ncd_max_year)
1202  REAL(r_std), SAVE :: gdd_threshold = 5.
1203!$OMP THREADPRIVATE(gdd_threshold)
1204  REAL(r_std), SAVE :: green_age_ever = 2.
1205!$OMP THREADPRIVATE(green_age_ever)
1206  REAL(r_std), SAVE :: green_age_dec = 0.5
1207!$OMP THREADPRIVATE(green_age_dec)
1208
1209  ! permafrost carbon related
1210  REAL(r_std), parameter :: O2_init_conc = 298.3                  !! gO2/m**3 mean for Cherskii
1211  REAL(r_std), parameter :: CH4_init_conc = 0.001267              !! gCH4/m**3 mean for Cherskii
1212  REAL, PARAMETER          :: z_root_max = 0.5                    !! Depth at which litter carbon input decays e-fold (root depth); 0.5 for compar w/WH
1213  REAL, PARAMETER          :: diffO2_air = 1.596E-5               !! oxygen diffusivity in air (m**2/s)
1214  REAL, PARAMETER          :: diffO2_w = 1.596E-9                 !! oxygen diffusivity in water (m**2/s)
1215  REAL, PARAMETER          :: O2_surf = 0.209                     !! oxygen concentration in surface air (molar fraction)
1216  REAL, PARAMETER          :: diffCH4_air = 1.702E-5              !! methane diffusivity in air (m**2/s)
1217  REAL, PARAMETER          :: diffCH4_w = 2.0E-9                  !! methane diffusivity in water (m**2/s)
1218  REAL, PARAMETER          :: CH4_surf = 1700.E-9                 !! methane concentration in surface air (molar fraction)
1219  REAL, SAVE               :: tetasat =  .5                       !! volumetric water content at saturation (porosity)
1220!$OMP THREADPRIVATE(tetasat)
1221  REAL(r_std), SAVE               :: tetamoss =  0.92                    !! porosity of moss
1222!$OMP THREADPRIVATE(tetamoss)
1223  REAL(r_std), SAVE               :: rho_moss                            !! density of moss
1224!$OMP THREADPRIVATE(rho_moss)
1225  REAL, PARAMETER          :: zmoss = 0.2                         !! thickness of moss layer (in permafrost regions,m) 0. ! 0.001 DKtest for compar w/WH
1226  REAL, PARAMETER          :: h_snowmoss = 0.2                    !! snow height above which we consider the moss layer to be to compressed to be effective (m)
1227  REAL, PARAMETER          :: BunsenO2 = 0.038                    !! Bunsen coefficient for O2 (10C, 1bar)
1228  REAL, PARAMETER          :: BunsenCH4 = 0.043                   !! Bunsen coefficient for CH4 (10C, Wiesenburg et Guinasso, Jr., 1979)
1229  REAL, PARAMETER          :: ebuthr = 0.9                        !! Soil humidity threshold for ebullition
1230  REAL, PARAMETER          :: wCH4 = 16.                          !! molar weight of CH4 (g/mol)
1231  REAL, PARAMETER          :: wO2 = 32.                           !! molar weight of O2 (g/mol)
1232  REAL, PARAMETER          :: wC = 12.                            !! molar weight of C (g/mol)
1233  REAL, PARAMETER          :: avm = .01                           !! minimum air volume (m**3 air/m**3 soil)
1234  REAL(R_STD), PARAMETER   :: hmin_tcalc = .001                   !! minimum total snow layer thickness below which we ignore diffusion across the snow layer
1235
1236  ! are we running the soil carbon spinup routine?
1237  LOGICAL, SAVE           :: soilc_isspinup = .false.
1238
1239  ! which variables to write to history tapes?
1240  LOGICAL, SAVE           :: writehist_deepC = .true.
1241  LOGICAL, SAVE           :: writehist_soilgases = .true.
1242  LOGICAL, SAVE           :: writehist_deltaC = .false.
1243  LOGICAL, SAVE           :: writehist_zimovheat = .false.
1244  LOGICAL, SAVE           :: writehist_deltaC_litter = .false.
1245  LOGICAL, SAVE           :: writehist_gascoeff = .false.
1246
1247
1248!pss:+
1249!valeurs des bornes des differentes classes de WTD pour TOPMODEL
1250  REAL(r_std),SAVE :: WTD1_borne=0.03
1251  REAL(r_std),SAVE :: WTD2_borne=0.09
1252  REAL(r_std),SAVE :: WTD3_borne=0.15
1253  REAL(r_std),SAVE :: WTD4_borne=0.21
1254!valeurs du shift de la distribution topo pour passer de fsat a fwet
1255  REAL(r_std),SAVE :: SHIFT_fsat_fwet=5.
1256!pss:-
1257
1258!
1259! stomate cste WETLAND
1260!
1261!FLAG for CH4 from wetland
1262  LOGICAL,SAVE                            :: CH4_calcul
1263
1264! Constant for Precission issues
1265  REAL(r_std), PARAMETER                                       :: EPS =1E-3_r_std
1266
1267
1268!!!!! crop parameters
1269
1270  ! STICS NITROGEN
1271  ! IN THIS VERSION, WE DO NOT HAVE NITROGEN PROCESS, SO NO NITROGEN LIMITATION
1272  ! for leaf development and biomass growth at the moment
1273  !REAL(r_std), SAVE :: innlai = 0.8 ! nitrogen stress for lai
1274  REAL(r_std), SAVE :: inns = 1.   ! nitrogen stress for grain production
1275!$OMP THREADPRIVATE(inns)
1276  REAL(r_std), SAVE :: innsenes = 1. ! nitrogen stress for senescence
1277!$OMP THREADPRIVATE(innsenes)
1278  REAL(r_std), SAVE :: exolai = 1.  !! water logging effects on lai [0 1], 1, no slowing effect
1279!$OMP THREADPRIVATE(exolai)
1280  REAL(r_std), SAVE :: resperenne = 0.0  !! C crop reserve, during the cropping season, or during the intercrop period (for perenial crops) // t ha-1
1281!$OMP THREADPRIVATE(resperenne)
1282  INTEGER(i_std), SAVE :: numcult = 1
1283!$OMP THREADPRIVATE(numcult)
1284  INTEGER(i_std), SAVE :: vlength = 70
1285!$OMP THREADPRIVATE(vlength)
1286  !INTEGER(i_std), SAVE :: maxgs = 300 ! This is an arbitrary setting of maximum
1287  !growing length for annual crop to avoid a too long growing season length
1288  INTEGER(i_std), SAVE :: matrec = 3 ! subjective setting for a period between nmat and nrec for grain drying and nutrition dynamics
1289!$OMP THREADPRIVATE(matrec)
1290
1291  REAL(r_std), SAVE :: tetstomate = 0.53  ! m3/m3 soil water contents
1292!$OMP THREADPRIVATE(tetstomate)
1293!  REAL(r_std), SAVE :: teturg = 0.73  !
1294  REAL(r_std), SAVE :: teturg = 1  !
1295!$OMP THREADPRIVATE(teturg)
1296  REAL(r_std), SAVE :: tetsen = 0.4  !
1297!$OMP THREADPRIVATE(tetsen)
1298
1299  LOGICAL, SAVE :: nitrogen_use = .FALSE.       !! IF we consider the nitrogen fertilization (true/false)
1300!$OMP THREADPRIVATE(nitrogen_use)
1301  LOGICAL, SAVE :: fix_nfert = .TRUE.       !! IF we use the average nitrogen fertilization (true/false)
1302!$OMP THREADPRIVATE(fix_nfert)
1303  LOGICAL, SAVE :: iplt_1d = .TRUE.  !! do we use the imposed planting date
1304!$OMP THREADPRIVATE(iplt_1d)
1305  LOGICAL, SAVE :: rot_1d = .TRUE.  !! do we use the imposed rotation cycle without map
1306!$OMP THREADPRIVATE(rot_1d)
1307  REAL(r_std), SAVE :: N_effect = 0.65         !! this is the maximum additive effect of nitrogen fertilization on Vcmax
1308!$OMP THREADPRIVATE(N_effect)
1309  REAL(r_std), SAVE :: prc_residual = 0.5      !! percentage of straws leaving on the croplands
1310!$OMP THREADPRIVATE(prc_residual)
1311  INTEGER(i_std), SAVE :: codesla = 2     !! 1 for old sla calc, 2 for new sla calc
1312!$OMP THREADPRIVATE(codesla)
1313
1314!!!!! end crop parameters, xuhui
1315
1316END MODULE constantes_var
Note: See TracBrowser for help on using the repository browser.