File indexing completed on 2018-03-02 18:44:41 UTC
view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
42c525bfb4 Alis*0001 #include "ZONAL_FILT_OPTIONS.h"
0002
e4b65e705c Jean*0003
0004
0005
0006
bc49b7aac9 Jean*0007 SUBROUTINE ZONAL_FILTER(
0008 U field,
0009 I fieldMask,
e4b65e705c Jean*0010 I jMin, jMax, kSize, bi, bj, gridLoc, myThid )
bc49b7aac9 Jean*0011
e4b65e705c Jean*0012
bc49b7aac9 Jean*0013
0014
0015
0016
0017
e4b65e705c Jean*0018
42c525bfb4 Alis*0019 IMPLICIT NONE
0020
0021 #include "SIZE.h"
d4c5f8fe62 Jean*0022 #include "EEPARAMS.h"
0023 #include "PARAMS.h"
0024 #include "GRID.h"
42c525bfb4 Alis*0025 #include "ZONAL_FILT.h"
0026 #include "FFTPACK.h"
0027
e4b65e705c Jean*0028
0029
42c525bfb4 Alis*0030
e4b65e705c Jean*0031
0032
0033
0034
0035
0036
0037 INTEGER kSize
0038 _RL field (1-OLx:sNx+OLx,1-OLy:sNy+OLy,kSize)
0039 _RS fieldMask(1-Olx:sNx+Olx,1-Oly:sNy+Oly,kSize)
0040 INTEGER jMin, jMax, bi, bj
bc49b7aac9 Jean*0041 INTEGER gridLoc
0042 INTEGER myThid
e4b65e705c Jean*0043
42c525bfb4 Alis*0044
0045 #ifdef ALLOW_ZONAL_FILT
0046
e4b65e705c Jean*0047
42c525bfb4 Alis*0048 Real*8 phi(Nx)
0049 Real*8 phiMask(Nx)
0050 Real*8 avPhi
e4b65e705c Jean*0051 INTEGER i, j, k
42c525bfb4 Alis*0052
e4b65e705c Jean*0053 DO k= 1, kSize
42c525bfb4 Alis*0054 DO j=jMin, jMax
d4c5f8fe62 Jean*0055 IF ( (gridLoc.EQ.1 .AND.ABS(yC(1,j,bi,bj)).GE.zonal_filt_lat)
0056 & .OR.(gridLoc.EQ.2 .AND.ABS(yG(2,j,bi,bj)).GE.zonal_filt_lat)
0057 & .OR. zonal_filt_mode2dx.EQ.2 ) THEN
42c525bfb4 Alis*0058
0059
0060 DO i=1,sNx
e4b65e705c Jean*0061 phi(i) = field(i,j,k)
0062 phiMask(i) = fieldMask(i,j,k)
42c525bfb4 Alis*0063 ENDDO
0064
0065
0066 CALL ZONAL_FILT_PRESMOOTH( phiMask,phi,avPhi,sNx,myThid )
0067
0068
0069
0070 CALL R8FFTF1( Nx, phi,
0071 & FFTPACKWS1(1,bj), FFTPACKWS2(1,bj),FFTPACKWS3(1,bj) )
0072
0073
0074 IF (gridLoc .EQ. 1) THEN
0075 DO i=1, Nx
0076 phi(i)=phi(i)*ampFactor(i,j,bi,bj)/float(Nx)
0077 ENDDO
0078 ELSEIF (gridLoc .EQ. 2) THEN
0079 DO i=1, Nx
0080 phi(i)=phi(i)*ampFactorV(i,j,bi,bj)/float(Nx)
0081 ENDDO
0082 ELSE
2cfc9d59a2 Patr*0083 WRITE(*,*) 'Error: gridLoc = ',gridLoc
42c525bfb4 Alis*0084 STOP 'Error: gridLoc has illegal value'
0085 ENDIF
0086
0087
0088
0089 CALL R8FFTB1( Nx, phi,
0090 & FFTPACKWS1(1,bj), FFTPACKWS2(1,bj),FFTPACKWS3(1,bj) )
0091
0092
0093 CALL ZONAL_FILT_POSTSMOOTH(phiMask,phi,avPhi,sNx,myThid)
0094
0095
0096 DO i=1-OLx,0
e4b65e705c Jean*0097 field(i,j,k) = phi(sNx+i)
42c525bfb4 Alis*0098 ENDDO
0099 DO i=1,sNx
e4b65e705c Jean*0100 field(i,j,k) = phi(i)
42c525bfb4 Alis*0101 ENDDO
0102 DO i=sNx+1,sNx+OLx
e4b65e705c Jean*0103 field(i,j,k) = phi(i-sNx)
42c525bfb4 Alis*0104 ENDDO
0105
d4c5f8fe62 Jean*0106 ENDIF
42c525bfb4 Alis*0107 ENDDO
0108 ENDDO
0109
0110 #endif /* ALLOW_ZONAL_FILT */
0111
0112 RETURN
0113 END