/[MITgcm]/MITgcm/pkg/seaice/advect.F
ViewVC logotype

Contents of /MITgcm/pkg/seaice/advect.F

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


Revision 1.17 - (show annotations) (download)
Mon Jun 5 22:39:15 2006 UTC (17 years, 10 months ago) by mlosch
Branch: MAIN
CVS Tags: checkpoint58y_post, checkpoint58t_post, checkpoint58m_post, checkpoint58w_post, checkpoint58o_post, checkpoint58p_post, checkpoint58q_post, checkpoint58r_post, checkpoint58n_post, checkpoint58k_post, checkpoint58v_post, checkpoint58l_post, checkpoint58g_post, checkpoint58x_post, checkpoint58h_post, checkpoint58j_post, checkpoint58i_post, checkpoint58u_post, checkpoint58s_post
Changes since 1.16: +6 -26 lines
always use velocities on c-grid, implies different routine arguments

1 C $Header: /u/gcmpack/MITgcm/pkg/seaice/advect.F,v 1.16 2006/03/14 11:38:43 mlosch Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5
6 CStartOfInterface
7 SUBROUTINE advect( UI,VI,HEFF,HEFFM,myThid )
8 C /==========================================================\
9 C | SUBROUTINE advect |
10 C | o Calculate ice advection |
11 C |==========================================================|
12 C \==========================================================/
13 IMPLICIT NONE
14
15 C === Global variables ===
16 #include "SIZE.h"
17 #include "EEPARAMS.h"
18 #include "PARAMS.h"
19 #include "GRID.h"
20 #include "SEAICE_PARAMS.h"
21 CML#include "SEAICE_GRID.h"
22
23 #ifdef ALLOW_AUTODIFF_TAMC
24 # include "tamc.h"
25 #endif
26
27 C === Routine arguments ===
28 C myThid - Thread no. that called this routine.
29 _RL UI (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
30 _RL VI (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
31 _RL HEFF (1-OLx:sNx+OLx,1-OLy:sNy+OLy,3,nSx,nSy)
32 _RL HEFFM (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
33 INTEGER myThid
34 CEndOfInterface
35
36 C === Local variables ===
37 C i,j,k,bi,bj - Loop counters
38
39 INTEGER i, j, bi, bj
40 INTEGER K3
41 _RL DELTT
42 _RL DIFFA (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
43
44 C NOW DECIDE IF BACKWARD EULER OR LEAPFROG
45 IF(LAD.EQ.1) THEN
46 C LEAPFROG
47 DELTT=SEAICE_deltaTtherm*TWO
48 K3=3
49 ELSE
50 C BACKWARD EULER
51 DELTT=SEAICE_deltaTtherm
52 K3=2
53 ENDIF
54
55 C NOW REARRANGE HS
56
57 DO bj=myByLo(myThid),myByHi(myThid)
58 DO bi=myBxLo(myThid),myBxHi(myThid)
59
60 DO j=1-OLy,sNy+OLy
61 DO i=1-OLx,sNx+OLx
62 HEFF(I,J,3,bi,bj)=HEFF(I,J,2,bi,bj)
63 HEFF(I,J,2,bi,bj)=HEFF(I,J,1,bi,bj)
64 ENDDO
65 ENDDO
66
67 ENDDO
68 ENDDO
69
70 #ifdef ALLOW_AUTODIFF_TAMC
71 CADJ STORE heff = comlev1, key = ikey_dynamics
72 #endif /* ALLOW_AUTODIFF_TAMC */
73
74 C NOW GO THROUGH STANDARD CONSERVATIVE ADVECTION
75 IF ( .NOT. SEAICEuseFluxForm ) THEN
76 DO bj=myByLo(myThid),myByHi(myThid)
77 DO bi=myBxLo(myThid),myBxHi(myThid)
78 DO J=1,sNy
79 DO I=1,sNx
80 CML This formulation gives the same result as the original code on a
81 CML lat-lon-grid, but may not be accurate on irregular grids
82 HEFF(I,J,1,bi,bj)=HEFF(I,J,K3,bi,bj)
83 & -DELTT*(
84 & ( HEFF(I ,J ,2,bi,bj)+HEFF(I+1,J ,2,bi,bj))
85 & * UI(I+1,J, bi,bj) -
86 & ( HEFF(I ,J ,2,bi,bj)+HEFF(I-1,J ,2,bi,bj))
87 & * UI(I ,J, bi,bj) )
88 & *(HALF * _recip_dxF(I,J,bi,bj))
89 & -DELTT*(
90 & ( HEFF(I ,J ,2,bi,bj)+HEFF(I ,J+1,2,bi,bj))
91 & * VI(I ,J+1, bi,bj)
92 & * _dxG(I ,J+1,bi,bj) -
93 & ( HEFF(I ,J ,2,bi,bj)+HEFF(I ,J-1,2,bi,bj))
94 & * VI(I ,J , bi,bj)
95 & * _dxG(I,J,bi,bj))
96 & *(HALF * _recip_dyF(I,J,bi,bj) * _recip_dxF(I,J,bi,bj))
97 ENDDO
98 ENDDO
99 ENDDO
100 ENDDO
101 ELSE
102 DO bj=myByLo(myThid),myByHi(myThid)
103 DO bi=myBxLo(myThid),myBxHi(myThid)
104 DO J=1,sNy
105 DO I=1,sNx
106 C-- Use flux form for MITgcm compliance, unfortunately changes results
107 HEFF(I,J,1,bi,bj)=HEFF(I,J,K3,bi,bj)
108 & -DELTT * HALF * (
109 & + _dyG(I+1,J,bi,bj) *
110 & (HEFF(I ,J ,2,bi,bj)+HEFF(I+1,J ,2,bi,bj))
111 & * UI(I+1,J , bi,bj)
112 & - _dyG(I,J,bi,bj) *
113 & (HEFF(I ,J ,2,bi,bj)+HEFF(I-1,J ,2,bi,bj))
114 & * UI(I ,J , bi,bj)
115 & + _dxG(I ,J+1,bi,bj) *
116 & (HEFF(I ,J ,2,bi,bj)+HEFF(I ,J+1,2,bi,bj))
117 & * VI(I ,J+1, bi,bj)
118 & - _dxG(I ,J ,bi,bj)*
119 & (HEFF(I ,J ,2,bi,bj)+HEFF(I ,J-1,2,bi,bj))
120 & * VI(I ,J , bi,bj)
121 & )*recip_rA(I,J,bi,bj)
122 ENDDO
123 ENDDO
124 ENDDO
125 ENDDO
126 ENDIF
127
128 _BARRIER
129 CALL SEAICE_EXCH ( HEFF, myThid )
130 _BARRIER
131
132 IF (LAD .EQ. 2) THEN
133
134 C NOW DO BACKWARD EULER CORRECTION
135 DO bj=myByLo(myThid),myByHi(myThid)
136 DO bi=myBxLo(myThid),myBxHi(myThid)
137 DO j=1-OLy,sNy+OLy
138 DO i=1-OLx,sNx+OLx
139 HEFF(I,J,3,bi,bj)=HEFF(I,J,2,bi,bj)
140 HEFF(I,J,2,bi,bj)=HALF*(HEFF(I,J,1,bi,bj)
141 & +HEFF(I,J,2,bi,bj))
142 ENDDO
143 ENDDO
144 ENDDO
145 ENDDO
146
147 C NOW GO THROUGH STANDARD CONSERVATIVE ADVECTION
148 IF ( .NOT. SEAICEuseFluxForm ) THEN
149 DO bj=myByLo(myThid),myByHi(myThid)
150 DO bi=myBxLo(myThid),myBxHi(myThid)
151 DO J=1,sNy
152 DO I=1,sNx
153 CML This formulation gives the same result as the original code on a
154 CML lat-lon-grid, but may not be accurate on irregular grids
155 HEFF(I,J,1,bi,bj)=HEFF(I,J,3,bi,bj)
156 & -DELTT*(
157 & (HEFF(I ,J ,2,bi,bj)+HEFF(I+1,J ,2,bi,bj))
158 & * UI(I+1,J , bi,bj) -
159 & (HEFF(I ,J ,2,bi,bj)+HEFF(I-1,J ,2,bi,bj))
160 & * UI(I ,J , bi,bj) )
161 & *(HALF * _recip_dxF(I,J,bi,bj))
162 & -DELTT*(
163 & (HEFF(I ,J ,2,bi,bj)+HEFF(I ,J+1,2,bi,bj))
164 & * VI(I ,J+1, bi,bj)
165 & * _dxG(I,J+1,bi,bj) -
166 & (HEFF(I ,J ,2,bi,bj)+HEFF(I ,J-1,2,bi,bj))
167 & * VI(I ,J , bi,bj)
168 & * _dxG(I,J,bi,bj))
169 & *(HALF * _recip_dyF(I,J,bi,bj) * _recip_dxF(I,J,bi,bj))
170 ENDDO
171 ENDDO
172 ENDDO
173 ENDDO
174 ELSE
175 DO bj=myByLo(myThid),myByHi(myThid)
176 DO bi=myBxLo(myThid),myBxHi(myThid)
177 DO J=1,sNy
178 DO I=1,sNx
179 C-- Use flux form for MITgcm compliance, unfortunately changes results
180 HEFF(I,J,1,bi,bj)=HEFF(I,J,3,bi,bj)
181 & -DELTT * HALF * (
182 & + _dyG(I+1,J ,bi,bj) *
183 & (HEFF(I ,J ,2,bi,bj)+HEFF(I+1,J ,2,bi,bj))
184 & * UI(I+1,J , bi,bj)
185 & - _dyG(I ,J ,bi,bj) *
186 & (HEFF(I ,J ,2,bi,bj)+HEFF(I-1,J ,2,bi,bj))
187 & * UI(I ,J , bi,bj)
188 & + _dxG(I ,J+1,bi,bj) *
189 & (HEFF(I ,J ,2,bi,bj)+HEFF(I ,J+1,2,bi,bj))
190 & * VI(I ,J+1, bi,bj)
191 & - _dxG(I ,J ,bi,bj) *
192 & (HEFF(I ,J ,2,bi,bj)+HEFF(I ,J-1,2,bi,bj))
193 & * VI(I ,J , bi,bj)
194 & )*recip_rA(I,J,bi,bj)
195 ENDDO
196 ENDDO
197 ENDDO
198 ENDDO
199 ENDIF
200
201 _BARRIER
202 CALL SEAICE_EXCH( HEFF, myThid )
203 _BARRIER
204
205 C NOW FIX UP H(I,J,2)
206 DO bj=myByLo(myThid),myByHi(myThid)
207 DO bi=myBxLo(myThid),myBxHi(myThid)
208 DO j=1-OLy,sNy+OLy
209 DO i=1-OLx,sNx+OLx
210 HEFF(I,J,2,bi,bj)=HEFF(I,J,3,bi,bj)
211 ENDDO
212 ENDDO
213 ENDDO
214 ENDDO
215
216 ENDIF
217
218 C NOW DO DIFFUSION ON H(I,J,3)
219 C NOW CALCULATE DIFFUSION COEF ROUGHLY
220 DO bj=myByLo(myThid),myByHi(myThid)
221 DO bi=myBxLo(myThid),myBxHi(myThid)
222 DO j=1-OLy,sNy+OLy
223 DO i=1-OLx,sNx+OLx
224 DIFFA(I,J,bi,bj)=
225 & DIFF1*MIN( _dxF(I,J,bi,bj), _dyF(I,J,bi,bj))
226 ENDDO
227 ENDDO
228 ENDDO
229 ENDDO
230 CALL DIFFUS(HEFF,DIFFA,HEFFM,DELTT, myThid)
231
232 DO bj=myByLo(myThid),myByHi(myThid)
233 DO bi=myBxLo(myThid),myBxHi(myThid)
234 DO j=1-OLy,sNy+OLy
235 DO i=1-OLx,sNx+OLx
236 HEFF(I,J,1,bi,bj)=(HEFF(I,J,1,bi,bj)+HEFF(I,J,3,bi,bj))
237 & *HEFFM(I,J,bi,bj)
238 ENDDO
239 ENDDO
240 ENDDO
241 ENDDO
242
243 C NOW CALCULATE DIFFUSION COEF ROUGHLY
244 DO bj=myByLo(myThid),myByHi(myThid)
245 DO bi=myBxLo(myThid),myBxHi(myThid)
246 DO j=1-OLy,sNy+OLy
247 DO i=1-OLx,sNx+OLx
248 DIFFA(I,J,bi,bj)=
249 & -(MIN( _dxF(I,J,bi,bj), _dyF(I,J,bi,bj)))**2/DELTT
250 ENDDO
251 ENDDO
252 ENDDO
253 ENDDO
254 CALL DIFFUS(HEFF,DIFFA,HEFFM,DELTT, myThid)
255
256 DO bj=myByLo(myThid),myByHi(myThid)
257 DO bi=myBxLo(myThid),myBxHi(myThid)
258 DO j=1-OLy,sNy+OLy
259 DO i=1-OLx,sNx+OLx
260 HEFF(I,J,1,bi,bj)=(HEFF(I,J,1,bi,bj)+HEFF(I,J,3,bi,bj))
261 & *HEFFM(I,J,bi,bj)
262 ENDDO
263 ENDDO
264 ENDDO
265 ENDDO
266
267 RETURN
268 END

  ViewVC Help
Powered by ViewVC 1.1.22