*IF DEF,OCEAN TROPFC2A.2
*IF -DEF,T3E,OR,-DEF,MPP TROPFC2A.3
C *****************************COPYRIGHT****************************** TROPFC2A.4
C (c) CROWN COPYRIGHT 1998, METEOROLOGICAL OFFICE, All Rights Reserved. TROPFC2A.5
C TROPFC2A.6
C Use, duplication or disclosure of this code is subject to the TROPFC2A.7
C restrictions as set forth in the contract. TROPFC2A.8
C TROPFC2A.9
C Meteorological Office TROPFC2A.10
C London Road TROPFC2A.11
C BRACKNELL TROPFC2A.12
C Berkshire UK TROPFC2A.13
C RG12 2SZ TROPFC2A.14
C TROPFC2A.15
C If no contract has been raised with this copy of the code, the use, TROPFC2A.16
C duplication or disclosure of it is strictly prohibited. Permission TROPFC2A.17
C to do so must first be obtained in writing from the Head of Numerical TROPFC2A.18
C Modelling at the above address. TROPFC2A.19
C ******************************COPYRIGHT****************************** TROPFC2A.20
SUBROUTINE TFILT_CTL( 1,5TROPFC2A.21
*CALL ARGSIZE
TROPFC2A.22
*CALL ARGOCALL
TROPFC2A.23
*CALL ARGOINDX
TROPFC2A.24
& UBTA,VBTA,ETAA, TROPFC2A.25
*CALL COCAWRKA
TROPFC2A.26
& ) TROPFC2A.27
! TROPFC2A.28
! TROPFC2A.29
! Description: This subroutine is intended to provide an interface TROPFC2A.30
! to the calling of the Ocean model Fourier Filtering subroutine TROPFC2A.31
! OFILTR when called from TROPIC for the purposes of filtering TROPFC2A.32
! arrays used by the Free Surface scheme. TROPFC2A.33
! This version is the non-mpp version. TROPFC2A.34
! TROPFC2A.35
! TROPFC2A.36
! Author: R. Hill TROPFC2A.37
! TROPFC2A.38
! Date : April 1998 TROPFC2A.39
! TROPFC2A.40
! Modification History: TROPFC2A.41
! TROPFC2A.42
! Date Name Description TROPFC2A.43
! ------ --------- ---------------------------------------- TROPFC2A.44
!******************************************************************** TROPFC2A.45
TROPFC2A.46
IMPLICIT NONE TROPFC2A.47
TROPFC2A.48
*CALL OARRYSIZ
TROPFC2A.49
*CALL TYPSIZE
TROPFC2A.50
*CALL TYPOINDX
PXORDER.53
*CALL TYPOCALL
TROPFC2A.51
*CALL COCTWRKA
TROPFC2A.53
*CALL CNTLOCN
TROPFC2A.54
*CALL UMSCALAR
TROPFC2A.55
*CALL OTIMER
TROPFC2A.56
*CALL TROPFILT
TROPFC2A.57
TROPFC2A.58
INTEGER I,J,L TROPFC2A.59
& ,IS,IE,ISAVE ! \ TROPFC2A.60
& ,IEAVE,IREDO ! local scalars used in TROPFC2A.61
& ,IEA,IEB,ISM1 ! fourier filtering TROPFC2A.62
& ,JJ,IM,M,N,II ! / TROPFC2A.63
TROPFC2A.64
REAL ETAA(IMT,JMT) ! eta for next timestep TROPFC2A.65
& ,UBTA(IMT,JMTM1) ! x-comp of barot vely next t step TROPFC2A.66
& ,VBTA(IMT,JMTM1) ! y-comp of barot vely next t step TROPFC2A.67
& ,UBTDIF(IMT) ! temp array used in filtering TROPFC2A.68
& ,VBTDIF(IMT) ! temp array used in filtering TROPFC2A.69
& ,ETADIF(IMT) ! temp array used in filtering TROPFC2A.70
& ,FTARR(IMTIMT_FLT) ! coef used in filtering routine TROPFC2A.71
& ,FX ! local constant TROPFC2A.72
TROPFC2A.73
TROPFC2A.74
DO J = 1, JMTM2 TROPFC2A.75
IF ((J.GT.JFU1.AND.J.LT.JFU2).OR. TROPFC2A.76
& J.LT.JFRST) GOTO 840 TROPFC2A.77
TROPFC2A.78
JJ=J-JFRST+1 TROPFC2A.79
IF (J.GE.JFU2) JJ=JJ-JSKPU+1 TROPFC2A.80
TROPFC2A.81
C TROPFC2A.82
C IF PREVIOUS STRIPS WERE OF SAME LENGTH, DONT RECOMPUTE FOURIER COEFFS TROPFC2A.83
C TROPFC2A.84
ISAVE=0 TROPFC2A.85
IEAVE=0 TROPFC2A.86
TROPFC2A.87
IS = 0 TROPFC2A.88
IE = 0 TROPFC2A.89
C TROPFC2A.90
C CALCULATE FX TO DETERMINE THE HEMISPHERE IN WHICH THE FILTERING IS TROPFC2A.91
C BEING CONDUCTED. NOTE THIS TEST ONLY APPLIES TO FILTERING AREAS AWAY TROPFC2A.92
C FROM THE EQUATOR. TROPFC2A.93
C TROPFC2A.94
FX=-1.0 TROPFC2A.95
IF (J.GT.(0.5*JMT_GLOBAL)) THEN TROPFC2A.96
FX=1.0 TROPFC2A.97
ENDIF TROPFC2A.98
TROPFC2A.99
DO L = 1, LSEGF ! Over each segment in this row TROPFC2A.100
C TROPFC2A.101
C THE BAROTROPIC VELOCITIES ARE CALCULATED ON THE SAME GRID AS THE TROPFC2A.102
C BAROCLINIC VELOCITES AND THEREFORE IT IS POSSIBLE TO USE THE SAME TROPFC2A.103
C INDICIES. FOR THE BT VELYS ONLY THE TOP LEVEL INDICIES ARE REQUIRED. TROPFC2A.104
C TROPFC2A.105
TROPFC2A.106
IF (ISUF(JJ,L,1).EQ.0) GO TO 730 TROPFC2A.107
IS=ISUF(JJ,L,1) TROPFC2A.108
IE=IEUF(JJ,L,1) TROPFC2A.109
IREDO=1 TROPFC2A.110
IF (IS.NE.ISAVE .OR. IE.NE.IEAVE) THEN TROPFC2A.111
IREDO=0 TROPFC2A.112
IM=IE-IS+1 TROPFC2A.113
ISAVE=IS TROPFC2A.114
IEAVE=IE TROPFC2A.115
C TROPFC2A.116
C THE FOLLOWING TEST IS STILL REQUIRED TO CHECK FOR TYPE OF FILTER TROPFC2A.117
C REQUIRED. TROPFC2A.118
C TROPFC2A.119
IF (.NOT.(L_OCYCLIC)) THEN TROPFC2A.120
M=2 TROPFC2A.121
N=NINT(IM*CS(J)*CSR_JFU0) TROPFC2A.122
ELSE TROPFC2A.123
IF (IM.NE.IMTM2) THEN TROPFC2A.124
M=2 TROPFC2A.125
N=NINT(IM*CS(J)*CSR_JFU0) TROPFC2A.126
ELSE TROPFC2A.127
M=3 TROPFC2A.128
N=NINT(IM*CS(J)*CSR_JFU0*.5) TROPFC2A.129
ENDIF TROPFC2A.130
ENDIF TROPFC2A.131
ENDIF TROPFC2A.132
TROPFC2A.133
ISM1=IS-1 TROPFC2A.134
IEA=IE TROPFC2A.135
IF (IE.GE.IMU) THEN TROPFC2A.136
IEA=IMUM1 TROPFC2A.137
ENDIF TROPFC2A.138
TROPFC2A.139
DO I=IS,IEA TROPFC2A.140
UBTDIF(I-ISM1)=-FX*UBTA(I,J)*SPSIN(I) TROPFC2A.141
& -VBTA(I,J)*SPCOS(I) TROPFC2A.142
VBTDIF(I-ISM1)= FX*UBTA(I,J)*SPCOS(I) TROPFC2A.143
& -VBTA(I,J)*SPSIN(I) TROPFC2A.144
ENDDO TROPFC2A.145
TROPFC2A.146
IF (IE.GE.IMU)THEN TROPFC2A.147
IEB=IE-IMUM2 TROPFC2A.148
II=IMUM1-IS TROPFC2A.149
DO I=2,IEB TROPFC2A.150
UBTDIF(I+II)=-FX*UBTA(I,J)*SPSIN(I) TROPFC2A.151
& -VBTA(I,J)*SPCOS(I) TROPFC2A.152
VBTDIF(I+II)= FX*UBTA(I,J)*SPCOS(I) TROPFC2A.153
& -VBTA(I,J)*SPSIN(I) TROPFC2A.154
ENDDO TROPFC2A.155
ENDIF TROPFC2A.156
TROPFC2A.157
TROPFC2A.158
CALL FILTR
( TROPFC2A.159
*CALL ARGSIZE
TROPFC2A.160
*CALL ARGOCFIL
TROPFC2A.161
& FTARR, TROPFC2A.162
& UBTDIF,IM,M,N,IREDO) ! #################### TROPFC2A.163
TROPFC2A.164
CALL FILTR
( TROPFC2A.165
*CALL ARGSIZE
TROPFC2A.166
*CALL ARGOCFIL
TROPFC2A.167
& FTARR, TROPFC2A.168
& VBTDIF,IM,M,N,1) ! ######################## TROPFC2A.169
TROPFC2A.170
DO I=IS,IEA TROPFC2A.171
UBTA(I,J)=FX*(-UBTDIF(I-ISM1)*SPSIN(I) TROPFC2A.172
* +VBTDIF(I-ISM1)*SPCOS(I)) TROPFC2A.173
VBTA(I,J)=-UBTDIF(I-ISM1)*SPCOS(I) TROPFC2A.174
* -VBTDIF(I-ISM1)*SPSIN(I) TROPFC2A.175
ENDDO TROPFC2A.176
TROPFC2A.177
IF (IE.GE.IMT) THEN TROPFC2A.178
DO I=2,IEB TROPFC2A.179
UBTA(I,J)=FX*(-UBTDIF(I+II)*SPSIN(I) TROPFC2A.180
* +VBTDIF(I+II)*SPCOS(I)) TROPFC2A.181
VBTA(I,J)=-UBTDIF(I+II)*SPCOS(I) TROPFC2A.182
* -VBTDIF(I+II)*SPSIN(I) TROPFC2A.183
ENDDO TROPFC2A.184
ENDIF TROPFC2A.185
TROPFC2A.186
730 CONTINUE TROPFC2A.187
TROPFC2A.188
ENDDO ! Over L TROPFC2A.189
TROPFC2A.190
840 CONTINUE ! For GOTO when row is not to be filtered TROPFC2A.191
TROPFC2A.192
ENDDO ! Over J TROPFC2A.193
C TROPFC2A.194
C----------------------------------------------------------------------- TROPFC2A.195
C FOURIER FILTER ETA AT HIGH LATITUDES TROPFC2A.196
C FOURIER FILTERING INDEXES TAKE ACCOUNT OF LAND WHEN L_OSKIPLND = t. TROPFC2A.197
C----------------------------------------------------------------------- TROPFC2A.198
C TROPFC2A.199
TROPFC2A.200
DO J = 1, JMTM1 TROPFC2A.201
IF ((J.GT.JFT1.AND.J.LT.JFT2).OR. TROPFC2A.202
& J.LT.JFRST) GOTO 1840 TROPFC2A.203
TROPFC2A.204
JJ=J-JFRST+1 TROPFC2A.205
IF (J.GE.JFT2) JJ=JJ-JSKPT+1 TROPFC2A.206
C TROPFC2A.207
C IF PREVIOUS STRIPS WERE OF SAME LENGTH, DONT RECOMPUTE FOURIER COEFFS TROPFC2A.208
C TROPFC2A.209
ISAVE=0 TROPFC2A.210
IEAVE=0 TROPFC2A.211
TROPFC2A.212
IS = 0 TROPFC2A.213
IE = 0 TROPFC2A.214
DO L = 1,LSEGF ! Over each segment in this row TROPFC2A.215
TROPFC2A.216
! SINCE ETA IS CALCULATED ON THE TOP TRACER GRID IT IS THEREFORE TROPFC2A.217
! POSSIBLE TO USE THE START AND END INDICIES ALREADY CREATED FOR THE TROPFC2A.218
! TRACERS IN FINDEX. NOTE ONLY THE TOP LEVEL VALUES ARE REQUIRED. TROPFC2A.219
TROPFC2A.220
IF(ISTF(JJ,L,1).EQ.0) GO TO 1135 TROPFC2A.221
IS=ISTF(JJ,L,1) TROPFC2A.222
IE=IETF(JJ,L,1) TROPFC2A.223
IREDO=1 TROPFC2A.224
IF (IS.NE.ISAVE .OR. IE.NE.IEAVE) THEN TROPFC2A.225
IREDO=0 TROPFC2A.226
ISAVE=IS TROPFC2A.227
IEAVE=IE TROPFC2A.228
IM=IE-IS+1 TROPFC2A.229
ENDIF TROPFC2A.230
TROPFC2A.231
! IT IS REQUIRED THAT ETA IS ALWAYS FILTERED USING THE COS SOLUTION TROPFC2A.232
! AND THEREFORE THIS REQUIRES THE VALUE FOR M TO BE SET TO 1. TROPFC2A.233
TROPFC2A.234
M=1 TROPFC2A.235
N=NINT(IM*CST(J)*CSTR_JFT0) TROPFC2A.236
TROPFC2A.237
! SET UP INDICES AND ARRAYS TROPFC2A.238
TROPFC2A.239
ISM1=IS-1 TROPFC2A.240
IEA=IE TROPFC2A.241
IF (IE.GE.IMT) THEN TROPFC2A.242
IEA=IMTM1 TROPFC2A.243
ENDIF TROPFC2A.244
TROPFC2A.245
DO I=IS,IEA TROPFC2A.246
ETADIF(I-ISM1)=ETAA(I,J) TROPFC2A.247
ENDDO TROPFC2A.248
TROPFC2A.249
IF (IE.GE.IMT) THEN TROPFC2A.250
IEB=IE-IMTM2 TROPFC2A.251
II=IMTM1-IS TROPFC2A.252
DO I=2,IEB TROPFC2A.253
ETADIF(I+II)=ETAA(I,J) TROPFC2A.254
ENDDO TROPFC2A.255
ENDIF TROPFC2A.256
TROPFC2A.257
CALL FILTR
( TROPFC2A.258
*CALL ARGSIZE
TROPFC2A.259
*CALL ARGOCFIL
TROPFC2A.260
& FTARR, ETADIF,IM,M,N,IREDO) TROPFC2A.261
TROPFC2A.262
DO I=IS,IEA TROPFC2A.263
ETAA(I,J)=ETADIF(I-ISM1) TROPFC2A.264
ENDDO TROPFC2A.265
TROPFC2A.266
IF (IE.GE.IMT) THEN TROPFC2A.267
DO I=2,IEB TROPFC2A.268
ETAA(I,J)=ETADIF(I+II) TROPFC2A.269
ENDDO TROPFC2A.270
ENDIF TROPFC2A.271
TROPFC2A.272
1135 CONTINUE TROPFC2A.273
ENDDO ! Over L TROPFC2A.274
1840 CONTINUE ! For GOTO when row is not to be filtered TROPFC2A.275
ENDDO ! Over J TROPFC2A.276
C TROPFC2A.277
RETURN TROPFC2A.278
END TROPFC2A.279
*ENDIF TROPFC2A.280
*ENDIF TROPFC2A.281