*IF DEF,A19_2A LOTKA2A.2 C *****************************COPYRIGHT****************************** LOTKA2A.3 C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. LOTKA2A.4 C LOTKA2A.5 C Use, duplication or disclosure of this code is subject to the LOTKA2A.6 C restrictions as set forth in the contract. LOTKA2A.7 C LOTKA2A.8 C Meteorological Office LOTKA2A.9 C London Road LOTKA2A.10 C BRACKNELL LOTKA2A.11 C Berkshire UK LOTKA2A.12 C RG12 2SZ LOTKA2A.13 C LOTKA2A.14 C If no contract has been raised with this copy of the code, the use, LOTKA2A.15 C duplication or disclosure of it is strictly prohibited. Permission LOTKA2A.16 C to do so must first be obtained in writing from the Head of Numerical LOTKA2A.17 C Modelling at the above address. LOTKA2A.18 C ******************************COPYRIGHT****************************** LOTKA2A.19 !!! Subroutine LOTKA -------------------------------------------------- LOTKA2A.20 !!! LOTKA2A.21 !!! Purpose : Updates fractional coverage of each functional type. LOTKA2A.22 !!! Based on the Lotka-Volterra equations of interspecies LOTKA2A.23 !!! competition. LOTKA2A.24 !!! LOTKA2A.25 !!! LOTKA2A.26 !!! Model Modification history: LOTKA2A.27 !!! version Date LOTKA2A.28 !!! 4.4 10/97 New Deck. Peter Cox LOTKA2A.29 !!! 4.5 12/05/98 Operate only on points indexed with TRIF_INDEX ABX1F405.1641 !!! and correct calculation of NOSOIL. Richard Betts ABX1F405.1642 !!! LOTKA2A.30 !!!END ---------------------------------------------------------------- LOTKA2A.31SUBROUTINE LOTKA (LAND_FIELD,TRIF_PTS,TRIF_INDEX 1,1ABX1F405.1643 &, C_VEG,FORW,FRAC_VS,GAMMA,G_ANTH,LAI,PC_S ABX1F405.1644 &, FRAC,DFRAC) LOTKA2A.34 LOTKA2A.35 IMPLICIT NONE LOTKA2A.36 LOTKA2A.37 *CALL NSTYPES
LOTKA2A.38 LOTKA2A.39 INTEGER LOTKA2A.40 & LAND_FIELD ! IN Total number of land points. LOTKA2A.41 &,TRIF_PTS ! IN Number of points on which ABX1F405.1645 ! ! TRIFFID may operate ABX1F405.1646 &,TRIF_INDEX(LAND_FIELD) ! IN Indices of land points on ABX1F405.1647 ! ! which TRIFFID may operate ABX1F405.1648 &,K,L,M,N,T ! WORK Loop counters. ABX1F405.1649 &,DOM(LAND_FIELD,NPFT) ! WORK Dominance hierachy. LOTKA2A.46 LOTKA2A.47 REAL LOTKA2A.48 & C_VEG(LAND_FIELD,NPFT) ! IN Carbon content of vegetation LOTKA2A.49 ! (kg C/m2). LOTKA2A.50 &,FORW ! IN Forward timestep weighting. LOTKA2A.51 &,FRAC_VS(LAND_FIELD) ! IN Total fractional cover of ABX1F405.1654 ! ! vegetation and soil. ABX1F405.1655 &,GAMMA ! IN Inverse timestep (/360days). ABX1F405.1650 &,G_ANTH(LAND_FIELD) ! IN Anthropogenic disturbance rate LOTKA2A.53 C ! (/360days). ABX1F405.1651 &,LAI(LAND_FIELD,NPFT) ! IN Leaf area index. LOTKA2A.55 &,PC_S(LAND_FIELD,NPFT) ! IN Net carbon flux available for LOTKA2A.56 ! spreading (kg C/m2/360days). ABX1F405.1652 &,FRAC(LAND_FIELD,NTYPE) ! INOUT Fractional cover of each LOTKA2A.58 C ! Functional Type. LOTKA2A.59 &,DFRAC(LAND_FIELD,NPFT) ! OUT Increment to the areal fraction LOTKA2A.60 C ! during the timestep (/timestep). LOTKA2A.61 &,B(LAND_FIELD,NPFT) ! WORK Mean rate of change of LOTKA2A.62 C ! vegetation fraction over LOTKA2A.63 C ! the timestep (kg C/m2/360days). ABX1F405.1653 &,DB_DFRAC(LAND_FIELD,NPFT,NPFT) LOTKA2A.65 C ! WORK Rate of change of B LOTKA2A.66 C ! with vegetation fraction. LOTKA2A.67 &,COM(LAND_FIELD,NPFT,NPFT) ! WORK Coefficients representing LOTKA2A.68 C ! the influence of one type LOTKA2A.69 C ! (second argument) on another LOTKA2A.70 C ! (first argument). LOTKA2A.71 &,DIFF_SUM ! WORK Difference divided by sum LOTKA2A.72 C ! for competing canopy heights. LOTKA2A.73 &,HC1,HC2,HC3,HC4 ! WORK Competing canopy heights (m). LOTKA2A.74 &,NOSOIL(LAND_FIELD) ! WORK Fractional area not available LOTKA2A.75 C ! to vegetation. LOTKA2A.76 &,SPACE(LAND_FIELD,NPFT) ! WORK Space available for invasion. LOTKA2A.77 LOTKA2A.78 *CALL TRIF
LOTKA2A.79 *CALL SEED
LOTKA2A.80 *CALL SIGM
LOTKA2A.81 LOTKA2A.82 C---------------------------------------------------------------------- LOTKA2A.83 C Define competition coefficients and the dominance hierachy LOTKA2A.84 C---------------------------------------------------------------------- LOTKA2A.85 LOTKA2A.86 DO N=1,NPFT LOTKA2A.87 DO M=1,NPFT LOTKA2A.88 DO T=1,TRIF_PTS ABX1F405.1656 L=TRIF_INDEX(T) ABX1F405.1657 COM(L,N,M) = 1.0 LOTKA2A.90 ENDDO LOTKA2A.91 ENDDO LOTKA2A.92 ENDDO LOTKA2A.93 LOTKA2A.94 DO T=1,TRIF_PTS ABX1F405.1658 L=TRIF_INDEX(T) ABX1F405.1659 LOTKA2A.96 HC1 = A_WL(1)/(A_WS(1)*ETA_SL(1))*(LAI(L,1)**(B_WL(1)-1)) LOTKA2A.97 HC2 = A_WL(2)/(A_WS(2)*ETA_SL(2))*(LAI(L,2)**(B_WL(2)-1)) LOTKA2A.98 DIFF_SUM = (HC1-HC2)/(HC1+HC2) LOTKA2A.99 LOTKA2A.100 COM(L,1,2) = 1.0/(1+EXP(POW*DIFF_SUM)) ! BT vs NT LOTKA2A.101 COM(L,1,3) = 0.0 ! BT vs C3G LOTKA2A.102 COM(L,1,4) = 0.0 ! BT vs C4G LOTKA2A.103 COM(L,1,5) = 0.0 ! BT vs S LOTKA2A.104 LOTKA2A.105 COM(L,2,1) = 1.0-COM(L,1,2) ! NT vs BT LOTKA2A.106 COM(L,2,3) = 0.0 ! NT vs C3G LOTKA2A.107 COM(L,2,4) = 0.0 ! NT vs C4G LOTKA2A.108 COM(L,2,5) = 0.0 ! NT vs S LOTKA2A.109 LOTKA2A.110 HC3 = A_WL(3)/(A_WS(3)*ETA_SL(3))*(LAI(L,3)**(B_WL(3)-1)) LOTKA2A.111 HC4 = A_WL(4)/(A_WS(4)*ETA_SL(4))*(LAI(L,4)**(B_WL(4)-1)) LOTKA2A.112 DIFF_SUM = (HC3-HC4)/(HC3+HC4) LOTKA2A.113 LOTKA2A.114 COM(L,3,4) = 1.0/(1+EXP(POW*DIFF_SUM)) ! C3G vs C4G LOTKA2A.115 COM(L,4,3) = 1.0-COM(L,3,4) ! C4G vs C3G LOTKA2A.116 LOTKA2A.117 COM(L,5,3) = 0.0 ! S vs C3G LOTKA2A.118 COM(L,5,4) = 0.0 ! S vs C4G LOTKA2A.119 LOTKA2A.120 IF (HC1 .GE. HC2) THEN LOTKA2A.121 DOM(L,1) = 1 LOTKA2A.122 DOM(L,2) = 2 LOTKA2A.123 ELSEIF (HC1 .LT. HC2) THEN LOTKA2A.124 DOM(L,1) = 2 LOTKA2A.125 DOM(L,2) = 1 LOTKA2A.126 ENDIF LOTKA2A.127 LOTKA2A.128 DOM(L,3) = 5 LOTKA2A.129 LOTKA2A.130 IF (HC3 .GE. HC4) THEN LOTKA2A.131 DOM(L,4) = 3 LOTKA2A.132 DOM(L,5) = 4 LOTKA2A.133 ELSEIF (HC3 .LT. HC4) THEN LOTKA2A.134 DOM(L,4) = 4 LOTKA2A.135 DOM(L,5) = 3 LOTKA2A.136 ENDIF LOTKA2A.137 LOTKA2A.138 ENDDO LOTKA2A.139 LOTKA2A.140 C---------------------------------------------------------------------- LOTKA2A.141 C Calculate the space available for the expansion of each FT LOTKA2A.142 C---------------------------------------------------------------------- LOTKA2A.143 DO T=1,TRIF_PTS ABX1F405.1660 L=TRIF_INDEX(T) ABX1F405.1661 NOSOIL(L) = 1 - FRAC_VS(L) ABX1F405.1662 ENDDO ABX1F405.1663 LOTKA2A.153 DO K=1,NPFT LOTKA2A.154 DO T=1,TRIF_PTS ABX1F405.1664 L=TRIF_INDEX(T) ABX1F405.1665 N=DOM(L,K) LOTKA2A.156 SPACE(L,N)=1.0-NOSOIL(L)-FRAC_MIN*(NPFT-K) LOTKA2A.157 ENDDO LOTKA2A.158 ENDDO LOTKA2A.159 LOTKA2A.160 DO N=1,NPFT LOTKA2A.161 DO M=1,NPFT LOTKA2A.162 DO T=1,TRIF_PTS ABX1F405.1666 L=TRIF_INDEX(T) ABX1F405.1667 SPACE(L,N)=SPACE(L,N)-COM(L,N,M)*FRAC(L,M) LOTKA2A.164 ENDDO LOTKA2A.165 ENDDO LOTKA2A.166 ENDDO LOTKA2A.167 LOTKA2A.168 C---------------------------------------------------------------------- LOTKA2A.169 C Calculate the variables required for the implicit calculation. LOTKA2A.170 C Divide the update equation by FRAC to eliminate the (unstable) LOTKA2A.171 C bare soil solution. LOTKA2A.172 C---------------------------------------------------------------------- LOTKA2A.173 DO N=1,NPFT LOTKA2A.174 DO T=1,TRIF_PTS ABX1F405.1668 L=TRIF_INDEX(T) ABX1F405.1669 B(L,N) = (PC_S(L,N)*SPACE(L,N)/C_VEG(L,N) LOTKA2A.176 & -G_AREA(N)-G_ANTH(L)) LOTKA2A.177 LOTKA2A.178 LOTKA2A.179 DO M=1,NPFT LOTKA2A.180 DB_DFRAC(L,N,M) = -COM(L,N,M)*PC_S(L,N)/C_VEG(L,N) LOTKA2A.181 ENDDO LOTKA2A.182 ENDDO LOTKA2A.183 ENDDO LOTKA2A.184 LOTKA2A.185 C---------------------------------------------------------------------- LOTKA2A.186 C Update the areal fractions LOTKA2A.187 C---------------------------------------------------------------------- LOTKA2A.188 CALL COMPETE
(DOM,LAND_FIELD,TRIF_PTS,TRIF_INDEX ABX1F405.1670 &, B,DB_DFRAC,FORW,GAMMA,NOSOIL LOTKA2A.190 &, FRAC,DFRAC) LOTKA2A.191 LOTKA2A.192 RETURN LOTKA2A.193 END LOTKA2A.194 *ENDIF LOTKA2A.195