*IF DEF,S40_1A SLBDIF1A.2 C ******************************COPYRIGHT****************************** GTS2F400.8983 C (c) CROWN COPYRIGHT 1995, METEOROLOGICAL OFFICE, All Rights Reserved. GTS2F400.8984 C GTS2F400.8985 C Use, duplication or disclosure of this code is subject to the GTS2F400.8986 C restrictions as set forth in the contract. GTS2F400.8987 C GTS2F400.8988 C Meteorological Office GTS2F400.8989 C London Road GTS2F400.8990 C BRACKNELL GTS2F400.8991 C Berkshire UK GTS2F400.8992 C RG12 2SZ GTS2F400.8993 C GTS2F400.8994 C If no contract has been raised with this copy of the code, the use, GTS2F400.8995 C duplication or disclosure of it is strictly prohibited. Permission GTS2F400.8996 C to do so must first be obtained in writing from the Head of Numerical GTS2F400.8997 C Modelling at the above address. GTS2F400.8998 C ******************************COPYRIGHT****************************** GTS2F400.8999 C GTS2F400.9000 CLL SLBDIF1A.3 C SUBROUTINE SLABDIFF SLBDIF1A.4 C ------------------- SLBDIF1A.5 C SLBDIF1A.6 CLL THIS ROUTINE IS FOR USE WITH THE 'SLAB' OCEAN MODEL ONLY. SLBDIF1A.7 CLL SLBDIF1A.8 CLL DEL2 DIFFUSION OF SLAB TEMPERATURE, WITH CHECK FOR STABILITY. SLBDIF1A.9 CLL DIFFUSION COEFFICIENT USED IS DEPENDENT ON RESOLUTION SLBDIF1A.10 CLL SUGGESTED VALUES ARE SLBDIF1A.11 CLL SLBDIF1A.12 CLL 4.0E4 FOR 5 X 7.5 DEGREE LAT/LONG SLBDIF1A.13 CLL 2.0E4 FOR 2.5 X 3.75 DEGREE LAT/LONG SLBDIF1A.14 CLL SLBDIF1A.15 CLL THIS ROUTINE FORMS PART OF SYSTEM COMPONENT P40. SLBDIF1A.16 CLL IT CAN BE COMPILED BY CFT77, BUT DOES NOT CONFORM TO ANSI SLBDIF1A.17 CLL FORTRAN77 STANDARDS, BECAUSE OF THE INLINE COMMENTS, THE SLBDIF1A.18 CLL USE OF ENDDO AND DYNAMIC ALLOCATION. SLBDIF1A.19 CLL IT ADHERES TO THE STANDARDS OF DOCUMENTATION PAPER 3, VERSION 5. SLBDIF1A.20 CLL SLBDIF1A.21 CLL ALL QUANTITIES IN THIS ROUTINE ARE IN S.I. UNITS UNLESS SLBDIF1A.22 CLL OTHERWISE STATED. SLBDIF1A.23 CLL SLBDIF1A.24 CLL CALLED BY: UMSLAB SLBDIF1A.25 CLL SLBDIF1A.26 CLL WRITTEN BY C.A.SENIOR (09/9/93) SLBDIF1A.27 CLL MODIFIED BY C.A.SENIOR (27/10/93) to include stability test SLBDIF1A.28 CLL MODIFIED BY C.A.SENIOR (14/12/93) to update to version 3.2 SLBDIF1A.29 CLL MODIFIED BY C.A.SENIOR (17/12/93) after review SLBDIF1A.30 CLL MODIFIED BY C.A.SENIOR (25/02/94) after further review SLBDIF1A.31 CLL VERSION NUMBER 1.1 SLBDIF1A.32 CLL REVIEWER: W.J.INGRAM SLBDIF1A.33 CLL SLBDIF1A.34 CLLEND--------------------------------------------------------------- SLBDIF1A.35 C SLBDIF1A.36SUBROUTINE SLABDIFF(SLABTEMP, 2SLBDIF1A.37 + OPENSEA, SLBDIF1A.38 + L1,L2, SLBDIF1A.39 + JROWS, SLBDIF1A.40 + ICOLS, SLBDIF1A.41 + AHDT, SLBDIF1A.42 + DELTA_LONG,DELTA_LAT,BASE_LAT, SLBDIF1A.43 + COS_P_LATITUDE,COS_U_LATITUDE,SEC_P_LATITUDE) SLBDIF1A.44 SLBDIF1A.45 INTEGER L1 ! IN SIZE OF DATA VECTORS SLBDIF1A.46 +,L2 ! IN AMOUNT OF DATA TO BE PROCESSED SLBDIF1A.47 +,JROWS ! IN NO OF ROWS N-S SLBDIF1A.48 +,ICOLS ! IN NO OF COLUMNS E-W SLBDIF1A.49 REAL SLBDIF1A.50 + SLABTEMP(ICOLS,JROWS) ! INOUT HEAT CONTENT OF THE SLAB SLBDIF1A.51 +,DT ! IN TIMESTEP FOR UPDATING SLAB MODEL SLBDIF1A.52 +,DELTA_LONG ! IN EW GRID SPACING (DEGREES) SLBDIF1A.53 +,DELTA_LAT ! IN NS GRID SPACING (DEGREES) SLBDIF1A.54 +,BASE_LAT ! IN LATITUDE OF FIRST ROW (DEGREES) SLBDIF1A.55 +,AHDT ! DIFFUSION COEFFICENT * TIMESTEP SLBDIF1A.56 C SLBDIF1A.57 REAL SLBDIF1A.58 + COS_U_LATITUDE(ICOLS,JROWS) ! COSINE OF LATITUDE ON U GRID SLBDIF1A.59 +,COS_P_LATITUDE(ICOLS,JROWS) ! COSINE OF LATITUDE ON P GRID SLBDIF1A.60 +,SEC_P_LATITUDE(ICOLS,JROWS) ! 1/COS_P_LATITUDE SLBDIF1A.61 C SLBDIF1A.62 LOGICAL SLBDIF1A.63 + OPENSEA(ICOLS,JROWS) ! IN TRUE IF BOX CONTAINS ICE FREE SEA SLBDIF1A.64 + ! POINTS, FALSE AT LAND/SEA_ICE POINTS SLBDIF1A.65 C SLBDIF1A.66 C Include Comdecks SLBDIF1A.67 *CALL C_A
SLBDIF1A.68 *CALL C_PI
SLBDIF1A.69 C SLBDIF1A.70 C Local variables SLBDIF1A.71 C SLBDIF1A.72 INTEGER SLBDIF1A.73 + ICOLSM1 ! ICOLS MINUS 1 SLBDIF1A.74 +,JROWSM1 ! JROWS MINUS 1. SLBDIF1A.75 +,J ! LOOPCOUNTER SLBDIF1A.76 +,I ! LOOPCOUNTER SLBDIF1A.77 REAL SLBDIF1A.78 + ZMASK(ICOLS,JROWS) ! MASK,1=OPEN SEA,0=LAND+SEA-ICE SLBDIF1A.79 +,DYT ! GRID SPACING N-S SLBDIF1A.80 +,DXT ! GRID SPACING E-W SLBDIF1A.81 +,DYTR ! 1/DYT SLBDIF1A.82 +,DXT2R ! 1/(2*DXT) SLBDIF1A.83 +,DIFFUS(ICOLS,JROWS) ! DIFFUSION INCREMENT SLBDIF1A.84 +,ROWCOEF ! COS WEIGHTED COEFF. E-W SLBDIF1A.85 +,COLCOEF_J ! COS WEIGHTED COEFF. N-S AT ROW J SLBDIF1A.86 +,COLCOEF_JM1 ! COS WEIGHTED COEFF. N-S AT ROW J-1 SLBDIF1A.87 +,TEMPA(ICOLS) ! E-W DIFUSION INCREMENTS SLBDIF1A.88 +,STABLT ! STABILITY COEFFICENT SLBDIF1A.89 C SLBDIF1A.90 PARAMETER ( STABLT= 0.1) ! STABILITY COEFFICIENT SLBDIF1A.91 C SLBDIF1A.92 C INITIALISE CONSTANTS. SLBDIF1A.93 C SLBDIF1A.94 JROWSM1 = JROWS-1 SLBDIF1A.95 ICOLSM1 = ICOLS-1 SLBDIF1A.96 C SLBDIF1A.97 C SET UP REAL OPEN SEA MASK AND EXCLUDE POLAR ROWS SLBDIF1A.98 C SLBDIF1A.99 DO J = 2,JROWSM1 SLBDIF1A.100 DO I = 1,ICOLS SLBDIF1A.101 IF ( OPENSEA(I,J) ) THEN SLBDIF1A.102 ZMASK(I,J) = 1.0 SLBDIF1A.103 ELSE SLBDIF1A.104 ZMASK(I,J) = 0.0 SLBDIF1A.105 ENDIF SLBDIF1A.106 ENDDO SLBDIF1A.107 ENDDO SLBDIF1A.108 DO I = 1,ICOLS SLBDIF1A.109 ZMASK(I,1) = 0 SLBDIF1A.110 ZMASK(I,JROWS) = 0 SLBDIF1A.111 ENDDO SLBDIF1A.112 C SLBDIF1A.113 C CALCULATE GRID SPACINGS IN RADIANS SLBDIF1A.114 C SLBDIF1A.115 C SLBDIF1A.116 DYT = DELTA_LAT * A / RECIP_PI_OVER_180 SLBDIF1A.117 DXT = DELTA_LONG * A / RECIP_PI_OVER_180 SLBDIF1A.118 DYTR = 1. / DYT SLBDIF1A.119 DXT2R = .5/DXT SLBDIF1A.120 C SLBDIF1A.121 C CALCULATE COEFFICIENTS SLBDIF1A.122 C SLBDIF1A.123 DO J = 2,JROWSM1 SLBDIF1A.124 ROWCOEF = 4.0 * AHDT * SEC_P_LATITUDE(1,J) SLBDIF1A.125 & * SEC_P_LATITUDE(1,J) * DXT2R SLBDIF1A.126 C SLBDIF1A.127 C CHECK STABILITY AND RESET ROWCOEF IF UNSTABLE SLBDIF1A.128 C SLBDIF1A.129 IF (ROWCOEF * DXT2R .GT. STABLT) ROWCOEF = STABLT / DXT2R SLBDIF1A.130 C SLBDIF1A.131 COLCOEF_J = AHDT * COS_U_LATITUDE(1,J) SLBDIF1A.132 & * DYTR * DYTR * SEC_P_LATITUDE(1,J) SLBDIF1A.133 COLCOEF_JM1 = AHDT * COS_U_LATITUDE(1,J-1) SLBDIF1A.134 & * DYTR * DYTR * SEC_P_LATITUDE(1,J) SLBDIF1A.135 C SLBDIF1A.136 C SLBDIF1A.137 C CALCULATE DIFFUSION INCREMENTS USING DEL2 SLBDIF1A.138 C SLBDIF1A.139 C 1. E-W INCREMENTS SLBDIF1A.140 C SLBDIF1A.141 DO I = 2,ICOLS SLBDIF1A.142 TEMPA(I) = DXT2R * ( SLABTEMP(I,J) - SLABTEMP(I-1,J) ) SLBDIF1A.143 END DO SLBDIF1A.144 TEMPA (1) = DXT2R * (SLABTEMP(1,J) - SLABTEMP(ICOLS,J) ) SLBDIF1A.145 C SLBDIF1A.146 C 2. ADD IN N-S INCREMENTS SLBDIF1A.147 C SLBDIF1A.148 DO I = 2,ICOLSM1 SLBDIF1A.149 DIFFUS(I,J) = ROWCOEF SLBDIF1A.150 & * ( ZMASK(I+1,J) * TEMPA(I+1) - ZMASK(I-1,J) * TEMPA(I)) SLBDIF1A.151 & + COLCOEF_J SLBDIF1A.152 & * ZMASK(I,J+1) * ( SLABTEMP(I,J+1) - SLABTEMP(I,J) ) SLBDIF1A.153 & + COLCOEF_JM1 SLBDIF1A.154 & * ZMASK(I,J-1) * ( SLABTEMP(I,J-1) - SLABTEMP(I,J) ) SLBDIF1A.155 END DO SLBDIF1A.156 C SLBDIF1A.157 C CALCULATE DIFFUSION INCREMENTS AT 1ST AND LAST COLUMNS SLBDIF1A.158 C SLBDIF1A.159 DIFFUS(1,J) = ROWCOEF SLBDIF1A.160 & * ( ZMASK(2,J) * TEMPA(2) - ZMASK(ICOLS,J) * TEMPA(1) ) SLBDIF1A.161 & + COLCOEF_J SLBDIF1A.162 & * ZMASK(1,J+1) * ( SLABTEMP(1,J+1) - SLABTEMP(1,J) ) SLBDIF1A.163 & + COLCOEF_JM1 SLBDIF1A.164 & * ZMASK(1,J-1) * ( SLABTEMP(1,J-1) - SLABTEMP(1,J) ) SLBDIF1A.165 C SLBDIF1A.166 DIFFUS(ICOLS,J) = ROWCOEF SLBDIF1A.167 & * ( ZMASK(1,J) * TEMPA(1) - ZMASK(ICOLSM1,J) * TEMPA(ICOLS)) SLBDIF1A.168 & + COLCOEF_J SLBDIF1A.169 & * ZMASK(ICOLS,J+1) * (SLABTEMP(ICOLS,J+1) SLBDIF1A.170 & -SLABTEMP(ICOLS,J)) SLBDIF1A.171 & + COLCOEF_JM1 SLBDIF1A.172 & * ZMASK(ICOLS,J-1) * (SLABTEMP (ICOLS,J-1) SLBDIF1A.173 & - SLABTEMP(ICOLS,J) ) SLBDIF1A.174 END DO SLBDIF1A.175 C SLBDIF1A.176 C ADD IN DIFFUSION INCREMENTS. SLBDIF1A.177 C MULTIPLY BY ZMASK SO DIFFUSION ONLY ADDED AT OPEN SEA POINTS SLBDIF1A.178 C DO NOT RESET POLAR ROWS TO MAINTAIN CONSERVANCY SLBDIF1A.179 C SLBDIF1A.180 DO J = 2,JROWSM1 SLBDIF1A.181 DO I = 1,ICOLS SLBDIF1A.182 SLABTEMP(I,J) = SLABTEMP(I,J) + DIFFUS(I,J) * ZMASK(I,J) SLBDIF1A.183 END DO SLBDIF1A.184 END DO SLBDIF1A.185 RETURN SLBDIF1A.186 END SLBDIF1A.187 *ENDIF SLBDIF1A.188