*IF DEF,A19_1A,OR,DEF,A19_2A SPARM1A.2 C *****************************COPYRIGHT****************************** SPARM1A.3 C (c) CROWN COPYRIGHT 1997, METEOROLOGICAL OFFICE, All Rights Reserved. SPARM1A.4 C SPARM1A.5 C Use, duplication or disclosure of this code is subject to the SPARM1A.6 C restrictions as set forth in the contract. SPARM1A.7 C SPARM1A.8 C Meteorological Office SPARM1A.9 C London Road SPARM1A.10 C BRACKNELL SPARM1A.11 C Berkshire UK SPARM1A.12 C RG12 2SZ SPARM1A.13 C SPARM1A.14 C If no contract has been raised with this copy of the code, the use, SPARM1A.15 C duplication or disclosure of it is strictly prohibited. Permission SPARM1A.16 C to do so must first be obtained in writing from the Head of Numerical SPARM1A.17 C Modelling at the above address. SPARM1A.18 C ******************************COPYRIGHT****************************** SPARM1A.19 !********************************************************************** SPARM1A.20 ! Routine to calculate the gridbox mean land surface parameters from SPARM1A.21 ! the areal fractions of the surface types and the structural SPARM1A.22 ! properties of the plant functional types. SPARM1A.23 ! SPARM1A.24 ! Written by Peter Cox (June 1997) SPARM1A.25 !********************************************************************** SPARM1A.26SUBROUTINE SPARM (LAND_FIELD,LAND1,LAND_PTS,TILE_PTS,TILE_INDEX 3,1SPARM1A.27 &, ALBSOIL,FRAC,HT,LAI SPARM1A.28 &, ALBSNC,ALBSNF,CATCH_T,Z0,Z0_T) SPARM1A.29 SPARM1A.30 IMPLICIT NONE SPARM1A.31 SPARM1A.32 *CALL NSTYPES
SPARM1A.33 SPARM1A.34 INTEGER SPARM1A.35 & LAND_FIELD ! IN Number of land points in whole grid. SPARM1A.36 &,LAND1 ! IN First land point to be processed. SPARM1A.37 &,LAND_PTS ! IN Number of land points to be processed. SPARM1A.38 &,TILE_PTS(NTYPE) ! IN Number of land points which SPARM1A.39 ! ! include the nth surface type. SPARM1A.40 &,TILE_INDEX(LAND_FIELD,NTYPE) ! IN Indices of land points which SPARM1A.41 ! ! include the nth surface type. SPARM1A.42 SPARM1A.43 REAL SPARM1A.44 & ALBSOIL(LAND_FIELD) ! IN Soil albedo. SPARM1A.45 &,FRAC(LAND_FIELD,NTYPE) ! IN Fractional cover of each SPARM1A.46 ! ! surface type. SPARM1A.47 &,HT(LAND_FIELD,NPFT) ! IN Vegetation height (m). SPARM1A.48 &,LAI(LAND_FIELD,NPFT) ! IN Leaf area index. SPARM1A.49 SPARM1A.50 REAL SPARM1A.51 & ALBSNC(LAND_FIELD) ! OUT Snow-covered albedo. SPARM1A.52 &,ALBSNF(LAND_FIELD) ! OUT Snow-free albedo. SPARM1A.53 &,CATCH_T(LAND_FIELD,NTYPE-1)! OUT Canopy capacity for each type SPARM1A.54 ! ! apart from ice (kg/m2). SPARM1A.55 &,Z0(LAND_FIELD) ! OUT Roughness length (m). SPARM1A.56 &,Z0_T(LAND_FIELD,NTYPE) ! OUT Roughness length for each SPARM1A.57 ! ! type (m). SPARM1A.58 REAL SPARM1A.59 & ALBSNC_T(LAND_FIELD,NTYPE) ! WORK Snow-covered albedo for each SPARM1A.60 ! ! type. SPARM1A.61 &,ALBSNF_T(LAND_FIELD,NTYPE) ! WORK Snow-free albedo for each type. SPARM1A.62 &,CATCH(LAND_FIELD) ! WORK Canopy capacity (kg/m2). SPARM1A.63 &,FZ0(LAND_FIELD) ! WORK Aggregation function of Z0. SPARM1A.64 SPARM1A.65 INTEGER SPARM1A.66 & J,L,N ! WORK Loop counters SPARM1A.67 SPARM1A.68 !----------------------------------------------------------------------- SPARM1A.69 ! Local parameters. SPARM1A.70 !----------------------------------------------------------------------- SPARM1A.71 REAL SPARM1A.72 & ALBSNCS ! Snow-covered albedo of bare soil. SPARM1A.73 PARAMETER (ALBSNCS = 0.8) SPARM1A.74 SPARM1A.75 *CALL PFTPARM
SPARM1A.76 *CALL NVEGPARM
SPARM1A.77 *CALL BLEND_H
SPARM1A.78 SPARM1A.79 !---------------------------------------------------------------------- SPARM1A.80 ! Set parameters for vegetated surface types SPARM1A.81 !---------------------------------------------------------------------- SPARM1A.82 DO N=1,NPFT SPARM1A.83 CALL PFT_SPARM
(LAND_FIELD,N,TILE_INDEX(1,N),TILE_PTS(N) SPARM1A.84 &, ALBSOIL,HT(1,N),LAI(1,N) SPARM1A.85 &, ALBSNC_T(1,N),ALBSNF_T(1,N),CATCH_T(1,N) SPARM1A.86 &, Z0_T(1,N)) SPARM1A.87 ENDDO SPARM1A.88 SPARM1A.89 !---------------------------------------------------------------------- SPARM1A.90 ! Set parameters for non-vegetated surface types SPARM1A.91 !---------------------------------------------------------------------- SPARM1A.92 DO N=NPFT+1,NTYPE SPARM1A.93 DO J=1,TILE_PTS(N) SPARM1A.94 L = TILE_INDEX(J,N) SPARM1A.95 ALBSNC_T(L,N) = ALBSNC_NVG(N-NPFT) SPARM1A.96 ALBSNF_T(L,N) = ALBSNF_NVG(N-NPFT) SPARM1A.97 IF ( ALBSNF_NVG(N-NPFT).LT.0. ) ALBSNF_T(L,N) = ALBSOIL(L) SPARM1A.98 Z0_T(L,N) = Z0_NVG(N-NPFT) SPARM1A.99 ENDDO SPARM1A.100 ENDDO SPARM1A.101 SPARM1A.102 DO N=NPFT+1,NTYPE-1 SPARM1A.103 DO J=1,TILE_PTS(N) SPARM1A.104 L = TILE_INDEX(J,N) SPARM1A.105 CATCH_T(L,N) = CATCH_NVG(N-NPFT) SPARM1A.106 ENDDO SPARM1A.107 ENDDO SPARM1A.108 SPARM1A.109 !---------------------------------------------------------------------- SPARM1A.110 ! Form area means SPARM1A.111 !---------------------------------------------------------------------- SPARM1A.112 DO L=1,LAND_FIELD SPARM1A.113 ALBSNC(L) = 0.0 SPARM1A.114 ALBSNF(L) = 0.0 SPARM1A.115 CATCH(L) = 0.0 SPARM1A.116 FZ0(L) = 0.0 SPARM1A.117 ENDDO SPARM1A.118 SPARM1A.119 DO N=1,NTYPE SPARM1A.120 DO J=1,TILE_PTS(N) SPARM1A.121 L = TILE_INDEX(J,N) SPARM1A.122 ALBSNC(L) = ALBSNC(L) + FRAC(L,N) * ALBSNC_T(L,N) SPARM1A.123 ALBSNF(L) = ALBSNF(L) + FRAC(L,N) * ALBSNF_T(L,N) SPARM1A.124 FZ0(L) = FZ0(L) + FRAC(L,N) / (LOG(LB / Z0_T(L,N)))**2 SPARM1A.125 ENDDO SPARM1A.126 ENDDO SPARM1A.127 SPARM1A.128 DO N=1,NTYPE-1 SPARM1A.129 DO J=1,TILE_PTS(N) SPARM1A.130 L = TILE_INDEX(J,N) SPARM1A.131 CATCH(L) = CATCH(L) + FRAC(L,N) * CATCH_T(L,N) SPARM1A.132 ENDDO SPARM1A.133 ENDDO SPARM1A.134 SPARM1A.135 !---------------------------------------------------------------------- SPARM1A.136 ! Calculate the effective roughness length SPARM1A.137 !---------------------------------------------------------------------- SPARM1A.138 DO L=LAND1,LAND1+LAND_PTS-1 SPARM1A.139 Z0(L) = LB * EXP(-SQRT(1. / FZ0(L))) SPARM1A.140 ENDDO SPARM1A.141 SPARM1A.142 RETURN SPARM1A.143 END SPARM1A.144 *ENDIF SPARM1A.145