/[MITgcm]/MITgcm_contrib/dgoldberg/streamice/streamice_advect_2dtracer.F
ViewVC logotype

Contents of /MITgcm_contrib/dgoldberg/streamice/streamice_advect_2dtracer.F

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


Revision 1.2 - (show annotations) (download)
Wed Jun 12 20:48:08 2013 UTC (12 years, 1 month ago) by dgoldberg
Branch: MAIN
Changes since 1.1: +17 -12 lines
take care of errors found by debug

1 C $Header: /u/gcmpack/MITgcm_contrib/dgoldberg/streamice/streamice_advect_2dtracer.F,v 1.1 2013/06/08 22:15:33 dgoldberg Exp $
2 C $Name: $
3
4 #include "STREAMICE_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7
8
9 CBOP
10 SUBROUTINE STREAMICE_ADVECT_2DTRACER (
11 & myThid,
12 & myIter,
13 & time_step,
14 & uTrans,
15 & vTrans,
16 & bcMaskx,
17 & bcMasky)
18
19 C /============================================================\
20 C | SUBROUTINE |
21 C | o |
22 C |============================================================|
23 C | |
24 C \============================================================/
25 IMPLICIT NONE
26
27 C === Global variables ===
28 #include "SIZE.h"
29 #include "GRID.h"
30 #include "EEPARAMS.h"
31 #include "PARAMS.h"
32 #include "STREAMICE.h"
33 #include "STREAMICE_ADV.h"
34 #ifdef ALLOW_AUTODIFF_TAMC
35 # include "tamc.h"
36 #endif
37
38 INTEGER myThid, myIter, Gi, Gj
39 _RL time_step
40 _RL uTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
41 _RL vTrans(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
42 _RL bcMaskx(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
43 _RL bcMasky(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
44 ! _RL trac(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
45
46 #ifdef ALLOW_STREAMICE
47 #ifdef ALLOW_STREAMICE_2DTRACER
48
49 INTEGER i, j, bi, bj
50 _RL thick_bd
51 _RL sec_per_year, time_step_loc, MR, SMB, TMB
52 _RL BCVALX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
53 _RL BCVALY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
54 _RL xtracflux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
55 _RL ytracflux(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
56 #ifdef STREAMICE_TRACER_AB
57 _RL GAD_trac_2dNm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
58 #endif
59 CHARACTER*(MAX_LEN_MBUF) msgBuf
60
61 sec_per_year = 365.*86400.
62
63 time_step_loc = time_step / sec_per_year
64
65 PRINT *, "time_step_loc ", time_step_loc
66
67
68 DO bj=myByLo(myThid),myByHi(myThid)
69 DO bi=myBxLo(myThid),myBxHi(myThid)
70 DO j=1-3,sNy+3
71 DO i=1-3,sNx+3
72
73 ! H_streamice_prev(i,j,bi,bj) =
74 ! & H_streamice(i,j,bi,bj)
75
76 ytracflux (i,j,bi,bj) = 0. _d 0
77 xtracflux (i,j,bi,bj) = 0. _d 0
78 #ifdef STREAMICE_TRACER_AB
79 GAD_trac_2dNm1(i,j,bi,bj)=GAD_trac_2d(i,j,bi,bj)
80 GAD_trac_2d (i,j,bi,bj) = 0. _d 0
81 #endif
82
83
84 IF (STREAMICE_ufacemask(i,j,bi,bj).eq.3.0) THEN
85 BCVALX(i,j,bi,bj) = trac2d_ubdry_values_SI(i,j,bi,bj)
86 ELSEIF (STREAMICE_ufacemask(i,j,bi,bj).eq.4.0) THEN
87 BCVALX(i,j,bi,bj) = trac2d_ubdry_values_SI(i,j,bi,bj)
88 ENDIF
89
90 IF (STREAMICE_vfacemask(i,j,bi,bj).eq.3.0) THEN
91 BCVALy(i,j,bi,bj) = trac2d_vbdry_values_SI(i,j,bi,bj)
92 ELSEIF (STREAMICE_vfacemask(i,j,bi,bj).eq.4.0) THEN
93 BCVALy(i,j,bi,bj) = trac2d_vbdry_values_SI(i,j,bi,bj)
94 ENDIF
95
96 ENDDO
97 ENDDO
98 ENDDO
99 ENDDO
100
101 _EXCH_XY_RL(BCVALX,myThid)
102 _EXCH_XY_RL(BCVALY,myThid)
103
104
105 #ifdef ALLOW_AUTODIFF_TAMC
106 CADJ STORE trac2d = comlev1, key=ikey_dynamics
107 #endif
108
109
110
111 CALL STREAMICE_ADV_FLUX_FL_X ( myThid ,
112 I uTrans ,
113 I trac2d ,
114 I BCMASKX,
115 I BCVALX,
116 O xtracflux,
117 I time_step_loc)
118
119
120 DO bj=myByLo(myThid),myByHi(myThid)
121 DO bi=myBxLo(myThid),myBxHi(myThid)
122 DO j=1-3,sNy+3
123 DO i=1,sNx
124 Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
125 Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
126 IF (((Gj .ge. 1) .and. (Gj .le. Ny))
127 & .or.STREAMICE_NS_PERIODIC) THEN
128
129
130 IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0 .or.
131 & STREAMICE_hmask(i,j,bi,bj).eq.2.0) THEN
132
133
134
135 #ifdef STREAMICE_TRACER_AB
136 GAD_trac_2d(i,j,bi,bj) = GAD_trac_2d(i,j,bi,bj) -
137 #else
138 trac2d(i,j,bi,bj) = trac2d(i,j,bi,bj) -
139 #endif
140 & ((xtracflux(i+1,j,bi,bj)*dyG(i+1,j,bi,bj) -
141 & xtracflux(i,j,bi,bj)*dyG(i,j,bi,bj)) *
142 & recip_rA (i,j,bi,bj) -
143 & trac2d(i,j,bi,bj) *
144 & (utrans(i+1,j,bi,bj)*dyG(i+1,j,bi,bj)-
145 & utrans(i,j,bi,bj)*dyG(i,j,bi,bj)) *
146 & recip_rA(i,j,bi,bj))
147 #ifndef STREAMICE_TRACER_AB
148 & * time_step_loc
149 #endif
150 ENDIF
151 ENDIF
152 ENDDO
153 ENDDO
154 ENDDO
155 ENDDO
156 _EXCH_XY_RL(utrans,myThid)
157
158 #ifdef ALLOW_AUTODIFF_TAMC
159 # ifndef STREAMICE_TRACER_AB
160 CADJ STORE trac2d = comlev1, key=ikey_dynamics
161 # endif
162 #endif
163
164
165 CALL STREAMICE_ADV_FLUX_FL_Y ( myThid ,
166 I vTrans ,
167 I trac2d ,
168 I BCMASKy,
169 I BCVALy,
170 O ytracflux,
171 I time_step_loc)
172
173
174 DO bj=myByLo(myThid),myByHi(myThid)
175 DO bi=myBxLo(myThid),myBxHi(myThid)
176 DO j=1,sNy
177 DO i=1,sNx
178 Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
179 Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
180
181 IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0 .or.
182 & STREAMICE_hmask(i,j,bi,bj).eq.2.0) THEN
183 ! IF (Gi.eq.34.and.Gj.eq.94) THEN
184 ! print *, "GOT HERE YFLUX", ytracflux(i,j,bi,bj),
185 ! & ytracflux(i,j+1,bi,bj),trac2d(i,j,bi,bj),
186 ! & vtrans(i,j,bi,bj), vtrans(i,j+1,bi,bj),
187 ! & bcmasky(i,j,bi,bj)
188 ! ENDIF
189
190 #ifdef STREAMICE_TRACER_AB
191 GAD_trac_2d(i,j,bi,bj) = GAD_trac_2d(i,j,bi,bj) -
192 #else
193 trac2d(i,j,bi,bj) = trac2d(i,j,bi,bj) -
194 #endif
195 & ((ytracflux(i,j+1,bi,bj)*dxG(i,j+1,bi,bj) -
196 & ytracflux(i,j,bi,bj)*dxG(i,j,bi,bj)) *
197 & recip_rA (i,j,bi,bj) -
198 & (vtrans(i,j+1,bi,bj)*dxG(i,j+1,bi,bj) -
199 & vtrans(i,j,bi,bj)*dxG(i,j,bi,bj)) *
200 & trac2d(i,j,bi,bj) *
201 & recip_rA(i,j,bi,bj))
202 #ifndef STREAMICE_TRACER_AB
203 & * time_step_loc
204 #endif
205 ENDIF
206 ENDDO
207 ENDDO
208 ENDDO
209 ENDDO
210
211 #ifdef STREAMICE_TRACER_AB
212
213 DO bj=myByLo(myThid),myByHi(myThid)
214 DO bi=myBxLo(myThid),myBxHi(myThid)
215 DO j=1,sNy
216 DO i=1,sNx
217
218 trac2d(i,j,bi,bj) = trac2d(i,j,bi,bj) + time_step_loc *
219 & GAD_trac_2d(i,j,bi,bj)
220
221 IF (myIter.eq.0) THEN
222 trac2d(i,j,bi,bj) = trac2d(i,j,bi,bj) + time_step_loc *
223 & (.5+.01) *
224 & (GAD_trac_2d(i,j,bi,bj) - GAD_trac_2dNm1(i,j,bi,bj))
225 ENDIF
226
227
228 ENDDO
229 ENDDO
230 ENDDO
231 ENDDO
232
233 #endif
234
235 _EXCH_XY_RL (trac2d, myThid)
236
237 WRITE(msgBuf,'(A)') 'END STREAMICE_ADVECT_THICKNESS'
238 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
239 & SQUEEZE_RIGHT , 1)
240
241 #endif
242 #endif
243 END
244

  ViewVC Help
Powered by ViewVC 1.1.22