1 MODULE module_ghg_fluxes
3 USE module_state_description
7 ! 04/05/2011- This module contains parameterizations to calculate biospheric greenhouse gas fluxes:
8 ! CO2 uptake and release by VPRM model (done by Ravan Ahmadov - ravan.ahmadov@noaa.gov)
9 ! CH4 flux modules: KAPLAN, SOILUPTAKE, TERMITE (done by Veronika Beck - vbeck@bgc-jena.mpg.de)
10 ! Some references, where VPRM in WRF was used:
11 ! 1) Ahmadov, R., C. Gerbig, et al. (2007). "Mesoscale covariance of transport and CO2 fluxes:
12 ! Evidence from observations and simulations using the WRF-VPRM coupled atmosphere-biosphere model." JGR-Atmospheres 112(D22): 14.
13 ! 2) Ahmadov, R., C. Gerbig, et al. (2009). "Comparing high resolution WRF-VPRM simulations and two global CO2 transport
14 ! models with coastal tower measurements of CO2." Biogeosciences 6(5): 807-817.
15 ! 3) Pillai, D., C. Gerbig, et al. (2011). "High-resolution simulations of atmospheric CO(2) over complex terrain -
16 ! representing the Ochsenkopf mountain tall tower." Atmospheric Chemistry and Physics 11(15): 7445-7464.
17 ! 4) Pillai, D., C. Gerbig, et al. (2009). "High resolution modeling of CO2 over Europe: implications for representation
18 ! errors of satellite retrievals." Atmospheric Chemistry and Physics 10(1): 83-94.
20 ! Information on the CH4 flux models are found in:
21 ! 1) Kaplan, J. O., (2002): Wetlands at the Last Glacial Maximum: Distribution and methane
22 ! emissions Geophys. Res. Lett., 29, No.6, 1079, doi:10.1029/2001GL013366.
23 ! Ridgwell, A. J., S. J. Marshall, and K. Gregson, (1999): Consumption of atmospheric
24 ! methane by soils: A process-based model Global Biochem. Cycles, 13(1), 59-70.
25 ! Sanderson, M. G., (1996): Biomass of termites and their emissions of methane and carbon
26 ! dioxode: A global database Global Biochem. Cycles, 10(4), 543-557.
28 ! 2) References where the CH4 flux models in WRF are used:
29 ! Beck, V., T. Koch, R. Kretschmer, J. Marshall, R. Ahmadov, C. Gerbig, D. Pillai,
30 ! and M. Heimann, (2011): The WRF Greenhouse Gas Model (WRF-GHG). Technical
31 ! Report No. 25, Max Planck Institute for Biogeochemistry, Jena, Germany.
32 ! available online via: http://www.bgc-jena.mpg.de/bgc-systems/index.shtml
33 ! Beck, V. et al., (2012): WRF-Chem simulations in the Amazon region during wet and
34 ! dry season transitions: evaluation of methane models and wetland inundation maps, in preparation
36 ! Reference for the WRF_chem module_ghg_fluxes
37 ! Beck and Ahmadov et al., (2012): module_ghg_fluxes: A new module in WRF-CHEM for the passive tracer
38 ! transport of greenhouse gases, (in prep.)
42 SUBROUTINE add_ghg_fluxes ( ids,ide, jds,jde, kds,kde, & ! Domain dimensions
43 ims,ime, jms,jme, kms,kme, & ! Memory dimensions
44 its,ite, jts,jte, kts,kte, & ! Tile dimensions
46 dtstep, dz8w, config_flags, rho_phy, &
47 chem, emis_ant,eghg_bio,ebio_co2oce )
49 ! March-28, this subroutine adds all type of greenhouse gases to the chem species
53 TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
55 INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
56 ims,ime, jms,jme, kms,kme, &
57 its,ite, jts,jte, kts,kte
59 REAL, INTENT(IN ) :: dtstep
61 REAL, DIMENSION( ims:ime,jms:jme ), INTENT(IN ) :: ebio_co2oce
62 REAL, DIMENSION( ims:ime, kms:kme, jms:jme, num_chem ), INTENT(INOUT ) :: chem
63 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN ) :: rho_phy, dz8w
64 REAL, DIMENSION( ims:ime, kms:config_flags%kemit, jms:jme, num_emis_ant ), INTENT(IN ) :: emis_ant
65 REAL, DIMENSION( ims:ime, 1,jms:jme, num_eghg_bio ), INTENT(IN ) :: eghg_bio
70 call wrf_debug(15,'add_ghg_fluxes')
72 ! For both GHG options
75 ! 3D anthropogenic fluxes
76 DO k=kts,min(config_flags%kemit,kte)
77 conv_rho=8.0461e-6/rho_phy(i,k,j)*dtstep/dz8w(i,k,j) ! 8.0461e-6=molar_mass(air)/3600, [g/mol/s]
78 chem(i,k,j,p_co2_ant)= chem(i,k,j,p_co2_ant) + conv_rho* emis_ant(i,k,j,p_e_co2)
79 chem(i,k,j,p_co2_tst)= chem(i,k,j,p_co2_tst) + conv_rho* emis_ant(i,k,j,p_e_co2tst)
80 chem(i,k,j,p_co_ant) = chem(i,k,j,p_co_ant) + conv_rho* emis_ant(i,k,j,p_e_co)
82 ! 2D biospheric fluxes:
84 chem(i,1,j,p_co2_bio)= chem(i,1,j,p_co2_bio) + conv_rho* (eghg_bio(i,1,j,p_ebio_gee) + eghg_bio(i,1,j,p_ebio_res)) ! both uptake and release
85 chem(i,1,j,p_co2_oce)= chem(i,1,j,p_co2_oce) + conv_rho* ebio_co2oce(i,j)
92 ! For the GHG_TRACER option only
93 IF(config_flags%chem_opt==GHG_TRACER) THEN
96 ! 3D anthropogenic fluxes
97 DO k=kts,min(config_flags%kemit,kte)
98 conv_rho=8.0461e-6/rho_phy(i,k,j)*dtstep/dz8w(i,k,j) ! 8.0461e-6=molar_mass(air)/3600, [g/mol/s]
99 chem(i,k,j,p_ch4_ant)= chem(i,k,j,p_ch4_ant) + conv_rho* emis_ant(i,k,j,p_e_ch4)
100 chem(i,k,j,p_ch4_tst)= chem(i,k,j,p_ch4_tst) + conv_rho* emis_ant(i,k,j,p_e_ch4tst)
101 chem(i,k,j,p_co_tst) = chem(i,k,j,p_co_tst) + conv_rho* emis_ant(i,k,j,p_e_cotst)
103 ! 2D biospheric fluxes:
105 chem(i,1,j,p_ch4_bio)= chem(i,1,j,p_ch4_bio) + conv_rho* (eghg_bio(i,1,j,p_ebio_ch4wet) + eghg_bio(i,1,j,p_ebio_ch4soil) &
106 + eghg_bio(i,1,j,p_ebio_ch4term))
115 END SUBROUTINE add_ghg_fluxes
116 !**************************************************************************************************
117 SUBROUTINE VPRM ( ids,ide, jds,jde, &
121 vprm_in,rad0, lambda, &
126 INTEGER, INTENT(IN ) :: ids,ide, jds,jde, &
131 REAL, PARAMETER :: const= 3.6e+3 ! For unit conversion from mmol/m^2/s to mol/km2/hr
133 REAL, DIMENSION (ims:ime, jms:jme), INTENT(IN) :: T2, RAD
135 REAL, DIMENSION( ims:ime, 8, jms:jme, num_vprm_in), INTENT(IN) :: vprm_in
136 REAL, DIMENSION( ims:ime, 1,jms:jme, num_eghg_bio ), INTENT(INOUT ) :: eghg_bio
138 REAL, DIMENSION(num_vprm_in) :: rad0, lambda, alpha, RESP0
139 REAL :: a1,a2,a3,Tair,Tscale,Wscale,Pscale,GEE_frac,RESP_frac,evithresh,RADscale
140 ! VPRM vegetation classes:
150 REAL, DIMENSION(8) :: Tmax,Tmin,Topt
151 ! These are universal VPRM parameters
152 DATA Tmin /0.,0.,0.,2.,2.,5.,2.,0./
153 DATA Topt /20.,20.,20.,20.,20.,22.,18.,0./
156 DO j=jts,min(jte,jde-1)
157 DO i=its,min(ite,ide-1)
163 veg_frac_loop: DO m=1,7
165 if (vprm_in(i,m,j,p_vegfra_vprm)<1.e-8) CYCLE ! Then fluxes are zero
171 ! Here a1 or a2 can't be negative
172 if (a1<0. .OR. a2>0.) then
175 Tscale=a1*a2/(a1*a2 - a3**2)
182 ! modification due to different dependency on ground water
183 if (m==4 .OR. m==7) then ! grassland and shrubland are xeric systems
184 if (vprm_in(i,m,j,p_lswi_max)<1e-7) then ! in order to avoid NaN for Wscale
187 Wscale= (vprm_in(i,m,j,p_lswi)-vprm_in(i,m,j,p_lswi_min))/(vprm_in(i,m,j,p_lswi_max)-vprm_in(i,m,j,p_lswi_min))
190 Wscale= (1.+vprm_in(i,m,j,p_lswi))/(1.+vprm_in(i,m,j,p_lswi_max))
193 ! effect of leaf phenology
194 if (m==1) then ! evegreen
196 else if (m==5 .OR. m==7) then ! savanna or grassland
197 Pscale= (1.+vprm_in(i,m,j,p_lswi))/2.
198 else ! Other vegetation types
199 evithresh= vprm_in(i,m,j,p_evi_min) + 0.55*(vprm_in(i,m,j,p_evi_max)-vprm_in(i,m,j,p_evi_min))
200 if (vprm_in(i,m,j,p_evi)>=evithresh) then ! Full canopy period
203 Pscale=(1.+vprm_in(i,m,j,p_lswi))/2. ! bad-burst to full canopy period
207 RADscale= 1./(1. + RAD(i,j)/rad0(m))
208 GEE_frac= lambda(m)*Tscale*Pscale*Wscale*RADscale* vprm_in(i,m,j,p_evi)* RAD(i,j)*vprm_in(i,m,j,p_vegfra_vprm) + GEE_frac
210 RESP_frac= (alpha(m)*Tair + RESP0(m))*vprm_in(i,m,j,p_vegfra_vprm) + RESP_frac
215 eghg_bio(i,1,j,p_ebio_gee)= min(0.0,const*GEE_frac)
216 eghg_bio(i,1,j,p_ebio_res)= max(0.0,const*RESP_frac)
222 !****************************************************************************************
224 !VB: here comes the subroutine for the kaplan wetland inventory (Kaplan, 2002+2006)
225 !which calculates CH4 wetland emissions from wrf soil temperature and soil moisture fields
226 !and a global carbon density and a potential wetland map (see also Sitch et al. 2003) for details
228 SUBROUTINE KAPLAN ( ids,ide, jds,jde, &
232 dt, T_soil, Soil_M, wet_in, &
233 soil_type, T_skin, eghg_bio, &
234 num_soil_layers,E_f,M_s )
238 INTEGER, INTENT(IN ) :: ids,ide, jds,jde, &
243 INTEGER, DIMENSION (ims:ime, jms:jme), INTENT(IN) :: soil_type
245 REAL, PARAMETER :: const= 3.6e9/(0.012+4.*0.001) ! For unit conversion from kgCH4/m^2/s to molCH4/km2/hr
246 REAL, DIMENSION (ims:ime,1,jms:jme, num_wet_in), INTENT(IN) :: wet_in
247 REAL, DIMENSION (ims:ime, jms:jme), INTENT(IN) :: T_skin
248 REAL, DIMENSION (ims:ime, num_soil_layers, jms:jme), INTENT(IN) :: Soil_M, T_soil
249 REAL, DIMENSION (ims:ime, 1,jms:jme, num_eghg_bio), INTENT(INOUT) :: eghg_bio
250 REAL, INTENT(IN) :: dt,M_s,E_f
252 REAL, DIMENSION( ims:ime, jms:jme) :: sm_01, sm_02, sm_03, sm_04, g_T, f_SM, &
253 k_r, Carbon, HR, T_flood, sm_tot, T_2s, &
254 T_peat, P_l, soil_sat
258 ! Description of the variables used in the subroutine KAPLAN
259 ! T_soil: soil temperature from WRF
260 ! C_pool: carbon content of the fast carbon pool at time 0 - from the LPJ model 2000
261 ! Wet_map: potential wetland map of Jed Kaplan gives the percentage of wetland area
262 ! covered by each grid cell
263 ! ebio_ch4wet: methane wetland emissions - output from kaplan model
264 ! Soil_M: 4(3) dimensional wrf soil moisture output
265 ! sm_01: first wrf soil moisture layer
266 ! sm_02: second wrf soil moisture layer
267 ! sm_03: third wrf soil moisture layer
268 ! sm_04: fourth wrf soil moisture layer
269 ! g_T: gives a modified Arrhenius temperature dependence
270 ! f_SM: factor accounting for the soil moisture
271 ! k_r: decomposition rate
272 ! C_x: carbon pool after a certain time
273 ! HR: heteorotrophic respiration
274 ! T_flood: methane emissions for the flooding part - not peat land
275 ! sm_tot: the actual soil moisture used for the wetland emissions is built up out of the wrf soil moisture
276 ! T_2s: temperature of first soil layer from surface used for calculation of wetland emissions
277 ! E_f: correction factor accounting for the peatland wetland emissions
278 ! T_peat: Ch4 wetland emissions from peat ground
279 ! P_l: weighting factor for the global peatland and flooded wetland emissions
280 ! T_a: mean annual surface temperature used for the weighting factor
281 ! but this mean annual temperature has to come from another source (e.g. GEOS)
282 ! dt: timestep of the wrf grid in seconds
283 ! soil_type: soil type for getting saturated soil moisture
284 ! soil_sat: value of saturated soil moisture
285 ! T_skin: skin temperature to use instead of soil temperature
287 ! Initialization of the constant variables
289 tau_10 = 2.86 !litter soil pool
291 DO j=jts,min(jte,jde-1)
292 DO i=its,min(ite,ide-1)
294 ! zero initialization of the fields to avoid crashing of the program
296 eghg_bio(i,1,j,p_ebio_ch4wet)=0.
312 ! If loop to derive the saturated soil moisture for the specific soil type
314 IF(soil_type(i,j) == 1)then
315 soil_sat(i,j) = 0.339
316 ELSE IF(soil_type(i,j) == 2) then
317 soil_sat(i,j) = 0.421
318 ELSE IF(soil_type(i,j) == 3) then
319 soil_sat(i,j) = 0.434
320 ELSE IF(soil_type(i,j) == 4) then
321 soil_sat(i,j) = 0.476
322 ELSE IF(soil_type(i,j) == 5) then
323 soil_sat(i,j) = 0.476
324 ELSE IF(soil_type(i,j) == 6) then
325 soil_sat(i,j) = 0.439
326 ELSE IF(soil_type(i,j) == 7) then
327 soil_sat(i,j) = 0.404
328 ELSE IF(soil_type(i,j) == 8) then
329 soil_sat(i,j) = 0.464
330 ELSE IF(soil_type(i,j) == 9) then
331 soil_sat(i,j) = 0.465
332 ELSE IF(soil_type(i,j) == 10) then
333 soil_sat(i,j) = 0.406
334 ELSE IF(soil_type(i,j) == 11) then
335 soil_sat(i,j) = 0.468
336 ELSE IF(soil_type(i,j) == 12) then
337 soil_sat(i,j) = 0.468
338 ELSE IF(soil_type(i,j) == 13) then
339 soil_sat(i,j) = 0.439
340 ELSE IF(soil_type(i,j) == 14) then
342 ELSE IF(soil_type(i,j) == 15) then
344 ELSE IF(soil_type(i,j) == 16) then
345 soil_sat(i,j) = 0.421
346 ELSE IF(soil_type(i,j) == 17) then
347 soil_sat(i,j) = 0.468
348 ELSE IF(soil_type(i,j) == 18) then
349 soil_sat(i,j) = 0.200
350 ELSE IF(soil_type(i,j) == 19) then
351 soil_sat(i,j) = 0.339
356 ! Use mean value of first and 2nd soil layer (up to 30cm depth)
357 ! and the surface soil temperature
359 sm_01(i,j) = Soil_M(i,1,j)
360 sm_02(i,j) = Soil_M(i,2,j)
361 sm_03(i,j) = Soil_M(i,3,j)
362 sm_04(i,j) = Soil_M(i,4,j)
364 sm_tot(i,j) = 0.5*(sm_01(i,j)+sm_02(i,j))
366 IF(sm_tot(i,j) < 0.0) then
370 IF ((T_Soil(i,1,j) == 273.16).OR.(T_Soil(i,1,j) == 0.0)) then
371 T_2s(i, j) = T_skin(i, j) - 273.15
373 T_2s(i,j)= T_Soil(i,1,j)-273.15
376 ! calculate temperature dependence all based on sitch (2003)
378 g_T(i,j) = EXP(308.56*(1.0/56.02 - 1.0/(T_2s(i,j) + 46.02)))
380 ! calculate soil moisture factor
381 ! soil moisture should be sm/saturated sm (Folley)
383 f_SM(i,j) = 0.25 + 0.75 * (sm_tot(i,j)/soil_sat(i,j))
385 ! calculate decomposition rate per year/per hr 20.04.10
387 k_r(i,j) = ((1/tau_10)*g_T(i,j)*f_SM(i,j))/(12.0*24.0*30.0)
389 ! calculate the variable carbon fast pool depending on a month
391 Carbon(i,j) = wet_in(i,1,j,p_Cpool)*(1.0 - EXP(-k_r(i,j)*1.0))
393 ! linearize and get the decomposed carbon for one second
395 Carbon(i,j) = Carbon(i,j)/(3600.0)
397 ! calculate the heteorotrophic respiration
399 HR(i,j) = 0.7*Carbon(i,j)
401 ! calculate the wetland emissions per grid cell for the flooding part
403 T_flood(i,j) = HR(i,j)*M_s*wet_in(i,1,j,p_wetmap)
405 ! calculate wetland emissions for the peatland part (higher latitudes)
407 T_peat(i,j) = HR(i,j)*E_f*wet_in(i,1,j,p_wetmap)
409 ! the factor for the relation between flood and peat land
411 P_l(i,j) = EXP((wet_in(i,1,j,p_T_ann) - 303.0)/8.0)
412 eghg_bio(i,1,j,p_ebio_ch4wet) = P_l(i,j)*T_flood(i,j)+(1.0 - P_l(i,j))*T_peat(i,j)
415 eghg_bio(i,1,j,p_ebio_ch4wet) = eghg_bio(i,1,j,p_ebio_ch4wet)*const
421 END SUBROUTINE KAPLAN
422 !***************************************************************************************
423 SUBROUTINE TERMITE ( ids,ide, jds,jde, &
427 dt,eghg_bio, vtype_ter, &
428 biomt_par, emit_par )
432 INTEGER, INTENT(IN ) :: ids,ide, jds,jde, &
437 INTEGER, DIMENSION (ims:ime, jms:jme), INTENT(IN) :: vtype_ter
438 REAL, DIMENSION (ims:ime, 1,jms:jme, num_eghg_bio), INTENT(INOUT) :: eghg_bio
439 REAL, INTENT(IN) :: dt
441 REAL, PARAMETER :: const= 3.6e9/(0.012+4.*0.001) ! For unit conversion from kgCH4/m^2/s to molCH4/km2/hr
442 REAL, DIMENSION(14), INTENT(IN) :: biomt_par
443 REAL, DIMENSION(14), INTENT(IN) :: emit_par
445 CHARACTER*256 :: mminlu_loc
447 DO j=jts,min(jte,jde-1)
448 DO i=its,min(ite,ide-1)
450 CALL nl_get_mminlu(1 , mminlu_loc)
452 IF(mminlu_loc .EQ. 'USGS')THEN
454 vtype = INT(vtype_ter(i,j))
459 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
461 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(10)*emit_par(10)
463 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(10)*emit_par(10)
465 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(11)*emit_par(11)
467 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(11)*emit_par(11)
469 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(11)*emit_par(11)
471 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(7)*emit_par(7)
473 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(12)*emit_par(12)
475 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(12)*emit_par(12)
477 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(5)*emit_par(5)
479 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(4)*emit_par(4)
481 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(4)*emit_par(4)
483 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(1)*emit_par(1)
485 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(2)*emit_par(2)
487 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(4)*emit_par(4)
489 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
491 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
493 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
495 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(13)*emit_par(13)
497 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
499 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
501 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
503 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
505 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
507 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
511 ELSE IF(mminlu_loc .EQ. 'MODIFIED_IGBP_MODIS_NOAH')THEN
513 vtype = INT(vtype_ter(i,j))
518 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(2)*emit_par(2)
520 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(1)*emit_par(1)
522 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(4)*emit_par(4)
524 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(4)*emit_par(4)
526 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(4)*emit_par(4)
528 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(12)*emit_par(12)
530 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(12)*emit_par(12)
532 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(6)*emit_par(6)
534 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(5)*emit_par(5)
536 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(7)*emit_par(7)
538 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
540 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(10)*emit_par(10)
542 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
544 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(11)*emit_par(11)
546 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
548 eghg_bio(i,1,j,p_ebio_ch4term) = (1.0/3.6)*1.0e-12*biomt_par(13)*emit_par(13)
550 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
552 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
554 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
556 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
558 eghg_bio(i,1,j,p_ebio_ch4term) = 0.0
563 eghg_bio(i,1,j,p_ebio_ch4term) = eghg_bio(i,1,j,p_ebio_ch4term)*const
569 END SUBROUTINE TERMITE
571 !************************************************************
572 !subroutine for soil uptake following ridgwell et al. 1999
573 !************************************************************
575 SUBROUTINE SOILUPTAKE ( ids,ide, jds,jde, &
579 Soil_M, soil_typ, eghg_bio, &
581 potevap, sfevap, landuse, T2, dt, &
582 num_soil_layers, wet_in )
586 INTEGER, INTENT(IN ) :: ids,ide, jds,jde, &
592 INTEGER, DIMENSION (ims:ime, jms:jme), INTENT(IN) :: soil_typ
595 REAL, PARAMETER :: const= 3.6e9/(0.012+4.*0.001) ! For unit conversion from kgCH4/m^2/s to molCH4/km2/hr
596 REAL, DIMENSION (ims:ime, jms:jme), INTENT(IN) :: rain_1, T2, &
600 REAL, DIMENSION (ims:ime, num_soil_layers, jms:jme), INTENT(IN) :: Soil_M
601 REAL, INTENT(IN) :: dt
603 REAL, DIMENSION (ims:ime, 1,jms:jme, num_eghg_bio), INTENT(INOUT) :: eghg_bio
604 REAL, DIMENSION (ims:ime, 1,jms:jme, num_wet_in), INTENT(IN) :: wet_in
606 REAL, DIMENSION(ims:ime, jms:jme) :: sm_01, sm_02, sm_03, sm_04, &
607 i_cult, r_n, r_sm, vero, k_d, &
608 G_soil, G_t, sm_res, dch4, &
609 phi_soil, eps, b_f, sand_c, &
612 REAL :: dch4_0, k_0, z_dsoil, conv_Fk, conv_ch4, methane_0
614 CHARACTER*256 :: mminlu_loc
616 !Initialization of the constants
618 dch4_0 = 0.196 !cm2/s diffusivity of CH4 in free air
619 k_0 = 0.00087 !1/s base oxidation rate constant for uncultivated
620 !moist soil at 0 C obtained from experiments
621 z_dsoil = 6.0 ! soil depth in cm at which the oxidation activity is assumed
622 conv_Fk = 616.9 !mg/ppmv cm CH4 conversion factor fpr giving soil_flux right units of kgCH4/m^2s
623 conv_ch4 = (28.97/26.0)*1e6 !ppm to kgCH4/kgair
624 ! methane_0 = 9.66*1e-7 ! 1750ppb CH4 global average concentration
625 methane_0 = 1.77 ! 1770ppb CH4 global average concentration
627 DO j=jts,min(jte,jde-1)
628 DO i=its,min(ite,ide-1)
630 ! initialization of all variables
654 sm_01(i,j) = Soil_M(i,1,j)
655 sm_02(i,j) = Soil_M(i,2,j)
656 sm_03(i,j) = Soil_M(i,3,j)
657 sm_04(i,j) = Soil_M(i,4,j)
659 !----------------------------------------------------------------------
660 ! calculation of CH4 diffusion activity
661 !----------------------------------------------------------------------
663 G_t(i, j) = 1.0 + 0.0055 * (T2(i, j)-273.15)
665 !************************
666 ! here the values for air filled porosity and total por volume have to be filled in
667 !************************
669 ! calculation of the soil parameters air filled porosity, total pore volume and b factor
670 ! depending on the soil type
671 ! and also clay/sand content - from WRF SOILPARAM.TBL and triangle plot
672 ! sand and clay content and porosity from Cosby et al. 1984
674 IF (soil_typ(i, j) == 1) then !sand
675 phi_soil(i, j) = 0.339
679 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
680 *sand_c(i, j)**2 *clay_c(i, j)
681 ELSE IF (soil_typ(i, j) == 2) then !loamy sand
682 phi_soil(i, j) = 0.421
686 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
687 *sand_c(i, j)**2 *clay_c(i, j)
688 ELSE IF (soil_typ(i, j) == 3) then !sandy loam
689 phi_soil(i, j) = 0.434
693 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
694 *sand_c(i, j)**2 *clay_c(i, j)
695 ELSE IF (soil_typ(i, j) == 4) then ! silt loam
696 phi_soil(i, j) = 0.476
700 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
701 *sand_c(i, j)**2 *clay_c(i, j)
702 ELSE IF (soil_typ(i, j) == 5) then !silt
703 phi_soil(i, j) = 0.476
706 clay_c(i,j) = 0.10 !estimated no values
707 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
708 *sand_c(i, j)**2 *clay_c(i, j)
709 ELSE IF (soil_typ(i, j) == 6) then !loam
710 phi_soil(i, j) = 0.439
714 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
715 *sand_c(i, j)**2 *clay_c(i, j)
716 ELSE IF (soil_typ(i, j) == 7) then !sandy clay loam
717 phi_soil(i, j) = 0.464
721 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
722 *sand_c(i, j)**2 *clay_c(i, j)
723 ELSE IF (soil_typ(i, j) == 8) then !silty clay loam
724 phi_soil(i, j) = 0.404
728 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
729 *sand_c(i, j)**2 *clay_c(i, j)
730 ELSE IF (soil_typ(i, j) == 9) then !clay loam
731 phi_soil(i, j) = 0.465
735 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
736 *sand_c(i, j)**2 *clay_c(i, j)
737 ELSE IF (soil_typ(i, j) == 10) then !sandy clay
738 phi_soil(i, j) = 0.406
742 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
743 *sand_c(i, j)**2 *clay_c(i, j)
744 ELSE IF (soil_typ(i, j) == 11) then !silty clay
745 phi_soil(i, j) = 0.468
749 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
750 *sand_c(i, j)**2 *clay_c(i, j)
751 ELSE IF (soil_typ(i, j) == 12) then !clay
752 phi_soil(i, j) = 0.468
756 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
757 *sand_c(i, j)**2 *clay_c(i, j)
758 ELSE IF (soil_typ(i, j) == 13) then !organic material
759 phi_soil(i, j) = 0.439
762 clay_c(i,j) = 0.05 !estimated
763 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
764 *sand_c(i, j)**2 *clay_c(i, j)
765 ELSE IF (soil_typ(i, j) == 14) then !water
769 clay_c(i,j) = 0.40 !estimated
770 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
771 *sand_c(i, j)**2 *clay_c(i, j)
772 ELSE IF (soil_typ(i, j) == 15) then !bedrock
777 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
778 *sand_c(i, j)**2 *clay_c(i, j)
779 ELSE IF (soil_typ(i, j) == 16) then !other
780 phi_soil(i, j) = 0.421
784 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
785 *sand_c(i, j)**2 *clay_c(i, j)
786 ELSE IF (soil_typ(i, j) == 17) then ! playa
787 phi_soil(i, j) = 0.468
791 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
792 *sand_c(i, j)**2 *clay_c(i, j)
793 ELSE IF (soil_typ(i, j) == 18) then !lava
794 phi_soil(i, j) = 0.468
798 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
799 *sand_c(i, j)**2 *clay_c(i, j)
800 ELSE IF (soil_typ(i, j) == 19) then !white sand
801 phi_soil(i, j) = 0.339
805 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
806 *sand_c(i, j)**2 *clay_c(i, j)
808 phi_soil(i, j) = 0.339
812 b_f(i, j) = -3.140 - 0.00222* clay_c(i, j)**2 - 3.484*10e-5 &
813 *sand_c(i, j)**2 *clay_c(i, j)
816 G_soil(i, j) = (phi_soil(i, j)**(4.0/3.0))* &
817 ((eps(i, j)/phi_soil(i, j))**(1.5 + 3.0/b_f(i, j)))
819 ! Calculate the Soil CH4 Diffusivity
821 dch4(i, j) = G_soil(i, j)*G_t(i, j)*dch4_0
823 !-------------------------------------------------------------!
824 ! Calculation of CH4 Oxidation Activity !
825 !-------------------------------------------------------------!
827 ! Calculation of the temperature response to ch4 oxidation rate
830 IF(T2(i,j)<= 0.0) then
834 ELSE IF(T2(i,j) > 0.0) then
836 vero1(i, j) = (T2(i, j)-273.15)**4.0
838 vero(i,j) = EXP((0.0693*(T2(i,j)-273.15))-(8.56*10e-7*vero1(i, j)))
844 ! Calculation of the cultivation response
845 CALL nl_get_mminlu(1, mminlu_loc)
847 IF(mminlu_loc .EQ. 'USGS') THEN
849 IF(landuse(i, j) <= 5.0) THEN
853 ELSE IF(landuse(i, j) == 6.0) THEN
863 ELSE IF(mminlu_loc .EQ. 'MODIFIED_IGBP_MODIS_NOAH')THEN
865 IF(landuse(i, j) == 12.0 .OR. landuse(i,j) == 32.0 .OR. landuse(i,j) == 33.0 .OR. landuse(i,j) == 13.0) THEN
869 ELSE IF(landuse(i, j) == 14.0 .OR. landuse(i,j) == 31.0) THEN
881 r_n(i, j) = 1.0 - (0.75*i_cult(i, j))
883 ! Calculation of soil moisture response
884 !precipitation has to be monthly (*30)
885 ! soil moisture 2nd layer (30cm)
888 IF(sfevap(i, j) == 0.0) THEN
894 sm_res(i, j) = ((rain_1(i, j) + rain_2(i, j))*30.0*24.*3600./dt*0.001 &
895 + sm_02(i, j))/sfevap(i, j)
899 IF(sm_res(i, j) > 1.0)THEN
903 ELSE IF(sm_res(i, j) <= 1.0)THEN
905 r_sm(i, j) = sm_res(i, j)
909 k_d(i, j) = r_n(i, j)*r_sm(i, j)*vero(i, j)*k_0
911 !******************************************
912 ! Total soil uptake CH4
913 !******************************************
915 ! this gives you the flux in mg CH4/m^2 day
917 IF(dch4(i,j) /= 0.0 .AND. wet_in(i,1,j,p_wetmap) < 0.10 .AND. soil_typ(i,j) /= 14 .AND. soil_typ(i,j) /=1) then
919 eghg_bio(i,1,j,p_ebio_ch4soil) = ((methane_0*dch4(i, j))/z_dsoil)* &
920 (1.0 - dch4(i, j)/(dch4(i, j)+k_d(i, j)*z_dsoil))*conv_Fk
922 ! flux in mol/km2/hour
923 eghg_bio(i,1,j,p_ebio_ch4soil) = -eghg_bio(i,1,j,p_ebio_ch4soil) * 1.0e-6/(24.0*3600.0)*const !negative soil flux
928 eghg_bio(i,1,j,p_ebio_ch4soil) = 0.0
932 IF(eghg_bio(i,1,j,p_ebio_ch4soil) > 0.0) then
934 eghg_bio(i,1,j,p_ebio_ch4soil) = 0.0
941 END SUBROUTINE SOILUPTAKE
943 END MODULE module_ghg_fluxes