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

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

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


Revision 1.12 - (hide annotations) (download)
Mon Nov 13 16:30:32 2000 UTC (23 years, 7 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint32
Changes since 1.11: +81 -99 lines
Changed 2d intermediate fields to 3d to reduce TAMC storage.

1 heimbach 1.11 C $Header: /u/gcmpack/models/MITgcmUV/model/src/impldiff.F,v 1.10 2000/06/12 13:38:50 heimbach Exp $
2 adcroft 1.1
3 cnh 1.7 #include "CPP_OPTIONS.h"
4 adcroft 1.1
5     C /==========================================================\
6     C | S/R IMPLDIFF |
7 cnh 1.5 C | o Solve implicit diffusion equation for vertical |
8     C | diffusivity. |
9 adcroft 1.1 C \==========================================================/
10     SUBROUTINE IMPLDIFF( bi, bj, iMin, iMax, jMin, jMax,
11 adcroft 1.8 I deltaTX,KappaRX,recip_hFac,
12     U gXNm1,
13 adcroft 1.1 I myThid )
14 cnh 1.5 IMPLICIT NONE
15     C == Global data ==
16 adcroft 1.1 #include "SIZE.h"
17     #include "DYNVARS.h"
18 cnh 1.2 #include "EEPARAMS.h"
19 adcroft 1.1 #include "PARAMS.h"
20     #include "GRID.h"
21 cnh 1.5
22 heimbach 1.9 #ifdef ALLOW_AUTODIFF_TAMC
23     #include "tamc_keys.h"
24     #endif
25    
26 adcroft 1.1 C == Routine Arguments ==
27     INTEGER bi,bj,iMin,iMax,jMin,jMax
28 adcroft 1.8 _RL deltaTX
29     _RL KappaRX(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
30     _RS recip_hFac(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy)
31     _RL gXnm1(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy)
32 heimbach 1.12 _RL gYnm1(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy)
33 adcroft 1.1 INTEGER myThid
34 cnh 1.5
35 adcroft 1.1 C == Local variables ==
36     INTEGER i,j,k
37 heimbach 1.12 _RL a(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
38     _RL b(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
39     _RL c(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
40     _RL bet(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
41 cnh 1.6 _RL gam(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
42 adcroft 1.1
43 heimbach 1.9 #ifdef ALLOW_AUTODIFF_TAMC
44     INTEGER kkey
45     #endif
46    
47 heimbach 1.12 C-- Initialise
48    
49     C-- Old aLower
50     DO j=1-Oly,sNy+Oly
51     DO i=1-Olx,sNx+Olx
52     a(i,j,1) = 0. _d 0
53     ENDDO
54     ENDDO
55     DO k=2,Nr
56     DO j=1-Oly,sNy+Oly
57     DO i=1-Olx,sNx+Olx
58     a(i,j,k) = -deltaTX*recip_hFac(i,j,k,bi,bj)*recip_drF(k)
59     & *KappaRX(i,j, k )*recip_drC( k )
60     ENDDO
61     ENDDO
62     ENDDO
63    
64     C-- Old aUpper
65     DO k=1,Nr-1
66     DO j=1-Oly,sNy+Oly
67     DO i=1-Olx,sNx+Olx
68     c(i,j,k) = -deltaTX*recip_hFac(i,j,k,bi,bj)*recip_drF(k)
69     & *KappaRX(i,j,k+1)*recip_drC(k+1)
70     ENDDO
71     ENDDO
72     ENDDO
73     DO j=1-Oly,sNy+Oly
74     DO i=1-Olx,sNx+Olx
75     c(i,j,Nr) = 0. _d 0
76     ENDDO
77     ENDDO
78    
79     C-- Old aCenter
80     DO k=1,Nr
81     DO j=1-Oly,sNy+Oly
82     DO i=1-Olx,sNx+Olx
83     b(i,j,k) = 1. _d 0 - c(i,j,k) - a(i,j,k)
84     ENDDO
85     ENDDO
86     ENDDO
87    
88     C-- Old and new gam, bet are the same
89     DO k=1,Nr
90     DO j=1-Oly,sNy+Oly
91     DO i=1-Olx,sNx+Olx
92     bet(i,j,k) = 0. _d 0
93     gam(i,j,k) = 0. _d 0
94     ENDDO
95     ENDDO
96     ENDDO
97    
98 heimbach 1.10 C-- Only need do anything if Nr>1
99     IF (Nr.GT.1) THEN
100    
101 heimbach 1.12 k = 1
102 cnh 1.5 C-- Beginning of forward sweep (top level)
103 adcroft 1.1 DO j=jMin,jMax
104     DO i=iMin,iMax
105 heimbach 1.12 IF (b(i,j,1).NE.0.) bet(i,j,1) = 1. _d 0 / b(i,j,1)
106 adcroft 1.1 ENDDO
107     ENDDO
108 heimbach 1.10
109 adcroft 1.1 ENDIF
110 heimbach 1.9
111 cnh 1.5 C-- Middle of forward sweep
112 cnh 1.6 IF (Nr.GT.2) THEN
113 heimbach 1.10
114 heimbach 1.12 CADJ loop = sequential
115     DO k=2,Nr
116 heimbach 1.9
117     #ifdef ALLOW_AUTODIFF_TAMC
118     kkey = (idkey-1)*(Nr-2) + k-1
119     #endif
120    
121 adcroft 1.1 DO j=jMin,jMax
122     DO i=iMin,iMax
123 heimbach 1.12 gam(i,j,k) = c(i,j,k-1)*bet(i,j,k-1)
124     IF ( ( b(i,j,k) - a(i,j,k)*gam(i,j,k) ) .NE. 0.)
125     & bet(i,j,k) = 1. _d 0 / ( b(i,j,k) - a(i,j,k)*gam(i,j,k) )
126 adcroft 1.1 ENDDO
127     ENDDO
128 heimbach 1.9
129 adcroft 1.1 ENDDO
130 heimbach 1.10
131 adcroft 1.1 ENDIF
132 heimbach 1.10
133 heimbach 1.11
134 heimbach 1.12 DO j=jMin,jMax
135     DO i=iMin,iMax
136     gYNm1(i,j,1,bi,bj) = gXNm1(i,j,1,bi,bj)*bet(i,j,1)
137 heimbach 1.10 ENDDO
138 heimbach 1.12 ENDDO
139     DO k=2,Nr
140 heimbach 1.10 DO j=jMin,jMax
141     DO i=iMin,iMax
142 heimbach 1.12 gYnm1(i,j,k,bi,bj) = bet(i,j,k)*
143     & (gXnm1(i,j,k,bi,bj) - a(i,j,k)*gYnm1(i,j,k-1,bi,bj))
144 heimbach 1.9 ENDDO
145     ENDDO
146 heimbach 1.12 ENDDO
147 heimbach 1.9
148    
149 heimbach 1.12 C-- Backward sweep
150     CADJ loop = sequential
151     DO k=Nr-1,1,-1
152     DO j=jMin,jMax
153     DO i=iMin,iMax
154     gYnm1(i,j,k,bi,bj)=gYnm1(i,j,k,bi,bj)
155     & -gam(i,j,k+1)*gYnm1(i,j,k+1,bi,bj)
156     ENDDO
157 adcroft 1.1 ENDDO
158     ENDDO
159 heimbach 1.9
160 heimbach 1.12 DO k=1,Nr
161 adcroft 1.1 DO j=jMin,jMax
162     DO i=iMin,iMax
163 heimbach 1.12 gXnm1(i,j,k,bi,bj)=gYnm1(i,j,k,bi,bj)
164 adcroft 1.1 ENDDO
165     ENDDO
166     ENDDO
167    
168     RETURN
169     END

  ViewVC Help
Powered by ViewVC 1.1.22