SUBROUTINE FIELD(ZK,VK,VR,KTX,KTY,IKTX,IKTY,N,N2,LWRK, 4,1
. FF1,FF2,FF3,WORK,TRIGS,IFAX,ZI,PXLIM,L,flag)
C
C CALCULATES VARIOUS FIELDS, E.G. STREAM FUNCTION, FOR LOOKING AT.
C
IMPLICIT NONE
INTEGER N,N2,LWRK,IFAX(10),KX,KY,PXLIM
INTEGER KTX,KTY,IKTX,IKTY,IKX,IKY,INKY
INTEGER L(PXLIM,IKTY),flag
C
REAL TRIGS(N), VR(N,N), WK
REAL WORK(LWRK)
REAL FF1(N2,N2),FF2(N2,N2),FF3(N2,N2)
COMPLEX ZK(IKTX,IKTY),ZI,VK(IKTX,IKTY)
EXTERNAL KR
C
c flag = 1 ---> calculate vorticity_z = dv/dx
c
if (flag.eq.1) then
DO IKX = 1, IKTX
KX = IKX-1
DO IKY = 1, IKTY
KY = IKY - KTY - 1
WK = MAX( FLOAT(KX*KX+KY*KY) ,0.001 )
VK(IKX,IKY) = L(IKX+KTX,IKY)*CMPLX(0.,1.)*KX*ZK(IKX,IKY)
enddo
end do
endif
C
C
c flag = 2 ---> calculate vorticity_x = -dv/dz
c
if (flag.eq.2) then
DO IKX = 1, IKTX
KX = IKX-1
DO IKY = 1, IKTY
KY = IKY - KTY - 1
WK = MAX( FLOAT(KX*KX+KY*KY) ,0.001 )
VK(IKX,IKY) = -L(IKX+KTX,IKY)*CMPLX(0.,1.)*KY*ZK(IKX,IKY)
enddo
enddo
endif
C
c
c flag = 3 ---> calculate u
c
if (flag.eq.3) then
DO IKX = 1, IKTX
KX = IKX-1
DO IKY = 1, IKTY
KY = IKY - KTY - 1
WK = MAX( FLOAT(KX*KX+KY*KY) ,0.001 )
VK(IKX,IKY) = +L(IKX+KTX,IKY)*CMPLX(0.,1.)*KY*ZK(IKX,IKY)/WK
enddo
enddo
endif
C
c
c flag = 4 ---> calculate w
c
if (flag.eq.4) then
DO IKX = 1, IKTX
KX = IKX-1
DO IKY = 1, IKTY
KY = IKY - KTY - 1
WK = MAX( FLOAT(KX*KX+KY*KY) ,0.001 )
VK(IKX,IKY) = -L(IKX+KTX,IKY)*CMPLX(0.,1.)*KX*ZK(IKX,IKY)/WK
enddo
enddo
endif
C
DO 15 IKY=1,KTY
KY = IKY - KTY - 1
INKY = - KY + KTY + 1
VK(1,IKY) = CONJG(VK(1,INKY))
15 CONTINUE
C
CALL KR
(VK,VR,KTX,KTY,IKTX,IKTY,N,N2,LWRK,
. FF1,FF2,FF3,WORK,TRIGS,IFAX,ZI)
C
RETURN
END