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

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

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


Revision 1.3 - (hide annotations) (download)
Wed Aug 27 19:29:13 2014 UTC (10 years, 10 months ago) by dgoldberg
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +23 -25 lines
updating contrib streamice repo with latest files, and separated out convergence checks; and parameterised maximum iteration counts and interface w shelfice for coupling

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

  ViewVC Help
Powered by ViewVC 1.1.22