/[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.12 - (show annotations) (download)
Mon Dec 27 20:34:11 2004 UTC (19 years, 5 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint57m_post, checkpoint57g_pre, checkpoint57s_post, checkpoint57g_post, checkpoint57y_post, checkpoint57r_post, checkpoint57d_post, checkpoint57i_post, checkpoint58, checkpoint57n_post, checkpoint57z_post, checkpoint57l_post, checkpoint57t_post, checkpoint57v_post, checkpoint57f_post, checkpoint57h_pre, checkpoint57h_post, checkpoint57y_pre, checkpoint57c_post, checkpoint57c_pre, checkpoint57e_post, checkpoint57p_post, checkpint57u_post, checkpoint57q_post, eckpoint57e_pre, checkpoint57h_done, checkpoint57j_post, checkpoint57f_pre, checkpoint57o_post, checkpoint57k_post, checkpoint57w_post, checkpoint57x_post
Changes since 1.11: +1 -5 lines
o added seaice_summary.F and removed obsolete ALLOW_SEAICE's from pkg/seaice

1 C $Header: /u/gcmpack/MITgcm/pkg/seaice/advect.F,v 1.11 2004/10/05 14:03:52 adcroft Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5
6 CStartOfInterface
7 SUBROUTINE advect( UICE,VICE,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 "SEAICE_PARAMS.h"
20 #include "SEAICE_GRID.h"
21
22 #ifdef ALLOW_AUTODIFF_TAMC
23 # include "tamc.h"
24 #endif
25
26 C === Routine arguments ===
27 C myThid - Thread no. that called this routine.
28 _RL UICE (1-OLx:sNx+OLx,1-OLy:sNy+OLy,3,nSx,nSy)
29 _RL VICE (1-OLx:sNx+OLx,1-OLy:sNy+OLy,3,nSx,nSy)
30 _RL HEFF (1-OLx:sNx+OLx,1-OLy:sNy+OLy,3,nSx,nSy)
31 _RL HEFFM (1-OLx:sNx+OLx,1-OLy:sNy+OLy, nSx,nSy)
32 INTEGER myThid
33 CEndOfInterface
34
35 C === Local variables ===
36 C i,j,k,bi,bj - Loop counters
37
38 INTEGER i, j, bi, bj
39 INTEGER K3
40 _RL DELTT
41
42 _RL UI (1-OLx:sNx+OLx, 1-OLy:sNy+OLy,nSx,nSy)
43 _RL VI (1-OLx:sNx+OLx, 1-OLy:sNy+OLy,nSx,nSy)
44 _RL DIFFA(1-OLx:sNx+OLx, 1-OLy:sNy+OLy,nSx,nSy)
45
46 C NOW DECIDE IF BACKWARD EULER OR LEAPFROG
47 IF(LAD.EQ.1) THEN
48 C LEAPFROG
49 DELTT=SEAICE_deltaTtherm*TWO
50 K3=3
51 ELSE
52 C BACKWARD EULER
53 DELTT=SEAICE_deltaTtherm
54 K3=2
55 ENDIF
56
57 C NOW REARRANGE HS
58
59 DO bj=myByLo(myThid),myByHi(myThid)
60 DO bi=myBxLo(myThid),myBxHi(myThid)
61
62 DO j=1-OLy,sNy+OLy
63 DO i=1-OLx,sNx+OLx
64 UI(I,J,bi,bj)=UICE(I,J,1,bi,bj)
65 VI(I,J,bi,bj)=VICE(I,J,1,bi,bj)
66 ENDDO
67 ENDDO
68
69 DO j=1-OLy,sNy+OLy
70 DO i=1-OLx,sNx+OLx
71 HEFF(I,J,3,bi,bj)=HEFF(I,J,2,bi,bj)
72 HEFF(I,J,2,bi,bj)=HEFF(I,J,1,bi,bj)
73 ENDDO
74 ENDDO
75
76 ENDDO
77 ENDDO
78
79 #ifdef ALLOW_AUTODIFF_TAMC
80 CADJ STORE heff = comlev1, key = ikey_dynamics
81 #endif /* ALLOW_AUTODIFF_TAMC */
82
83 C NOW GO THROUGH STANDARD CONSERVATIVE ADVECTION
84 DO bj=myByLo(myThid),myByHi(myThid)
85 DO bi=myBxLo(myThid),myBxHi(myThid)
86 DO J=0,sNy-1
87 DO I=0,sNx-1
88 HEFF(I+1,J+1,1,bi,bj)=HEFF(I+1,J+1,K3,bi,bj)
89 & -DELTT*((HEFF(I+1,J+1,2,bi,bj)+HEFF
90 & (I+2,J+1,2,bi,bj))*(UI(I+2,J+2,bi,bj)+UI(I+2,J+1,bi,bj))-
91 & (HEFF(I+1,J+1,2,bi,bj)+HEFF
92 & (I,J+1,2,bi,bj))*(UI(I+1,J+2,bi,bj)+UI(I+1,J+1,bi,bj)))
93 & *(QUART/(DXTICE(I+1,J,bi,bj)*CSTICE(I,J+1,bi,bj)))
94 & -DELTT*((HEFF(I+1,J+1,2,bi,bj)
95 & +HEFF(I+1,J+2,2,bi,bj))*(VI(I+1,J+2,bi,bj)
96 & +VI(I+2,J+2,bi,bj))*CSUICE(I+1,J+2,bi,bj)
97 & -(HEFF(I+1,J+1,2,bi,bj)+HEFF(I+1,J,2,bi,bj))
98 & *(VI(I+1,J+1,bi,bj)+VI(I+2,J+1,bi,bj))*CSUICE(I+1,J+1,bi,bj))
99 & *(QUART/(DYTICE(I,J+1,bi,bj)*CSTICE(I,J+1,bi,bj)))
100 ENDDO
101 ENDDO
102 ENDDO
103 ENDDO
104
105 _BARRIER
106 CALL SEAICE_EXCH ( HEFF, myThid )
107 _BARRIER
108
109 IF (LAD .EQ. 2) THEN
110
111 C NOW DO BACKWARD EULER CORRECTION
112 DO bj=myByLo(myThid),myByHi(myThid)
113 DO bi=myBxLo(myThid),myBxHi(myThid)
114 DO j=1-OLy,sNy+OLy
115 DO i=1-OLx,sNx+OLx
116 HEFF(I,J,3,bi,bj)=HEFF(I,J,2,bi,bj)
117 HEFF(I,J,2,bi,bj)=HALF*(HEFF(I,J,1,bi,bj)
118 & +HEFF(I,J,2,bi,bj))
119 ENDDO
120 ENDDO
121 ENDDO
122 ENDDO
123
124 C NOW GO THROUGH STANDARD CONSERVATIVE ADVECTION
125 DO bj=myByLo(myThid),myByHi(myThid)
126 DO bi=myBxLo(myThid),myBxHi(myThid)
127 DO J=0,sNy-1
128 DO I=0,sNx-1
129 HEFF(I+1,J+1,1,bi,bj)=HEFF(I+1,J+1,3,bi,bj)
130 & -DELTT*((HEFF(I+1,J+1,2,bi,bj)+HEFF
131 & (I+2,J+1,2,bi,bj))*(UI(I+2,J+2,bi,bj)+UI(I+2,J+1,bi,bj))-
132 & (HEFF(I+1,J+1,2,bi,bj)+HEFF
133 & (I,J+1,2,bi,bj))*(UI(I+1,J+2,bi,bj)+UI(I+1,J+1,bi,bj)))
134 & *(QUART/(DXTICE(I+1,J,bi,bj)*CSTICE(I,J+1,bi,bj)))
135 & -DELTT*((HEFF(I+1,J+1,2,bi,bj)
136 & +HEFF(I+1,J+2,2,bi,bj))*(VI(I+1,J+2,bi,bj)
137 & +VI(I+2,J+2,bi,bj))*CSUICE(I+1,J+2,bi,bj)
138 & -(HEFF(I+1,J+1,2,bi,bj)+HEFF(I+1,J,2,bi,bj))
139 & *(VI(I+1,J+1,bi,bj)+VI(I+2,J+1,bi,bj))
140 & *CSUICE(I+1,J+1,bi,bj))
141 & *(QUART/(DYTICE(I,J+1,bi,bj)*CSTICE(I,J+1,bi,bj)))
142 ENDDO
143 ENDDO
144 ENDDO
145 ENDDO
146
147 _BARRIER
148 CALL SEAICE_EXCH( HEFF, myThid )
149 _BARRIER
150
151 C NOW FIX UP H(I,J,2)
152 DO bj=myByLo(myThid),myByHi(myThid)
153 DO bi=myBxLo(myThid),myBxHi(myThid)
154 DO j=1-OLy,sNy+OLy
155 DO i=1-OLx,sNx+OLx
156 HEFF(I,J,2,bi,bj)=HEFF(I,J,3,bi,bj)
157 ENDDO
158 ENDDO
159 ENDDO
160 ENDDO
161
162 ENDIF
163
164 C NOW DO DIFFUSION ON H(I,J,3)
165 C NOW CALCULATE DIFFUSION COEF ROUGHLY
166 DO bj=myByLo(myThid),myByHi(myThid)
167 DO bi=myBxLo(myThid),myBxHi(myThid)
168 DO j=1-OLy,sNy+OLy
169 DO i=1-OLx,sNx+OLx
170 DIFFA(I,J,bi,bj)=DIFF1*MIN(DXTICE(I,J,bi,bj)
171 & *CSTICE(I,J,bi,bj),DYTICE(I,J,bi,bj))
172 ENDDO
173 ENDDO
174 ENDDO
175 ENDDO
176 CALL DIFFUS(HEFF,DIFFA,HEFFM,DELTT, myThid)
177
178 DO bj=myByLo(myThid),myByHi(myThid)
179 DO bi=myBxLo(myThid),myBxHi(myThid)
180 DO j=1-OLy,sNy+OLy
181 DO i=1-OLx,sNx+OLx
182 HEFF(I,J,1,bi,bj)=(HEFF(I,J,1,bi,bj)+HEFF(I,J,3,bi,bj))
183 & *HEFFM(I,J,bi,bj)
184 ENDDO
185 ENDDO
186 ENDDO
187 ENDDO
188
189 C NOW CALCULATE DIFFUSION COEF ROUGHLY
190 DO bj=myByLo(myThid),myByHi(myThid)
191 DO bi=myBxLo(myThid),myBxHi(myThid)
192 DO j=1-OLy,sNy+OLy
193 DO i=1-OLx,sNx+OLx
194 DIFFA(I,J,bi,bj)=-(MIN(DXTICE(I,J,bi,bj)*CSTICE(I,J,bi,bj)
195 & ,DYTICE(I,J,bi,bj)))**2/DELTT
196 ENDDO
197 ENDDO
198 ENDDO
199 ENDDO
200 CALL DIFFUS(HEFF,DIFFA,HEFFM,DELTT, myThid)
201
202 DO bj=myByLo(myThid),myByHi(myThid)
203 DO bi=myBxLo(myThid),myBxHi(myThid)
204 DO j=1-OLy,sNy+OLy
205 DO i=1-OLx,sNx+OLx
206 HEFF(I,J,1,bi,bj)=(HEFF(I,J,1,bi,bj)+HEFF(I,J,3,bi,bj))
207 & *HEFFM(I,J,bi,bj)
208 ENDDO
209 ENDDO
210 ENDDO
211 ENDDO
212
213 RETURN
214 END

  ViewVC Help
Powered by ViewVC 1.1.22