source: branches/publications/ORCHIDEE-Clateral/src_stomate/stomate_lcchange.f90 @ 7346

Last change on this file since 7346 was 7191, checked in by haicheng.zhang, 3 years ago

Implementing latral transfers of sediment and POC from land to ocean through river in ORCHILEAK

  • Property svn:keywords set to HeadURL Date Author Revision
File size: 22.6 KB
Line 
1! =================================================================================================================================
2! MODULE       : stomate_lcchange
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       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  USE constantes_soil
34  USE vertical_soil_var, ONLY : nslm, nslmd
35 
36  IMPLICIT NONE
37 
38  PRIVATE
39  PUBLIC lcchange_main
40 
41CONTAINS
42
43
44!! ================================================================================================================================
45!! SUBROUTINE   : lcchange_main
46!!
47!>\BRIEF        Impact of land cover change on carbon stocks
48!!
49!! DESCRIPTION  : This subroutine is always activate if VEGET_UPDATE>0Y in the configuration file, which means that the
50!! vegetation map is updated regulary. lcchange_main is called from stomateLpj the first time step after the vegetation
51!! map has been changed.
52!! The impact of land cover change on carbon stocks is computed in this subroutine. The land cover change is written
53!! by the difference of current and previous "maximal" coverage fraction of a PFT.
54!! On the basis of this difference, the amount of 'new establishment'/'biomass export',
55!! and increase/decrease of each component, are estimated.\n
56!!
57!! Main structure of lpj_establish.f90 is:
58!! 1. Initialization
59!! 2. Calculation of changes in carbon stocks and biomass by land cover change
60!! 3. Update 10 year- and 100 year-turnover pool contents
61!! 4. History
62!!
63!! RECENT CHANGE(S) : None
64!!
65!! MAIN OUTPUT VARIABLE(S) : ::prod10, ::prod100, ::flux10, ::flux100,
66!!   :: cflux_prod10 and :: cflux_prod100
67!!
68!! REFERENCES   : None
69!!
70!! FLOWCHART    :
71!! \latexonly
72!!     \includegraphics[scale=0.5]{lcchange.png}
73!! \endlatexonly
74!! \n
75!_ ================================================================================================================================
76
77 
78  SUBROUTINE lcchange_main ( npts, dt_days, veget_cov_max_old, veget_cov_max_new, &
79       biomass, ind, age, PFTpresent, senescence, when_growthinit, everywhere, &       
80       co2_to_bm, bm_to_litter, turnover_daily, bm_sapl, cn_ind,flux10,flux100, &
81       prod10,prod100,convflux,cflux_prod10,cflux_prod100,leaf_frac,&
82       npp_longterm, lm_lastyearmax, litter_above, litter_below, carbon, DOC, &
83       depth_deepsoil,convfluxpft, fDeforestToProduct, fLulccResidue)
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_cov_max_old!! Current "maximal" coverage fraction of a PFT (LAI
97                                                                                  !! -> infinity) on ground
98    REAL(r_std), DIMENSION(npts,nvm), INTENT(in)              :: veget_cov_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,nvm,nparts,nelements), INTENT(inout):: turnover_daily   !! Turnover rates
110    REAL(r_std), DIMENSION(npts,nvm), INTENT(out)             :: convfluxpft      !! release during first year following land cover                                       
111                                                                                  !! change   
112    REAL(r_std), DIMENSION(npts,nvm), INTENT(out)             :: fDeforestToProduct !!  Deforested biomass into product pool due to anthorpogenic
113                                                                                    !! land use change
114    REAL(r_std), DIMENSION(npts,nvm), INTENT(out)             :: fLulccResidue      !!  carbon mass flux into soil and litter due to anthropogenic land use or land cover change
115
116    !! 0.3 Modified variables   
117   
118    REAL(r_std), DIMENSION(npts,nvm,nparts,nelements), INTENT(inout):: biomass    !! biomass @tex ($gC m^{-2}$) @endtex
119    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: ind              !! Number of individuals @tex ($m^{-2}$) @endtex
120    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: age              !! mean age (years)
121    LOGICAL, DIMENSION(npts,nvm), INTENT(inout)               :: senescence       !! plant senescent (only for deciduous trees) Set
122                                                                                  !! to .FALSE. if PFT is introduced or killed
123    LOGICAL, DIMENSION(npts,nvm), INTENT(inout)               :: PFTpresent       !! Is pft there (unitless)
124    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: everywhere       !! is the PFT everywhere in the grid box or very
125                                                                                  !! localized (unitless)
126    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: when_growthinit  !! how many days ago was the beginning of the
127                                                                                  !! growing season (days)
128    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: co2_to_bm        !! biomass uptaken
129                                                                                  !! @tex ($gC m^{-2} day^{-1}$) @endtex
130    REAL(r_std), DIMENSION(npts,nvm,nparts,nelements), INTENT(inout) :: bm_to_litter !! conversion of biomass to litter
131                                                                                  !! @tex ($gC m^{-2} day^{-1}$) @endtex
132    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: cn_ind           !! crown area of individuals
133                                                                                  !! @tex ($m^{2}$) @endtex
134    REAL(r_std), DIMENSION(npts,0:10), INTENT(inout)          :: prod10           !! products remaining in the 10 year-turnover
135                                                                                  !! pool after the annual release for each
136                                                                                  !! compartment (10 + 1 : input from year of land
137                                                                                  !! cover change)
138    REAL(r_std), DIMENSION(npts,0:100), INTENT(inout)         :: prod100          !! products remaining in the 100 year-turnover
139                                                                                  !! pool after the annual release for each
140                                                                                  !! compartment (100 + 1 : input from year of land
141                                                                                  !! cover change)
142    REAL(r_std), DIMENSION(npts,10), INTENT(inout)            :: flux10           !! annual release from the 10/100 year-turnover
143                                                                                  !! pool compartments
144    REAL(r_std), DIMENSION(npts,100), INTENT(inout)           :: flux100          !! annual release from the 10/100 year-turnover
145                                                                                  !! pool compartments
146    REAL(r_std), DIMENSION(npts,nvm,nleafages), INTENT(inout) :: leaf_frac        !! fraction of leaves in leaf age class
147                                                                                  !! (unitless)
148    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: lm_lastyearmax   !! last year's maximum leaf mass for each PFT
149                                                                                  !! @tex ($gC m^{-2}$) @endtex
150    REAL(r_std), DIMENSION(npts,nvm), INTENT(inout)           :: npp_longterm     !! "long term" net primary productivity
151                                                                                  !! @tex ($gC m^{-2} year^{-1}$) @endtex
152    REAL(r_std),DIMENSION(npts,nlitt,nvm, nelements), INTENT(inout):: litter_above !! metabolic and structural litter, above
153                                                                                  !! ground @tex ($gC m^{-2}$) @endtex
154    REAL(r_std),DIMENSION(npts,nlitt,nvm,nslmd,nelements), INTENT(inout):: litter_below !! metabolic and structural litter, below
155                                                                                  !! ground @tex ($gC m^{-2}$) @endtex
156                                                                                  !@endtex
157    REAL(r_std),DIMENSION(npts,ncarb,nvm,nslmd), INTENT(inout) :: carbon           !! carbon pool: active, slow, or passive
158                                                                                  !! @tex ($gC m^{-2}$) @endtex
159    REAL(r_std), DIMENSION(npts,nvm,nslmd,ndoc,npool,nelements), INTENT(inout) :: DOC  !! Dissolved Organic Carbon in soil
160                                                                                       !! The unit is guven by m^3 of water
161                                                                                       !! @tex $(gC m{-3} of water)$ @endtex
162        REAL(r_std),DIMENSION (npts,nvm), INTENT (inout)           :: depth_deepsoil       !! Depth of the soil layer deeper than 2 m.
163                                                                                       !! When sediment deposition occuring, the original surface (0-2)
164                                                                                                                                                                   !! soil DOC, and SOC will enther into this layer.
165    !! 0.4 Local variables
166
167    INTEGER(i_std)                                            :: i, j, k, l, m    !! indices (unitless)
168    REAL(r_std),DIMENSION(npts,nelements)                     :: bm_new           !! biomass increase @tex ($gC m^{-2}$) @endtex
169    REAL(r_std),DIMENSION(npts,nparts,nelements)              :: biomass_loss     !! biomass loss @tex ($gC m^{-2}$) @endtex
170    REAL(r_std)                                               :: above            !! aboveground biomass @tex ($gC m^{-2}$) @endtex
171    REAL(r_std), DIMENSION(npts,nlitt,nelements)              :: dilu_lit_above   !! Above ground litter dilution @tex $(gC m^{-2})$ @endtex
172    REAL(r_std), DIMENSION(npts,nlitt,nslmd,nelements)        :: dilu_lit_below   !! Below ground litter dilution @tex $(gC m^{-2})$ @endtex
173    REAL(r_std), DIMENSION(npts,ncarb,nslmd)                  :: dilu_soil_carbon !! Dilution for carbon variables
174        REAL(r_std), DIMENSION(npts,nslmd,ndoc,npool)             :: dilu_DOC
175    REAL(r_std), DIMENSION(npts,nparts,nelements)             :: dilu_bio         !! Dilution for carbon variables     
176    REAL(r_std), DIMENSION(npts)                                          :: dilu_deepsoil
177        REAL(r_std),DIMENSION(nvm)                                :: delta_veg        !! changes in "maximal" coverage fraction of PFT
178    REAL(r_std)                                               :: delta_veg_sum    !! sum of delta_veg
179    REAL(r_std),DIMENSION(npts,nvm)                           :: delta_ind        !! change in number of individuals 
180   
181!_ ================================================================================================================================
182
183    IF (printlev>=3) WRITE(numout,*) 'Entering lcchange_main'
184   
185  !! 1. initialization
186   
187    prod10(:,0)         = zero
188    prod100(:,0)        = zero   
189    above               = zero
190    convflux(:)         = zero
191    convfluxpft(:,:)    = zero
192    cflux_prod10(:)     = zero
193    cflux_prod100(:)    = zero
194    delta_ind(:,:)      = zero
195    delta_veg(:)        = zero
196    fDeforestToProduct(:,:)  = zero
197    fLulccResidue(:,:)       = zero
198
199
200   
201  !! 3. calculation of changes in carbon stocks and biomass by land cover change\n
202   
203    DO i = 1, npts ! Loop over # pixels - domain size
204       
205       !! 3.1 initialization of carbon stocks\n
206       delta_veg(:) = veget_cov_max_new(i,:)-veget_cov_max_old(i,:)
207       delta_veg_sum = SUM(delta_veg,MASK=delta_veg.LT.0.)
208       
209       dilu_lit_above(i,:,:) = zero
210       dilu_lit_below(i,:,:,:) = zero
211       dilu_soil_carbon(i,:,:) = zero
212           dilu_DOC(i,:,:,:) = zero
213       biomass_loss(i,:,:) = zero
214           dilu_deepsoil(i)=zero
215       
216       !! 3.2 if vegetation coverage decreases, compute dilution of litter, soil carbon, and biomass.\n
217       DO j=2, nvm
218          IF ( delta_veg(j) < -min_stomate ) THEN
219             dilu_lit_above(i,:,:) =  dilu_lit_above(i,:,:) + delta_veg(j) * litter_above(i,:,j,:) / delta_veg_sum
220             dilu_lit_below(i,:,:,:) =  dilu_lit_below(i,:,:,:) + delta_veg(j) * litter_below(i,:,j,:,:) / delta_veg_sum
221                     dilu_DOC(i,:,:,:) =  dilu_DOC(i,:,:,:) + delta_veg(j) * DOC(i,j,:,:,:,icarbon) / delta_veg_sum
222             dilu_soil_carbon(i,:,:) =  dilu_soil_carbon(i,:,:) + delta_veg(j) * carbon(i,:,j,:) / delta_veg_sum
223             biomass_loss(i,:,:) = biomass_loss(i,:,:) + biomass(i,j,:,:)*delta_veg(j) / delta_veg_sum
224                         dilu_deepsoil(i)=dilu_deepsoil(i)+depth_deepsoil(i,j)*delta_veg(j) / delta_veg_sum
225          ENDIF
226       ENDDO
227       
228       !! 3.3
229       DO j=2, nvm ! Loop over # PFTs
230
231          !! 3.3.1 The case that vegetation coverage of PFTj increases
232          IF ( delta_veg(j) > min_stomate) THEN
233
234             !! 3.3.1.1 Initial setting of new establishment
235             IF (veget_cov_max_old(i,j) .LT. min_stomate) THEN
236                IF (is_tree(j)) THEN
237
238                   ! cn_sapl(j)=0.5; stomate_data.f90
239                   cn_ind(i,j) = cn_sapl(j) 
240                ELSE
241                   cn_ind(i,j) = un
242                ENDIF
243                ind(i,j)= delta_veg(j) / cn_ind(i,j)
244                PFTpresent(i,j) = .TRUE.
245                everywhere(i,j) = 1.
246                senescence(i,j) = .FALSE.
247                age(i,j) = zero
248
249                ! large_value = 1.E33_r_std
250                when_growthinit(i,j) = large_value 
251                leaf_frac(i,j,1) = 1.0
252                npp_longterm(i,j) = npp_longterm_init
253                lm_lastyearmax(i,j) = bm_sapl(j,ileaf,icarbon) * ind(i,j)
254             ENDIF
255             IF ( cn_ind(i,j) > min_stomate ) THEN
256                delta_ind(i,j) = delta_veg(j) / cn_ind(i,j) 
257             ENDIF
258             
259             !! 3.3.1.2 Update of biomass in each each carbon stock component
260             !!         Update of biomass in each each carbon stock component (leaf, sapabove, sapbelow,
261             !>         heartabove, heartbelow, root, fruit, and carbres)\n
262             DO k = 1, nparts ! loop over # carbon stock components, nparts = 8; stomate_constant.f90
263                DO l = 1,nelements ! loop over # elements
264
265                   bm_new(i,l) = delta_ind(i,j) * bm_sapl(j,k,l) 
266                   IF (veget_cov_max_old(i,j) .GT. min_stomate) THEN
267
268                      ! in the case that bm_new is overestimated compared with biomass?
269                      IF ((bm_new(i,l)/delta_veg(j)) > biomass(i,j,k,l)) THEN
270                         bm_new(i,l) = biomass(i,j,k,l)*delta_veg(j)
271                      ENDIF
272                   ENDIF
273                   biomass(i,j,k,l) = ( biomass(i,j,k,l) * veget_cov_max_old(i,j) + bm_new(i,l) ) / veget_cov_max_new(i,j)
274                   co2_to_bm(i,j) = co2_to_bm(i,j) + (bm_new(i,icarbon)* dt_days) / (one_year * veget_cov_max_new(i,j))
275                END DO ! loop over # elements
276             ENDDO ! loop over # carbon stock components
277
278             !! 3.3.1.3 Calculation of dilution in litter, soil carbon, and  input of litter
279             !!        In this 'IF statement', dilu_* is zero. Formulas for litter and soil carbon
280             !!         could be shortend?? Are the following formulas correct?
281                         ! Litter
282             litter_above(i,:,j,:)=(litter_above(i,:,j,:) * veget_cov_max_old(i,j) + dilu_lit_above(i,:,:) * delta_veg(j)) / veget_cov_max_new(i,j)
283             litter_below(i,:,j,:,:)=(litter_below(i,:,j,:,:) * veget_cov_max_old(i,j) + dilu_lit_below(i,:,:,:) * delta_veg(j)) / veget_cov_max_new(i,j)                                                                 
284             ! Soil carbon
285             carbon(i,:,j,:) =  (carbon(i,:,j,:) * veget_cov_max_old(i,j) + dilu_soil_carbon(i,:,:) * delta_veg(j)) / veget_cov_max_new(i,j)
286             DOC(i,j,:,:,:,icarbon)  =  (DOC(i,j,:,:,:,icarbon) * veget_cov_max_old(i,j) + dilu_DOC(i,:,:,:) * delta_veg(j)) / veget_cov_max_new(i,j)   
287                         depth_deepsoil(i,j)=(depth_deepsoil(i,j) * veget_cov_max_old(i,j) + dilu_deepsoil(i) * delta_veg(j)) / veget_cov_max_new(i,j)           
288                         !
289             DO l = 1,nelements
290
291                ! Litter input
292                bm_to_litter(i,j,isapbelow,l) = bm_to_litter(i,j,isapbelow,l) * veget_cov_max_old(i,j) + &
293                     biomass_loss(i,isapbelow,l)*delta_veg(j) / veget_cov_max_new(i,j)
294                bm_to_litter(i,j,iheartbelow,l) = bm_to_litter(i,j,iheartbelow,l) * veget_cov_max_old(i,j) + &
295                     biomass_loss(i,iheartbelow,l) *delta_veg(j) / veget_cov_max_new(i,j)
296                bm_to_litter(i,j,iroot,l) = bm_to_litter(i,j,iroot,l) * veget_cov_max_old(i,j) + &
297                     biomass_loss(i,iroot,l)*delta_veg(j) / veget_cov_max_new(i,j)
298                bm_to_litter(i,j,ifruit,l) = bm_to_litter(i,j,ifruit,l) * veget_cov_max_old(i,j) + &
299                     biomass_loss(i,ifruit,l)*delta_veg(j) / veget_cov_max_new(i,j)
300                bm_to_litter(i,j,icarbres,l) = bm_to_litter(i,j,icarbres,l) * veget_cov_max_old(i,j) + &
301                     biomass_loss(i,icarbres,l)   *delta_veg(j) / veget_cov_max_new(i,j)
302                bm_to_litter(i,j,ileaf,l) = bm_to_litter(i,j,ileaf,l) * veget_cov_max_old(i,j) + &
303                     biomass_loss(i,ileaf,l)*delta_veg(j) / veget_cov_max_new(i,j)
304
305             END DO
306
307             age(i,j)=age(i,j)*veget_cov_max_old(i,j)/veget_cov_max_new(i,j)
308             
309          !! 3.3.2 The case that vegetation coverage of PFTj is no change or decreases
310          ELSE 
311 
312             !! 3.3.2.1 Biomass export
313             ! coeff_lcchange_*:  Coeff of biomass export for the year, decade, and century
314             above = biomass(i,j,isapabove,icarbon) + biomass(i,j,iheartabove,icarbon)
315             convflux(i)  = convflux(i)  - ( coeff_lcchange_1(j) * above * delta_veg(j) ) 
316             convfluxpft(i,j)= convfluxpft(i,j) - (coeff_lcchange_1(j) * above * delta_veg(j) )
317             prod10(i,0)  = prod10(i,0)  - ( coeff_lcchange_10(j) * above * delta_veg(j) )
318             prod100(i,0) = prod100(i,0) - ( coeff_lcchange_100(j) * above * delta_veg(j) )
319
320             fDeforestToProduct(i,j) = - above * delta_veg(j)
321             fLulccResidue(i,j) = - ( biomass(i,j,isapbelow,icarbon) &
322                  + biomass(i,j,iheartbelow,icarbon) &
323                  + biomass(i,j,iroot,icarbon) &
324                  + biomass(i,j,ifruit,icarbon) &
325                  + biomass(i,j,icarbres,icarbon) &
326                  + biomass(i,j,ileaf,icarbon) ) * delta_veg(j)
327             !! 3.3.2.2 Total reduction
328             !! If the vegetation is to small, it has been set to 0.
329             IF ( veget_cov_max_new(i,j) .LT. min_stomate ) THEN
330               
331                ind(i,j) = zero
332                biomass(i,j,:,:) = zero
333                PFTpresent(i,j) = .FALSE.
334                senescence(i,j) = .FALSE.
335                age(i,j) = zero
336                when_growthinit(i,j) = undef
337                everywhere(i,j) = zero
338                carbon(i,:,j,:) = zero
339                                DOC(i,j,:,:,:,:) = zero
340                                depth_deepsoil(i,j) = zero
341                litter_above(i,:,j,:) = zero
342                litter_below(i,:,j,:,:) = zero                         
343                bm_to_litter(i,j,:,:) = zero
344                turnover_daily(i,j,:,:) = zero
345           
346             ENDIF
347 
348          ENDIF ! End if PFT's coverage reduction
349         
350       ENDDO ! Loop over # PFTs
351       
352       !! 3.4 update 10 year-turnover pool content following flux emission
353       !!     (linear decay (10%) of the initial carbon input)
354       DO  l = 0, 8
355          m = 10 - l
356          cflux_prod10(i) =  cflux_prod10(i) + flux10(i,m)
357          prod10(i,m)     =  prod10(i,m-1)   - flux10(i,m-1)
358          flux10(i,m)     =  flux10(i,m-1)
359         
360          IF (prod10(i,m) .LT. 1.0) prod10(i,m) = zero
361       ENDDO
362       
363       cflux_prod10(i) = cflux_prod10(i) + flux10(i,1) 
364       flux10(i,1)     = 0.1 * prod10(i,0)
365       prod10(i,1)     = prod10(i,0)
366       
367       !! 3.5 update 100 year-turnover pool content following flux emission\n
368       DO   l = 0, 98
369          m = 100 - l
370          cflux_prod100(i)  =  cflux_prod100(i) + flux100(i,m)
371          prod100(i,m)      =  prod100(i,m-1)   - flux100(i,m-1)
372          flux100(i,m)      =  flux100(i,m-1)
373         
374          IF (prod100(i,m).LT.1.0) prod100(i,m) = zero
375       ENDDO
376       
377       cflux_prod100(i)  = cflux_prod100(i) + flux100(i,1) 
378       flux100(i,1)      = 0.01 * prod100(i,0)
379       prod100(i,1)      = prod100(i,0)
380       prod10(i,0)        = zero
381       prod100(i,0)       = zero 
382
383       
384    ENDDO ! Loop over # pixels - domain size
385   
386  !! 4. history
387    convflux        = convflux/one_year*dt_days
388    convfluxpft     = convfluxpft/one_year*dt_days
389    fDeforestToProduct= fDeforestToProduct/one_year*dt_days
390    fLulccResidue   = fLulccResidue/one_year*dt_days
391    cflux_prod10    = cflux_prod10/one_year*dt_days
392    cflux_prod100   = cflux_prod100/one_year*dt_days
393
394   
395    IF (printlev>=4) WRITE(numout,*) 'Leaving lcchange_main'
396   
397  END SUBROUTINE lcchange_main
398 
399END MODULE stomate_lcchange
Note: See TracBrowser for help on using the repository browser.