SUBROUTINE LININC(JX) 5,6
C
C TANGENT LINEAR MODEL OF THE 2D BOUSSINESQ EQUATIONS
C
IMPLICIT NONE
INCLUDE 'champ.cdk'
INCLUDE 'chinc.cdk'
C
COMPLEX TERMZ,TERMS,TZ,TS,AVZ,AVS
C
REAL DMZ,DMS,DPZ,DPS,WKK,KX,JX
C
C
EXTERNAL CONLIN,SPEC,FIELD,COUTLI
NT = 0
JX = 0.
DO IKX=1,IKTX
DO IKY=1,IKTY
IF (L(IKX+KTX,IKY).NE.1) THEN
ZO(IKX,IKY) = 0.0
SO(IKX,IKY) = 0.0
ENDIF
ENDDO
ENDDO
C
C FIRST TIMESTEP
C
IF(NSTOP+2.GT.NTRAJ) THEN
PRINT*,'NSTOP+2.GT.NTRAJ'
PRINT*,'NSTOP,NTRAJ',NSTOP,NTRAJ
STOP
ENDIF
DO IKX=1,IKTX
DO IKY=1,IKTY
ZT(IKX,IKY)=ZTRAJ(IKX,IKY,1)
ST(IKX,IKY)=STRAJ(IKX,IKY,1)
ZTRA2(IKX,IKY,1)=ZO(IKX,IKY)
STRA2(IKX,IKY,1)=SO(IKX,IKY)
ENDDO
ENDDO
IF(JXFLAG.EQ.1) THEN
NT = -1
CALL COUTLI
(ZO,SO,JX)
ENDIF
NT = 1
C---------------------------------------------------------
CALL CONLIN
(ZO,SO,NZK,NSK,IKTX,IKTY,KTX,KTY,
. N,N2,L,PXLIM,LWRK,WORK,TRIGS,IFAX,
. FF1,FF2,FF3,UK,WK,UR,WR,ZR,SR,NZR,NSR,ZI,
. ZT,ST,NTR,NTK,U0)
C---------------------------------------------------------
DO 20 IKX=1,IKTX
KX = IKX-1
DO 20 IKY=1,IKTY
IF ( L(IKX+KTX,IKY).NE.1 ) GO TO 20
WKK = WN(IKX+KTX,IKY)
TERMZ = NZK(IKX,IKY)
. + BE*ZI*KX*ZO(IKX,IKY)/WKK
TERMS = NSK(IKX,IKY)
C
RHZ(IKX,IKY) = TERMZ
RHS(IKX,IKY) = TERMS
ZN(IKX,IKY) = ZO(IKX,IKY) + DELT*TERMZ
SN(IKX,IKY) = SO(IKX,IKY) + DELT*TERMS
20 CONTINUE
C
DO IKX=1,IKTX
DO IKY=1,IKTY
ZT(IKX,IKY)=ZTRAJ(IKX,IKY,2)
ST(IKX,IKY)=STRAJ(IKX,IKY,2)
ZTRA2(IKX,IKY,2)=ZN(IKX,IKY)
STRA2(IKX,IKY,2)=SN(IKX,IKY)
ENDDO
ENDDO
C---------------------------------------------------------
CALL CONLIN
(ZN,SN,NZK,NSK,IKTX,IKTY,KTX,KTY,
. N,N2,L,PXLIM,LWRK,WORK,TRIGS,IFAX,
. FF1,FF2,FF3,UK,WK,UR,WR,ZR,SR,NZR,NSR,ZI,
. ZT,ST,NTR,NTK,U0)
C---------------------------------------------------------
c
C
DO 30 IKX=1,IKTX
KX = IKX-1
DO 30 IKY=1,IKTY
IF ( L(IKX+KTX,IKY).NE.1 ) GO TO 30
WKK = WN(IKX+KTX,IKY)
TERMZ = NZK(IKX,IKY)
. + BE*ZI*KX*ZN(IKX,IKY)/WKK
TERMS = NSK(IKX,IKY)
ZN(IKX,IKY)=ZO(IKX,IKY)+DELT*(TERMZ+RHZ(IKX,IKY))/2.
SN(IKX,IKY)=SO(IKX,IKY)+DELT*(TERMS+RHS(IKX,IKY))/2.
30 CONTINUE
DO IKX=1,IKTX
DO IKY=1,IKTY
ZT(IKX,IKY)=ZTRAJ(IKX,IKY,3)
ST(IKX,IKY)=STRAJ(IKX,IKY,3)
ZTRA2(IKX,IKY,3)=ZN(IKX,IKY)
STRA2(IKX,IKY,3)=SN(IKX,IKY)
ENDDO
ENDDO
IF(JXFLAG.EQ.1) THEN
CALL COUTLI
(ZN,SN,JX)
ENDIF
C
C SUBSEQUENT TIMESTEPS
C
DO 50 NT=2,NSTOP
C
C---------------------------------------------------------
CALL CONLIN
(ZN,SN,NZK,NSK,IKTX,IKTY,KTX,KTY,
. N,N2,L,PXLIM,LWRK,WORK,TRIGS,IFAX,
. FF1,FF2,FF3,UK,WK,UR,WR,ZR,SR,NZR,NSR,ZI,
. ZT,ST,NTR,NTK,U0)
C---------------------------------------------------------
c
DO 40 IKX=1,IKTX
KX = IKX-1
DO 40 IKY=1,IKTY
WKK = WN(IKX+KTX,IKY)
IF ( L(IKX+KTX,IKY).NE.1 ) GO TO 40
TERMZ = NZK(IKX,IKY)
. + BE*ZI*KX*ZN(IKX,IKY)/WKK
TERMS = NSK(IKX,IKY)
C
DPZ = 1.+NU(IKX,IKY) *DELT
DMZ = 1.-NU(IKX,IKY) *DELT
DPS = 1.+GAMMA(IKX,IKY)*DELT
DMS = 1.-GAMMA(IKX,IKY)*DELT
TZ = ( ZO(IKX,IKY)*DMZ + D2*TERMZ )/DPZ
TS = ( SO(IKX,IKY)*DMS + D2*TERMS )/DPS
C
AVZ = ZN(IKX,IKY) + ROBERT* (TZ -
. 2.*ZN(IKX,IKY) + ZO(IKX,IKY))
AVS = SN(IKX,IKY) + ROBERT* (TS -
. 2.*SN(IKX,IKY) + SO(IKX,IKY))
C
ZO(IKX,IKY) = AVZ
SO(IKX,IKY) = AVS
ZN(IKX,IKY) = TZ
SN(IKX,IKY) = TS
40 CONTINUE
C
C
C
DO IKX=1,IKTX
DO IKY=1,IKTY
ZT(IKX,IKY)=ZTRAJ(IKX,IKY,NT+2)
ST(IKX,IKY)=STRAJ(IKX,IKY,NT+2)
ZTRA2(IKX,IKY,NT+2)=ZN(IKX,IKY)
STRA2(IKX,IKY,NT+2)=SN(IKX,IKY)
ENDDO
ENDDO
IF(JXFLAG.EQ.1) THEN
CALL COUTLI
(ZN,SN,JX)
ENDIF
50 CONTINUE
RETURN
END