/[MITgcm]/MITgcm/model/src/impldiff.F
ViewVC logotype

Contents of /MITgcm/model/src/impldiff.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.4 - (show annotations) (download)
Tue Jun 16 15:20:08 1998 UTC (25 years, 10 months ago) by adcroft
Branch: MAIN
CVS Tags: checkpoint11, checkpoint10, checkpoint13, checkpoint9, checkpoint8, checkpoint12, branch-point-rdot
Branch point for: branch-rdot
Changes since 1.3: +15 -15 lines
E-implemented the theta* and salt* time-stepping scheme.
We did this so that theta/salt/u/v would all be at the same
time-level at the end of dynamics() to make I/O easier.

1 C $Header: /u/gcmpack/models/MITgcmUV/model/src/impldiff.F,v 1.3 1998/06/10 16:05:39 adcroft Exp $
2
3 #include "CPP_EEOPTIONS.h"
4
5 C /==========================================================\
6 C | S/R IMPLDIFF |
7 C | o Step model fields forward in time |
8 C \==========================================================/
9 SUBROUTINE IMPLDIFF( bi, bj, iMin, iMax, jMin, jMax,
10 I KappaZT,KappaZS,
11 I myThid )
12 implicit none
13 ! Common
14 #include "SIZE.h"
15 #include "DYNVARS.h"
16 #include "EEPARAMS.h"
17 #include "PARAMS.h"
18 #include "GRID.h"
19 C == Routine Arguments ==
20 INTEGER bi,bj,iMin,iMax,jMin,jMax
21 _RL KappaZT(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nz)
22 _RL KappaZS(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nz)
23 INTEGER myThid
24 C == Local variables ==
25 INTEGER i,j,k
26 _RL a(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
27 _RL b(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
28 _RL c(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
29 _RL ckm1(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
30 _RL bet(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
31 _RL gam(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nz)
32
33 C ***************************************************************
34 C ***************** ****************
35 C ***************** N O T E ****************
36 C ***************** ****************
37 C ***************************************************************
38 C
39 C The implicit diffusion of SALT currently uses the diffusivity
40 C of the THETA.
41 C ie. KappaZS is ignored.
42 C
43 C This is only a temporary situation. We appreciate your
44 C patience and understanding.
45 C
46 C Signed, The Management.
47 C
48 C ***************************************************************
49 C ***************************************************************
50
51 IF (Nz.GT.1) THEN ! Only need do anything if Nz>1
52 C Beginning of forward sweep (top level)
53 DO j=jMin,jMax
54 DO i=iMin,iMax
55 c(i,j)=-deltaTtracer*_rhFacC(i,j,1,bi,bj)*rdzF(1)
56 & *KappaZT(i,j,2)*rdzC(2)
57 b(i,j)=1.-c(i,j)
58 bet(i,j)=0.
59 IF (b(i,j).NE.0.) bet(i,j)=1. / b(i,j)
60 gTnm1(i,j,1,bi,bj)=gTnm1(i,j,1,bi,bj)*bet(i,j)
61 gSnm1(i,j,1,bi,bj)=gSnm1(i,j,1,bi,bj)*bet(i,j)
62 ENDDO
63 ENDDO
64 ENDIF
65 C Middle of forward sweep
66 IF (Nz.GT.2) THEN
67 DO k=2,Nz-1
68 DO j=jMin,jMax
69 DO i=iMin,iMax
70 ckm1(i,j)=c(i,j)
71 a(i,j)=-deltaTtracer*_rhFacC(i,j,k,bi,bj)*rdzF(k)
72 & *KappaZT(i,j, k )*rdzC( k )
73 c(i,j)=-deltaTtracer*_rhFacC(i,j,k,bi,bj)*rdzF(k)
74 & *KappaZT(i,j,k+1)*rdzC(k+1)
75 b(i,j)=1.-c(i,j)-a(i,j)
76 ENDDO
77 ENDDO
78 DO j=jMin,jMax
79 DO i=iMin,iMax
80 gam(i,j,k)=ckm1(i,j)*bet(i,j)
81 bet(i,j)=b(i,j)-a(i,j)*gam(i,j,k)
82 IF (bet(i,j).NE.0.) bet(i,j)=1. / bet(i,j)
83 gTnm1(i,j,k,bi,bj)=(gTnm1(i,j,k,bi,bj)
84 & -a(i,j)*gTnm1(i,j,k-1,bi,bj))*bet(i,j)
85 gSnm1(i,j,k,bi,bj)=(gSnm1(i,j,k,bi,bj)
86 & -a(i,j)*gSnm1(i,j,k-1,bi,bj))*bet(i,j)
87 ENDDO
88 ENDDO
89 ENDDO
90 ENDIF
91 IF (Nz.GT.1) THEN
92 C End of forward sweep (bottom level)
93 DO j=jMin,jMax
94 DO i=iMin,iMax
95 ckm1(i,j)=c(i,j)
96 a(i,j)=-deltaTtracer*_rhFacC(i,j,Nz,bi,bj)*rdzF(Nz)
97 & *KappaZT(i,j, Nz )*rdzC( Nz )
98 b(i,j)=1.-a(i,j)
99 ENDDO
100 ENDDO
101 DO j=jMin,jMax
102 DO i=iMin,iMax
103 gam(i,j,Nz)=ckm1(i,j)*bet(i,j)
104 bet(i,j)=b(i,j)-a(i,j)*gam(i,j,Nz)
105 IF (bet(i,j).NE.0.) bet(i,j)=1. / bet(i,j)
106 gTnm1(i,j,Nz,bi,bj)=(gTnm1(i,j,Nz,bi,bj)
107 & -a(i,j)*gTnm1(i,j,Nz-1,bi,bj))*bet(i,j)
108 gSnm1(i,j,Nz,bi,bj)=(gSnm1(i,j,Nz,bi,bj)
109 & -a(i,j)*gSnm1(i,j,Nz-1,bi,bj))*bet(i,j)
110 ENDDO
111 ENDDO
112 C Backward sweep
113 DO k=Nz-1,1,-1
114 DO j=jMin,jMax
115 DO i=iMin,iMax
116 gTnm1(i,j,k,bi,bj)=gTnm1(i,j,k,bi,bj)
117 & -gam(i,j,k+1)*gTnm1(i,j,k+1,bi,bj)
118 gSnm1(i,j,k,bi,bj)=gSnm1(i,j,k,bi,bj)
119 & -gam(i,j,k+1)*gSnm1(i,j,k+1,bi,bj)
120 ENDDO
121 ENDDO
122 ENDDO
123 ENDIF
124
125 RETURN
126 END

  ViewVC Help
Powered by ViewVC 1.1.22