[7541] | 1 | ! ================================================================================================================================= |
---|
| 2 | ! MODULE : lpj_crown |
---|
| 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 Calculate individual crown area from stem mass |
---|
| 10 | !! |
---|
| 11 | !! \n DESCRIPTION : Calculating crown area of individual tree by diameter and tree height |
---|
| 12 | !! |
---|
| 13 | !! REFERENCE(S) : |
---|
| 14 | !! - Smith, B., I. C. Prentice, et al. (2001), Representation of vegetation |
---|
| 15 | !! dynamics in the modelling of terrestrial ecosystems: comparing two |
---|
| 16 | !! contrasting approaches within European climate space, |
---|
| 17 | !! Global Ecology and Biogeography, 10, 621-637. |
---|
| 18 | !! |
---|
| 19 | !! SVN : |
---|
| 20 | !! $HeadURL: svn://forge.ipsl.jussieu.fr/orchidee/branches/ORCHIDEE_2_2/ORCHIDEE/src_stomate/lpj_crown.f90 $ |
---|
| 21 | !! $Date: 2017-10-02 16:24:23 +0200 (Mon, 02 Oct 2017) $ |
---|
| 22 | !! $Revision: 4647 $ |
---|
| 23 | !! \n |
---|
| 24 | !_ ================================================================================================================================ |
---|
| 25 | |
---|
| 26 | MODULE lpj_crown |
---|
| 27 | |
---|
| 28 | USE ioipsl_para |
---|
| 29 | USE stomate_data |
---|
| 30 | USE constantes |
---|
| 31 | USE pft_parameters |
---|
| 32 | |
---|
| 33 | IMPLICIT NONE |
---|
| 34 | |
---|
| 35 | ! private & public routines |
---|
| 36 | |
---|
| 37 | PRIVATE |
---|
| 38 | PUBLIC crown |
---|
| 39 | |
---|
| 40 | CONTAINS |
---|
| 41 | |
---|
| 42 | |
---|
| 43 | !! ================================================================================================================================ |
---|
| 44 | !! SUBROUTINE : lpj_crown |
---|
| 45 | !! |
---|
| 46 | !>\BRIEF Calculate individual crown area from stem mass |
---|
| 47 | !! |
---|
| 48 | !! DESCRIPTION : Calculating crown area of individual tree by diameter and tree height |
---|
| 49 | !! which are also calculated internally within this program from stem mass and allometory. |
---|
| 50 | !! Calculations for diameter, height and crown area originate from eqns 1, 2, and 3 in |
---|
| 51 | !! Appendix B, Smith et al. (2001) following Huang et al. 1992 and Zeide 1993. |
---|
| 52 | !! \latexonly |
---|
| 53 | !! \input{lpj_crown1.tex} |
---|
| 54 | !! \input{lpj_crown2.tex} |
---|
| 55 | !! \input{lpj_crown3.tex} |
---|
| 56 | !! \endlatexonly |
---|
| 57 | !! \n |
---|
| 58 | !! where \f$k_{allom1}(=100.)\f$, \f$k_{allom2}(=40.)\f$, \f$k_{allom3}(=0.85)\f$ and \f$k_{rp}(=1.6)\f$ are |
---|
| 59 | !! constants, \f$WD\f$ is wood density (\f$=2 \times 10^5\f$ gC m\f$^3\f$) and \f$CA_{max}\f$ is maximum |
---|
| 60 | !! crown area (\f$=27.3\f$ m\f$^2\f$). |
---|
| 61 | !! |
---|
| 62 | !! RECENT CHANGE(S) : None |
---|
| 63 | !! |
---|
| 64 | !! MAIN OUTPUT VARIABLE(S) : ::cn_ind (crown area per individual, @tex $m^2 $ @endtex) and ::height (m) |
---|
| 65 | !! |
---|
| 66 | !! REFERENCE(S) : |
---|
| 67 | !! - Huang, S., Titus, S.J. and Wiens, D.P. (1992) Comparison of nonlinear heightâdiameter functions for major |
---|
| 68 | !! Alberta tree species. Canadian Journal of Forest Research, 22, 1297â1304.\n |
---|
| 69 | !! - Zeide, B. (1993) Primary unit of the tree crown. Ecology, 74, 1598â1602.\n |
---|
| 70 | !! - Smith, B., I. C. Prentice, et al. (2001), Representation of vegetation dynamics in the modelling of |
---|
| 71 | !! terrestrial ecosystems: comparing two contrasting approaches within European climate space, |
---|
| 72 | !! Global Ecology and Biogeography, 10, 621-637.\n |
---|
| 73 | !! |
---|
| 74 | !! FLOWCHART : None |
---|
| 75 | !! \n |
---|
| 76 | !_ ================================================================================================================================ |
---|
| 77 | |
---|
| 78 | SUBROUTINE crown & |
---|
| 79 | & (npts, PFTpresent, ind, biomass, woodmass_ind, veget_cov_max, cn_ind, height) |
---|
| 80 | |
---|
| 81 | !! 0. Variable and parameter declaration |
---|
| 82 | |
---|
| 83 | !! 0.1 Input variables |
---|
| 84 | |
---|
| 85 | INTEGER(i_std),INTENT(in) :: npts !! Domain size (unitless) |
---|
| 86 | LOGICAL,DIMENSION(npts,nvm),INTENT(in) :: PFTpresent !! Is pft there (unitless) |
---|
| 87 | REAL(r_std),DIMENSION(npts,nvm),INTENT(in) :: ind !! [DISPENSABLE] Density of individuals |
---|
| 88 | !! @tex $(m^{-2})$ @endtex |
---|
| 89 | REAL(r_std),DIMENSION(npts,nvm,nparts,nelements),INTENT(in) :: biomass !! [DISPENSABLE] Biomass @tex $(gC.m^{-2})$ @endtex |
---|
| 90 | REAL(r_std),DIMENSION(npts,nvm),INTENT(in) :: woodmass_ind !! Woodmass of the individual, needed to calculate |
---|
| 91 | !! crownarea in lpj_crown (gC) |
---|
| 92 | |
---|
| 93 | !! 0.2 Output variables |
---|
| 94 | |
---|
| 95 | REAL(r_std),DIMENSION(npts,nvm),INTENT(out) :: cn_ind !! Crown area per individual @tex $(m^{2})$ @endtex |
---|
| 96 | |
---|
| 97 | !! 0.3 Modified variables |
---|
| 98 | |
---|
| 99 | REAL(r_std),DIMENSION(npts,nvm),INTENT(inout) :: veget_cov_max !! [DISPENSABLE] "Maximal" coverage fraction of a PFT |
---|
| 100 | !! infinity) on ground (unitless) |
---|
| 101 | REAL(r_std),DIMENSION(npts,nvm),INTENT(inout) :: height !! Height of vegetation (m) |
---|
| 102 | |
---|
| 103 | !! 0.4 Local variables |
---|
| 104 | |
---|
| 105 | ! REAL(r_std),DIMENSION(npts) :: woodmass !! Wood mass of an individual (gC) |
---|
| 106 | INTEGER(i_std) :: j !! Index |
---|
| 107 | REAL(r_std),DIMENSION(npts) :: dia !! Stem diameter (m) |
---|
| 108 | REAL(r_std),DIMENSION(nvm) :: height_presc_12 !! [DISPENSABLE] Prescribed height of each pfts (m) |
---|
| 109 | |
---|
| 110 | !_ ================================================================================================================================ |
---|
| 111 | |
---|
| 112 | !! 1. Initializations |
---|
| 113 | |
---|
| 114 | !! 1.1 Check if DGVM is activated |
---|
| 115 | IF (.NOT.ok_dgvm .AND. lpj_gap_const_mort) THEN |
---|
| 116 | CALL ipslerr_p(3,'crown','Coherence error','crown cannot be called with static vegetation.','') |
---|
| 117 | ENDIF |
---|
| 118 | |
---|
| 119 | !! 1.2 Initialize output to zero |
---|
| 120 | cn_ind(:,:) = zero |
---|
| 121 | |
---|
| 122 | !! 1.3 Copy prescribed height to new variable**3 !![DISPENSABLE] |
---|
| 123 | height_presc_12(1:nvm) = height_presc(1:nvm) !![DISPENSABLE] |
---|
| 124 | |
---|
| 125 | !! 2. Calculate (or prescribe) crown area |
---|
| 126 | |
---|
| 127 | DO j = 2,nvm ! loop over PFTs |
---|
| 128 | IF (is_tree(j)) THEN |
---|
| 129 | |
---|
| 130 | !! 2.1 Trees |
---|
| 131 | IF (natural(j)) THEN |
---|
| 132 | |
---|
| 133 | !! 2.1.1 Natural trees |
---|
| 134 | !WHERE (PFTpresent(:,j) .AND.ind(:,j).GT.min_stomate) |
---|
| 135 | WHERE (PFTpresent(:,j) .AND.woodmass_ind(:,j).GT.min_stomate) |
---|
| 136 | |
---|
| 137 | !! 2.1.1.1 Calculate individual wood mass**2 |
---|
| 138 | |
---|
| 139 | !! S. Zaehle note that woodmass_ind needs to be defined on the individual, hence |
---|
| 140 | !! biomass*veget_cov_max/ind, not as stated here, correction MERGE |
---|
| 141 | !! woodmass(:) = & |
---|
| 142 | !! & (biomass(:,j,isapabove,icarbon) + biomass(:,j,isapbelow,icarbon) & |
---|
| 143 | !! & +biomass(:,j,iheartabove,icarbon) + biomass(:,j,iheartbelow,icarbon))/ind(:,j) |
---|
| 144 | |
---|
| 145 | !! 2.1.1.2 Stem diameter from pipe model |
---|
| 146 | ! Stem diameter (pipe model) is calculated by allometory (eqn 1, Appdx B, Smith et al. (2001)) |
---|
| 147 | !!!$ dia(:) = (woodmass(:)/(pipe_density*pi/4.*pipe_tune2)) & |
---|
| 148 | dia(:) = (woodmass_ind(:,j)/(pipe_density*pi/4.*pipe_tune2)) & |
---|
| 149 | & **(1./(2.+pipe_tune3)) |
---|
| 150 | |
---|
| 151 | !! 2.1.1.3 Individual tree height from pipe model |
---|
| 152 | ! Individual tree height (eqn 2, Appdx B, Smith et al. (2001)) |
---|
| 153 | height(:,j) = pipe_tune2*(dia(:)**pipe_tune3) |
---|
| 154 | |
---|
| 155 | !!!$S. Zaehle : The constraint on height has nothing to do with LPJ (for that purpose there's dia_max |
---|
| 156 | !!!$ cannot see why this is necessary - it also blurrs the output, hence I leave it commented |
---|
| 157 | !!!$ WHERE (height(:,j) > height_presc_12(j)) |
---|
| 158 | !!!$ dia(:) = (height_presc_12(j)/pipe_tune2)**(1./pipe_tune3) |
---|
| 159 | !!!$ height(:,j) = height_presc_12(j) |
---|
| 160 | !!!$ ENDWHERE |
---|
| 161 | |
---|
| 162 | !! 2.1.1.4 Crown area of individual tree |
---|
| 163 | ! Calculate crown area, truncate crown area for trunks with large diameters |
---|
| 164 | ! crown area cannot exceed a certain value, prescribed through maxdia |
---|
| 165 | ! (eqn 3, Appdx B, Smith et al. (2001)) |
---|
| 166 | cn_ind(:,j) = pipe_tune1*MIN(dia(:),maxdia(j))**pipe_tune_exp_coeff |
---|
| 167 | |
---|
| 168 | ENDWHERE |
---|
| 169 | ELSE |
---|
| 170 | |
---|
| 171 | !! 2.1.2 Agricultural tree |
---|
| 172 | ! To be developped if needed |
---|
| 173 | CALL ipslerr_p(3,'crown','Cannot treat agricultural trees.','','') |
---|
| 174 | ENDIF |
---|
| 175 | ELSE |
---|
| 176 | |
---|
| 177 | !! 2.2 Grasses |
---|
| 178 | |
---|
| 179 | WHERE (PFTpresent(:,j)) |
---|
| 180 | |
---|
| 181 | !! 2.2.1 Crown area of grass |
---|
| 182 | ! An "individual" is 1 m^2 of grass |
---|
| 183 | cn_ind(:,j) = un |
---|
| 184 | ENDWHERE |
---|
| 185 | ENDIF |
---|
| 186 | |
---|
| 187 | !! 2.3 Recalculate vegetation cover |
---|
| 188 | |
---|
| 189 | !!!$S. Zaehle : since now all state variables are defined on veget_cov_max it is very |
---|
| 190 | !!!$ dangerous to change this several times in stomate_lpj, as then GPP, turnover and allocated |
---|
| 191 | !!!$ biomass are not defined on the same space! Hence, veget_cov_max is now kept constant |
---|
| 192 | !!!$ and updated at the end of stomate_lpj in lpj_cover.f90 |
---|
| 193 | !!!$ Eventually, this routine should only be called once at the beginning and the end of stomate_lpj |
---|
| 194 | !!!$ or prefereably cn_ind made a saved state variable! |
---|
| 195 | !!!$ IF (natural(j).AND.ok_dgvm) THEN |
---|
| 196 | !!!$ veget_cov_max(:,j) = ind(:,j) * cn_ind(:,j) |
---|
| 197 | !!!$ ENDIF |
---|
| 198 | |
---|
| 199 | ENDDO ! loop over PFTs |
---|
| 200 | |
---|
| 201 | END SUBROUTINE crown |
---|
| 202 | |
---|
| 203 | END MODULE lpj_crown |
---|