*IF DEF,A02_1A,OR,DEF,A02_1C AWA1F304.5 C ******************************COPYRIGHT****************************** GTS2F400.5599 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.5600 C GTS2F400.5601 C Use, duplication or disclosure of this code is subject to the GTS2F400.5602 C restrictions as set forth in the contract. GTS2F400.5603 C GTS2F400.5604 C Meteorological Office GTS2F400.5605 C London Road GTS2F400.5606 C BRACKNELL GTS2F400.5607 C Berkshire UK GTS2F400.5608 C RG12 2SZ GTS2F400.5609 C GTS2F400.5610 C If no contract has been raised with this copy of the code, the use, GTS2F400.5611 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.5612 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.5613 C Modelling at the above address. GTS2F400.5614 C ******************************COPYRIGHT****************************** GTS2F400.5615 C GTS2F400.5616 CLL Subroutine LWPLAN ---------------------------------------------- LWPLAN1A.3 CLL LWPLAN1A.4 CLL This version of routine LWPLAN used in LWPLAN1A.5 CLL version 1A (gaseous effects treated as Slingo & Wilderspin, 1986) LWPLAN1A.6 CLL of the UM LW code. LWPLAN1A.7 CLL It calculates Planck ("black-body") fluxes in each longwave band as LWPLAN1A.8 CLL a cubic function of atmospheric (layer centre and boundary) and LWPLAN1A.9 CLL surface temperatures and returns their differences across LWPLAN1A.10 CLL half-layers (and optionally the surface black-body flux) for use by WI200893.34 CLL by LWMAST constructing longwave fluxes. WI200893.35 CLL LWPLAN1A.13 CLL Author: William Ingram LWPLAN1A.14 CLL LWPLAN1A.15 CLL Model Modification history from model version 3.0: LWPLAN1A.16 CLL version Date LWPLAN1A.17 CLL LWPLAN1A.18 CLL Programming standard : LWPLAN1A.19 CLL The code is standard FORTRAN 77 except for having ! comments. LWPLAN1A.20 CLL It conforms with standard A of version 3 (07/9/90) of UMDP 4, and LWPLAN1A.21 CLL contains no 8X-deprecated features. LWPLAN1A.22 CLL LWPLAN1A.23 CLL Logical components covered : P232, D23 LWPLAN1A.24 CLL It is part of component P232 (longwave radiation) LWPLAN1A.25 CLL It also performs some of the functions of D23 LWPLAN1A.26 CLL LWPLAN1A.27 CLL Project task : P23 (radiation) WI200893.36 CLL LWPLAN1A.29 CLL External documentation: UMDP 23. LWPLAN1A.30 CLL LWPLAN1A.31 CLLEND ----------------------------------------------------------------- LWPLAN1A.32 C*L LWPLAN1A.33SUBROUTINE LWPLAN (TAC, PEXNER, PSTAR, AKH, BKH, TSTAR, AICE, 2LWPLAN1A.34 & SFUP, SFUPON, LWPLAN1A.35 & L2, NLEVS, L1, SEAFX, BHDB, THDB) LWPLAN1A.36 C* LWPLAN1A.37 *CALL LWNBANDS
LWPLAN1A.38 C*L LWPLAN1A.39 INTEGER!, INTENT (IN) :: LWPLAN1A.40 & L1, ! First dimension of input arrays LWPLAN1A.41 & L2, ! Number of points to be treated LWPLAN1A.42 & NLEVS ! Number of levels LWPLAN1A.43 REAL!, INTENT(IN) :: LWPLAN1A.44 & TAC(L1,NLEVS), ! Atmospheric temperatures at layer LWPLAN1A.45 & PEXNER(L1,NLEVS+1), ! centres and Exner function at LWPLAN1A.46 & ! layer boundaries (to get T there) LWPLAN1A.47 & PSTAR(L1), ! Surface pressure LWPLAN1A.48 & AKH(NLEVS+1), ! AK at layer boundaries LWPLAN1A.49 & BKH(NLEVS+1), ! BK at layer boundaries LWPLAN1A.50 & TSTAR(L1), ! Surface temperature LWPLAN1A.51 & AICE(L1) ! Sea-ice fraction LWPLAN1A.52 LOGICAL!, INTENT(IN) :: LWPLAN1A.53 & SFUPON LWPLAN1A.54 REAL!, INTENT(OUT) :: LWPLAN1A.55 & BHDB(L2,NLEVS,NBANDS), LWPLAN1A.56 & THDB(L2,NLEVS,NBANDS), LWPLAN1A.57 C ! BHDB holds the difference of the Planck functions across the LWPLAN1A.58 C ! bottom half of each layer and THDB across the top half. LWPLAN1A.59 & SEAFX(L1) ! Difference between the open-sea LWPLAN1A.60 C ! and sea-ice upward longwave fluxes at the surface. LWPLAN1A.61 & , SFUP(L1) ! Upward surface flux LWPLAN1A.62 C* LWPLAN1A.63 CL ! LWPLAN has no EXTERNAL calls and no dynamically allocated arrays LWPLAN1A.64 C LWPLAN1A.65 *CALL C_R_CP
LWPLAN1A.66 *CALL C_0_DG_C
LWPLAN1A.67 *CALL LWPFCO
LWPLAN1A.68 C LWPLAN1A.69 INTEGER BAND, LEVEL, J ! Loopers over band, level & point LWPLAN1A.70 REAL TAB, ! Layer boundary temperature LWPLAN1A.71 & WTL, WTU, ! and weights for its calculation LWPLAN1A.72 & BBC, ! Black-body flux at a model layer LWPLAN1A.73 & BBB, ! centre or boundary LWPLAN1A.74 & BBTFS ! or at TFS LWPLAN1A.75 LWPLAN1A.76 REAL LWPLAN1A.77 & PU ! Pressure at upper bdry of layer+1 LWPLAN1A.78 &, PL ! Pressure at upper bdry of layer LWPLAN1A.79 &, PLM1 ! Pressure at lower bdry of layer LWPLAN1A.80 *CALL P_EXNERC
LWPLAN1A.81 LWPLAN1A.82 C LWPLAN1A.83 CL ! Section 1 LWPLAN1A.84 CL ! ~~~~~~~~~ LWPLAN1A.85 CL ! First find Planck function for surface temperature: LWPLAN1A.86 C LWPLAN1A.87 DO 1 BAND=1, NBANDS LWPLAN1A.88 BBTFS = ( ( PFCO(1,BAND) * TFS + PFCO(2,BAND) ) LWPLAN1A.89 & * TFS + PFCO(3,BAND) ) * TFS + PFCO(4,BAND) LWPLAN1A.90 Cfpp$ Select(CONCUR) LWPLAN1A.91 DO 11 J=1, L2 LWPLAN1A.92 IF ( AICE(J) .GT. 0. ) THEN LWPLAN1A.93 TAB = ( TSTAR(J) + (AICE(J)-1.) * TFS ) / AICE(J) LWPLAN1A.94 ELSE LWPLAN1A.95 TAB = TSTAR(J) LWPLAN1A.96 ENDIF LWPLAN1A.97 BBB = ( ( PFCO(1,BAND) * TAB + PFCO(2,BAND) ) LWPLAN1A.98 & * TAB + PFCO(3,BAND) ) * TAB + PFCO(4,BAND) LWPLAN1A.99 SEAFX(J) = SEAFX(J) + BBTFS - BBB LWPLAN1A.100 IF ( AICE(J) .GT. 0. ) LWPLAN1A.101 & BBB = AICE(J) * BBB + (1.-AICE(J)) * BBTFS LWPLAN1A.102 BHDB(J,1,BAND) = BBB LWPLAN1A.103 IF ( SFUPON ) SFUP(J) = SFUP(J) + BBB LWPLAN1A.104 11 CONTINUE LWPLAN1A.105 1 CONTINUE LWPLAN1A.106 C LWPLAN1A.107 CL ! Section 2 LWPLAN1A.108 CL ! ~~~~~~~~~ LWPLAN1A.109 CL ! Loop over the model layers finding the dB across each half LWPLAN1A.110 CL ! of each one : LWPLAN1A.111 C LWPLAN1A.112 DO 2 LEVEL=1, NLEVS-1 LWPLAN1A.113 C ! LWPLAN1A.114 C ! First must find TAB for the top of the layer (same for each LWPLAN1A.115 C ! band) and store it in spare space in THDB: LWPLAN1A.116 Cfpp$ Select(CONCUR) LWPLAN1A.117 DO 20 J=1, L2 LWPLAN1A.118 PU = PSTAR(J)*BKH(LEVEL+2) + AKH(LEVEL+2) LWPLAN1A.119 PL = PSTAR(J)*BKH(LEVEL+1) + AKH(LEVEL+1) LWPLAN1A.120 PLM1 = PSTAR(J)*BKH(LEVEL) + AKH(LEVEL) LWPLAN1A.121 WTL = TAC(J,LEVEL+1)*( PEXNER(J,LEVEL+1) / LWPLAN1A.122 & P_EXNER_C(PEXNER(J,LEVEL+2),PEXNER(J,LEVEL+1),PU,PL,KAPPA) LWPLAN1A.123 & - 1.0 ) LWPLAN1A.124 WTU = TAC(J,LEVEL) * ( PEXNER(J,LEVEL) / LWPLAN1A.125 & P_EXNER_C(PEXNER(J,LEVEL+1),PEXNER(J,LEVEL),PL,PLM1,KAPPA) LWPLAN1A.126 & - 1.0 ) LWPLAN1A.127 C LWPLAN1A.128 TAB = LWPLAN1A.129 & ( WTL * TAC(J,LEVEL) + WTU * TAC(J,LEVEL+1) ) / ( WTL + WTU ) LWPLAN1A.130 THDB(J,NLEVS,1) = TAB LWPLAN1A.131 20 CONTINUE LWPLAN1A.132 C ! LWPLAN1A.133 C ! This loop finds the black-body fluxes at the middle & top of LWPLAN1A.134 C ! the layer and sets BHDB & THDB for the layer, using the LWPLAN1A.135 C ! black-body flux for the bottom of the layer which is already LWPLAN1A.136 C ! in BHDB and leaving the value at the top in the next level up LWPLAN1A.137 C ! of BHDB : LWPLAN1A.138 DO 21 BAND=1, NBANDS LWPLAN1A.139 Cfpp$ Select(CONCUR) LWPLAN1A.140 DO 22 J=1, L2 LWPLAN1A.141 BBC = ( ( PFCO(1,BAND) * TAC(J,LEVEL) + PFCO(2,BAND) ) LWPLAN1A.142 & * TAC(J,LEVEL) + PFCO(3,BAND) ) * TAC(J,LEVEL) + PFCO(4,BAND) LWPLAN1A.143 BHDB(J,LEVEL,BAND) = BBC - BHDB(J,LEVEL,BAND) LWPLAN1A.144 TAB = THDB(J,NLEVS,1) LWPLAN1A.145 BBB = ( ( PFCO(1,BAND) * TAB + PFCO(2,BAND) ) LWPLAN1A.146 & * TAB + PFCO(3,BAND) ) * TAB + PFCO(4,BAND) LWPLAN1A.147 THDB(J,LEVEL,BAND) = BBB - BBC LWPLAN1A.148 BHDB(J,LEVEL+1,BAND) = BBB LWPLAN1A.149 22 CONTINUE LWPLAN1A.150 21 CONTINUE LWPLAN1A.151 2 CONTINUE LWPLAN1A.152 C LWPLAN1A.153 CL ! Section 3 LWPLAN1A.154 CL ! ~~~~~~~~~ LWPLAN1A.155 CL ! Finally, the top layer is treated slightly differently because LWPLAN1A.156 CL ! the black-body flux at the top is zero: LWPLAN1A.157 C LWPLAN1A.158 DO 3 BAND=1, NBANDS LWPLAN1A.159 Cfpp$ Select(CONCUR) LWPLAN1A.160 DO 30 J=1, L2 LWPLAN1A.161 BBC = ( ( PFCO(1,BAND) * TAC(J,NLEVS) + PFCO(2,BAND) ) LWPLAN1A.162 & * TAC(J,NLEVS) + PFCO(3,BAND) ) * TAC(J,NLEVS) + PFCO(4,BAND) LWPLAN1A.163 BHDB(J,NLEVS,BAND) = BBC - BHDB(J,NLEVS,BAND) LWPLAN1A.164 THDB(J,NLEVS,BAND) = - BBC LWPLAN1A.165 30 CONTINUE LWPLAN1A.166 3 CONTINUE LWPLAN1A.167 C LWPLAN1A.168 RETURN LWPLAN1A.169 END LWPLAN1A.170 *ENDIF LWPLAN1A.171