*IF DEF,SCMA S_STSUBS.2 C *****************************COPYRIGHT****************************** S_STSUBS.3 C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved. S_STSUBS.4 C S_STSUBS.5 C Use, duplication or disclosure of this code is subject to the S_STSUBS.6 C restrictions as set forth in the contract. S_STSUBS.7 C S_STSUBS.8 C Meteorological Office S_STSUBS.9 C London Road S_STSUBS.10 C BRACKNELL S_STSUBS.11 C Berkshire UK S_STSUBS.12 C RG12 2SZ S_STSUBS.13 C S_STSUBS.14 C If no contract has been raised with this copy of the code, the use, S_STSUBS.15 C duplication or disclosure of it is strictly prohibited. Permission S_STSUBS.16 C to do so must first be obtained in writing from the Head of Numerical S_STSUBS.17 C Modelling at the above address. S_STSUBS.18 C ******************************COPYRIGHT****************************** S_STSUBS.19 C S_STSUBS.20 C===================================================================== S_STSUBS.21 C Subroutine ABNEW S_STSUBS.22 C Purpose:- To calculate amplitude and mean of sinusoidal S_STSUBS.23 C distribution for stats. Eqns. 10 and 11 S_STSUBS.24 C in SCM documentation. S_STSUBS.25 C Programmer:- J. LEAN - modified code from original SCM to S_STSUBS.26 C meet UM standards S_STSUBS.27 C Modification History: S_STSUBS.28 C Version Date S_STSUBS.29 C 4.5 07/98 SCM integrated as a standard UM configuration S_STSUBS.30 C Introduce multicolumn SCM S_STSUBS.31 C JC Thil. S_STSUBS.32 C S_STSUBS.33 C S_STSUBS.34 C===================================================================== S_STSUBS.35 C S_STSUBS.36Subroutine ABNEW(x1, x2, xa, xb, points, n) 13S_STSUBS.37 Implicit none S_STSUBS.38 C--------------------------------------------------------------------- S_STSUBS.39 C Arguments S_STSUBS.40 C--------------------------------------------------------------------- S_STSUBS.41 Integer S_STSUBS.42 & i, k, points, n ! Loop counters S_STSUBS.43 Real S_STSUBS.44 & x1(points,n) ! IN SD or mean of forcing variable S_STSUBS.45 ! for max. of annual cycle (July) S_STSUBS.46 & ,x2(points,n) ! IN SD or mean of forcing variable S_STSUBS.47 ! for min. of annual cycle (Jan) S_STSUBS.48 & ,xa(points,n) ! OUT Amplitude of seasonal variation S_STSUBS.49 ! of forcing variable S_STSUBS.50 & ,xb(points,n) ! OUT Mean of seasonal variation S_STSUBS.51 ! of forcing variable S_STSUBS.52 C S_STSUBS.53 Do i = 1, points S_STSUBS.54 Do k = 1, n S_STSUBS.55 xa(i,k) = (x1(i,k)-x2(i,k))/2. S_STSUBS.56 xb(i,k) = (x1(i,k)+x2(i,k))/2. S_STSUBS.57 enddo S_STSUBS.58 enddo S_STSUBS.59 Return S_STSUBS.60 End ! Subroutine ABNEW S_STSUBS.61 C S_STSUBS.62 C===================================================================== S_STSUBS.63 C FUNCTION DAYNEW S_STSUBS.64 C PURPOSE:- To calculate SIN of argument (in eqn. 12 S_STSUBS.65 C in SCM doc.) required in calculation of S_STSUBS.66 C mean or SD of variable at day relative to winter S_STSUBS.67 C solstice S_STSUBS.68 C PROGRAMMER:- J. LEAN - modified code from original SCM to S_STSUBS.69 C meet UM standards S_STSUBS.70 C Modification History: S_STSUBS.71 C Version Date S_STSUBS.72 C 4.5 07/98 SCM integrated as a standard UM configuration S_STSUBS.73 C JC Thil. S_STSUBS.74 C===================================================================== S_STSUBS.75 C S_STSUBS.76
Function DAYNEW(at,bt,itd) 3S_STSUBS.77 C--------------------------------------------------------------------- S_STSUBS.78 C Arguments S_STSUBS.79 C--------------------------------------------------------------------- S_STSUBS.80 implicit none S_STSUBS.81 Integer itd ! IN Dayno. relative to winter S_STSUBS.82 ! solstice S_STSUBS.83 Real S_STSUBS.84 & at,bt ! IN Constants for calculating annual S_STSUBS.85 ! cycle S_STSUBS.86 C--------------------------------------------------------------------- S_STSUBS.87 C Local variables S_STSUBS.88 C--------------------------------------------------------------------- S_STSUBS.89 Real S_STSUBS.90 & arg ! Argument S_STSUBS.91 & ,daynew ! SIN of argument S_STSUBS.92 C S_STSUBS.93 arg = at * float(itd) + bt S_STSUBS.94 daynew = sin(arg) S_STSUBS.95 Return S_STSUBS.96 End ! Function DAYNEW S_STSUBS.97 C S_STSUBS.98 C===================================================================== S_STSUBS.99 C Subroutine XNEW S_STSUBS.100 C Purpose:- To calculate mean or SD of random variable S_STSUBS.101 C at daynumber relative to winter solstice S_STSUBS.102 C (eqn. 12 in SCM doc.) S_STSUBS.103 C Programmer:- J. LEAN - modified code from original SCM to S_STSUBS.104 C meet UM standards S_STSUBS.105 C Modification History: S_STSUBS.106 C Version Date S_STSUBS.107 C 4.5 07/98 SCM integrated as a standard UM configuration S_STSUBS.108 C Introduce multicolumn SCM S_STSUBS.109 C JC Thil. S_STSUBS.110 C S_STSUBS.111 C===================================================================== S_STSUBS.112 C S_STSUBS.113
Subroutine XNEW(x, xa, xb, points, nlevs, xt) 13S_STSUBS.114 C--------------------------------------------------------------------- S_STSUBS.115 C Arguments S_STSUBS.116 C--------------------------------------------------------------------- S_STSUBS.117 Implicit none S_STSUBS.118 Integer S_STSUBS.119 & points , nlevs ! IN # of columns, & model levels S_STSUBS.120 Real S_STSUBS.121 & x(points,nlevs) ! OUT Mean or SD of forcing variable S_STSUBS.122 ! at day relative to winter S_STSUBS.123 ! solstice S_STSUBS.124 & ,xa(points,nlevs) ! IN Amplitude of seasonal variation S_STSUBS.125 ! of forcing variable. S_STSUBS.126 & ,xb(points,nlevs) ! IN Mean of seasonal variation S_STSUBS.127 ! of forcing variable. S_STSUBS.128 & ,xt ! IN Sin of argument S_STSUBS.129 C--------------------------------------------------------------------- S_STSUBS.130 C Local variables S_STSUBS.131 C--------------------------------------------------------------------- S_STSUBS.132 Integer S_STSUBS.133 & i,k ! Loop counters S_STSUBS.134 C S_STSUBS.135 do k = 1, nlevs S_STSUBS.136 do i = 1, points S_STSUBS.137 x(i,k) = xa(i, k) * xt + xb(i,k) S_STSUBS.138 enddo S_STSUBS.139 enddo S_STSUBS.140 Return S_STSUBS.141 End ! Subroutine XNEW S_STSUBS.142 C S_STSUBS.143 C===================================================================== S_STSUBS.144 C SUBROUTINE PNEW S_STSUBS.145 C PURPOSE:- To calculate pressure and reciprocal pressure S_STSUBS.146 C coordinates AK and BK values and P* S_STSUBS.147 C PROGRAMMER:- J. LEAN - modified code from original SCM to S_STSUBS.148 C meet UM standards S_STSUBS.149 C S_STSUBS.150 C Modification History: S_STSUBS.151 C Version Date S_STSUBS.152 C 4.5 07/98 SCM integrated as a standard UM configuration S_STSUBS.153 C Introduce multicolumn SCM S_STSUBS.154 C JC Thil. S_STSUBS.155 C S_STSUBS.156 C===================================================================== S_STSUBS.157 C S_STSUBS.158
Subroutine PNEW(nlevs, p, rp, points, n, pstar, ak, bk) 2S_STSUBS.159 C--------------------------------------------------------------------- S_STSUBS.160 C Arguments S_STSUBS.161 C--------------------------------------------------------------------- S_STSUBS.162 implicit none S_STSUBS.163 Integer S_STSUBS.164 & nlevs ! IN no. of levs of the scm. S_STSUBS.165 & ,n ! IN no. of levels to be processed S_STSUBS.166 & ,points ! IN no. of model columns. S_STSUBS.167 Real S_STSUBS.168 & ak(nlevs) S_STSUBS.169 & ,bk(nlevs) ! IN AK and BK values at levels S_STSUBS.170 & ,p(points,n) ! OUT Pressure coordinates (Pa) S_STSUBS.171 & ,pstar(points) ! IN Surface pressure (Pa) S_STSUBS.172 & ,rp(points,n) ! OUT Reciprocal pressure S_STSUBS.173 ! coordinates (HPa) S_STSUBS.174 C--------------------------------------------------------------------- S_STSUBS.175 C Local variables S_STSUBS.176 C--------------------------------------------------------------------- S_STSUBS.177 Integer S_STSUBS.178 & i,k ! Loop counters S_STSUBS.179 S_STSUBS.180 C S_STSUBS.181 Do k = 1, n S_STSUBS.182 Do i = 1, points S_STSUBS.183 p(i,k) = ak(k) + bk(k) * pstar(i) S_STSUBS.184 rp(i,k) = 100. / p(i,k) S_STSUBS.185 enddo S_STSUBS.186 enddo S_STSUBS.187 Return S_STSUBS.188 End ! Subroutine PNEW S_STSUBS.189 C S_STSUBS.190 C===================================================================== S_STSUBS.191 C SUBROUTINE ACINIT S_STSUBS.192 C PURPOSE:- To calculate mean and SD of a random variable S_STSUBS.193 C eqns 6 and 7 in SCM doc. S_STSUBS.194 C PROGRAMMER:- J. LEAN - modified code from original SCM to S_STSUBS.195 C meet UM standards S_STSUBS.196 C S_STSUBS.197 C Modification History: S_STSUBS.198 C Version Date S_STSUBS.199 C 4.5 07/98 SCM integrated as a standard UM configuration S_STSUBS.200 C Introduce multicolumn SCM S_STSUBS.201 C JC Thil. S_STSUBS.202 C S_STSUBS.203 C===================================================================== S_STSUBS.204 C S_STSUBS.205
Subroutine ACINIT(xbar, xsd, a, cbar, csd, cor, n, points) 4S_STSUBS.206 C--------------------------------------------------------------------- S_STSUBS.207 C Arguments S_STSUBS.208 C--------------------------------------------------------------------- S_STSUBS.209 Implicit none S_STSUBS.210 Integer S_STSUBS.211 & n, points ! IN no. of model columns & levels S_STSUBS.212 Real S_STSUBS.213 & a(points,n-1) ! OUT term a of eqn. 2.22 S_STSUBS.214 & ,cbar(points,n-1) ! OUT Mean of random variable C S_STSUBS.215 & ,cor(points) ! IN Vertical correlation coefficient S_STSUBS.216 & ,csd(points,n-1) ! OUT SD of random variable C S_STSUBS.217 & ,xbar(points,n) ! IN Mean of forcing variable S_STSUBS.218 & ,xsd(points,n) ! IN SD of forcing variable S_STSUBS.219 C--------------------------------------------------------------------- S_STSUBS.220 C Local variables S_STSUBS.221 C--------------------------------------------------------------------- S_STSUBS.222 Integer S_STSUBS.223 & i, k ! Loop counters S_STSUBS.224 C S_STSUBS.225 Do k = 1 ,n-1 S_STSUBS.226 Do i = 1, points S_STSUBS.227 a(i,k) = cor(i) * xsd(i,k+1) / xsd(i,k) S_STSUBS.228 cbar(i,k) = xbar(i,k+1) - a(i,k) * xbar(i,k) S_STSUBS.229 csd(i,k) = sqrt(1.-cor(i)*cor(i)) * xsd(i,k+1) S_STSUBS.230 enddo S_STSUBS.231 enddo S_STSUBS.232 Return S_STSUBS.233 End ! Subroutine ACINIT S_STSUBS.234 S_STSUBS.235 *ENDIF S_STSUBS.236