*IF DEF,A19_1A,OR,DEF,A19_2A INITVEG1.2
C *****************************COPYRIGHT****************************** INITVEG1.3
C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. INITVEG1.4
C INITVEG1.5
C Use, duplication or disclosure of this code is subject to the INITVEG1.6
C restrictions as set forth in the contract. INITVEG1.7
C INITVEG1.8
C Meteorological Office INITVEG1.9
C London Road INITVEG1.10
C BRACKNELL INITVEG1.11
C Berkshire UK INITVEG1.12
C RG12 2SZ INITVEG1.13
C INITVEG1.14
C If no contract has been raised with this copy of the code, the use, INITVEG1.15
C duplication or disclosure of it is strictly prohibited. Permission INITVEG1.16
C to do so must first be obtained in writing from the Head of Numerical INITVEG1.17
C Modelling at the above address. INITVEG1.18
C ******************************COPYRIGHT****************************** INITVEG1.19
! Calls routines to initialize veg parameters and accumulated C fluxes INITVEG1.20
! INITVEG1.21
! Subroutine Interface: INITVEG1.22
SUBROUTINE INIT_VEG(A_STEP, 2,5INITVEG1.23
*CALL ARGSIZE
INITVEG1.24
*CALL ARGD1
INITVEG1.25
*CALL ARGDUMA
INITVEG1.26
*CALL ARGPTRA
INITVEG1.27
*CALL ARGCONA
INITVEG1.28
& ICODE,CMESSAGE) INITVEG1.29
INITVEG1.30
IMPLICIT NONE INITVEG1.31
! INITVEG1.32
! Description: INITVEG1.33
! Initializes vegetation parameters from fractions of surface types INITVEG1.34
! and initializes accumulated carbon fluxes to zero if a new TRIFFID INITVEG1.35
! calling period is starting. INITVEG1.36
! INITVEG1.37
! Method: INITVEG1.38
! Calls routine SPARM to initialize vegetation parameters. INITVEG1.39
! Calls routine INIT_ACC to initialize accumulated carbon fluxes. INITVEG1.40
! INITVEG1.41
! Current Code Owner: Richard Betts INITVEG1.42
! INITVEG1.43
! History: INITVEG1.44
! Version Date Comment INITVEG1.45
! ------- ---- ------- INITVEG1.46
! 4.4 10/10/97 Original code. Richard Betts INITVEG1.47
! INITVEG1.48
! Code Description: INITVEG1.49
! Language: FORTRAN 77 + common extensions. INITVEG1.50
! This code is written to UMDP3 v6 programming standards. INITVEG1.51
! INITVEG1.52
INITVEG1.53
*CALL CMAXSIZE
INITVEG1.54
*CALL CSUBMODL
INITVEG1.55
*CALL TYPSIZE
INITVEG1.56
*CALL TYPD1
INITVEG1.57
*CALL TYPDUMA
INITVEG1.58
*CALL TYPPTRA
INITVEG1.59
*CALL TYPCONA
INITVEG1.60
*CALL CHSUNITS
INITVEG1.61
*CALL CCONTROL
INITVEG1.62
*CALL CTIME
INITVEG1.63
*CALL CRUNTIMC
INITVEG1.64
*CALL TYPFLDPT
INITVEG1.65
*CALL PARVARS
INITVEG1.66
*CALL NSTYPES
INITVEG1.67
INITVEG1.68
INTEGER INITVEG1.69
& A_STEP ! IN Current timestep in atmosphere model INITVEG1.70
INITVEG1.71
INTEGER INITVEG1.72
& FIRST_POINT ! LOCAL First P-point to be processed. INITVEG1.73
&,LAST_POINT ! LOCAL Last P-point to be processed. INITVEG1.74
&,LAND1 ! LOCAL First land point to be processed. INITVEG1.75
&,LAND_PTS ! LOCAL Number of land point to be processed. INITVEG1.76
&,TILE_PTS(NTYPE) ! LOCAL Number of land points which INITVEG1.77
C ! include the nth surface type INITVEG1.78
&,TILE_INDEX(LAND_FIELD,NTYPE) ! LOCAL Indices of land points which INITVEG1.79
C ! include the nth surface type INITVEG1.80
&,NSTEP_TRIF ! LOCAL Number of atmospheric INITVEG1.81
C ! timesteps between calls to INITVEG1.82
C ! TRIFFID. INITVEG1.83
&,I ! LOCAL Loop counter for all points INITVEG1.84
&,L ! LOCAL Loop counter for land points INITVEG1.85
&,N ! ** TEMPORARY ** loop counter for types INITVEG1.86
INITVEG1.87
REAL INITVEG1.88
& Z0_LAND(LAND_FIELD) ! LOCAL Z0 on land points INITVEG1.89
INITVEG1.90
INTEGER ICODE ! LOCAL Internal return code INITVEG1.91
CHARACTER*80 CMESSAGE ! LOCAL Internal error message INITVEG1.92
INITVEG1.93
EXTERNAL ABX1F405.54
& INIT_MIN ABX1F405.55
&,TILEPTS ABX1F405.56
&,SPARM INITVEG1.96
&,INIT_ACC INITVEG1.97
INITVEG1.98
!----------------------------------------------------------------------- INITVEG1.99
! Set the TYPFLDPT variables, grid pointers and indices. INITVEG1.100
!----------------------------------------------------------------------- INITVEG1.101
*CALL SETFLDPT
INITVEG1.102
FIRST_POINT=START_POINT_NO_HALO INITVEG1.103
LAST_POINT=END_P_POINT_INC_HALO INITVEG1.104
LAND1 = 1 INITVEG1.105
LAND_PTS = 0 INITVEG1.106
DO L=1,LAND_FIELD INITVEG1.107
IF ( LAND_LIST(L) .LT. FIRST_POINT ) THEN INITVEG1.108
LAND1 = LAND1 + 1 INITVEG1.109
ELSEIF ( LAND_LIST(L) .LE. LAST_POINT ) THEN INITVEG1.110
LAND_PTS = LAND_PTS + 1 INITVEG1.111
ENDIF INITVEG1.112
ENDDO INITVEG1.113
INITVEG1.114
!----------------------------------------------------------------------- ABX1F405.57
! If TRIFFID on, call INIT_MIN to ensure PFT fractions are GE minimum ABX1F405.58
! fraction except where vegetation excluded by ice, water or urban ABX1F405.59
!----------------------------------------------------------------------- ABX1F405.60
IF (L_TRIFFID) THEN ABX1F405.61
CALL INIT_MIN
(LAND_FIELD,LAND1,LAND_PTS,D1(JFRAC_TYP), ABX1F405.62
& D1(JSOIL_CARB)) ABX1F405.63
ENDIF ABX1F405.64
ABX1F405.65
C----------------------------------------------------------------------- INITVEG1.115
C Call TILEPTS to initialise TILE_PTS and TILE_INDEX INITVEG1.116
C----------------------------------------------------------------------- INITVEG1.117
CALL TILEPTS
(P_FIELD,LAND_FIELD,LAND1,LAND_PTS, INITVEG1.118
& D1(JFRAC_TYP),TILE_PTS,TILE_INDEX) INITVEG1.119
INITVEG1.120
C----------------------------------------------------------------------- INITVEG1.121
C Initialise tiled and gridbox mean vegetation parameters INITVEG1.122
C----------------------------------------------------------------------- INITVEG1.123
WRITE(6,*) 'INITVEG: CALLING SPARM'
INITVEG1.124
CALL SPARM
(LAND_FIELD,LAND1,LAND_PTS,TILE_PTS,TILE_INDEX, INITVEG1.125
& D1(JSOIL_ALB),D1(JFRAC_TYP),D1(JCANHT_PFT), INITVEG1.126
& D1(JLAI_PFT),D1(JMDSA),D1(JSFA),D1(JCATCH_NIT), INITVEG1.127
& Z0_LAND,D1(JZ0_TYP)) INITVEG1.128
INITVEG1.129
C----------------------------------------------------------------------- INITVEG1.130
C Copy Z0 from land field to full field INITVEG1.131
C----------------------------------------------------------------------- INITVEG1.132
DO L = LAND1,LAND1+LAND_PTS-1 ABX1F405.66
I = LAND_LIST(L) INITVEG1.134
D1(JZ0+I-1)=Z0_LAND(L) INITVEG1.135
ENDDO INITVEG1.136
INITVEG1.137
IF (L_TRIFFID) THEN INITVEG1.138
C----------------------------------------------------------------------- INITVEG1.139
C If this is an NRUN and re-start from mid-way through a TRIFFID calling INITVEG1.140
C period has not been requested: (i) initialise accumulation prognostics INITVEG1.141
C to zero, (ii) set TRIFFID_PERIOD in integer header, and INITVEG1.142
C (iii) initialise ASTEPS_SINCE_TRIFFID integer header to zero. INITVEG1.143
C If mid-period restart is requested then leave the accumulated fields INITVEG1.144
C unchanged, and if a new calling period is specified then reset INITVEG1.145
C calling period header the new value provided that the number of INITVEG1.146
C atmosphere timesteps since the last call to TRIFFID does not exceed INITVEG1.147
C the new calling period . INITVEG1.148
C A_INTHD(22) holds TRIFFID_PERIOD in days. INITVEG1.149
C A_INTHD(23) holds the number of atmosphere timesteps since the last INITVEG1.150
C call to TRIFFID. INITVEG1.151
C----------------------------------------------------------------------- INITVEG1.152
IF (A_STEP.EQ.0) THEN INITVEG1.153
IF (L_NRUN_MID_TRIF) THEN INITVEG1.154
INITVEG1.155
IF (TRIFFID_PERIOD.NE.A_INTHD(22)) THEN INITVEG1.156
NSTEP_TRIF=INT(86400.0*TRIFFID_PERIOD/ INITVEG1.157
& SECS_PER_STEPim(atmos_im)) INITVEG1.158
INITVEG1.159
IF (A_INTHD(23).GT.NSTEP_TRIF) THEN INITVEG1.160
WRITE(6,*) '**ERROR IN TRIFFID** YOU HAVE SELECTED TO' INITVEG1.161
WRITE(6,*) 'START MID-WAY THROUGH A TRIFFID CALLING'
INITVEG1.162
WRITE(6,*) 'PERIOD BUT YOUR INITIAL DUMP CONTAINS' INITVEG1.163
WRITE(6,*) 'PROGNOSTICS ACCUMULATED OVER A PERIOD' INITVEG1.164
WRITE(6,*) 'LONGER THAN THE NEW CALLING PERIOD'
INITVEG1.165
INITVEG1.166
ELSE INITVEG1.167
INITVEG1.168
A_INTHD(22)=TRIFFID_PERIOD INITVEG1.169
INITVEG1.170
ENDIF INITVEG1.171
ENDIF INITVEG1.172
INITVEG1.173
ELSE INITVEG1.174
INITVEG1.175
CALL INIT_ACC
(LAND_FIELD, ABX1F405.67
& D1(JNPP_PFT_ACC), ABX1F405.68
& D1(JG_PHLF_PFT_ACC),D1(JRSP_W_PFT_ACC), INITVEG1.178
& D1(JRSP_S_ACC),ICODE,CMESSAGE) INITVEG1.179
INITVEG1.180
A_INTHD(22)=TRIFFID_PERIOD INITVEG1.181
A_INTHD(23)=0 INITVEG1.182
INITVEG1.183
ENDIF INITVEG1.184
ENDIF INITVEG1.185
INITVEG1.186
ELSE IF (L_PHENOL) THEN INITVEG1.187
INITVEG1.188
C----------------------------------------------------------------------- ABX1F405.69
C Initialise accumulated leaf turnover rate to zero ABX1F405.70
C----------------------------------------------------------------------- ABX1F405.71
DO L = 1,LAND_FIELD ABX1F405.72
D1(JG_LF_PFT_ACC+L-1) = 0.0 ABX1F405.73
ENDDO ABX1F405.74
ABX1F405.75
INITVEG1.193
ENDIF INITVEG1.194
INITVEG1.195
RETURN INITVEG1.196
END INITVEG1.197
*ENDIF INITVEG1.198