source: branches/publications/ORCHIDEE_gmd-2018-261/src_stomate/stomate_lcchange.f90 @ 8793

Last change on this file since 8793 was 4998, checked in by nicolas.vuichard, 7 years ago

rev29012018

  • Property svn:keywords set to HeadURL Date Author Revision
File size: 25.6 KB
Line 
1! =================================================================================================================================
2! MODULE       : stomate_lcchange
3!
4! CONTACT      : orchidee-help _at_ ipsl.jussieu.fr
5!
6! LICENCE      : IPSL (2006)
7! This software is governed by the CeCILL licence see ORCHIDEE/ORCHIDEE_CeCILL.LIC
8!
9!>\BRIEF       Impact of land cover change on carbon stocks
10!!
11!!\n DESCRIPTION: None
12!!
13!! RECENT CHANGE(S): None
14!!
15!! REFERENCE(S) : None
16!!
17!! SVN          :
18!! $HeadURL$
19!! $Date$
20!! $Revision$
21!! \n
22!_ ================================================================================================================================
23
24
25MODULE stomate_lcchange
26
27  ! modules used:
28 
29  USE ioipsl_para
30  USE stomate_data
31  USE pft_parameters
32  USE constantes
33 
34  IMPLICIT NONE
35 
36  PRIVATE
37  PUBLIC lcchange_main
38 
39CONTAINS
40
41
42!! ================================================================================================================================
43!! SUBROUTINE   : lcchange_main
44!!
45!>\BRIEF        Impact of land cover change on carbon stocks
46!!
47!! DESCRIPTION  : This subroutine is always activate if VEGET_UPDATE>0Y in the configuration file, which means that the
48!! vegetation map is updated regulary. lcchange_main is called from stomateLpj the first time step after the vegetation
49!! map has been changed.
50!! The impact of land cover change on carbon stocks is computed in this subroutine. The land cover change is written
51!! by the difference of current and previous "maximal" coverage fraction of a PFT.
52!! On the basis of this difference, the amount of 'new establishment'/'biomass export',
53!! and increase/decrease of each component, are estimated.\n
54!!
55!! Main structure of lpj_establish.f90 is:
56!! 1. Initialization
57!! 2. Calculation of changes in carbon stocks and biomass by land cover change
58!! 3. Update 10 year- and 100 year-turnover pool contents
59!! 4. History
60!!
61!! RECENT CHANGE(S) : None
62!!
63!! MAIN OUTPUT VARIABLE(S) : ::prod10, ::prod100, ::flux10, ::flux100,
64!!   :: cflux_prod10 and :: cflux_prod100
65!!
66!! REFERENCES   : None
67!!
68!! FLOWCHART    :
69!! \latexonly
70!!     \includegraphics[scale=0.5]{lcchange.png}
71!! \endlatexonly
72!! \n
73!_ ================================================================================================================================
74
75 
76  SUBROUTINE lcchange_main ( npts, dt_days, veget_max_old, veget_max_new, &
77       biomass, ind, age, PFTpresent, senescence, when_growthinit, everywhere, &       
78       co2_to_bm, bm_to_litter, tree_bm_to_litter, turnover_daily, bm_sapl, cn_ind,flux10,flux100, &
79       prod10,prod100,&
80       convflux,&
81       cflux_prod10,cflux_prod100, nflux_prod_total, leaf_frac,&
82       npp_longterm, lm_lastyearmax, litter, som, soil_n_min, KF, k_latosa_adapt, rue_longterm, &
83       lignin_struc, lignin_wood   )
84
85    IMPLICIT NONE
86   
87  !! 0. Variable and parameter declaration
88   
89    !! 0.1 Input variables
90   
91    INTEGER, INTENT(in)                                       :: npts             !! Domain size - number of pixels (unitless)
92    REAL(r_std), INTENT(in)                                   :: dt_days          !! Time step of vegetation dynamics for stomate
93                                                                                  !! (days)
94    REAL(r_std), DIMENSION(nvm, nparts,nelements), INTENT(in) :: bm_sapl          !! biomass of sapling
95                                                                                  !! @tex ($gC individual^{-1}$) @endtex
96    REAL(r_std), DIMENSION(npts,nvm), INTENT(in)              :: veget_max_old    !! Current "maximal" coverage fraction of a PFT (LAI
97                                                                                  !! -> infinity) on ground
98    REAL(r_std), DIMENSION(npts,nvm), INTENT(in)              :: veget_max_new    !! New "maximal" coverage fraction of a PFT (LAI ->
99                                                                                  !! infinity) on ground (unitless)
100 
101    !! 0.2 Output variables
102
103    REAL(r_std), DIMENSION(npts), INTENT(out)                 :: convflux         !! release during first year following land cover
104                                                                                  !! change
105    REAL(r_std), DIMENSION(npts), INTENT(out)                 :: cflux_prod10     !! total annual release from the 10 year-turnover
106                                                                                  !! pool @tex ($gC m^{-2}$) @endtex
107    REAL(r_std), DIMENSION(npts), INTENT(out)                 :: cflux_prod100    !! total annual release from the 100 year-
108                                                                                  !! turnover pool @tex ($gC m^{-2}$) @endtex
109    REAL(r_std), DIMENSION(npts), INTENT(out)                 :: nflux_prod_total !! release of N associated to land cover change  @tex ($gN m^{-2}$) @endtex
110    REAL(r_std), DIMENSION(npts,nvm,nparts,nelements), INTENT(inout):: turnover_daily   !! Turnover rates
111                                                                                      !! @tex ($gC m^{-2} day^{-1}$) @endtex
112
113    !! 0.3 Modified variables   
114   
115    REAL(r_std), DIMENSION(npts,nvm,nparts,nelements), INTENT(inout):: biomass    !! biomass @tex ($gC m^{-2}$) @endtex
116    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: ind              !! Number of individuals @tex ($m^{-2}$) @endtex
117    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: age              !! mean age (years)
118    LOGICAL, DIMENSION(npts,nvm), INTENT(inout)               :: senescence       !! plant senescent (only for deciduous trees) Set
119                                                                                  !! to .FALSE. if PFT is introduced or killed
120    LOGICAL, DIMENSION(npts,nvm), INTENT(inout)               :: PFTpresent       !! Is pft there (unitless)
121    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: everywhere       !! is the PFT everywhere in the grid box or very
122                                                                                  !! localized (unitless)
123    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: when_growthinit  !! how many days ago was the beginning of the
124                                                                                  !! growing season (days)
125    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: co2_to_bm        !! biomass uptaken
126                                                                                  !! @tex ($gC m^{-2} day^{-1}$) @endtex
127    REAL(r_std), DIMENSION(npts,nvm,nparts,nelements), INTENT(inout) :: bm_to_litter !! conversion of biomass to litter
128                                                                                  !! @tex ($gC m^{-2} day^{-1}$) @endtex
129    REAL(r_std), DIMENSION(npts,nvm,nparts,nelements), INTENT(inout) :: tree_bm_to_litter !! conversion of biomass to litter
130                                                                                  !! @tex ($gC m^{-2} day^{-1}$) @endtex
131    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: cn_ind           !! crown area of individuals
132                                                                                  !! @tex ($m^{2}$) @endtex
133    REAL(r_std), DIMENSION(npts,0:10), INTENT(inout)          :: prod10           !! products remaining in the 10 year-turnover
134                                                                                  !! pool after the annual release for each
135                                                                                  !! compartment (10 + 1 : input from year of land
136                                                                                  !! cover change)
137    REAL(r_std), DIMENSION(npts,0:100), INTENT(inout)         :: prod100          !! products remaining in the 100 year-turnover
138                                                                                  !! pool after the annual release for each
139                                                                                  !! compartment (100 + 1 : input from year of land
140                                                                                  !! cover change)
141    REAL(r_std), DIMENSION(npts,10), INTENT(inout)            :: flux10           !! annual release from the 10/100 year-turnover
142                                                                                  !! pool compartments
143    REAL(r_std), DIMENSION(npts,100), INTENT(inout)           :: flux100          !! annual release from the 10/100 year-turnover
144                                                                                  !! pool compartments
145    REAL(r_std), DIMENSION(npts,nvm,nleafages), INTENT(inout) :: leaf_frac        !! fraction of leaves in leaf age class
146                                                                                  !! (unitless)
147    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: lm_lastyearmax   !! last year's maximum leaf mass for each PFT
148                                                                                  !! @tex ($gC m^{-2}$) @endtex
149    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: npp_longterm     !! "long term" net primary productivity
150                                                                                  !! @tex ($gC m^{-2} year^{-1}$) @endtex
151    REAL(r_std),DIMENSION(npts,nlitt,nvm,nlevs,nelements), INTENT(inout):: litter !! metabolic and structural litter, above and
152                                                                                  !! below ground @tex ($gC m^{-2}$) @endtex
153    REAL(r_std),DIMENSION(npts,ncarb,nvm,nelements), INTENT(inout)      :: som    !! SOM pool: active, slow, or passive 
154  !! @tex ($g(C or N) m^{-2}$) @endtex
155    REAL(r_std),DIMENSION(npts,nvm,nnspec), INTENT(inout)     :: soil_n_min       !!  soil mineral nitrogen pool
156    REAL(r_std), DIMENSION(:,:), INTENT(inout)       :: KF                     !! Scaling factor to convert sapwood mass into leaf
157                                                                               !! mass (m)
158    REAL(r_std), DIMENSION(:,:), INTENT(inout)       :: k_latosa_adapt         !! Leaf to sapwood area adapted for long
159                                                                               !! term water stress (m)
160    REAL(r_std), DIMENSION(:,:), INTENT(inout)         :: rue_longterm        !! Longterm radiation use efficiency
161                                                                              !! (??units??)
162    REAL(r_std), DIMENSION(npts,nvm,nlevs), INTENT(inout)     :: lignin_struc     !! ratio Lignine/Carbon in structural litter,
163                                                                                  !! above and below ground
164    REAL(r_std), DIMENSION(npts,nvm,nlevs), INTENT(inout)     :: lignin_wood      !! ratio Lignine/Carbon in woody litter,
165                                                                                  !! above and below ground
166
167    !! 0.4 Local variables
168
169    INTEGER(i_std)                                            :: i, j, k, l, m    !! indices (unitless)
170    REAL(r_std),DIMENSION(npts,nelements)                     :: bm_new           !! biomass increase @tex ($gC m^{-2}$) @endtex
171    REAL(r_std),DIMENSION(npts,nparts,nelements)              :: biomass_loss     !! biomass loss @tex ($gC m^{-2}$) @endtex
172    REAL(r_std),DIMENSION(npts,nparts,nelements)              :: tree_biomass_loss     !! tree biomass loss @tex ($gC m^{-2}$) @endtex
173   
174    REAL(r_std)                                               :: above            !! aboveground biomass @tex ($gC m^{-2}$) @endtex
175    REAL(r_std),DIMENSION(npts)                               :: dilu_KF         !! KF dilution
176    REAL(r_std),DIMENSION(npts)                               :: dilu_k_latosa_adapt        !! k_latosa_adapt dilution
177    REAL(r_std),DIMENSION(npts)                               :: dilu_rue_longterm        !! rue_longterm dilution
178    REAL(r_std),DIMENSION(npts,nlitt,nlevs,nelements)         :: dilu_lit         !! Litter dilution @tex ($gC m^{-2}$) @endtex
179    REAL(r_std),DIMENSION(npts,ncarb,nelements)               :: dilu_som         !! SOM dilution @tex ($g(C or N) m^{-2}$) @endtex
180    REAL(r_std),DIMENSION(npts,nnspec)                        :: dilu_sin         !! Soil Inorganic Nitrogen dilution @tex ($gN m^{-2}$) @endtex     
181  !! Soil Inorganic Nitrogen dilution @tex ($gN m^{-2}$) @endtex
182    REAL(r_std),DIMENSION(npts,nlevs)                         :: dilu_lf_struc    !! fraction of structural litter that is lignin
183                                                                                  !! (0-1,unitless)
184    REAL(r_std),DIMENSION(npts,nlevs)                         :: dilu_lf_wood     !! fraction of woody litter that is lignin
185                                                                                  !! (0-1,unitless)
186    REAL(r_std),DIMENSION(nvm)                                :: delta_veg        !! changes in "maximal" coverage fraction of PFT
187    REAL(r_std)                                               :: delta_veg_sum    !! sum of delta_veg
188    REAL(r_std),DIMENSION(npts,nvm)                           :: delta_ind        !! change in number of individuals 
189!_ ================================================================================================================================
190
191    IF (printlev>=3) WRITE(numout,*) 'Entering lcchange_main'
192   
193  !! 1. initialization
194   
195    prod10(:,0)         = zero
196    prod100(:,0)        = zero   
197    above               = zero
198    convflux(:)         = zero
199    cflux_prod10(:)     = zero
200    cflux_prod100(:)    = zero
201    delta_ind(:,:)      = zero
202    delta_veg(:)        = zero
203    nflux_prod_total(:) = zero 
204   
205  !! 2. calculation of changes in carbon stocks and biomass by land cover change\n
206   
207    DO i = 1, npts ! Loop over # pixels - domain size
208       
209       !! 2.1 initialization of carbon stocks\n
210       delta_veg(:) = veget_max_new(i,:)-veget_max_old(i,:)
211       delta_veg_sum = SUM(delta_veg,MASK=delta_veg.LT.0.)
212     
213       dilu_lit(i,:,:,:) = zero
214       dilu_som(i,:,:) = zero
215       biomass_loss(i,:,:) = zero
216       tree_biomass_loss(i,:,:) = zero
217       dilu_sin(i,:) = zero 
218       dilu_lf_struc(i,:) = zero
219       dilu_lf_wood(i,:) = zero
220 
221       dilu_KF(:)=zero
222       dilu_k_latosa_adapt(:)=zero
223       dilu_rue_longterm(:)=zero
224       !! 2.2 if vegetation coverage decreases, compute dilution of litter, soil carbon, and biomass.\n
225       DO j=2, nvm
226          IF ( delta_veg(j) < -min_stomate ) THEN
227             dilu_lit(i,:,:,:) = dilu_lit(i,:,:,:) + delta_veg(j)*litter(i,:,j,:,:) / delta_veg_sum
228             dilu_som(i,:,:) =  dilu_som(i,:,:) + delta_veg(j) * som(i,:,j,:) / delta_veg_sum 
229             dilu_sin(i,:)=  dilu_sin(i,:) + delta_veg(j) * soil_n_min(i,j,:) / delta_veg_sum 
230             dilu_lf_struc(i,:) = dilu_lf_struc(i,:) + &
231                  delta_veg(j) * lignin_struc(i,j,:)* litter(i,istructural,j,:,icarbon) / delta_veg_sum
232             dilu_lf_wood(i,:) = dilu_lf_wood(i,:) + &
233                  delta_veg(j) * lignin_wood(i,j,:)*litter(i,iwoody,j,:,icarbon) / delta_veg_sum
234             biomass_loss(i,:,:) = biomass_loss(i,:,:) + biomass(i,j,:,:)*delta_veg(j) / delta_veg_sum
235             IF(is_tree(j)) THEN
236                 tree_biomass_loss(i,:,:) = tree_biomass_loss(i,:,:) + biomass(i,j,:,:)*delta_veg(j) / delta_veg_sum
237              ENDIF
238             dilu_KF(i) = dilu_KF(i) + delta_veg(j) * KF(i,j) / delta_veg_sum
239             dilu_k_latosa_adapt(i) = dilu_k_latosa_adapt(i) + delta_veg(j) * k_latosa_adapt(i,j) / delta_veg_sum
240             dilu_rue_longterm(i) = dilu_rue_longterm(i) + delta_veg(j) * rue_longterm(i,j) / delta_veg_sum
241          ENDIF
242       ENDDO
243       
244       !! 2.3
245       DO j=2, nvm ! Loop over # PFTs
246
247          !! 2.3.1 The case that vegetation coverage of PFTj increases
248          IF ( delta_veg(j) > min_stomate) THEN
249
250             !! 2.3.1.1 Initial setting of new establishment
251             IF (veget_max_old(i,j) .LT. min_stomate) THEN
252                IF (is_tree(j)) THEN
253
254                   ! cn_sapl(j)=0.5; stomate_data.f90
255                   cn_ind(i,j) = cn_sapl(j) 
256                ELSE
257                   cn_ind(i,j) = un
258                ENDIF
259                ind(i,j)= delta_veg(j) / cn_ind(i,j)
260                PFTpresent(i,j) = .TRUE.
261                everywhere(i,j) = 1.
262                senescence(i,j) = .FALSE.
263                age(i,j) = zero
264
265                ! large_value = 1.E33_r_std
266                when_growthinit(i,j) = large_value 
267                leaf_frac(i,j,1) = 1.0
268                npp_longterm(i,j) = npp_longterm_init
269                lm_lastyearmax(i,j) = bm_sapl(j,ileaf,icarbon) * ind(i,j)
270             ENDIF
271             IF ( cn_ind(i,j) > min_stomate ) THEN
272                delta_ind(i,j) = delta_veg(j) / cn_ind(i,j) 
273             ENDIF
274             
275             !! 2.3.1.2 Update of biomass in each each carbon stock component
276             !!         Update of biomass in each each carbon stock component (leaf, sapabove, sapbelow,
277             !>         heartabove, heartbelow, root, fruit, and carbres)\n
278             DO k = 1, nparts ! loop over # carbon stock components, nparts = 8; stomate_constant.f90
279                DO l = 1,nelements ! loop over # elements
280
281                   bm_new(i,l) = delta_ind(i,j) * bm_sapl(j,k,l) 
282                   IF (veget_max_old(i,j) .GT. min_stomate) THEN
283
284                      ! in the case that bm_new is overestimated compared with biomass?
285                      IF ((bm_new(i,l)/delta_veg(j)) > biomass(i,j,k,l)) THEN
286                         bm_new(i,l) = biomass(i,j,k,l)*delta_veg(j)
287                      ENDIF
288                   ENDIF
289                   biomass(i,j,k,l) = ( biomass(i,j,k,l) * veget_max_old(i,j) + bm_new(i,l) ) / veget_max_new(i,j)
290                   co2_to_bm(i,j) = co2_to_bm(i,j) + (bm_new(i,icarbon)* dt_days) / (one_year * veget_max_new(i,j))
291                END DO ! loop over # elements
292             ENDDO ! loop over # carbon stock components
293
294             !! 2.3.1.3 Calculation of dilution in litter, soil carbon, and  input of litter
295             !!        In this 'IF statement', dilu_* is zero. Formulas for litter and soil carbon
296             !!         could be shortend?? Are the following formulas correct?
297
298             KF(i,j) = ( KF(i,j) * veget_max_old(i,j) + &
299                  dilu_KF(i) *  delta_veg(j)) / veget_max_new(i,j)
300             
301             k_latosa_adapt(i,j) = ( k_latosa_adapt(i,j) * veget_max_old(i,j) + &
302                  dilu_k_latosa_adapt(i) *  delta_veg(j)) / veget_max_new(i,j)
303             
304             rue_longterm(i,j) = ( rue_longterm(i,j) * veget_max_old(i,j) + &
305                  dilu_rue_longterm(i) *  delta_veg(j)) / veget_max_new(i,j)
306
307             ! Lignin fraction of structural litter
308             lignin_struc(i,j,:)=(lignin_struc(i,j,:) * veget_max_old(i,j)* litter(i,istructural,j,:,icarbon) + & 
309                  dilu_lf_struc(i,:) * delta_veg(j)) / veget_max_new(i,j) 
310
311             ! Lignin fraction of woody litter
312             lignin_wood(i,j,:)=(lignin_wood(i,j,:) * veget_max_old(i,j)* litter(i,iwoody,j,:,icarbon) + & 
313                  dilu_lf_wood(i,:) * delta_veg(j)) / veget_max_new(i,j)
314
315             ! Litter
316             litter(i,:,j,:,:)=(litter(i,:,j,:,:) * veget_max_old(i,j) + &
317                  dilu_lit(i,:,:,:) * delta_veg(j)) / veget_max_new(i,j)
318           
319             WHERE ( litter(i,istructural,j,:,icarbon) > min_stomate )
320                lignin_struc(i,j,:) = lignin_struc(i,j,:)/litter(i,istructural,j,:,icarbon)
321             ELSEWHERE
322                lignin_struc(i,j,:) = LC_leaf(j)
323             ENDWHERE
324
325             WHERE ( litter(i,iwoody,j,:,icarbon) > min_stomate )
326                lignin_wood(i,j,:) = lignin_wood(i,j,:)/litter(i,iwoody,j,:,icarbon)
327             ELSEWHERE
328                lignin_wood(i,j,:) = LC_heartabove(j)
329             ENDWHERE
330
331             ! Soil Organic Matter
332             som(i,:,j,:)=(som(i,:,j,:) * veget_max_old(i,j) + dilu_som(i,:,:) * delta_veg(j)) / veget_max_new(i,j) 
333         
334             ! Soil inorganic nitrogen 
335             soil_n_min(i,j,:)=(soil_n_min(i,j,:) * veget_max_old(i,j) + & 
336                  dilu_sin(i,:) * delta_veg(j)) / veget_max_new(i,j) 
337
338             DO l = 1,nelements
339
340                ! Litter input
341                bm_to_litter(i,j,isapbelow,l) = bm_to_litter(i,j,isapbelow,l) + &
342                     &                         biomass_loss(i,isapbelow,l)*delta_veg(j) / veget_max_new(i,j)
343                bm_to_litter(i,j,iheartbelow,l) = bm_to_litter(i,j,iheartbelow,l) + biomass_loss(i,iheartbelow,l) *delta_veg(j) &
344                     &  / veget_max_new(i,j)
345                bm_to_litter(i,j,iroot,l) = bm_to_litter(i,j,iroot,l) + biomass_loss(i,iroot,l)*delta_veg(j) / veget_max_new(i,j)
346                bm_to_litter(i,j,ifruit,l) = bm_to_litter(i,j,ifruit,l) + biomass_loss(i,ifruit,l)*delta_veg(j) / veget_max_new(i,j)
347                bm_to_litter(i,j,icarbres,l) = bm_to_litter(i,j,icarbres,l) + &
348                     &                         biomass_loss(i,icarbres,l)   *delta_veg(j) / veget_max_new(i,j)
349                bm_to_litter(i,j,ilabile,l) = bm_to_litter(i,j,ilabile,l) + &
350                     &                         biomass_loss(i,ilabile,l)   *delta_veg(j) / veget_max_new(i,j)
351                bm_to_litter(i,j,ileaf,l) = bm_to_litter(i,j,ileaf,l) + biomass_loss(i,ileaf,l)*delta_veg(j) / veget_max_new(i,j)
352                !*****************
353                tree_bm_to_litter(i,j,isapbelow,l) = tree_bm_to_litter(i,j,isapbelow,l) + &
354                     &                         tree_biomass_loss(i,isapbelow,l)*delta_veg(j) / veget_max_new(i,j)
355                tree_bm_to_litter(i,j,iheartbelow,l) = tree_bm_to_litter(i,j,iheartbelow,l) + tree_biomass_loss(i,iheartbelow,l) *delta_veg(j) &
356                     &  / veget_max_new(i,j)
357                tree_bm_to_litter(i,j,iroot,l) = tree_bm_to_litter(i,j,iroot,l) + tree_biomass_loss(i,iroot,l)*delta_veg(j) / veget_max_new(i,j)
358                tree_bm_to_litter(i,j,ifruit,l) = tree_bm_to_litter(i,j,ifruit,l) + tree_biomass_loss(i,ifruit,l)*delta_veg(j) / veget_max_new(i,j)
359                tree_bm_to_litter(i,j,icarbres,l) = tree_bm_to_litter(i,j,icarbres,l) + &
360                     &                         tree_biomass_loss(i,icarbres,l)   *delta_veg(j) / veget_max_new(i,j)
361                tree_bm_to_litter(i,j,ilabile,l) = tree_bm_to_litter(i,j,ilabile,l) + &
362                     &                         tree_biomass_loss(i,ilabile,l)   *delta_veg(j) / veget_max_new(i,j)
363                tree_bm_to_litter(i,j,ileaf,l) = tree_bm_to_litter(i,j,ileaf,l) + tree_biomass_loss(i,ileaf,l)*delta_veg(j) / veget_max_new(i,j)
364               
365             
366
367             END DO
368
369             age(i,j)=age(i,j)*veget_max_old(i,j)/veget_max_new(i,j)
370             
371          !! 2.3.2 The case that vegetation coverage of PFTj is no change or decreases
372          ELSE 
373 
374             !! 2.3.2.1 Biomass export
375             ! coeff_lcchange_*:  Coeff of biomass export for the year, decade, and century
376             above = biomass(i,j,isapabove,icarbon) + biomass(i,j,iheartabove,icarbon)
377             convflux(i)  = convflux(i)  - ( coeff_lcchange_1(j) * above * delta_veg(j) ) 
378             prod10(i,0)  = prod10(i,0)  - ( coeff_lcchange_10(j) * above * delta_veg(j) )
379             prod100(i,0) = prod100(i,0) - ( coeff_lcchange_100(j) * above * delta_veg(j) )
380             above = biomass(i,j,isapabove,initrogen) + biomass(i,j,iheartabove,initrogen) 
381             nflux_prod_total(i) = nflux_prod_total(i) - above* delta_veg(j) 
382
383             !! 2.3.2.2 Total reduction
384             !! If the vegetation is to small, it has been set to 0.
385             IF ( veget_max_new(i,j) .LT. min_stomate ) THEN
386               
387                ind(i,j) = zero
388                biomass(i,j,:,:) = zero
389                PFTpresent(i,j) = .FALSE.
390                senescence(i,j) = .FALSE.
391                age(i,j) = zero
392                when_growthinit(i,j) = undef
393                everywhere(i,j) = zero
394                som(i,:,j,:) = zero
395                soil_n_min(i,j,:) = zero
396                litter(i,:,j,:,:) = zero
397                bm_to_litter(i,j,:,:) = zero
398                turnover_daily(i,j,:,:) = zero
399               
400             ENDIF
401 
402          ENDIF ! End if PFT's coverage reduction
403         
404       ENDDO ! Loop over # PFTs
405       
406       !! 2.4 update 10 year-turnover pool content following flux emission
407       !!     (linear decay (10%) of the initial carbon input)
408       DO  l = 0, 8
409          m = 10 - l
410          cflux_prod10(i) =  cflux_prod10(i) + flux10(i,m)
411          prod10(i,m)     =  prod10(i,m-1)   - flux10(i,m-1)
412          flux10(i,m)     =  flux10(i,m-1)
413         
414          IF (prod10(i,m) .LT. 1.0) prod10(i,m) = zero
415       ENDDO
416       
417       cflux_prod10(i) = cflux_prod10(i) + flux10(i,1) 
418       flux10(i,1)     = 0.1 * prod10(i,0)
419       prod10(i,1)     = prod10(i,0)
420       
421       !! 2.5 update 100 year-turnover pool content following flux emission\n
422       DO   l = 0, 98
423          m = 100 - l
424          cflux_prod100(i)  =  cflux_prod100(i) + flux100(i,m)
425          prod100(i,m)      =  prod100(i,m-1)   - flux100(i,m-1)
426          flux100(i,m)      =  flux100(i,m-1)
427         
428          IF (prod100(i,m).LT.1.0) prod100(i,m) = zero
429       ENDDO
430       
431       cflux_prod100(i)  = cflux_prod100(i) + flux100(i,1) 
432       flux100(i,1)      = 0.01 * prod100(i,0)
433       prod100(i,1)      = prod100(i,0)
434       prod10(i,0)        = zero
435       prod100(i,0)       = zero 
436       
437    ENDDO ! Loop over # pixels - domain size
438   
439  !! 3. history
440    convflux        = convflux/one_year*dt_days
441    cflux_prod10    = cflux_prod10/one_year*dt_days
442    cflux_prod100   = cflux_prod100/one_year*dt_days
443   
444    IF (printlev>=4) WRITE(numout,*) 'Leaving lcchange_main'
445   
446  END SUBROUTINE lcchange_main
447 
448END MODULE stomate_lcchange
Note: See TracBrowser for help on using the repository browser.