6 SUBROUTINE carbon_evol(HISBA, HRESPSL, HPHOTO, PTSTEP, KSPINS, &
7 prhoa, ptg, pwg, pwfc, pwwilt, pwsat, psand, &
8 pdg, pdzg, kwg_layer, &
9 pre25, plai, presp_biomass_inst, pturnover, &
10 plitter, plignin_struc, psoilcarb, &
11 presp_auto, presp_eco )
61 USE modi_control_moist_func
62 USE modi_control_temp_func
63 USE modi_carbon_litter
68 USE yomhook
,ONLY : lhook, dr_hook
69 USE parkind1
,ONLY : jprb
75 CHARACTER(LEN=3),
INTENT(IN) :: hisba
79 CHARACTER(LEN=3),
INTENT(IN) :: hrespsl
83 CHARACTER(LEN=3),
INTENT(IN) :: hphoto
85 REAL,
INTENT(IN) :: ptstep
86 INTEGER,
INTENT(IN) :: kspins
89 REAL,
DIMENSION(:),
INTENT(IN) :: prhoa
90 REAL,
DIMENSION(:,:),
INTENT(IN) :: ptg
91 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwg
92 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwfc
93 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwwilt
94 REAL,
DIMENSION(:,:),
INTENT(IN) :: pwsat
95 REAL,
DIMENSION(:,:),
INTENT(IN) :: psand
96 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdg
97 REAL,
DIMENSION(:,:),
INTENT(IN) :: pdzg
98 INTEGER,
DIMENSION(:),
INTENT(IN) :: kwg_layer
100 REAL,
DIMENSION(:),
INTENT(IN) :: pre25
101 REAL,
DIMENSION(:),
INTENT(IN) :: plai
102 REAL,
DIMENSION(:,:),
INTENT(IN) :: presp_biomass_inst
103 REAL,
DIMENSION(:,:),
INTENT(IN) :: pturnover
104 REAL,
DIMENSION(:,:,:),
INTENT(INOUT) :: plitter
105 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: plignin_struc
106 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: psoilcarb
107 REAL,
DIMENSION(:),
INTENT(OUT) :: presp_auto
108 REAL,
DIMENSION(:),
INTENT(OUT) :: presp_eco
112 REAL,
PARAMETER :: zcoef1 = 4.4e-8
113 REAL,
PARAMETER :: zcoef2 = 13.5
114 REAL,
PARAMETER :: zcoef3 = 5.4
115 REAL,
PARAMETER :: zcoef4 = 0.1
116 REAL,
PARAMETER :: zcoef5 = 25.0
118 REAL,
PARAMETER :: zdtop = 0.1
119 REAL,
PARAMETER :: zdsub = 1.0
121 REAL,
DIMENSION(SIZE(PTG,1)) :: zresp_soil_tot
122 REAL,
DIMENSION(SIZE(PTG,1)) :: zresp_auto_above
123 REAL,
DIMENSION(SIZE(PTG,1)) :: zresp_hetero
126 REAL,
DIMENSION(SIZE(PSOILCARB,1),SIZE(PSOILCARB,2)) :: zsoilcarbon_input
130 REAL,
DIMENSION(SIZE(PSOILCARB,1)) :: zresp_hetero_day_litter
132 REAL,
DIMENSION(SIZE(PSOILCARB,1)) :: zresp_hetero_day_soil
135 REAL,
DIMENSION(SIZE(PLIGNIN_STRUC,1),SIZE(PLIGNIN_STRUC,2)) :: zcontrol_moist, &
140 REAL,
DIMENSION(SIZE(PTG,1)) :: ztg_top
141 REAL,
DIMENSION(SIZE(PTG,1)) :: ztg_sub
142 REAL,
DIMENSION(SIZE(PTG,1)) :: zsand_sub
144 REAL,
DIMENSION(SIZE(PTG,1)) :: zmoist_top
145 REAL,
DIMENSION(SIZE(PTG,1)) :: zmoist_sub
146 REAL,
DIMENSION(SIZE(PTG,1)) :: zsat_top
147 REAL,
DIMENSION(SIZE(PTG,1)) :: zsat_sub
149 REAL,
DIMENSION(SIZE(PTG,1)) :: zdg_top
150 REAL,
DIMENSION(SIZE(PTG,1)) :: zdg_sub
152 REAL,
DIMENSION(SIZE(PTG,1),SIZE(PTG,2)) :: zwght_top
153 REAL,
DIMENSION(SIZE(PTG,1),SIZE(PTG,2)) :: zwght_sub
155 REAL,
DIMENSION(SIZE(PTG,1)) :: zwork
157 REAL :: zmoistl, zsatl, zlog2
162 INTEGER :: ini, inl, ji, jl, idepth, inbiomass
164 REAL(KIND=JPRB) :: zhook_handle
171 IF (lhook) CALL dr_hook(
'CARBON_EVOL',0,zhook_handle)
178 inbiomass=
SIZE(presp_biomass_inst,2)
180 zresp_soil_tot(:) = xundef
181 zresp_auto_above(:) = xundef
182 zresp_hetero(:) = xundef
183 zsoilcarbon_input(:,:) = xundef
184 zresp_hetero_day_litter(:) = xundef
185 zresp_hetero_day_soil(:) = xundef
186 zcontrol_moist(:,:) = xundef
187 zcontrol_temp(:,:) = xundef
188 zwght_top(:,:) = xundef
189 zwght_sub(:,:) = xundef
199 ztg_top(:) = ptg(:,1)-xtt
200 ztg_sub(:) = ptg(:,2)-xtt
204 zdg_top(ji)=min(zdtop,pdg(ji,idepth))
205 zdg_sub(ji)=min(zdsub,pdg(ji,idepth))
209 zwght_top(ji,jl)=min(pdzg(ji,jl),max(0.0,zdg_top(ji)-pdg(ji,jl)+pdzg(ji,jl)))
210 zwght_sub(ji,jl)=min(pdzg(ji,jl),max(0.0,zdg_sub(ji)-pdg(ji,jl)+pdzg(ji,jl)))
211 ztg_top(ji)=ztg_top(ji)+(ptg(ji,jl)-xtt)*zwght_top(ji,jl)/zdg_top(ji)
212 ztg_sub(ji)=ztg_sub(ji)+(ptg(ji,jl)-xtt)*zwght_sub(ji,jl)/zdg_sub(ji)
221 zresp_auto_above(:)=0.
223 IF (hphoto==
'NIT')
THEN
226 zresp_auto_above(:) = zresp_auto_above(:) + presp_biomass_inst(:,jnbiomass)
229 ELSE IF (hphoto==
'NCB')
THEN
232 zresp_auto_above(:) = zresp_auto_above(:) + presp_biomass_inst(:,jnbiomass)
235 ELSE IF (hphoto==
'AGS' .OR. hphoto==
'AST' .OR. hphoto==
'LAI' .OR. hphoto==
'LST')
THEN
237 zresp_auto_above(:) = presp_biomass_inst(:,1)
241 DO jnbiomass=1,inbiomass
242 presp_auto(:) = presp_auto(:) + presp_biomass_inst(:,jnbiomass)
249 IF (hrespsl ==
'DEF')
THEN
258 zwork(ji)=zwork(ji)+pwg(ji,jl)*zwght_top(ji,jl)/zdg_top(ji)
265 WHERE (plai(:) == xundef)
266 zresp_soil_tot(:) = 0.0
269 zresp_soil_tot(:) = (zcoef1/prhoa)*(zcoef2+zcoef3*plai(:))*zwork(:)*exp(zlog2*(zcoef4*(ztg_sub(:)-zcoef5)))
274 presp_eco(:) = zresp_soil_tot(:) + zresp_auto_above(:)
276 ELSE IF (hrespsl ==
'PRM')
THEN
285 zwork(ji)=zwork(ji)+min(1.0,pwg(ji,jl)/pwfc(ji,jl))*zwght_top(ji,jl)/zdg_top(ji)
296 presp_eco(:) = pre25(:)/prhoa(:) * zwork(:)*exp(zlog2*(zcoef4*(ztg_sub(:)-zcoef5)))
298 ELSE IF (hrespsl ==
'CNT')
THEN
310 zmoist_top(:) = min(1.0,max(0.0,(pwg(:,1)-pwwilt(:,1))/(pwfc(:,1)-pwwilt(:,1))))
311 zsat_top(:) = min(1.0,max(0.0,(pwg(:,1)-pwfc(:,1))/(pwsat(:,1)-pwfc(:,1))))
312 zmoist_sub(:) = min(1.0,max(0.0,(pwg(:,2)-pwwilt(:,2))/(pwfc(:,2)-pwwilt(:,2))))
313 zsat_sub(:) = min(1.0,max(0.0,(pwg(:,2)-pwfc(:,2))/(pwsat(:,2)-pwfc(:,2))))
315 zsand_sub(:) = psand(:,2)
322 zmoistl=min(1.0,max(0.0,(pwg(ji,jl)-pwwilt(ji,jl))/(pwfc(ji,jl)-pwwilt(ji,jl))))
323 zsatl =min(1.0,max(0.0,(pwg(ji,jl)-pwfc(ji,jl))/(pwsat(ji,jl)-pwfc(ji,jl))))
325 zmoist_top(ji)=zmoist_top(ji)+zmoistl*zwght_top(ji,jl)/zdg_top(ji)
326 zsat_top(ji)=zsat_top(ji)+zsatl *zwght_top(ji,jl)/zdg_top(ji)
327 zmoist_sub(ji)=zmoist_sub(ji)+zmoistl*zwght_sub(ji,jl)/zdg_sub(ji)
328 zsat_sub(ji)=zsat_sub(ji)+zsatl *zwght_sub(ji,jl)/zdg_sub(ji)
330 zsand_sub(ji)=zsand_sub(ji)+psand(ji,jl)*zwght_sub(ji,jl)/zdg_sub(ji)
343 zcontrol_temp,zcontrol_moist, &
344 zresp_hetero_day_litter,zsoilcarbon_input)
346 DO itcspin = 1,kspins
347 CALL
carbon_soil(ptstep,zsand_sub,zsoilcarbon_input,zcontrol_temp,&
348 zcontrol_moist,psoilcarb,zresp_hetero_day_soil )
353 zresp_hetero(:) = (zresp_hetero_day_litter(:) + zresp_hetero_day_soil(:)) &
354 * (xmco2/xmc) / (1000. * prhoa(:)* xday)
358 presp_eco(:) = zresp_hetero(:) + presp_auto(:)
362 IF (lhook) CALL dr_hook(
'CARBON_EVOL',1,zhook_handle)
real function, dimension(size(ptemp_in)) control_temp_func(PTEMP_IN)
subroutine carbon_litter(PTSTEP, PTURNOVER, PLITTER, PLIGNIN_STRUC, PCONTROL_TEMP, PCONTROL_MOIST, PRESP_HETERO_LITTER, PSOILCARBON_INPUT)
subroutine carbon_soil(PTSTEP, PSAND, PSOILCARBON_INPUT, PCONTROL_TEMP, PCONTROL_MOIST, PSOILCARB, PRESP_HETERO_SOIL)
real function, dimension(size(pmoist)) control_moist_func(PMOIST, PSAT)
subroutine carbon_evol(HISBA, HRESPSL, HPHOTO, PTSTEP, KSPINS, PRHOA, PTG, PWG, PWFC, PWWILT, PWSAT, PSAND, PDG, PDZG, KWG_LAYER, PRE25, PLAI, PRESP_BIOMASS_INST, PTURNOVER, PLITTER, PLIGNIN_STRUC, PSOILCARB, PRESP_AUTO, PRESP_ECO)