/[MITgcm]/MITgcm/adjoint/tamc_code_ecco_ad.f_without_gmredi_kpp
ViewVC logotype

Contents of /MITgcm/adjoint/tamc_code_ecco_ad.f_without_gmredi_kpp

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


Revision 1.2 - (show annotations) (download)
Fri Jul 13 13:25:45 2001 UTC (22 years, 9 months ago) by heimbach
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
FILE REMOVED
o Updated makefile to incorporate new routines and flow directives
o Added "make adtaf" for usage of TAF instead of TAMC.
o Bug fix in adjoint_ecco_sed.com
o Removed some adjoint prototype code

1 subroutine adcalc_common_factors( bi, bj, imin, imax, jmin, jmax,
2 $k, adutrans, advtrans, adrtrans )
3 C***************************************************************
4 C***************************************************************
5 C** This routine was generated by the **
6 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
7 C***************************************************************
8 C***************************************************************
9 C==============================================
10 C all entries are defined explicitly
11 C==============================================
12 implicit none
13
14 C==============================================
15 C define parameters
16 C==============================================
17 integer nr
18 parameter ( nr = 15 )
19 integer nsx
20 parameter ( nsx = 1 )
21 integer nsy
22 parameter ( nsy = 1 )
23 integer olx
24 parameter ( olx = 3 )
25 integer oly
26 parameter ( oly = 3 )
27 integer snx
28 parameter ( snx = 20 )
29 integer sny
30 parameter ( sny = 40 )
31
32 C==============================================
33 C define common blocks
34 C==============================================
35 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
36 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
37 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
38 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
39 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
40 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
41 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
42 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
43 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
44 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
45 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
46 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
47 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
48 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
49 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
50 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
51
52 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
53 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
54 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
55 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
56 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
57 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
58 $tanphiatu, tanphiatv
59 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
60 double precision drc(1:nr)
61 double precision drf(1:nr)
62 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
63 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
64 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
65 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
66 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
67 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
68 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
69 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
70 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
71 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
72 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
73 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
74 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
75 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
76 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
77 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
78 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
79 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
80 double precision rc(1:nr)
81 double precision recip_drc(1:nr)
82 double precision recip_drf(1:nr)
83 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
84 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
85 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
86 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
87 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
88 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
89 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
90 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
91 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
92 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
93 $nsy)
94 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
95 $nsy)
96 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
97 $nsy)
98 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
99 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
100 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
101 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
102 double precision recip_rkfac
103 double precision rf(1:nr+1)
104 double precision rkfac
105 double precision safac(1:nr)
106 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
107 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
108 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
109 double precision xc0
110 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
111 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
112 double precision yc0
113 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
114
115 C==============================================
116 C define arguments
117 C==============================================
118 double precision adrtrans(1-olx:snx+olx,1-oly:sny+oly)
119 double precision adutrans(1-olx:snx+olx,1-oly:sny+oly)
120 double precision advtrans(1-olx:snx+olx,1-oly:sny+oly)
121 integer bi
122 integer bj
123 integer imax
124 integer imin
125 integer jmax
126 integer jmin
127 integer k
128
129 C==============================================
130 C define local variables
131 C==============================================
132 integer i
133 integer j
134 double precision xa(1-olx:snx+olx,1-oly:sny+oly)
135 double precision ya(1-olx:snx+olx,1-oly:sny+oly)
136
137 C----------------------------------------------
138 C ROUTINE BODY
139 C----------------------------------------------
140 do j = jmin, jmax
141 do i = imin, imax
142 xa(i,j) = dyg(i,j,bi,bj)*drf(k)*hfacw(i,j,k,bi,bj)
143 ya(i,j) = dxg(i,j,bi,bj)*drf(k)*hfacs(i,j,k,bi,bj)
144 end do
145 end do
146 do j = jmin, jmax
147 do i = imin, imax
148 adwvel(i,j,k,bi,bj) = adwvel(i,j,k,bi,bj)+adrtrans(i,j)*ra(i,
149 $j,bi,bj)
150 adrtrans(i,j) = 0.d0
151 end do
152 end do
153 do j = jmin, jmax
154 do i = imin, imax
155 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+advtrans(i,j)*ya(i,
156 $j)
157 advtrans(i,j) = 0.d0
158 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+adutrans(i,j)*xa(i,
159 $j)
160 adutrans(i,j) = 0.d0
161 end do
162 end do
163
164 end
165
166
167 subroutine adcalc_div_ghat( bi, bj, k, xa, ya, adcg2d_b )
168 C***************************************************************
169 C***************************************************************
170 C** This routine was generated by the **
171 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
172 C***************************************************************
173 C***************************************************************
174 C==============================================
175 C all entries are defined explicitly
176 C==============================================
177 implicit none
178
179 C==============================================
180 C define parameters
181 C==============================================
182 integer npx
183 parameter ( npx = 1 )
184 integer npy
185 parameter ( npy = 1 )
186 integer nr
187 parameter ( nr = 15 )
188 integer nsx
189 parameter ( nsx = 1 )
190 integer nsy
191 parameter ( nsy = 1 )
192 integer snx
193 parameter ( snx = 20 )
194 integer nx
195 parameter ( nx = snx*nsx*npx )
196 integer sny
197 parameter ( sny = 40 )
198 integer ny
199 parameter ( ny = sny*nsy*npy )
200 integer olx
201 parameter ( olx = 3 )
202 integer oly
203 parameter ( oly = 3 )
204
205 C==============================================
206 C define common blocks
207 C==============================================
208 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
209 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
210 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
211 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
212 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
213 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
214 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
215 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
216 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
217 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
218 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
219 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
220 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
221 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
222 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
223 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
224
225 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
226 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
227 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
228 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
229 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
230 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
231 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
232 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
233 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
234 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
235 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
236 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
237 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
238 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
239 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
240 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
241 double precision abeps
242 double precision affacmom
243 double precision beta
244 double precision bottomdraglinear
245 double precision bottomdragquadratic
246 double precision cadjfreq
247 double precision cffacmom
248 double precision cg2dpcoffdfac
249 double precision cg2dtargetresidual
250 double precision cg3dtargetresidual
251 double precision chkptfreq
252 double precision cospower
253 double precision delp(nr)
254 double precision delr(nr)
255 double precision delt
256 double precision deltat
257 double precision deltatclock
258 double precision deltatmom
259 double precision deltattracer
260 double precision delx(nx)
261 double precision dely(ny)
262 double precision delz(nr)
263 double precision diffk4s
264 double precision diffk4t
265 double precision diffkhs
266 double precision diffkht
267 double precision diffkps
268 double precision diffkpt
269 double precision diffkrs
270 double precision diffkrt
271 double precision diffkzs
272 double precision diffkzt
273 double precision dumpfreq
274 double precision endtime
275 double precision externforcingcycle
276 double precision externforcingperiod
277 double precision f0
278 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
279 double precision fofacmom
280 double precision freesurffac
281 double precision gbaro
282 double precision gravity
283 double precision hfacmin
284 double precision hfacmindp
285 double precision hfacmindr
286 double precision hfacmindz
287 double precision horivertratio
288 double precision implicdiv2dflow
289 double precision implicsurfpress
290 double precision ivdc_kappa
291 double precision lambdasaltclimrelax
292 double precision lambdathetaclimrelax
293 double precision latfftfiltlo
294 double precision mtfacmom
295 double precision omega
296 double precision pchkptfreq
297 double precision pffacmom
298 double precision phimin
299 double precision rcd
300 double precision recip_gravity
301 double precision recip_horivertratio
302 double precision recip_rhoconst
303 double precision recip_rhonil
304 double precision recip_rsphere
305 double precision rhoconst
306 double precision rhonil
307 double precision ro_sealevel
308 double precision rsphere
309 double precision specvol_s(nr)
310 double precision sref(nr)
311 double precision starttime
312 double precision taucd
313 double precision tausaltclimrelax
314 double precision tauthetaclimrelax
315 double precision tavefreq
316 double precision theta_s(nr)
317 double precision thetamin
318 double precision tref(nr)
319 double precision vffacmom
320 double precision visca4
321 double precision viscah
322 double precision viscap
323 double precision viscar
324 double precision viscaz
325 double precision zonal_filt_lat
326
327 C==============================================
328 C define arguments
329 C==============================================
330 double precision adcg2d_b(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
331 integer bi
332 integer bj
333 integer k
334 double precision xa(1-olx:snx+olx,1-oly:sny+oly)
335 double precision ya(1-olx:snx+olx,1-oly:sny+oly)
336
337 C==============================================
338 C define local variables
339 C==============================================
340 double precision adpf(1-olx:snx+olx,1-oly:sny+oly)
341 integer i
342 integer ip1
343 integer ip2
344 integer j
345
346 C----------------------------------------------
347 C RESET LOCAL ADJOINT VARIABLES
348 C----------------------------------------------
349 do ip2 = 1-oly, sny+oly
350 do ip1 = 1-olx, snx+olx
351 adpf(ip1,ip2) = 0.d0
352 end do
353 end do
354
355 C----------------------------------------------
356 C ROUTINE BODY
357 C----------------------------------------------
358 do j = 1, sny
359 do i = 1, snx
360 adpf(i,j+1) = adpf(i,j+1)+adcg2d_b(i,j,bi,bj)
361 adpf(i,j) = adpf(i,j)-adcg2d_b(i,j,bi,bj)
362 end do
363 end do
364 if (implicdiv2dflow .eq. 1.) then
365 do j = 1, sny+1
366 do i = 1, snx
367 adgvnm1(i,j,k,bi,bj) = adgvnm1(i,j,k,bi,bj)+adpf(i,j)*(ya(i,
368 $j)/deltatmom)
369 adpf(i,j) = 0.d0
370 end do
371 end do
372 else
373 do j = 1, sny+1
374 do i = 1, snx
375 adgvnm1(i,j,k,bi,bj) = adgvnm1(i,j,k,bi,bj)+adpf(i,j)*
376 $(implicdiv2dflow*ya(i,j)/deltatmom)
377 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+adpf(i,j)*((1.-
378 $implicdiv2dflow)*ya(i,j)/deltatmom)
379 adpf(i,j) = 0.d0
380 end do
381 end do
382 endif
383 do j = 1, sny
384 do i = 1, snx
385 adpf(i+1,j) = adpf(i+1,j)+adcg2d_b(i,j,bi,bj)
386 adpf(i,j) = adpf(i,j)-adcg2d_b(i,j,bi,bj)
387 end do
388 end do
389 if (implicdiv2dflow .eq. 1.) then
390 do j = 1, sny
391 do i = 1, snx+1
392 adgunm1(i,j,k,bi,bj) = adgunm1(i,j,k,bi,bj)+adpf(i,j)*(xa(i,
393 $j)/deltatmom)
394 adpf(i,j) = 0.d0
395 end do
396 end do
397 else
398 do j = 1, sny
399 do i = 1, snx+1
400 adgunm1(i,j,k,bi,bj) = adgunm1(i,j,k,bi,bj)+adpf(i,j)*
401 $(implicdiv2dflow*xa(i,j)/deltatmom)
402 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+adpf(i,j)*((1.-
403 $implicdiv2dflow)*xa(i,j)/deltatmom)
404 adpf(i,j) = 0.d0
405 end do
406 end do
407 endif
408
409 end
410
411
412 subroutine adcalc_grad_phi_surf( bi, bj, imin, imax, jmin, jmax,
413 $adetafld, adphisurfx, adphisurfy )
414 C***************************************************************
415 C***************************************************************
416 C** This routine was generated by the **
417 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
418 C***************************************************************
419 C***************************************************************
420 C==============================================
421 C all entries are defined explicitly
422 C==============================================
423 implicit none
424
425 C==============================================
426 C define parameters
427 C==============================================
428 integer nr
429 parameter ( nr = 15 )
430 integer nsx
431 parameter ( nsx = 1 )
432 integer nsy
433 parameter ( nsy = 1 )
434 integer olx
435 parameter ( olx = 3 )
436 integer oly
437 parameter ( oly = 3 )
438 integer snx
439 parameter ( snx = 20 )
440 integer sny
441 parameter ( sny = 40 )
442
443 C==============================================
444 C define common blocks
445 C==============================================
446 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
447 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
448 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
449 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
450 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
451 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
452 $tanphiatu, tanphiatv
453 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
454 double precision drc(1:nr)
455 double precision drf(1:nr)
456 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
457 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
458 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
459 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
460 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
461 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
462 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
463 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
464 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
465 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
466 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
467 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
468 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
469 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
470 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
471 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
472 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
473 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
474 double precision rc(1:nr)
475 double precision recip_drc(1:nr)
476 double precision recip_drf(1:nr)
477 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
478 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
479 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
480 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
481 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
482 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
483 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
484 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
485 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
486 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
487 $nsy)
488 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
489 $nsy)
490 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
491 $nsy)
492 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
493 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
494 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
495 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
496 double precision recip_rkfac
497 double precision rf(1:nr+1)
498 double precision rkfac
499 double precision safac(1:nr)
500 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
501 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
502 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
503 double precision xc0
504 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
505 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
506 double precision yc0
507 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
508
509 common /solve_barot/ bo_surf, recip_bo
510 double precision bo_surf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
511 double precision recip_bo(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
512
513 C==============================================
514 C define arguments
515 C==============================================
516 double precision adetafld(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
517 double precision adphisurfx(1-olx:snx+olx,1-oly:sny+oly)
518 double precision adphisurfy(1-olx:snx+olx,1-oly:sny+oly)
519 integer bi
520 integer bj
521 integer imax
522 integer imin
523 integer jmax
524 integer jmin
525
526 C==============================================
527 C define local variables
528 C==============================================
529 integer i
530 integer j
531
532 C----------------------------------------------
533 C ROUTINE BODY
534 C----------------------------------------------
535 do j = jmin, jmax
536 do i = imin, imax
537 adetafld(i,j-1,bi,bj) = adetafld(i,j-1,bi,bj)-adphisurfy(i,j)*
538 $recip_dyc(i,j,bi,bj)*bo_surf(i,j-1,bi,bj)
539 adetafld(i,j,bi,bj) = adetafld(i,j,bi,bj)+adphisurfy(i,j)*
540 $recip_dyc(i,j,bi,bj)*bo_surf(i,j,bi,bj)
541 adphisurfy(i,j) = 0.d0
542 end do
543 end do
544 do j = jmin, jmax
545 do i = imin, imax
546 adetafld(i-1,j,bi,bj) = adetafld(i-1,j,bi,bj)-adphisurfx(i,j)*
547 $recip_dxc(i,j,bi,bj)*bo_surf(i-1,j,bi,bj)
548 adetafld(i,j,bi,bj) = adetafld(i,j,bi,bj)+adphisurfx(i,j)*
549 $recip_dxc(i,j,bi,bj)*bo_surf(i,j,bi,bj)
550 adphisurfx(i,j) = 0.d0
551 end do
552 end do
553
554 end
555
556
557 subroutine adcalc_gs( bi, bj, imin, imax, jmin, jmax, k, km1, kup,
558 $ kdown, xa, ya, utrans, vtrans, rtrans, maskup, maskc, kappars,
559 $adutrans, advtrans, adrtrans, adfvers )
560 C***************************************************************
561 C***************************************************************
562 C** This routine was generated by the **
563 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
564 C***************************************************************
565 C***************************************************************
566 C==============================================
567 C all entries are defined explicitly
568 C==============================================
569 implicit none
570
571 C==============================================
572 C define parameters
573 C==============================================
574 integer npx
575 parameter ( npx = 1 )
576 integer npy
577 parameter ( npy = 1 )
578 integer nr
579 parameter ( nr = 15 )
580 integer nsx
581 parameter ( nsx = 1 )
582 integer nsy
583 parameter ( nsy = 1 )
584 integer snx
585 parameter ( snx = 20 )
586 integer nx
587 parameter ( nx = snx*nsx*npx )
588 integer sny
589 parameter ( sny = 40 )
590 integer ny
591 parameter ( ny = sny*nsy*npy )
592 integer olx
593 parameter ( olx = 3 )
594 integer oly
595 parameter ( oly = 3 )
596
597 C==============================================
598 C define common blocks
599 C==============================================
600 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
601 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
602 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
603 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
604 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
605 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
606 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
607 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
608 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
609 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
610 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
611 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
612 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
613 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
614 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
615 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
616
617 common /dynvars_r/ etan, uvel, vvel, wvel, theta, salt, gu, gv,
618 $gt, gs, gunm1, gvnm1, gtnm1, gsnm1
619 double precision etan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
620 double precision gs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
621 double precision gsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
622 double precision gt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
623 double precision gtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
624 double precision gu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
625 double precision gunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
626 double precision gv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
627 double precision gvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
628 double precision salt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
629 double precision theta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
630 double precision uvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
631 double precision vvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
632 double precision wvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
633
634 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
635 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
636 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
637 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
638 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
639 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
640 $tanphiatu, tanphiatv
641 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
642 double precision drc(1:nr)
643 double precision drf(1:nr)
644 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
645 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
646 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
647 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
648 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
649 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
650 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
651 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
652 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
653 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
654 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
655 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
656 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
657 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
658 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
659 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
660 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
661 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
662 double precision rc(1:nr)
663 double precision recip_drc(1:nr)
664 double precision recip_drf(1:nr)
665 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
666 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
667 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
668 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
669 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
670 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
671 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
672 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
673 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
674 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
675 $nsy)
676 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
677 $nsy)
678 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
679 $nsy)
680 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
681 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
682 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
683 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
684 double precision recip_rkfac
685 double precision rf(1:nr+1)
686 double precision rkfac
687 double precision safac(1:nr)
688 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
689 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
690 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
691 double precision xc0
692 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
693 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
694 double precision yc0
695 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
696
697 common /parm_l/ usingcartesiangrid, usingsphericalpolargrid,
698 $no_slip_sides, no_slip_bottom, staggertimestep, momviscosity,
699 $momadvection, momforcing, usecoriolis, mompressureforcing,
700 $tempdiffusion, tempadvection, tempforcing, saltdiffusion,
701 $saltadvection, saltforcing, implicitfreesurface, rigidlid,
702 $momstepping, tempstepping, saltstepping, metricterms,
703 $usingsphericalpolarmterms, useconstantf, usebetaplanef,
704 $usespheref, implicitdiffusion, implicitviscosity,
705 $dothetaclimrelax, dosaltclimrelax, periodicexternalforcing,
706 $usingpcoords, usingzcoords, nonhydrostatic, globalfiles,
707 $allowfreezing, groundatk1, usepickupbeforec35
708 logical allowfreezing
709 logical dosaltclimrelax
710 logical dothetaclimrelax
711 logical globalfiles
712 logical groundatk1
713 logical implicitdiffusion
714 logical implicitfreesurface
715 logical implicitviscosity
716 logical metricterms
717 logical momadvection
718 logical momforcing
719 logical mompressureforcing
720 logical momstepping
721 logical momviscosity
722 logical no_slip_bottom
723 logical no_slip_sides
724 logical nonhydrostatic
725 logical periodicexternalforcing
726 logical rigidlid
727 logical saltadvection
728 logical saltdiffusion
729 logical saltforcing
730 logical saltstepping
731 logical staggertimestep
732 logical tempadvection
733 logical tempdiffusion
734 logical tempforcing
735 logical tempstepping
736 logical usebetaplanef
737 logical useconstantf
738 logical usecoriolis
739 logical usepickupbeforec35
740 logical usespheref
741 logical usingcartesiangrid
742 logical usingpcoords
743 logical usingsphericalpolargrid
744 logical usingsphericalpolarmterms
745 logical usingzcoords
746
747 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
748 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
749 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
750 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
751 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
752 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
753 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
754 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
755 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
756 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
757 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
758 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
759 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
760 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
761 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
762 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
763 double precision abeps
764 double precision affacmom
765 double precision beta
766 double precision bottomdraglinear
767 double precision bottomdragquadratic
768 double precision cadjfreq
769 double precision cffacmom
770 double precision cg2dpcoffdfac
771 double precision cg2dtargetresidual
772 double precision cg3dtargetresidual
773 double precision chkptfreq
774 double precision cospower
775 double precision delp(nr)
776 double precision delr(nr)
777 double precision delt
778 double precision deltat
779 double precision deltatclock
780 double precision deltatmom
781 double precision deltattracer
782 double precision delx(nx)
783 double precision dely(ny)
784 double precision delz(nr)
785 double precision diffk4s
786 double precision diffk4t
787 double precision diffkhs
788 double precision diffkht
789 double precision diffkps
790 double precision diffkpt
791 double precision diffkrs
792 double precision diffkrt
793 double precision diffkzs
794 double precision diffkzt
795 double precision dumpfreq
796 double precision endtime
797 double precision externforcingcycle
798 double precision externforcingperiod
799 double precision f0
800 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
801 double precision fofacmom
802 double precision freesurffac
803 double precision gbaro
804 double precision gravity
805 double precision hfacmin
806 double precision hfacmindp
807 double precision hfacmindr
808 double precision hfacmindz
809 double precision horivertratio
810 double precision implicdiv2dflow
811 double precision implicsurfpress
812 double precision ivdc_kappa
813 double precision lambdasaltclimrelax
814 double precision lambdathetaclimrelax
815 double precision latfftfiltlo
816 double precision mtfacmom
817 double precision omega
818 double precision pchkptfreq
819 double precision pffacmom
820 double precision phimin
821 double precision rcd
822 double precision recip_gravity
823 double precision recip_horivertratio
824 double precision recip_rhoconst
825 double precision recip_rhonil
826 double precision recip_rsphere
827 double precision rhoconst
828 double precision rhonil
829 double precision ro_sealevel
830 double precision rsphere
831 double precision specvol_s(nr)
832 double precision sref(nr)
833 double precision starttime
834 double precision taucd
835 double precision tausaltclimrelax
836 double precision tauthetaclimrelax
837 double precision tavefreq
838 double precision theta_s(nr)
839 double precision thetamin
840 double precision tref(nr)
841 double precision vffacmom
842 double precision visca4
843 double precision viscah
844 double precision viscap
845 double precision viscar
846 double precision viscaz
847 double precision zonal_filt_lat
848
849 C==============================================
850 C define arguments
851 C==============================================
852 double precision adfvers(1-olx:snx+olx,1-oly:sny+oly,2)
853 double precision adrtrans(1-olx:snx+olx,1-oly:sny+oly)
854 double precision adutrans(1-olx:snx+olx,1-oly:sny+oly)
855 double precision advtrans(1-olx:snx+olx,1-oly:sny+oly)
856 integer bi
857 integer bj
858 integer imax
859 integer imin
860 integer jmax
861 integer jmin
862 integer k
863 double precision kappars(1-olx:snx+olx,1-oly:sny+oly,nr)
864 integer kdown
865 integer km1
866 integer kup
867 double precision maskc(1-olx:snx+olx,1-oly:sny+oly)
868 double precision maskup(1-olx:snx+olx,1-oly:sny+oly)
869 double precision rtrans(1-olx:snx+olx,1-oly:sny+oly)
870 double precision utrans(1-olx:snx+olx,1-oly:sny+oly)
871 double precision vtrans(1-olx:snx+olx,1-oly:sny+oly)
872 double precision xa(1-olx:snx+olx,1-oly:sny+oly)
873 double precision ya(1-olx:snx+olx,1-oly:sny+oly)
874
875 C==============================================
876 C define local variables
877 C==============================================
878 double precision adaf(1-olx:snx+olx,1-oly:sny+oly)
879 double precision addf(1-olx:snx+olx,1-oly:sny+oly)
880 double precision addf4(1-olx:snx+olx,1-oly:sny+oly)
881 double precision addsdx(1-olx:snx+olx,1-oly:sny+oly)
882 double precision addsdy(1-olx:snx+olx,1-oly:sny+oly)
883 double precision adfmer(1-olx:snx+olx,1-oly:sny+oly)
884 double precision adfzon(1-olx:snx+olx,1-oly:sny+oly)
885 double precision affacs
886 double precision dffacs
887 integer i
888 integer ip1
889 integer ip2
890 integer j
891 logical top_layer
892
893 C----------------------------------------------
894 C RESET LOCAL ADJOINT VARIABLES
895 C----------------------------------------------
896 do ip2 = 1-oly, sny+oly
897 do ip1 = 1-olx, snx+olx
898 adaf(ip1,ip2) = 0.d0
899 end do
900 end do
901 do ip2 = 1-oly, sny+oly
902 do ip1 = 1-olx, snx+olx
903 addf(ip1,ip2) = 0.d0
904 end do
905 end do
906 do ip2 = 1-oly, sny+oly
907 do ip1 = 1-olx, snx+olx
908 addf4(ip1,ip2) = 0.d0
909 end do
910 end do
911 do ip2 = 1-oly, sny+oly
912 do ip1 = 1-olx, snx+olx
913 addsdx(ip1,ip2) = 0.d0
914 end do
915 end do
916 do ip2 = 1-oly, sny+oly
917 do ip1 = 1-olx, snx+olx
918 addsdy(ip1,ip2) = 0.d0
919 end do
920 end do
921 do ip2 = 1-oly, sny+oly
922 do ip1 = 1-olx, snx+olx
923 adfmer(ip1,ip2) = 0.d0
924 end do
925 end do
926 do ip2 = 1-oly, sny+oly
927 do ip1 = 1-olx, snx+olx
928 adfzon(ip1,ip2) = 0.d0
929 end do
930 end do
931
932 C----------------------------------------------
933 C ROUTINE BODY
934 C----------------------------------------------
935 affacs = 1.d0
936 dffacs = 1.d0
937 top_layer = k .eq. 1
938 call adexternal_forcing_s( imin,imax,jmin,jmax,bi,bj,k,maskc )
939 do j = jmin, jmax-1
940 do i = imin, imax-1
941 adfmer(i,j+1) = adfmer(i,j+1)-adgs(i,j,k,bi,bj)*
942 $(recip_hfacc(i,j,k,bi,bj)*recip_drf(k)/ra(i,j,bi,bj))
943 adfmer(i,j) = adfmer(i,j)+adgs(i,j,k,bi,bj)*(recip_hfacc(i,j,
944 $k,bi,bj)*recip_drf(k)/ra(i,j,bi,bj))
945 adfvers(i,j,kdown) = adfvers(i,j,kdown)+adgs(i,j,k,bi,bj)*
946 $recip_hfacc(i,j,k,bi,bj)*recip_drf(k)/ra(i,j,bi,bj)*rkfac
947 adfvers(i,j,kup) = adfvers(i,j,kup)-adgs(i,j,k,bi,bj)*
948 $recip_hfacc(i,j,k,bi,bj)*recip_drf(k)/ra(i,j,bi,bj)*rkfac
949 adfzon(i+1,j) = adfzon(i+1,j)-adgs(i,j,k,bi,bj)*
950 $(recip_hfacc(i,j,k,bi,bj)*recip_drf(k)/ra(i,j,bi,bj))
951 adfzon(i,j) = adfzon(i,j)+adgs(i,j,k,bi,bj)*(recip_hfacc(i,j,
952 $k,bi,bj)*recip_drf(k)/ra(i,j,bi,bj))
953 adgs(i,j,k,bi,bj) = 0.d0
954 end do
955 end do
956 if (top_layer) then
957 do j = jmin, jmax
958 do i = imin, imax
959 adaf(i,j) = adaf(i,j)+adfvers(i,j,kup)*affacs*freesurffac
960 adfvers(i,j,kup) = 0.d0
961 end do
962 end do
963 endif
964 do j = jmin, jmax
965 do i = imin, imax
966 adaf(i,j) = adaf(i,j)+adfvers(i,j,kup)*affacs*maskup(i,j)
967 addf(i,j) = addf(i,j)+adfvers(i,j,kup)*dffacs*maskup(i,j)
968 adfvers(i,j,kup) = 0.d0
969 end do
970 end do
971 if (implicitdiffusion) then
972 do j = jmin, jmax
973 do i = imin, imax
974 addf(i,j) = 0.d0
975 end do
976 end do
977 else
978 do j = jmin, jmax
979 do i = imin, imax
980 adsalt(i,j,k,bi,bj) = adsalt(i,j,k,bi,bj)+addf(i,j)*ra(i,j,
981 $bi,bj)*kappars(i,j,k)*recip_drc(k)*rkfac
982 adsalt(i,j,km1,bi,bj) = adsalt(i,j,km1,bi,bj)-addf(i,j)*
983 $ra(i,j,bi,bj)*kappars(i,j,k)*recip_drc(k)*rkfac
984 addf(i,j) = 0.d0
985 end do
986 end do
987 endif
988 do j = jmin, jmax
989 do i = imin, imax
990 adrtrans(i,j) = adrtrans(i,j)+0.5d0*adaf(i,j)*(salt(i,j,k,bi,
991 $bj)+salt(i,j,km1,bi,bj))
992 adsalt(i,j,k,bi,bj) = adsalt(i,j,k,bi,bj)+0.5d0*adaf(i,j)*
993 $rtrans(i,j)
994 adsalt(i,j,km1,bi,bj) = adsalt(i,j,km1,bi,bj)+0.5d0*adaf(i,j)*
995 $rtrans(i,j)
996 adaf(i,j) = 0.d0
997 end do
998 end do
999 do j = jmin, jmax
1000 do i = imin, imax
1001 adaf(i,j) = adaf(i,j)+adfmer(i,j)*affacs
1002 addf(i,j) = addf(i,j)+adfmer(i,j)*dffacs
1003 adfmer(i,j) = 0.d0
1004 end do
1005 end do
1006 if (diffk4s .ne. 0.) then
1007 do j = jmin, jmax
1008 do i = imin, imax
1009 addf4(i,j-1) = addf4(i,j-1)-addf(i,j)*ya(i,j)*diffk4s*
1010 $recip_dyc(i,j,bi,bj)
1011 addf4(i,j) = addf4(i,j)+addf(i,j)*ya(i,j)*diffk4s*
1012 $recip_dyc(i,j,bi,bj)
1013 end do
1014 end do
1015 endif
1016 do j = jmin, jmax
1017 do i = imin, imax
1018 addsdy(i,j) = addsdy(i,j)-addf(i,j)*diffkhs*ya(i,j)
1019 addf(i,j) = 0.d0
1020 end do
1021 end do
1022 do j = jmin, jmax
1023 do i = imin, imax
1024 adsalt(i,j-1,k,bi,bj) = adsalt(i,j-1,k,bi,bj)+0.5d0*adaf(i,j)*
1025 $vtrans(i,j)
1026 adsalt(i,j,k,bi,bj) = adsalt(i,j,k,bi,bj)+0.5d0*adaf(i,j)*
1027 $vtrans(i,j)
1028 advtrans(i,j) = advtrans(i,j)+0.5d0*adaf(i,j)*(salt(i,j,k,bi,
1029 $bj)+salt(i,j-1,k,bi,bj))
1030 adaf(i,j) = 0.d0
1031 end do
1032 end do
1033 do j = jmin, jmax
1034 do i = imin, imax
1035 adaf(i,j) = adaf(i,j)+adfzon(i,j)*affacs
1036 addf(i,j) = addf(i,j)+adfzon(i,j)*dffacs
1037 adfzon(i,j) = 0.d0
1038 end do
1039 end do
1040 if (diffk4s .ne. 0.) then
1041 do j = jmin, jmax
1042 do i = imin, imax
1043 addf4(i-1,j) = addf4(i-1,j)-addf(i,j)*xa(i,j)*diffk4s*
1044 $recip_dxc(i,j,bi,bj)
1045 addf4(i,j) = addf4(i,j)+addf(i,j)*xa(i,j)*diffk4s*
1046 $recip_dxc(i,j,bi,bj)
1047 end do
1048 end do
1049 endif
1050 do j = jmin, jmax
1051 do i = imin, imax
1052 addsdx(i,j) = addsdx(i,j)-addf(i,j)*diffkhs*xa(i,j)
1053 addf(i,j) = 0.d0
1054 end do
1055 end do
1056 do j = jmin, jmax
1057 do i = imin, imax
1058 adsalt(i-1,j,k,bi,bj) = adsalt(i-1,j,k,bi,bj)+0.5d0*adaf(i,j)*
1059 $utrans(i,j)
1060 adsalt(i,j,k,bi,bj) = adsalt(i,j,k,bi,bj)+0.5d0*adaf(i,j)*
1061 $utrans(i,j)
1062 adutrans(i,j) = adutrans(i,j)+0.5d0*adaf(i,j)*(salt(i,j,k,bi,
1063 $bj)+salt(i-1,j,k,bi,bj))
1064 adaf(i,j) = 0.d0
1065 end do
1066 end do
1067 if (diffk4s .ne. 0.) then
1068 do j = 1-oly+1, sny+oly-1
1069 do i = 1-olx+1, snx+olx-1
1070 addsdx(i+1,j) = addsdx(i+1,j)+addf4(i,j)*recip_hfacc(i,j,k,
1071 $bi,bj)*recip_drf(k)/ra(i,j,bi,bj)*xa(i+1,j)
1072 addsdx(i,j) = addsdx(i,j)-addf4(i,j)*recip_hfacc(i,j,k,bi,
1073 $bj)*recip_drf(k)/ra(i,j,bi,bj)*xa(i,j)
1074 addsdy(i,j+1) = addsdy(i,j+1)+addf4(i,j)*recip_hfacc(i,j,k,
1075 $bi,bj)*recip_drf(k)/ra(i,j,bi,bj)*ya(i,j+1)
1076 addsdy(i,j) = addsdy(i,j)-addf4(i,j)*recip_hfacc(i,j,k,bi,
1077 $bj)*recip_drf(k)/ra(i,j,bi,bj)*ya(i,j)
1078 addf4(i,j) = 0.d0
1079 end do
1080 end do
1081 endif
1082 do j = 1-oly+1, sny+oly
1083 do i = 1-olx, snx+olx
1084 adsalt(i,j-1,k,bi,bj) = adsalt(i,j-1,k,bi,bj)-addsdy(i,j)*
1085 $recip_dyc(i,j,bi,bj)
1086 adsalt(i,j,k,bi,bj) = adsalt(i,j,k,bi,bj)+addsdy(i,j)*
1087 $recip_dyc(i,j,bi,bj)
1088 addsdy(i,j) = 0.d0
1089 end do
1090 end do
1091 do j = 1-oly, sny+oly
1092 do i = 1-olx+1, snx+olx
1093 adsalt(i-1,j,k,bi,bj) = adsalt(i-1,j,k,bi,bj)-addsdx(i,j)*
1094 $recip_dxc(i,j,bi,bj)
1095 adsalt(i,j,k,bi,bj) = adsalt(i,j,k,bi,bj)+addsdx(i,j)*
1096 $recip_dxc(i,j,bi,bj)
1097 addsdx(i,j) = 0.d0
1098 end do
1099 end do
1100 do j = 1-oly, sny+oly
1101 do i = 1-olx, snx+olx
1102 adfvers(i,j,kup) = 0.d0
1103 end do
1104 end do
1105
1106 end
1107
1108
1109 subroutine adcalc_gt( bi, bj, imin, imax, jmin, jmax, k, km1, kup,
1110 $ kdown, xa, ya, utrans, vtrans, rtrans, maskup, maskc, kappart,
1111 $adutrans, advtrans, adrtrans, adfvert )
1112 C***************************************************************
1113 C***************************************************************
1114 C** This routine was generated by the **
1115 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
1116 C***************************************************************
1117 C***************************************************************
1118 C==============================================
1119 C all entries are defined explicitly
1120 C==============================================
1121 implicit none
1122
1123 C==============================================
1124 C define parameters
1125 C==============================================
1126 integer npx
1127 parameter ( npx = 1 )
1128 integer npy
1129 parameter ( npy = 1 )
1130 integer nr
1131 parameter ( nr = 15 )
1132 integer nsx
1133 parameter ( nsx = 1 )
1134 integer nsy
1135 parameter ( nsy = 1 )
1136 integer snx
1137 parameter ( snx = 20 )
1138 integer nx
1139 parameter ( nx = snx*nsx*npx )
1140 integer sny
1141 parameter ( sny = 40 )
1142 integer ny
1143 parameter ( ny = sny*nsy*npy )
1144 integer olx
1145 parameter ( olx = 3 )
1146 integer oly
1147 parameter ( oly = 3 )
1148
1149 C==============================================
1150 C define common blocks
1151 C==============================================
1152 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
1153 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
1154 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1155 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1156 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1157 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1158 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1159 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1160 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1161 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1162 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1163 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1164 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1165 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1166 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1167 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1168
1169 common /dynvars_r/ etan, uvel, vvel, wvel, theta, salt, gu, gv,
1170 $gt, gs, gunm1, gvnm1, gtnm1, gsnm1
1171 double precision etan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1172 double precision gs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1173 double precision gsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1174 double precision gt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1175 double precision gtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1176 double precision gu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1177 double precision gunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1178 double precision gv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1179 double precision gvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1180 double precision salt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1181 double precision theta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1182 double precision uvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1183 double precision vvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1184 double precision wvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1185
1186 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
1187 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
1188 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
1189 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
1190 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
1191 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
1192 $tanphiatu, tanphiatv
1193 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1194 double precision drc(1:nr)
1195 double precision drf(1:nr)
1196 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1197 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1198 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1199 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1200 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1201 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1202 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1203 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1204 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1205 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
1206 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
1207 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
1208 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
1209 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
1210 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1211 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1212 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1213 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1214 double precision rc(1:nr)
1215 double precision recip_drc(1:nr)
1216 double precision recip_drf(1:nr)
1217 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1218 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1219 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1220 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1221 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1222 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1223 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1224 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1225 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1226 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
1227 $nsy)
1228 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
1229 $nsy)
1230 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
1231 $nsy)
1232 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1233 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1234 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1235 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1236 double precision recip_rkfac
1237 double precision rf(1:nr+1)
1238 double precision rkfac
1239 double precision safac(1:nr)
1240 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1241 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1242 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1243 double precision xc0
1244 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1245 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1246 double precision yc0
1247 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1248
1249 common /parm_l/ usingcartesiangrid, usingsphericalpolargrid,
1250 $no_slip_sides, no_slip_bottom, staggertimestep, momviscosity,
1251 $momadvection, momforcing, usecoriolis, mompressureforcing,
1252 $tempdiffusion, tempadvection, tempforcing, saltdiffusion,
1253 $saltadvection, saltforcing, implicitfreesurface, rigidlid,
1254 $momstepping, tempstepping, saltstepping, metricterms,
1255 $usingsphericalpolarmterms, useconstantf, usebetaplanef,
1256 $usespheref, implicitdiffusion, implicitviscosity,
1257 $dothetaclimrelax, dosaltclimrelax, periodicexternalforcing,
1258 $usingpcoords, usingzcoords, nonhydrostatic, globalfiles,
1259 $allowfreezing, groundatk1, usepickupbeforec35
1260 logical allowfreezing
1261 logical dosaltclimrelax
1262 logical dothetaclimrelax
1263 logical globalfiles
1264 logical groundatk1
1265 logical implicitdiffusion
1266 logical implicitfreesurface
1267 logical implicitviscosity
1268 logical metricterms
1269 logical momadvection
1270 logical momforcing
1271 logical mompressureforcing
1272 logical momstepping
1273 logical momviscosity
1274 logical no_slip_bottom
1275 logical no_slip_sides
1276 logical nonhydrostatic
1277 logical periodicexternalforcing
1278 logical rigidlid
1279 logical saltadvection
1280 logical saltdiffusion
1281 logical saltforcing
1282 logical saltstepping
1283 logical staggertimestep
1284 logical tempadvection
1285 logical tempdiffusion
1286 logical tempforcing
1287 logical tempstepping
1288 logical usebetaplanef
1289 logical useconstantf
1290 logical usecoriolis
1291 logical usepickupbeforec35
1292 logical usespheref
1293 logical usingcartesiangrid
1294 logical usingpcoords
1295 logical usingsphericalpolargrid
1296 logical usingsphericalpolarmterms
1297 logical usingzcoords
1298
1299 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
1300 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
1301 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
1302 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
1303 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
1304 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
1305 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
1306 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
1307 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
1308 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
1309 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
1310 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
1311 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
1312 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
1313 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
1314 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
1315 double precision abeps
1316 double precision affacmom
1317 double precision beta
1318 double precision bottomdraglinear
1319 double precision bottomdragquadratic
1320 double precision cadjfreq
1321 double precision cffacmom
1322 double precision cg2dpcoffdfac
1323 double precision cg2dtargetresidual
1324 double precision cg3dtargetresidual
1325 double precision chkptfreq
1326 double precision cospower
1327 double precision delp(nr)
1328 double precision delr(nr)
1329 double precision delt
1330 double precision deltat
1331 double precision deltatclock
1332 double precision deltatmom
1333 double precision deltattracer
1334 double precision delx(nx)
1335 double precision dely(ny)
1336 double precision delz(nr)
1337 double precision diffk4s
1338 double precision diffk4t
1339 double precision diffkhs
1340 double precision diffkht
1341 double precision diffkps
1342 double precision diffkpt
1343 double precision diffkrs
1344 double precision diffkrt
1345 double precision diffkzs
1346 double precision diffkzt
1347 double precision dumpfreq
1348 double precision endtime
1349 double precision externforcingcycle
1350 double precision externforcingperiod
1351 double precision f0
1352 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1353 double precision fofacmom
1354 double precision freesurffac
1355 double precision gbaro
1356 double precision gravity
1357 double precision hfacmin
1358 double precision hfacmindp
1359 double precision hfacmindr
1360 double precision hfacmindz
1361 double precision horivertratio
1362 double precision implicdiv2dflow
1363 double precision implicsurfpress
1364 double precision ivdc_kappa
1365 double precision lambdasaltclimrelax
1366 double precision lambdathetaclimrelax
1367 double precision latfftfiltlo
1368 double precision mtfacmom
1369 double precision omega
1370 double precision pchkptfreq
1371 double precision pffacmom
1372 double precision phimin
1373 double precision rcd
1374 double precision recip_gravity
1375 double precision recip_horivertratio
1376 double precision recip_rhoconst
1377 double precision recip_rhonil
1378 double precision recip_rsphere
1379 double precision rhoconst
1380 double precision rhonil
1381 double precision ro_sealevel
1382 double precision rsphere
1383 double precision specvol_s(nr)
1384 double precision sref(nr)
1385 double precision starttime
1386 double precision taucd
1387 double precision tausaltclimrelax
1388 double precision tauthetaclimrelax
1389 double precision tavefreq
1390 double precision theta_s(nr)
1391 double precision thetamin
1392 double precision tref(nr)
1393 double precision vffacmom
1394 double precision visca4
1395 double precision viscah
1396 double precision viscap
1397 double precision viscar
1398 double precision viscaz
1399 double precision zonal_filt_lat
1400
1401 C==============================================
1402 C define arguments
1403 C==============================================
1404 double precision adfvert(1-olx:snx+olx,1-oly:sny+oly,2)
1405 double precision adrtrans(1-olx:snx+olx,1-oly:sny+oly)
1406 double precision adutrans(1-olx:snx+olx,1-oly:sny+oly)
1407 double precision advtrans(1-olx:snx+olx,1-oly:sny+oly)
1408 integer bi
1409 integer bj
1410 integer imax
1411 integer imin
1412 integer jmax
1413 integer jmin
1414 integer k
1415 double precision kappart(1-olx:snx+olx,1-oly:sny+oly,nr)
1416 integer kdown
1417 integer km1
1418 integer kup
1419 double precision maskc(1-olx:snx+olx,1-oly:sny+oly)
1420 double precision maskup(1-olx:snx+olx,1-oly:sny+oly)
1421 double precision rtrans(1-olx:snx+olx,1-oly:sny+oly)
1422 double precision utrans(1-olx:snx+olx,1-oly:sny+oly)
1423 double precision vtrans(1-olx:snx+olx,1-oly:sny+oly)
1424 double precision xa(1-olx:snx+olx,1-oly:sny+oly)
1425 double precision ya(1-olx:snx+olx,1-oly:sny+oly)
1426
1427 C==============================================
1428 C define local variables
1429 C==============================================
1430 double precision adaf(1-olx:snx+olx,1-oly:sny+oly)
1431 double precision addf(1-olx:snx+olx,1-oly:sny+oly)
1432 double precision addf4(1-olx:snx+olx,1-oly:sny+oly)
1433 double precision addtdx(1-olx:snx+olx,1-oly:sny+oly)
1434 double precision addtdy(1-olx:snx+olx,1-oly:sny+oly)
1435 double precision adfmer(1-olx:snx+olx,1-oly:sny+oly)
1436 double precision adfzon(1-olx:snx+olx,1-oly:sny+oly)
1437 double precision affact
1438 double precision dffact
1439 integer i
1440 integer ip1
1441 integer ip2
1442 integer j
1443 logical top_layer
1444
1445 C----------------------------------------------
1446 C RESET LOCAL ADJOINT VARIABLES
1447 C----------------------------------------------
1448 do ip2 = 1-oly, sny+oly
1449 do ip1 = 1-olx, snx+olx
1450 adaf(ip1,ip2) = 0.d0
1451 end do
1452 end do
1453 do ip2 = 1-oly, sny+oly
1454 do ip1 = 1-olx, snx+olx
1455 addf(ip1,ip2) = 0.d0
1456 end do
1457 end do
1458 do ip2 = 1-oly, sny+oly
1459 do ip1 = 1-olx, snx+olx
1460 addf4(ip1,ip2) = 0.d0
1461 end do
1462 end do
1463 do ip2 = 1-oly, sny+oly
1464 do ip1 = 1-olx, snx+olx
1465 addtdx(ip1,ip2) = 0.d0
1466 end do
1467 end do
1468 do ip2 = 1-oly, sny+oly
1469 do ip1 = 1-olx, snx+olx
1470 addtdy(ip1,ip2) = 0.d0
1471 end do
1472 end do
1473 do ip2 = 1-oly, sny+oly
1474 do ip1 = 1-olx, snx+olx
1475 adfmer(ip1,ip2) = 0.d0
1476 end do
1477 end do
1478 do ip2 = 1-oly, sny+oly
1479 do ip1 = 1-olx, snx+olx
1480 adfzon(ip1,ip2) = 0.d0
1481 end do
1482 end do
1483
1484 C----------------------------------------------
1485 C ROUTINE BODY
1486 C----------------------------------------------
1487 affact = 1.d0
1488 dffact = 1.d0
1489 top_layer = k .eq. 1
1490 call adexternal_forcing_t( imin,imax,jmin,jmax,bi,bj,k,maskc )
1491 do j = jmin, jmax
1492 do i = imin, imax
1493 adfmer(i,j+1) = adfmer(i,j+1)-adgt(i,j,k,bi,bj)*
1494 $(recip_hfacc(i,j,k,bi,bj)*recip_drf(k)/ra(i,j,bi,bj))
1495 adfmer(i,j) = adfmer(i,j)+adgt(i,j,k,bi,bj)*(recip_hfacc(i,j,
1496 $k,bi,bj)*recip_drf(k)/ra(i,j,bi,bj))
1497 adfvert(i,j,kdown) = adfvert(i,j,kdown)+adgt(i,j,k,bi,bj)*
1498 $recip_hfacc(i,j,k,bi,bj)*recip_drf(k)/ra(i,j,bi,bj)*rkfac
1499 adfvert(i,j,kup) = adfvert(i,j,kup)-adgt(i,j,k,bi,bj)*
1500 $recip_hfacc(i,j,k,bi,bj)*recip_drf(k)/ra(i,j,bi,bj)*rkfac
1501 adfzon(i+1,j) = adfzon(i+1,j)-adgt(i,j,k,bi,bj)*
1502 $(recip_hfacc(i,j,k,bi,bj)*recip_drf(k)/ra(i,j,bi,bj))
1503 adfzon(i,j) = adfzon(i,j)+adgt(i,j,k,bi,bj)*(recip_hfacc(i,j,
1504 $k,bi,bj)*recip_drf(k)/ra(i,j,bi,bj))
1505 adgt(i,j,k,bi,bj) = 0.d0
1506 end do
1507 end do
1508 if (top_layer) then
1509 do j = jmin, jmax
1510 do i = imin, imax
1511 adaf(i,j) = adaf(i,j)+adfvert(i,j,kup)*affact*freesurffac
1512 adfvert(i,j,kup) = 0.d0
1513 end do
1514 end do
1515 endif
1516 do j = jmin, jmax
1517 do i = imin, imax
1518 adaf(i,j) = adaf(i,j)+adfvert(i,j,kup)*affact*maskup(i,j)
1519 addf(i,j) = addf(i,j)+adfvert(i,j,kup)*dffact*maskup(i,j)
1520 adfvert(i,j,kup) = 0.d0
1521 end do
1522 end do
1523 if (implicitdiffusion) then
1524 do j = jmin, jmax
1525 do i = imin, imax
1526 addf(i,j) = 0.d0
1527 end do
1528 end do
1529 else
1530 do j = jmin, jmax
1531 do i = imin, imax
1532 adtheta(i,j,k,bi,bj) = adtheta(i,j,k,bi,bj)+addf(i,j)*ra(i,
1533 $j,bi,bj)*kappart(i,j,k)*recip_drc(k)*rkfac
1534 adtheta(i,j,km1,bi,bj) = adtheta(i,j,km1,bi,bj)-addf(i,j)*
1535 $ra(i,j,bi,bj)*kappart(i,j,k)*recip_drc(k)*rkfac
1536 addf(i,j) = 0.d0
1537 end do
1538 end do
1539 endif
1540 do j = jmin, jmax
1541 do i = imin, imax
1542 adrtrans(i,j) = adrtrans(i,j)+0.5d0*adaf(i,j)*(theta(i,j,k,bi,
1543 $bj)+theta(i,j,km1,bi,bj))
1544 adtheta(i,j,k,bi,bj) = adtheta(i,j,k,bi,bj)+0.5d0*adaf(i,j)*
1545 $rtrans(i,j)
1546 adtheta(i,j,km1,bi,bj) = adtheta(i,j,km1,bi,bj)+0.5d0*adaf(i,
1547 $j)*rtrans(i,j)
1548 adaf(i,j) = 0.d0
1549 end do
1550 end do
1551 do j = jmin, jmax
1552 do i = imin, imax
1553 adaf(i,j) = adaf(i,j)+adfmer(i,j)*affact
1554 addf(i,j) = addf(i,j)+adfmer(i,j)*dffact
1555 adfmer(i,j) = 0.d0
1556 end do
1557 end do
1558 if (diffk4t .ne. 0.) then
1559 do j = jmin, jmax
1560 do i = imin, imax
1561 addf4(i,j-1) = addf4(i,j-1)-addf(i,j)*ya(i,j)*diffk4t*
1562 $recip_dyc(i,j,bi,bj)
1563 addf4(i,j) = addf4(i,j)+addf(i,j)*ya(i,j)*diffk4t*
1564 $recip_dyc(i,j,bi,bj)
1565 end do
1566 end do
1567 endif
1568 do j = jmin, jmax
1569 do i = imin, imax
1570 addtdy(i,j) = addtdy(i,j)-addf(i,j)*diffkht*ya(i,j)
1571 addf(i,j) = 0.d0
1572 end do
1573 end do
1574 do j = jmin, jmax
1575 do i = imin, imax
1576 adtheta(i,j-1,k,bi,bj) = adtheta(i,j-1,k,bi,bj)+0.5d0*adaf(i,
1577 $j)*vtrans(i,j)
1578 adtheta(i,j,k,bi,bj) = adtheta(i,j,k,bi,bj)+0.5d0*adaf(i,j)*
1579 $vtrans(i,j)
1580 advtrans(i,j) = advtrans(i,j)+0.5d0*adaf(i,j)*(theta(i,j,k,bi,
1581 $bj)+theta(i,j-1,k,bi,bj))
1582 adaf(i,j) = 0.d0
1583 end do
1584 end do
1585 do j = jmin, jmax
1586 do i = imin, imax
1587 adaf(i,j) = adaf(i,j)+adfzon(i,j)*affact
1588 addf(i,j) = addf(i,j)+adfzon(i,j)*dffact
1589 adfzon(i,j) = 0.d0
1590 end do
1591 end do
1592 if (diffk4t .ne. 0.) then
1593 do j = jmin, jmax
1594 do i = imin, imax
1595 addf4(i-1,j) = addf4(i-1,j)-addf(i,j)*xa(i,j)*diffk4t*
1596 $recip_dxc(i,j,bi,bj)
1597 addf4(i,j) = addf4(i,j)+addf(i,j)*xa(i,j)*diffk4t*
1598 $recip_dxc(i,j,bi,bj)
1599 end do
1600 end do
1601 endif
1602 do j = jmin, jmax
1603 do i = imin, imax
1604 addtdx(i,j) = addtdx(i,j)-addf(i,j)*diffkht*xa(i,j)
1605 addf(i,j) = 0.d0
1606 end do
1607 end do
1608 do j = jmin, jmax
1609 do i = imin, imax
1610 adtheta(i-1,j,k,bi,bj) = adtheta(i-1,j,k,bi,bj)+0.5d0*adaf(i,
1611 $j)*utrans(i,j)
1612 adtheta(i,j,k,bi,bj) = adtheta(i,j,k,bi,bj)+0.5d0*adaf(i,j)*
1613 $utrans(i,j)
1614 adutrans(i,j) = adutrans(i,j)+0.5d0*adaf(i,j)*(theta(i,j,k,bi,
1615 $bj)+theta(i-1,j,k,bi,bj))
1616 adaf(i,j) = 0.d0
1617 end do
1618 end do
1619 if (diffk4t .ne. 0.) then
1620 do j = 1-oly+1, sny+oly-1
1621 do i = 1-olx+1, snx+olx-1
1622 addtdx(i+1,j) = addtdx(i+1,j)+addf4(i,j)*recip_hfacc(i,j,k,
1623 $bi,bj)*recip_drf(k)/ra(i,j,bi,bj)*xa(i+1,j)
1624 addtdx(i,j) = addtdx(i,j)-addf4(i,j)*recip_hfacc(i,j,k,bi,
1625 $bj)*recip_drf(k)/ra(i,j,bi,bj)*xa(i,j)
1626 addtdy(i,j+1) = addtdy(i,j+1)+addf4(i,j)*recip_hfacc(i,j,k,
1627 $bi,bj)*recip_drf(k)/ra(i,j,bi,bj)*ya(i,j+1)
1628 addtdy(i,j) = addtdy(i,j)-addf4(i,j)*recip_hfacc(i,j,k,bi,
1629 $bj)*recip_drf(k)/ra(i,j,bi,bj)*ya(i,j)
1630 addf4(i,j) = 0.d0
1631 end do
1632 end do
1633 endif
1634 do j = 1-oly+1, sny+oly
1635 do i = 1-olx, snx+olx
1636 adtheta(i,j-1,k,bi,bj) = adtheta(i,j-1,k,bi,bj)-addtdy(i,j)*
1637 $recip_dyc(i,j,bi,bj)
1638 adtheta(i,j,k,bi,bj) = adtheta(i,j,k,bi,bj)+addtdy(i,j)*
1639 $recip_dyc(i,j,bi,bj)
1640 addtdy(i,j) = 0.d0
1641 end do
1642 end do
1643 do j = 1-oly, sny+oly
1644 do i = 1-olx+1, snx+olx
1645 adtheta(i-1,j,k,bi,bj) = adtheta(i-1,j,k,bi,bj)-addtdx(i,j)*
1646 $recip_dxc(i,j,bi,bj)
1647 adtheta(i,j,k,bi,bj) = adtheta(i,j,k,bi,bj)+addtdx(i,j)*
1648 $recip_dxc(i,j,bi,bj)
1649 addtdx(i,j) = 0.d0
1650 end do
1651 end do
1652 do j = 1-oly, sny+oly
1653 do i = 1-olx, snx+olx
1654 adfvert(i,j,kup) = 0.d0
1655 end do
1656 end do
1657
1658 end
1659
1660
1661 subroutine adcalc_mom_rhs( bi, bj, imin, imax, jmin, jmax, k, kup,
1662 $ kdown, kapparu, kapparv, adphihyd, adfveru, adfverv )
1663 C***************************************************************
1664 C***************************************************************
1665 C** This routine was generated by the **
1666 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
1667 C***************************************************************
1668 C***************************************************************
1669 C==============================================
1670 C all entries are defined explicitly
1671 C==============================================
1672 implicit none
1673
1674 C==============================================
1675 C define parameters
1676 C==============================================
1677 double precision pi
1678 parameter ( pi = 3.1415926535898d0 )
1679 double precision deg2rad
1680 parameter ( deg2rad = 2.d0*pi/360.d0 )
1681 integer max_no_threads
1682 parameter ( max_no_threads = 32 )
1683 integer npx
1684 parameter ( npx = 1 )
1685 integer npy
1686 parameter ( npy = 1 )
1687 integer nr
1688 parameter ( nr = 15 )
1689 integer nsx
1690 parameter ( nsx = 1 )
1691 integer nsy
1692 parameter ( nsy = 1 )
1693 integer snx
1694 parameter ( snx = 20 )
1695 integer nx
1696 parameter ( nx = snx*nsx*npx )
1697 integer sny
1698 parameter ( sny = 40 )
1699 integer ny
1700 parameter ( ny = sny*nsy*npy )
1701 integer olx
1702 parameter ( olx = 3 )
1703 integer oly
1704 parameter ( oly = 3 )
1705
1706 C==============================================
1707 C define common blocks
1708 C==============================================
1709 common /addynvars_cd/ aduveld, advveld, adetanm1, adunm1, advnm1,
1710 $adgucd, adgvcd
1711 double precision adetanm1(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1712 double precision adgucd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1713 double precision adgvcd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1714 double precision adunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1715 double precision aduveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1716 double precision advnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1717 double precision advveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1718
1719 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
1720 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
1721 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1722 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1723 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1724 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1725 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1726 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1727 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1728 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1729 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1730 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1731 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1732 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1733 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1734 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1735
1736 common /dynvars_r/ etan, uvel, vvel, wvel, theta, salt, gu, gv,
1737 $gt, gs, gunm1, gvnm1, gtnm1, gsnm1
1738 double precision etan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1739 double precision gs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1740 double precision gsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1741 double precision gt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1742 double precision gtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1743 double precision gu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1744 double precision gunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1745 double precision gv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1746 double precision gvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1747 double precision salt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1748 double precision theta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1749 double precision uvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1750 double precision vvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1751 double precision wvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
1752
1753 common /eeparams_i/ errormessageunit, standardmessageunit,
1754 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
1755 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
1756 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
1757 integer eedataunit
1758 integer errormessageunit
1759 integer ioerrorcount(max_no_threads)
1760 integer modeldataunit
1761 integer mybxhi(max_no_threads)
1762 integer mybxlo(max_no_threads)
1763 integer mybyhi(max_no_threads)
1764 integer mybylo(max_no_threads)
1765 integer myprocid
1766 integer mypx
1767 integer mypy
1768 integer myxgloballo
1769 integer myygloballo
1770 integer nthreads
1771 integer ntx
1772 integer nty
1773 integer numberofprocs
1774 integer pidio
1775 integer scrunit1
1776 integer scrunit2
1777 integer standardmessageunit
1778
1779 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
1780 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
1781 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
1782 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
1783 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
1784 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
1785 $tanphiatu, tanphiatv
1786 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1787 double precision drc(1:nr)
1788 double precision drf(1:nr)
1789 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1790 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1791 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1792 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1793 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1794 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1795 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1796 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1797 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1798 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
1799 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
1800 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
1801 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
1802 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
1803 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1804 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1805 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1806 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1807 double precision rc(1:nr)
1808 double precision recip_drc(1:nr)
1809 double precision recip_drf(1:nr)
1810 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1811 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1812 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1813 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1814 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1815 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1816 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1817 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1818 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1819 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
1820 $nsy)
1821 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
1822 $nsy)
1823 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
1824 $nsy)
1825 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1826 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1827 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1828 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1829 double precision recip_rkfac
1830 double precision rf(1:nr+1)
1831 double precision rkfac
1832 double precision safac(1:nr)
1833 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1834 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1835 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1836 double precision xc0
1837 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1838 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1839 double precision yc0
1840 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1841
1842 common /parm_l/ usingcartesiangrid, usingsphericalpolargrid,
1843 $no_slip_sides, no_slip_bottom, staggertimestep, momviscosity,
1844 $momadvection, momforcing, usecoriolis, mompressureforcing,
1845 $tempdiffusion, tempadvection, tempforcing, saltdiffusion,
1846 $saltadvection, saltforcing, implicitfreesurface, rigidlid,
1847 $momstepping, tempstepping, saltstepping, metricterms,
1848 $usingsphericalpolarmterms, useconstantf, usebetaplanef,
1849 $usespheref, implicitdiffusion, implicitviscosity,
1850 $dothetaclimrelax, dosaltclimrelax, periodicexternalforcing,
1851 $usingpcoords, usingzcoords, nonhydrostatic, globalfiles,
1852 $allowfreezing, groundatk1, usepickupbeforec35
1853 logical allowfreezing
1854 logical dosaltclimrelax
1855 logical dothetaclimrelax
1856 logical globalfiles
1857 logical groundatk1
1858 logical implicitdiffusion
1859 logical implicitfreesurface
1860 logical implicitviscosity
1861 logical metricterms
1862 logical momadvection
1863 logical momforcing
1864 logical mompressureforcing
1865 logical momstepping
1866 logical momviscosity
1867 logical no_slip_bottom
1868 logical no_slip_sides
1869 logical nonhydrostatic
1870 logical periodicexternalforcing
1871 logical rigidlid
1872 logical saltadvection
1873 logical saltdiffusion
1874 logical saltforcing
1875 logical saltstepping
1876 logical staggertimestep
1877 logical tempadvection
1878 logical tempdiffusion
1879 logical tempforcing
1880 logical tempstepping
1881 logical usebetaplanef
1882 logical useconstantf
1883 logical usecoriolis
1884 logical usepickupbeforec35
1885 logical usespheref
1886 logical usingcartesiangrid
1887 logical usingpcoords
1888 logical usingsphericalpolargrid
1889 logical usingsphericalpolarmterms
1890 logical usingzcoords
1891
1892 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
1893 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
1894 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
1895 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
1896 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
1897 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
1898 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
1899 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
1900 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
1901 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
1902 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
1903 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
1904 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
1905 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
1906 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
1907 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
1908 double precision abeps
1909 double precision affacmom
1910 double precision beta
1911 double precision bottomdraglinear
1912 double precision bottomdragquadratic
1913 double precision cadjfreq
1914 double precision cffacmom
1915 double precision cg2dpcoffdfac
1916 double precision cg2dtargetresidual
1917 double precision cg3dtargetresidual
1918 double precision chkptfreq
1919 double precision cospower
1920 double precision delp(nr)
1921 double precision delr(nr)
1922 double precision delt
1923 double precision deltat
1924 double precision deltatclock
1925 double precision deltatmom
1926 double precision deltattracer
1927 double precision delx(nx)
1928 double precision dely(ny)
1929 double precision delz(nr)
1930 double precision diffk4s
1931 double precision diffk4t
1932 double precision diffkhs
1933 double precision diffkht
1934 double precision diffkps
1935 double precision diffkpt
1936 double precision diffkrs
1937 double precision diffkrt
1938 double precision diffkzs
1939 double precision diffkzt
1940 double precision dumpfreq
1941 double precision endtime
1942 double precision externforcingcycle
1943 double precision externforcingperiod
1944 double precision f0
1945 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1946 double precision fofacmom
1947 double precision freesurffac
1948 double precision gbaro
1949 double precision gravity
1950 double precision hfacmin
1951 double precision hfacmindp
1952 double precision hfacmindr
1953 double precision hfacmindz
1954 double precision horivertratio
1955 double precision implicdiv2dflow
1956 double precision implicsurfpress
1957 double precision ivdc_kappa
1958 double precision lambdasaltclimrelax
1959 double precision lambdathetaclimrelax
1960 double precision latfftfiltlo
1961 double precision mtfacmom
1962 double precision omega
1963 double precision pchkptfreq
1964 double precision pffacmom
1965 double precision phimin
1966 double precision rcd
1967 double precision recip_gravity
1968 double precision recip_horivertratio
1969 double precision recip_rhoconst
1970 double precision recip_rhonil
1971 double precision recip_rsphere
1972 double precision rhoconst
1973 double precision rhonil
1974 double precision ro_sealevel
1975 double precision rsphere
1976 double precision specvol_s(nr)
1977 double precision sref(nr)
1978 double precision starttime
1979 double precision taucd
1980 double precision tausaltclimrelax
1981 double precision tauthetaclimrelax
1982 double precision tavefreq
1983 double precision theta_s(nr)
1984 double precision thetamin
1985 double precision tref(nr)
1986 double precision vffacmom
1987 double precision visca4
1988 double precision viscah
1989 double precision viscap
1990 double precision viscar
1991 double precision viscaz
1992 double precision zonal_filt_lat
1993
1994 common /solve_barot/ bo_surf, recip_bo
1995 double precision bo_surf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1996 double precision recip_bo(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
1997
1998 C==============================================
1999 C define arguments
2000 C==============================================
2001 double precision adfveru(1-olx:snx+olx,1-oly:sny+oly,2)
2002 double precision adfverv(1-olx:snx+olx,1-oly:sny+oly,2)
2003 double precision adphihyd(1-olx:snx+olx,1-oly:sny+oly,nr)
2004 integer bi
2005 integer bj
2006 integer imax
2007 integer imin
2008 integer jmax
2009 integer jmin
2010 integer k
2011 double precision kapparu(1-olx:snx+olx,1-oly:sny+oly,nr)
2012 double precision kapparv(1-olx:snx+olx,1-oly:sny+oly,nr)
2013 integer kdown
2014 integer kup
2015
2016 C==============================================
2017 C define local variables
2018 C==============================================
2019 double precision ab05
2020 double precision ab15
2021 double precision adaf(1-olx:snx+olx,1-oly:sny+oly)
2022 double precision adfmer(1-olx:snx+olx,1-oly:sny+oly)
2023 double precision adfzon(1-olx:snx+olx,1-oly:sny+oly)
2024 double precision adke(1-olx:snx+olx,1-oly:sny+oly)
2025 double precision admt(1-olx:snx+olx,1-oly:sny+oly)
2026 double precision adpf(1-olx:snx+olx,1-oly:sny+oly)
2027 double precision adutrans(1-olx:snx+olx,1-oly:sny+oly)
2028 double precision adv4f(1-olx:snx+olx,1-oly:sny+oly)
2029 double precision advf(1-olx:snx+olx,1-oly:sny+oly)
2030 double precision advtrans(1-olx:snx+olx,1-oly:sny+oly)
2031 double precision ahdudxfac
2032 double precision ahdudyfac
2033 double precision ahdvdxfac
2034 double precision ahdvdyfac
2035 double precision ardudrfac
2036 double precision ardvdrfac
2037 logical bottomdragterms
2038 double precision cosfacu(1-oly:sny+oly)
2039 double precision cosfacv(1-oly:sny+oly)
2040 double precision fufac
2041 double precision fvfac
2042 double precision hfacz(1-olx:snx+olx,1-oly:sny+oly)
2043 double precision hfaczclosede
2044 double precision hfaczclosedn
2045 double precision hfaczcloseds
2046 double precision hfaczclosedw
2047 double precision hfaczopen
2048 integer i
2049 integer ip1
2050 integer ip2
2051 integer j
2052 integer jg
2053 double precision ke(1-olx:snx+olx,1-oly:sny+oly)
2054 integer kp1
2055 double precision maskdown
2056 double precision mtfacu
2057 double precision mtfacv
2058 double precision phxfac
2059 double precision phyfac
2060 double precision rdrckp1
2061 double precision rveldudrfac
2062 double precision rveldvdrfac
2063 double precision rvelmaskoverride
2064 double precision ududxfac
2065 double precision udvdxfac
2066 double precision utrans(1-olx:snx+olx,1-oly:sny+oly)
2067 double precision vdudyfac
2068 double precision vdvdyfac
2069 double precision vtrans(1-olx:snx+olx,1-oly:sny+oly)
2070 double precision wvelbottomoverride
2071 double precision xa(1-olx:snx+olx,1-oly:sny+oly)
2072 double precision ya(1-olx:snx+olx,1-oly:sny+oly)
2073
2074 C----------------------------------------------
2075 C RESET LOCAL ADJOINT VARIABLES
2076 C----------------------------------------------
2077 do ip2 = 1-oly, sny+oly
2078 do ip1 = 1-olx, snx+olx
2079 adaf(ip1,ip2) = 0.d0
2080 end do
2081 end do
2082 do ip2 = 1-oly, sny+oly
2083 do ip1 = 1-olx, snx+olx
2084 adfmer(ip1,ip2) = 0.d0
2085 end do
2086 end do
2087 do ip2 = 1-oly, sny+oly
2088 do ip1 = 1-olx, snx+olx
2089 adfzon(ip1,ip2) = 0.d0
2090 end do
2091 end do
2092 do ip2 = 1-oly, sny+oly
2093 do ip1 = 1-olx, snx+olx
2094 adke(ip1,ip2) = 0.d0
2095 end do
2096 end do
2097 do ip2 = 1-oly, sny+oly
2098 do ip1 = 1-olx, snx+olx
2099 admt(ip1,ip2) = 0.d0
2100 end do
2101 end do
2102 do ip2 = 1-oly, sny+oly
2103 do ip1 = 1-olx, snx+olx
2104 adpf(ip1,ip2) = 0.d0
2105 end do
2106 end do
2107 do ip2 = 1-oly, sny+oly
2108 do ip1 = 1-olx, snx+olx
2109 adutrans(ip1,ip2) = 0.d0
2110 end do
2111 end do
2112 do ip2 = 1-oly, sny+oly
2113 do ip1 = 1-olx, snx+olx
2114 adv4f(ip1,ip2) = 0.d0
2115 end do
2116 end do
2117 do ip2 = 1-oly, sny+oly
2118 do ip1 = 1-olx, snx+olx
2119 advf(ip1,ip2) = 0.d0
2120 end do
2121 end do
2122 do ip2 = 1-oly, sny+oly
2123 do ip1 = 1-olx, snx+olx
2124 advtrans(ip1,ip2) = 0.d0
2125 end do
2126 end do
2127
2128 C----------------------------------------------
2129 C ROUTINE BODY
2130 C----------------------------------------------
2131 kp1 = min(nr,k+1)
2132 rvelmaskoverride = 1.
2133 if (k .eq. 1) then
2134 rvelmaskoverride = freesurffac
2135 endif
2136 wvelbottomoverride = 1.
2137 if (k .eq. nr) then
2138 wvelbottomoverride = 0.
2139 endif
2140 do j = 1-oly, sny+oly-1
2141 do i = 1-olx, snx+olx-1
2142 ke(i,j) = 0.25*(uvel(i,j,k,bi,bj)*uvel(i,j,k,bi,bj)+uvel(i+1,
2143 $j,k,bi,bj)*uvel(i+1,j,k,bi,bj)+vvel(i,j,k,bi,bj)*vvel(i,j,k,bi,bj)
2144 $+vvel(i,j+1,k,bi,bj)*vvel(i,j+1,k,bi,bj))
2145 end do
2146 end do
2147 do j = 1-oly, sny+oly
2148 jg = myygloballo+(bj-1)*sny+j-1
2149 jg = min(max(1,jg),ny)
2150 if (cospower .ne. 0.) then
2151 cosfacu(j) = cos(yc(1,j,bi,bj)*deg2rad)**cospower
2152 cosfacv(j) = cos((yc(1,j,bi,bj)-0.5*dely(jg))*deg2rad)**
2153 $cospower
2154 else
2155 cosfacu(j) = 1.
2156 cosfacv(j) = 1.
2157 endif
2158 end do
2159 ududxfac = affacmom*1.
2160 ahdudxfac = vffacmom*1.
2161 vdudyfac = affacmom*1.
2162 ahdudyfac = vffacmom*1.
2163 rveldudrfac = affacmom*1.
2164 ardudrfac = vffacmom*1.
2165 mtfacu = mtfacmom*1.
2166 fufac = cffacmom*1.
2167 phxfac = pffacmom*1.
2168 udvdxfac = affacmom*1.
2169 ahdvdxfac = vffacmom*1.
2170 vdvdyfac = affacmom*1.
2171 ahdvdyfac = vffacmom*1.
2172 rveldvdrfac = affacmom*1.
2173 ardvdrfac = vffacmom*1.
2174 mtfacv = mtfacmom*1.
2175 fvfac = cffacmom*1.
2176 phyfac = pffacmom*1.
2177 if (no_slip_bottom) then
2178 bottomdragterms = .true.
2179 else
2180 bottomdragterms = .false.
2181 endif
2182 if (staggertimestep) then
2183 phxfac = 0.
2184 phyfac = 0.
2185 endif
2186 ab15 = 1.5d0+abeps
2187 ab05 = (-0.5d0)-abeps
2188 do i = 1-olx, snx+olx
2189 hfacz(i,1-oly) = 0.
2190 end do
2191 do j = 2-oly, sny+oly
2192 hfacz(1-olx,j) = 0.
2193 do i = 2-olx, snx+olx
2194 hfaczopen = min(hfacw(i,j,k,bi,bj),hfacw(i,j-1,k,bi,bj))
2195 hfaczopen = min(hfacs(i,j,k,bi,bj),hfaczopen)
2196 hfaczopen = min(hfacs(i-1,j,k,bi,bj),hfaczopen)
2197 hfacz(i,j) = hfaczopen
2198 end do
2199 end do
2200 do j = 1-oly, sny+oly
2201 do i = 1-olx, snx+olx
2202 xa(i,j) = dyg(i,j,bi,bj)*drf(k)*hfacw(i,j,k,bi,bj)
2203 ya(i,j) = dxg(i,j,bi,bj)*drf(k)*hfacs(i,j,k,bi,bj)
2204 end do
2205 end do
2206 do j = 1-oly, sny+oly
2207 do i = 1-olx, snx+olx
2208 utrans(i,j) = uvel(i,j,k,bi,bj)*xa(i,j)
2209 vtrans(i,j) = vvel(i,j,k,bi,bj)*ya(i,j)
2210 end do
2211 end do
2212 do j = 1-oly, sny+oly
2213 do i = 1-olx, snx+olx
2214 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+advnm1(i,j,k,bi,bj)
2215 advnm1(i,j,k,bi,bj) = 0.d0
2216 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+adunm1(i,j,k,bi,bj)
2217 adunm1(i,j,k,bi,bj) = 0.d0
2218 end do
2219 end do
2220 do j = jmin, jmax
2221 do i = imin, imax
2222 adgv(i,j,k,bi,bj) = adgv(i,j,k,bi,bj)*masks(i,j,k,bi,bj)
2223 end do
2224 end do
2225 do j = jmin, jmax
2226 do i = imin, imax
2227 adgu(i,j,k,bi,bj) = adgu(i,j,k,bi,bj)*maskw(i,j,k,bi,bj)
2228 end do
2229 end do
2230 do j = jmin, jmax
2231 do i = imin, imax
2232 aduveld(i,j,k,bi,bj) = aduveld(i,j,k,bi,bj)-0.5d0*adgvcd(i,j,
2233 $k,bi,bj)*(fcori(i,j,bi,bj)+fcori(i,j-1,bi,bj))*masks(i,j,k,bi,bj)*
2234 $fvfac
2235 adgvcd(i,j,k,bi,bj) = 0.d0
2236 end do
2237 end do
2238 do j = jmin, jmax
2239 do i = imin, imax
2240 adunm1(i+1,j-1,k,bi,bj) = adunm1(i+1,j-1,k,bi,bj)+0.25d0*
2241 $aduveld(i,j,k,bi,bj)*(1.d0-rcd)*ab05*masks(i,j,k,bi,bj)
2242 adunm1(i,j-1,k,bi,bj) = adunm1(i,j-1,k,bi,bj)+0.25d0*
2243 $aduveld(i,j,k,bi,bj)*(1.d0-rcd)*ab05*masks(i,j,k,bi,bj)
2244 adunm1(i+1,j,k,bi,bj) = adunm1(i+1,j,k,bi,bj)+0.25d0*
2245 $aduveld(i,j,k,bi,bj)*(1.d0-rcd)*ab05*masks(i,j,k,bi,bj)
2246 adunm1(i,j,k,bi,bj) = adunm1(i,j,k,bi,bj)+0.25d0*aduveld(i,j,
2247 $k,bi,bj)*(1.d0-rcd)*ab05*masks(i,j,k,bi,bj)
2248 aduvel(i+1,j-1,k,bi,bj) = aduvel(i+1,j-1,k,bi,bj)+0.25d0*
2249 $aduveld(i,j,k,bi,bj)*(1.d0-rcd)*ab15*masks(i,j,k,bi,bj)
2250 aduvel(i,j-1,k,bi,bj) = aduvel(i,j-1,k,bi,bj)+0.25d0*
2251 $aduveld(i,j,k,bi,bj)*(1.d0-rcd)*ab15*masks(i,j,k,bi,bj)
2252 aduvel(i+1,j,k,bi,bj) = aduvel(i+1,j,k,bi,bj)+0.25d0*
2253 $aduveld(i,j,k,bi,bj)*(1.d0-rcd)*ab15*masks(i,j,k,bi,bj)
2254 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+0.25d0*aduveld(i,j,
2255 $k,bi,bj)*(1.d0-rcd)*ab15*masks(i,j,k,bi,bj)
2256 aduveld(i,j,k,bi,bj) = aduveld(i,j,k,bi,bj)*rcd
2257 end do
2258 end do
2259 do j = jmin, jmax
2260 do i = imin, imax
2261 advf(i,j) = advf(i,j)+aduveld(i,j,k,bi,bj)*deltatmom*masks(i,
2262 $j,k,bi,bj)
2263 end do
2264 end do
2265 do j = jmin, jmax
2266 do i = imin, imax
2267 adaf(i+1,j-1) = adaf(i+1,j-1)+0.25d0*advf(i,j)*masks(i,j,k,bi,
2268 $bj)
2269 adaf(i,j-1) = adaf(i,j-1)+0.25d0*advf(i,j)*masks(i,j,k,bi,bj)
2270 adaf(i+1,j) = adaf(i+1,j)+0.25d0*advf(i,j)*masks(i,j,k,bi,bj)
2271 adaf(i,j) = adaf(i,j)+0.25d0*advf(i,j)*masks(i,j,k,bi,bj)
2272 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+0.5d0*advf(i,j)*
2273 $(fcori(i,j,bi,bj)+fcori(i,j-1,bi,bj))
2274 advf(i,j) = 0.d0
2275 end do
2276 end do
2277 do j = jmin, jmax
2278 do i = imin, imax
2279 adgu(i,j,k,bi,bj) = adgu(i,j,k,bi,bj)+adaf(i,j)
2280 adpf(i-1,j) = adpf(i-1,j)+adaf(i,j)*maskw(i,j,k,bi,bj)*
2281 $recip_dxc(i,j,bi,bj)
2282 adpf(i,j) = adpf(i,j)-adaf(i,j)*maskw(i,j,k,bi,bj)*
2283 $recip_dxc(i,j,bi,bj)
2284 adaf(i,j) = 0.d0
2285 end do
2286 end do
2287 do j = jmin, jmax
2288 do i = imin, imax
2289 advveld(i,j,k,bi,bj) = advveld(i,j,k,bi,bj)+0.5d0*adgucd(i,j,
2290 $k,bi,bj)*(fcori(i,j,bi,bj)+fcori(i-1,j,bi,bj))*fufac
2291 adgucd(i,j,k,bi,bj) = 0.d0
2292 end do
2293 end do
2294 do j = jmin, jmax
2295 do i = imin, imax
2296 advnm1(i-1,j+1,k,bi,bj) = advnm1(i-1,j+1,k,bi,bj)+0.25d0*
2297 $advveld(i,j,k,bi,bj)*(1.d0-rcd)*ab05*maskw(i,j,k,bi,bj)
2298 advnm1(i,j+1,k,bi,bj) = advnm1(i,j+1,k,bi,bj)+0.25d0*
2299 $advveld(i,j,k,bi,bj)*(1.d0-rcd)*ab05*maskw(i,j,k,bi,bj)
2300 advnm1(i-1,j,k,bi,bj) = advnm1(i-1,j,k,bi,bj)+0.25d0*
2301 $advveld(i,j,k,bi,bj)*(1.d0-rcd)*ab05*maskw(i,j,k,bi,bj)
2302 advnm1(i,j,k,bi,bj) = advnm1(i,j,k,bi,bj)+0.25d0*advveld(i,j,
2303 $k,bi,bj)*(1.d0-rcd)*ab05*maskw(i,j,k,bi,bj)
2304 advvel(i-1,j+1,k,bi,bj) = advvel(i-1,j+1,k,bi,bj)+0.25d0*
2305 $advveld(i,j,k,bi,bj)*(1.d0-rcd)*ab15*maskw(i,j,k,bi,bj)
2306 advvel(i,j+1,k,bi,bj) = advvel(i,j+1,k,bi,bj)+0.25d0*
2307 $advveld(i,j,k,bi,bj)*(1.d0-rcd)*ab15*maskw(i,j,k,bi,bj)
2308 advvel(i-1,j,k,bi,bj) = advvel(i-1,j,k,bi,bj)+0.25d0*
2309 $advveld(i,j,k,bi,bj)*(1.d0-rcd)*ab15*maskw(i,j,k,bi,bj)
2310 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+0.25d0*advveld(i,j,
2311 $k,bi,bj)*(1.d0-rcd)*ab15*maskw(i,j,k,bi,bj)
2312 advveld(i,j,k,bi,bj) = advveld(i,j,k,bi,bj)*rcd
2313 end do
2314 end do
2315 do j = jmin, jmax
2316 do i = imin, imax
2317 advf(i,j) = advf(i,j)+advveld(i,j,k,bi,bj)*deltatmom
2318 end do
2319 end do
2320 do j = jmin, jmax
2321 do i = imin, imax
2322 adaf(i-1,j+1) = adaf(i-1,j+1)+0.25d0*advf(i,j)*maskw(i,j,k,bi,
2323 $bj)
2324 adaf(i,j+1) = adaf(i,j+1)+0.25d0*advf(i,j)*maskw(i,j,k,bi,bj)
2325 adaf(i-1,j) = adaf(i-1,j)+0.25d0*advf(i,j)*maskw(i,j,k,bi,bj)
2326 adaf(i,j) = adaf(i,j)+0.25d0*advf(i,j)*maskw(i,j,k,bi,bj)
2327 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)-0.5d0*advf(i,j)*
2328 $(fcori(i,j,bi,bj)+fcori(i-1,j,bi,bj))
2329 advf(i,j) = 0.d0
2330 end do
2331 end do
2332 do j = jmin, jmax
2333 do i = imin, imax
2334 adgv(i,j,k,bi,bj) = adgv(i,j,k,bi,bj)+adaf(i,j)
2335 adpf(i,j-1) = adpf(i,j-1)+adaf(i,j)*masks(i,j,k,bi,bj)*
2336 $recip_dyc(i,j,bi,bj)
2337 adpf(i,j) = adpf(i,j)-adaf(i,j)*masks(i,j,k,bi,bj)*
2338 $recip_dyc(i,j,bi,bj)
2339 adaf(i,j) = 0.d0
2340 end do
2341 end do
2342 if (staggertimestep) then
2343 do j = jmin, jmax
2344 do i = imin, imax
2345 adphihyd(i,j,k) = adphihyd(i,j,k)+adpf(i,j)
2346 end do
2347 end do
2348 endif
2349 do j = jmin, jmax
2350 do i = imin, imax
2351 adetan(i,j,bi,bj) = adetan(i,j,bi,bj)+adpf(i,j)*ab15*
2352 $bo_surf(i,j,bi,bj)
2353 adetanm1(i,j,bi,bj) = adetanm1(i,j,bi,bj)+adpf(i,j)*ab05*
2354 $bo_surf(i,j,bi,bj)
2355 adpf(i,j) = 0.d0
2356 end do
2357 end do
2358 do j = jmin, jmax
2359 do i = imin, imax
2360 adgv(i,j,k,bi,bj) = adgv(i,j,k,bi,bj)*masks(i,j,k,bi,bj)
2361 end do
2362 end do
2363 if (usingsphericalpolarmterms) then
2364 do j = jmin, jmax
2365 do i = imin, imax
2366 admt(i,j) = admt(i,j)+adgv(i,j,k,bi,bj)*mtfacv
2367 end do
2368 end do
2369 do j = jmin, jmax
2370 do i = imin, imax
2371 aduvel(i+1,j-1,k,bi,bj) = aduvel(i+1,j-1,k,bi,bj)-0.125d0*
2372 $admt(i,j)*recip_rsphere*(uvel(i,j,k,bi,bj)+uvel(i+1,j,k,bi,bj)+
2373 $uvel(i,j-1,k,bi,bj)+uvel(i+1,j-1,k,bi,bj))*tanphiatv(i,j,bi,bj)
2374 aduvel(i,j-1,k,bi,bj) = aduvel(i,j-1,k,bi,bj)-0.125d0*
2375 $admt(i,j)*recip_rsphere*(uvel(i,j,k,bi,bj)+uvel(i+1,j,k,bi,bj)+
2376 $uvel(i,j-1,k,bi,bj)+uvel(i+1,j-1,k,bi,bj))*tanphiatv(i,j,bi,bj)
2377 aduvel(i+1,j,k,bi,bj) = aduvel(i+1,j,k,bi,bj)-0.125d0*
2378 $admt(i,j)*recip_rsphere*(uvel(i,j,k,bi,bj)+uvel(i+1,j,k,bi,bj)+
2379 $uvel(i,j-1,k,bi,bj)+uvel(i+1,j-1,k,bi,bj))*tanphiatv(i,j,bi,bj)
2380 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)-0.125d0*admt(i,j)*
2381 $recip_rsphere*(uvel(i,j,k,bi,bj)+uvel(i+1,j,k,bi,bj)+uvel(i,j-1,k,
2382 $bi,bj)+uvel(i+1,j-1,k,bi,bj))*tanphiatv(i,j,bi,bj)
2383 end do
2384 end do
2385 do j = jmin, jmax
2386 do i = imin, imax
2387 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)-0.25d0*admt(i,j)*
2388 $recip_rsphere*(wvelbottomoverride*(wvel(i,j,kp1,bi,bj)+wvel(i,j-1,
2389 $kp1,bi,bj))+wvel(i,j,k,bi,bj)+wvel(i,j-1,k,bi,bj))*rkfac*
2390 $recip_horivertratio
2391 adwvel(i,j-1,k,bi,bj) = adwvel(i,j-1,k,bi,bj)-0.25d0*admt(i,
2392 $j)*vvel(i,j,k,bi,bj)*recip_rsphere*rkfac*recip_horivertratio
2393 adwvel(i,j-1,kp1,bi,bj) = adwvel(i,j-1,kp1,bi,bj)-0.25d0*
2394 $admt(i,j)*vvel(i,j,k,bi,bj)*recip_rsphere*wvelbottomoverride*
2395 $rkfac*recip_horivertratio
2396 adwvel(i,j,k,bi,bj) = adwvel(i,j,k,bi,bj)-0.25d0*admt(i,j)*
2397 $vvel(i,j,k,bi,bj)*recip_rsphere*rkfac*recip_horivertratio
2398 adwvel(i,j,kp1,bi,bj) = adwvel(i,j,kp1,bi,bj)-0.25d0*admt(i,
2399 $j)*vvel(i,j,k,bi,bj)*recip_rsphere*wvelbottomoverride*rkfac*
2400 $recip_horivertratio
2401 admt(i,j) = 0.d0
2402 end do
2403 end do
2404 endif
2405 call adexternal_forcing_v( imin,imax,jmin,jmax,bi,bj,k )
2406 if (bottomdragterms) then
2407 rdrckp1 = recip_drc(kp1)
2408 if (k .eq. nr) then
2409 rdrckp1 = recip_drf(k)
2410 endif
2411 do j = jmin, jmax
2412 do i = imin, imax
2413 maskdown = masks(i,j,kp1,bi,bj)
2414 if (k .eq. nr) then
2415 maskdown = 0.
2416 endif
2417 if (ke(i,j)+ke(i,j-1) .ne. 0.) then
2418 adke(i,j-1) = adke(i,j-1)-adgv(i,j,k,bi,bj)*recip_hfacs(i,
2419 $j,k,bi,bj)*recip_drf(k)*bottomdragquadratic*1./(2.*sqrt(ke(i,j)+
2420 $ke(i,j-1)))*(1.-maskdown)*vvel(i,j,k,bi,bj)
2421 adke(i,j) = adke(i,j)-adgv(i,j,k,bi,bj)*recip_hfacs(i,j,k,
2422 $bi,bj)*recip_drf(k)*bottomdragquadratic*1./(2.*sqrt(ke(i,j)+ke(i,
2423 $j-1)))*(1.-maskdown)*vvel(i,j,k,bi,bj)
2424 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)-adgv(i,j,k,bi,
2425 $bj)*recip_hfacs(i,j,k,bi,bj)*recip_drf(k)*bottomdragquadratic*(1.-
2426 $maskdown)*sqrt(ke(i,j)+ke(i,j-1))
2427 endif
2428 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)-adgv(i,j,k,bi,bj)*
2429 $recip_hfacs(i,j,k,bi,bj)*recip_drf(k)*(2.*kapparv(i,j,kp1)*rkfac*
2430 $rdrckp1+bottomdraglinear)*(1.-maskdown)
2431 end do
2432 end do
2433 endif
2434 if (no_slip_sides) then
2435 do j = jmin, jmax
2436 do i = imin, imax
2437 hfaczclosedw = hfacs(i,j,k,bi,bj)-hfacz(i,j)
2438 hfaczclosede = hfacs(i,j,k,bi,bj)-hfacz(i+1,j)
2439 adv4f(i,j) = adv4f(i,j)+2.*adgv(i,j,k,bi,bj)*recip_hfacs(i,
2440 $j,k,bi,bj)*recip_drf(k)/ras(i,j,bi,bj)*(hfaczclosedw*dyu(i,j,bi,
2441 $bj)*recip_dxv(i,j,bi,bj)+hfaczclosede*dyu(i+1,j,bi,bj)*
2442 $recip_dxv(i+1,j,bi,bj))*rkfac*drf(k)*visca4*cosfacv(j)
2443 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)-2.*adgv(i,j,k,bi,
2444 $bj)*recip_hfacs(i,j,k,bi,bj)*recip_drf(k)/ras(i,j,bi,bj)*
2445 $(hfaczclosedw*dyu(i,j,bi,bj)*recip_dxv(i,j,bi,bj)+hfaczclosede*
2446 $dyu(i+1,j,bi,bj)*recip_dxv(i+1,j,bi,bj))*rkfac*drf(k)*viscah*
2447 $cosfacv(j)
2448 end do
2449 end do
2450 endif
2451 do j = jmin, jmax
2452 do i = imin, imax
2453 adfmer(i,j-1) = adfmer(i,j-1)+adgv(i,j,k,bi,bj)*recip_hfacs(i,
2454 $j,k,bi,bj)*recip_drf(k)*recip_ras(i,j,bi,bj)
2455 adfmer(i,j) = adfmer(i,j)-adgv(i,j,k,bi,bj)*recip_hfacs(i,j,k,
2456 $bi,bj)*recip_drf(k)*recip_ras(i,j,bi,bj)
2457 adfverv(i,j,kdown) = adfverv(i,j,kdown)+adgv(i,j,k,bi,bj)*
2458 $recip_hfacs(i,j,k,bi,bj)*recip_drf(k)*recip_ras(i,j,bi,bj)*rkfac
2459 adfverv(i,j,kup) = adfverv(i,j,kup)-adgv(i,j,k,bi,bj)*
2460 $recip_hfacs(i,j,k,bi,bj)*recip_drf(k)*recip_ras(i,j,bi,bj)*rkfac
2461 adfzon(i+1,j) = adfzon(i+1,j)-adgv(i,j,k,bi,bj)*recip_hfacs(i,
2462 $j,k,bi,bj)*recip_drf(k)*recip_ras(i,j,bi,bj)
2463 adfzon(i,j) = adfzon(i,j)+adgv(i,j,k,bi,bj)*recip_hfacs(i,j,k,
2464 $bi,bj)*recip_drf(k)*recip_ras(i,j,bi,bj)
2465 adpf(i,j) = adpf(i,j)+adgv(i,j,k,bi,bj)*phyfac
2466 adgv(i,j,k,bi,bj) = 0.d0
2467 end do
2468 end do
2469 do j = jmin, jmax
2470 do i = imin, imax
2471 adphihyd(i,j-1,k) = adphihyd(i,j-1,k)+adpf(i,j)*recip_dyc(i,j,
2472 $bi,bj)
2473 adphihyd(i,j,k) = adphihyd(i,j,k)-adpf(i,j)*recip_dyc(i,j,bi,
2474 $bj)
2475 adpf(i,j) = 0.d0
2476 end do
2477 end do
2478 if (implicitviscosity) then
2479 do j = jmin, jmax
2480 do i = imin, imax
2481 adaf(i,j) = adaf(i,j)+adfverv(i,j,kdown)*rveldvdrfac
2482 adfverv(i,j,kdown) = 0.d0
2483 end do
2484 end do
2485 else
2486 do j = jmin, jmax
2487 do i = imin, imax
2488 adaf(i,j) = adaf(i,j)+adfverv(i,j,kdown)*rveldvdrfac
2489 advf(i,j) = advf(i,j)+adfverv(i,j,kdown)*ardvdrfac
2490 adfverv(i,j,kdown) = 0.d0
2491 end do
2492 end do
2493 endif
2494 if ( .not. implicitviscosity) then
2495 do j = jmin, jmax
2496 do i = imin, imax
2497 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)-advf(i,j)*
2498 $kapparv(i,j,kp1)*ras(i,j,bi,bj)*rkfac*recip_drc(kp1)*masks(i,j,
2499 $kp1,bi,bj)
2500 advvel(i,j,kp1,bi,bj) = advvel(i,j,kp1,bi,bj)+advf(i,j)*
2501 $kapparv(i,j,kp1)*ras(i,j,bi,bj)*rkfac*recip_drc(kp1)*masks(i,j,
2502 $kp1,bi,bj)
2503 advf(i,j) = 0.d0
2504 end do
2505 end do
2506 endif
2507 do j = jmin, jmax
2508 do i = imin, imax
2509 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+0.25d0*adaf(i,j)*
2510 $wvelbottomoverride*(wvel(i,j,kp1,bi,bj)*ra(i,j,bi,bj)+wvel(i,j-1,
2511 $kp1,bi,bj)*ra(i,j-1,bi,bj))
2512 advvel(i,j,kp1,bi,bj) = advvel(i,j,kp1,bi,bj)+0.25d0*adaf(i,j)
2513 $*wvelbottomoverride*(wvel(i,j,kp1,bi,bj)*ra(i,j,bi,bj)+wvel(i,j-1,
2514 $kp1,bi,bj)*ra(i,j-1,bi,bj))
2515 adwvel(i,j-1,kp1,bi,bj) = adwvel(i,j-1,kp1,bi,bj)+0.25d0*
2516 $adaf(i,j)*wvelbottomoverride*ra(i,j-1,bi,bj)*(vvel(i,j,kp1,bi,bj)+
2517 $vvel(i,j,k,bi,bj))
2518 adwvel(i,j,kp1,bi,bj) = adwvel(i,j,kp1,bi,bj)+0.25d0*adaf(i,j)
2519 $*wvelbottomoverride*ra(i,j,bi,bj)*(vvel(i,j,kp1,bi,bj)+vvel(i,j,k,
2520 $bi,bj))
2521 adaf(i,j) = 0.d0
2522 end do
2523 end do
2524 if (k .eq. 1) then
2525 do j = jmin, jmax
2526 do i = imin, imax
2527 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+0.5*adfverv(i,j,
2528 $kup)*rvelmaskoverride*(wvel(i,j,k,bi,bj)*ra(i,j,bi,bj)+wvel(i,j-1,
2529 $k,bi,bj)*ra(i,j-1,bi,bj))
2530 adwvel(i,j-1,k,bi,bj) = adwvel(i,j-1,k,bi,bj)+0.5*adfverv(i,
2531 $j,kup)*rvelmaskoverride*ra(i,j-1,bi,bj)*vvel(i,j,k,bi,bj)
2532 adwvel(i,j,k,bi,bj) = adwvel(i,j,k,bi,bj)+0.5*adfverv(i,j,
2533 $kup)*rvelmaskoverride*ra(i,j,bi,bj)*vvel(i,j,k,bi,bj)
2534 adfverv(i,j,kup) = 0.d0
2535 end do
2536 end do
2537 endif
2538 do j = jmin, jmax
2539 do i = imin, imax
2540 adaf(i,j) = adaf(i,j)+adfmer(i,j)*vdvdyfac
2541 advf(i,j) = advf(i,j)+adfmer(i,j)*ahdvdyfac
2542 adfmer(i,j) = 0.d0
2543 end do
2544 end do
2545 do j = jmin, jmax
2546 do i = imin, imax
2547 adv4f(i,j+1) = adv4f(i,j+1)+advf(i,j)*dxf(i,j,bi,bj)*drf(k)*
2548 $hfacc(i,j,k,bi,bj)*visca4*cosfacu(j)*recip_dyf(i,j,bi,bj)
2549 adv4f(i,j) = adv4f(i,j)-advf(i,j)*dxf(i,j,bi,bj)*drf(k)*
2550 $hfacc(i,j,k,bi,bj)*visca4*cosfacu(j)*recip_dyf(i,j,bi,bj)
2551 advvel(i,j+1,k,bi,bj) = advvel(i,j+1,k,bi,bj)-advf(i,j)*dxf(i,
2552 $j,bi,bj)*drf(k)*hfacc(i,j,k,bi,bj)*viscah*cosfacu(j)*recip_dyf(i,
2553 $j,bi,bj)
2554 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+advf(i,j)*dxf(i,j,
2555 $bi,bj)*drf(k)*hfacc(i,j,k,bi,bj)*viscah*cosfacu(j)*recip_dyf(i,j,
2556 $bi,bj)
2557 advf(i,j) = 0.d0
2558 end do
2559 end do
2560 do j = jmin, jmax
2561 do i = imin, imax
2562 advtrans(i,j+1) = advtrans(i,j+1)+0.25d0*adaf(i,j)*(vvel(i,j,
2563 $k,bi,bj)+vvel(i,j+1,k,bi,bj))
2564 advtrans(i,j) = advtrans(i,j)+0.25d0*adaf(i,j)*(vvel(i,j,k,bi,
2565 $bj)+vvel(i,j+1,k,bi,bj))
2566 advvel(i,j+1,k,bi,bj) = advvel(i,j+1,k,bi,bj)+0.25d0*adaf(i,j)
2567 $*(vtrans(i,j)+vtrans(i,j+1))
2568 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+0.25d0*adaf(i,j)*
2569 $(vtrans(i,j)+vtrans(i,j+1))
2570 adaf(i,j) = 0.d0
2571 end do
2572 end do
2573 do j = jmin, jmax
2574 do i = imin, imax
2575 adaf(i,j) = adaf(i,j)+adfzon(i,j)*udvdxfac
2576 advf(i,j) = advf(i,j)+adfzon(i,j)*ahdvdxfac
2577 adfzon(i,j) = 0.d0
2578 end do
2579 end do
2580 do j = jmin, jmax
2581 do i = imin, imax
2582 adv4f(i-1,j) = adv4f(i-1,j)-advf(i,j)*dyu(i,j,bi,bj)*drf(k)*
2583 $hfacz(i,j)*visca4*cosfacv(j)*recip_dxv(i,j,bi,bj)
2584 adv4f(i,j) = adv4f(i,j)+advf(i,j)*dyu(i,j,bi,bj)*drf(k)*
2585 $hfacz(i,j)*visca4*cosfacv(j)*recip_dxv(i,j,bi,bj)
2586 advvel(i-1,j,k,bi,bj) = advvel(i-1,j,k,bi,bj)+advf(i,j)*dyu(i,
2587 $j,bi,bj)*drf(k)*hfacz(i,j)*viscah*cosfacv(j)*recip_dxv(i,j,bi,bj)
2588 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)-advf(i,j)*dyu(i,j,
2589 $bi,bj)*drf(k)*hfacz(i,j)*viscah*cosfacv(j)*recip_dxv(i,j,bi,bj)
2590 advf(i,j) = 0.d0
2591 end do
2592 end do
2593 do j = jmin, jmax
2594 do i = imin, imax
2595 adutrans(i,j-1) = adutrans(i,j-1)+0.25d0*adaf(i,j)*(vvel(i,j,
2596 $k,bi,bj)+vvel(i-1,j,k,bi,bj))
2597 adutrans(i,j) = adutrans(i,j)+0.25d0*adaf(i,j)*(vvel(i,j,k,bi,
2598 $bj)+vvel(i-1,j,k,bi,bj))
2599 advvel(i-1,j,k,bi,bj) = advvel(i-1,j,k,bi,bj)+0.25d0*adaf(i,j)
2600 $*(utrans(i,j)+utrans(i,j-1))
2601 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+0.25d0*adaf(i,j)*
2602 $(utrans(i,j)+utrans(i,j-1))
2603 adaf(i,j) = 0.d0
2604 end do
2605 end do
2606 if (no_slip_sides) then
2607 do j = 0, sny+2
2608 do i = 0, snx+1
2609 hfaczclosedw = hfacs(i,j,k,bi,bj)-hfacz(i,j)
2610 hfaczclosede = hfacs(i,j,k,bi,bj)-hfacz(i+1,j)
2611 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)-2*adv4f(i,j)*
2612 $recip_hfacs(i,j,k,bi,bj)*recip_drf(k)*recip_ras(i,j,bi,bj)*
2613 $(hfaczclosedw*dyu(i,j,bi,bj)*recip_dxv(i,j,bi,bj)+hfaczclosede*
2614 $dyu(i+1,j,bi,bj)*recip_dxv(i+1,j,bi,bj))*drf(k)*masks(i,j,k,bi,bj)
2615 end do
2616 end do
2617 endif
2618 do j = 0, sny+2
2619 do i = 0, snx+1
2620 adfmer(i,j-1) = adfmer(i,j-1)-adv4f(i,j)*recip_drf(k)*
2621 $recip_hfacs(i,j,k,bi,bj)*recip_ras(i,j,bi,bj)*masks(i,j,k,bi,bj)
2622 adfmer(i,j) = adfmer(i,j)+adv4f(i,j)*recip_drf(k)*
2623 $recip_hfacs(i,j,k,bi,bj)*recip_ras(i,j,bi,bj)*masks(i,j,k,bi,bj)
2624 adfzon(i+1,j) = adfzon(i+1,j)+adv4f(i,j)*recip_drf(k)*
2625 $recip_hfacs(i,j,k,bi,bj)*recip_ras(i,j,bi,bj)*masks(i,j,k,bi,bj)
2626 adfzon(i,j) = adfzon(i,j)-adv4f(i,j)*recip_drf(k)*
2627 $recip_hfacs(i,j,k,bi,bj)*recip_ras(i,j,bi,bj)*masks(i,j,k,bi,bj)
2628 adv4f(i,j) = 0.d0
2629 end do
2630 end do
2631 do j = 1-oly, sny+oly-1
2632 do i = 1-olx, snx+olx
2633 advvel(i,j+1,k,bi,bj) = advvel(i,j+1,k,bi,bj)+adfmer(i,j)*
2634 $drf(k)*hfacc(i,j,k,bi,bj)*dxf(i,j,bi,bj)*recip_dyf(i,j,bi,bj)
2635 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)-adfmer(i,j)*drf(k)*
2636 $hfacc(i,j,k,bi,bj)*dxf(i,j,bi,bj)*recip_dyf(i,j,bi,bj)
2637 adfmer(i,j) = 0.d0
2638 end do
2639 end do
2640 do j = 1-oly, sny+oly
2641 do i = 1-olx+1, snx+olx
2642 advvel(i-1,j,k,bi,bj) = advvel(i-1,j,k,bi,bj)-adfzon(i,j)*
2643 $drf(k)*hfacz(i,j)*dyu(i,j,bi,bj)*recip_dxv(i,j,bi,bj)
2644 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+adfzon(i,j)*drf(k)*
2645 $hfacz(i,j)*dyu(i,j,bi,bj)*recip_dxv(i,j,bi,bj)
2646 adfzon(i,j) = 0.d0
2647 end do
2648 end do
2649 do j = jmin, jmax
2650 do i = imin, imax
2651 adgu(i,j,k,bi,bj) = adgu(i,j,k,bi,bj)*maskw(i,j,k,bi,bj)
2652 end do
2653 end do
2654 if (usingsphericalpolarmterms) then
2655 do j = jmin, jmax
2656 do i = imin, imax
2657 admt(i,j) = admt(i,j)+adgu(i,j,k,bi,bj)*mtfacu
2658 end do
2659 end do
2660 do j = jmin, jmax
2661 do i = imin, imax
2662 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+0.25d0*admt(i,j)*
2663 $recip_rsphere*(vvel(i,j,k,bi,bj)+vvel(i-1,j,k,bi,bj)+vvel(i,j+1,k,
2664 $bi,bj)+vvel(i-1,j+1,k,bi,bj))*tanphiatu(i,j,bi,bj)
2665 advvel(i-1,j+1,k,bi,bj) = advvel(i-1,j+1,k,bi,bj)+0.25d0*
2666 $admt(i,j)*uvel(i,j,k,bi,bj)*recip_rsphere*tanphiatu(i,j,bi,bj)
2667 advvel(i,j+1,k,bi,bj) = advvel(i,j+1,k,bi,bj)+0.25d0*admt(i,
2668 $j)*uvel(i,j,k,bi,bj)*recip_rsphere*tanphiatu(i,j,bi,bj)
2669 advvel(i-1,j,k,bi,bj) = advvel(i-1,j,k,bi,bj)+0.25d0*admt(i,
2670 $j)*uvel(i,j,k,bi,bj)*recip_rsphere*tanphiatu(i,j,bi,bj)
2671 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+0.25d0*admt(i,j)*
2672 $uvel(i,j,k,bi,bj)*recip_rsphere*tanphiatu(i,j,bi,bj)
2673 end do
2674 end do
2675 do j = jmin, jmax
2676 do i = imin, imax
2677 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)-0.25d0*admt(i,j)*
2678 $recip_rsphere*(wvelbottomoverride*(wvel(i-1,j,kp1,bi,bj)+wvel(i,j,
2679 $kp1,bi,bj))+wvel(i-1,j,k,bi,bj)+wvel(i,j,k,bi,bj))*rkfac*
2680 $recip_horivertratio
2681 adwvel(i-1,j,k,bi,bj) = adwvel(i-1,j,k,bi,bj)-0.25d0*admt(i,
2682 $j)*uvel(i,j,k,bi,bj)*recip_rsphere*rkfac*recip_horivertratio
2683 adwvel(i,j,k,bi,bj) = adwvel(i,j,k,bi,bj)-0.25d0*admt(i,j)*
2684 $uvel(i,j,k,bi,bj)*recip_rsphere*rkfac*recip_horivertratio
2685 adwvel(i-1,j,kp1,bi,bj) = adwvel(i-1,j,kp1,bi,bj)-0.25d0*
2686 $admt(i,j)*uvel(i,j,k,bi,bj)*recip_rsphere*wvelbottomoverride*
2687 $rkfac*recip_horivertratio
2688 adwvel(i,j,kp1,bi,bj) = adwvel(i,j,kp1,bi,bj)-0.25d0*admt(i,
2689 $j)*uvel(i,j,k,bi,bj)*recip_rsphere*wvelbottomoverride*rkfac*
2690 $recip_horivertratio
2691 admt(i,j) = 0.d0
2692 end do
2693 end do
2694 endif
2695 call adexternal_forcing_u( imin,imax,jmin,jmax,bi,bj,k )
2696 if (bottomdragterms) then
2697 rdrckp1 = recip_drc(kp1)
2698 if (k .eq. nr) then
2699 rdrckp1 = recip_drf(k)
2700 endif
2701 do j = jmin, jmax
2702 do i = imin, imax
2703 maskdown = maskw(i,j,kp1,bi,bj)
2704 if (k .eq. nr) then
2705 maskdown = 0.d0
2706 endif
2707 if (ke(i,j)+ke(i-1,j) .ne. 0.) then
2708 adke(i-1,j) = adke(i-1,j)-adgu(i,j,k,bi,bj)*recip_hfacw(i,
2709 $j,k,bi,bj)*recip_drf(k)*bottomdragquadratic*1./(2.*sqrt(ke(i,j)+
2710 $ke(i-1,j)))*(1.-maskdown)*uvel(i,j,k,bi,bj)
2711 adke(i,j) = adke(i,j)-adgu(i,j,k,bi,bj)*recip_hfacw(i,j,k,
2712 $bi,bj)*recip_drf(k)*bottomdragquadratic*1./(2.*sqrt(ke(i,j)+ke(i-
2713 $1,j)))*(1.-maskdown)*uvel(i,j,k,bi,bj)
2714 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)-adgu(i,j,k,bi,
2715 $bj)*recip_hfacw(i,j,k,bi,bj)*recip_drf(k)*bottomdragquadratic*(1.-
2716 $maskdown)*sqrt(ke(i,j)+ke(i-1,j))
2717 endif
2718 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)-adgu(i,j,k,bi,bj)*
2719 $recip_hfacw(i,j,k,bi,bj)*recip_drf(k)*(2.*kapparu(i,j,kp1)*rkfac*
2720 $rdrckp1+bottomdraglinear)*(1.-maskdown)
2721 end do
2722 end do
2723 endif
2724 if (no_slip_sides) then
2725 do j = jmin, jmax
2726 do i = imin, imax
2727 hfaczcloseds = hfacw(i,j,k,bi,bj)-hfacz(i,j)
2728 hfaczclosedn = hfacw(i,j,k,bi,bj)-hfacz(i,j+1)
2729 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)-2.*adgu(i,j,k,bi,
2730 $bj)*recip_hfacw(i,j,k,bi,bj)*recip_drf(k)*recip_raw(i,j,bi,bj)*
2731 $(hfaczcloseds*dxv(i,j,bi,bj)*recip_dyu(i,j,bi,bj)+hfaczclosedn*
2732 $dxv(i,j+1,bi,bj)*recip_dyu(i,j+1,bi,bj))*drf(k)*viscah*cosfacu(j)
2733 adv4f(i,j) = adv4f(i,j)+2.*adgu(i,j,k,bi,bj)*recip_hfacw(i,
2734 $j,k,bi,bj)*recip_drf(k)*recip_raw(i,j,bi,bj)*(hfaczcloseds*dxv(i,
2735 $j,bi,bj)*recip_dyu(i,j,bi,bj)+hfaczclosedn*dxv(i,j+1,bi,bj)*
2736 $recip_dyu(i,j+1,bi,bj))*drf(k)*visca4*cosfacu(j)
2737 end do
2738 end do
2739 endif
2740 do j = jmin, jmax
2741 do i = imin, imax
2742 adfmer(i,j+1) = adfmer(i,j+1)-adgu(i,j,k,bi,bj)*recip_hfacw(i,
2743 $j,k,bi,bj)*recip_drf(k)*recip_raw(i,j,bi,bj)
2744 adfmer(i,j) = adfmer(i,j)+adgu(i,j,k,bi,bj)*recip_hfacw(i,j,k,
2745 $bi,bj)*recip_drf(k)*recip_raw(i,j,bi,bj)
2746 adfveru(i,j,kdown) = adfveru(i,j,kdown)+adgu(i,j,k,bi,bj)*
2747 $recip_hfacw(i,j,k,bi,bj)*recip_drf(k)*recip_raw(i,j,bi,bj)*rkfac
2748 adfveru(i,j,kup) = adfveru(i,j,kup)-adgu(i,j,k,bi,bj)*
2749 $recip_hfacw(i,j,k,bi,bj)*recip_drf(k)*recip_raw(i,j,bi,bj)*rkfac
2750 adfzon(i-1,j) = adfzon(i-1,j)+adgu(i,j,k,bi,bj)*recip_hfacw(i,
2751 $j,k,bi,bj)*recip_drf(k)*recip_raw(i,j,bi,bj)
2752 adfzon(i,j) = adfzon(i,j)-adgu(i,j,k,bi,bj)*recip_hfacw(i,j,k,
2753 $bi,bj)*recip_drf(k)*recip_raw(i,j,bi,bj)
2754 adpf(i,j) = adpf(i,j)+adgu(i,j,k,bi,bj)*phxfac
2755 adgu(i,j,k,bi,bj) = 0.d0
2756 end do
2757 end do
2758 do j = jmin, jmax
2759 do i = imin, imax
2760 adphihyd(i-1,j,k) = adphihyd(i-1,j,k)+adpf(i,j)*recip_dxc(i,j,
2761 $bi,bj)
2762 adphihyd(i,j,k) = adphihyd(i,j,k)-adpf(i,j)*recip_dxc(i,j,bi,
2763 $bj)
2764 adpf(i,j) = 0.d0
2765 end do
2766 end do
2767 if (implicitviscosity) then
2768 do j = jmin, jmax
2769 do i = imin, imax
2770 adaf(i,j) = adaf(i,j)+adfveru(i,j,kdown)*rveldudrfac
2771 adfveru(i,j,kdown) = 0.d0
2772 end do
2773 end do
2774 else
2775 do j = jmin, jmax
2776 do i = imin, imax
2777 adaf(i,j) = adaf(i,j)+adfveru(i,j,kdown)*rveldudrfac
2778 advf(i,j) = advf(i,j)+adfveru(i,j,kdown)*ardudrfac
2779 adfveru(i,j,kdown) = 0.d0
2780 end do
2781 end do
2782 endif
2783 if ( .not. implicitviscosity) then
2784 do j = jmin, jmax
2785 do i = imin, imax
2786 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)-advf(i,j)*
2787 $kapparu(i,j,kp1)*raw(i,j,bi,bj)*rkfac*recip_drc(kp1)*maskw(i,j,
2788 $kp1,bi,bj)
2789 aduvel(i,j,kp1,bi,bj) = aduvel(i,j,kp1,bi,bj)+advf(i,j)*
2790 $kapparu(i,j,kp1)*raw(i,j,bi,bj)*rkfac*recip_drc(kp1)*maskw(i,j,
2791 $kp1,bi,bj)
2792 advf(i,j) = 0.d0
2793 end do
2794 end do
2795 endif
2796 do j = jmin, jmax
2797 do i = imin, imax
2798 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+0.25d0*adaf(i,j)*
2799 $wvelbottomoverride*(wvel(i,j,kp1,bi,bj)*ra(i,j,bi,bj)+wvel(i-1,j,
2800 $kp1,bi,bj)*ra(i-1,j,bi,bj))
2801 aduvel(i,j,kp1,bi,bj) = aduvel(i,j,kp1,bi,bj)+0.25d0*adaf(i,j)
2802 $*wvelbottomoverride*(wvel(i,j,kp1,bi,bj)*ra(i,j,bi,bj)+wvel(i-1,j,
2803 $kp1,bi,bj)*ra(i-1,j,bi,bj))
2804 adwvel(i-1,j,kp1,bi,bj) = adwvel(i-1,j,kp1,bi,bj)+0.25d0*
2805 $adaf(i,j)*wvelbottomoverride*ra(i-1,j,bi,bj)*(uvel(i,j,kp1,bi,bj)+
2806 $uvel(i,j,k,bi,bj))
2807 adwvel(i,j,kp1,bi,bj) = adwvel(i,j,kp1,bi,bj)+0.25d0*adaf(i,j)
2808 $*wvelbottomoverride*ra(i,j,bi,bj)*(uvel(i,j,kp1,bi,bj)+uvel(i,j,k,
2809 $bi,bj))
2810 adaf(i,j) = 0.d0
2811 end do
2812 end do
2813 if (k .eq. 1) then
2814 do j = jmin, jmax
2815 do i = imin, imax
2816 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+0.5*adfveru(i,j,
2817 $kup)*rvelmaskoverride*(wvel(i,j,k,bi,bj)*ra(i,j,bi,bj)+wvel(i-1,j,
2818 $k,bi,bj)*ra(i-1,j,bi,bj))
2819 adwvel(i-1,j,k,bi,bj) = adwvel(i-1,j,k,bi,bj)+0.5*adfveru(i,
2820 $j,kup)*rvelmaskoverride*ra(i-1,j,bi,bj)*uvel(i,j,k,bi,bj)
2821 adwvel(i,j,k,bi,bj) = adwvel(i,j,k,bi,bj)+0.5*adfveru(i,j,
2822 $kup)*rvelmaskoverride*ra(i,j,bi,bj)*uvel(i,j,k,bi,bj)
2823 adfveru(i,j,kup) = 0.d0
2824 end do
2825 end do
2826 endif
2827 do j = jmin, jmax
2828 do i = imin, imax
2829 adaf(i,j) = adaf(i,j)+adfmer(i,j)*vdudyfac
2830 advf(i,j) = advf(i,j)+adfmer(i,j)*ahdudyfac
2831 adfmer(i,j) = 0.d0
2832 end do
2833 end do
2834 do j = jmin, jmax
2835 do i = imin, imax
2836 aduvel(i,j-1,k,bi,bj) = aduvel(i,j-1,k,bi,bj)+advf(i,j)*dxv(i,
2837 $j,bi,bj)*drf(k)*hfacz(i,j)*viscah*cosfacv(j)*recip_dyu(i,j,bi,bj)
2838 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)-advf(i,j)*dxv(i,j,
2839 $bi,bj)*drf(k)*hfacz(i,j)*viscah*cosfacv(j)*recip_dyu(i,j,bi,bj)
2840 adv4f(i,j-1) = adv4f(i,j-1)-advf(i,j)*dxv(i,j,bi,bj)*drf(k)*
2841 $hfacz(i,j)*visca4*cosfacv(j)*recip_dyu(i,j,bi,bj)
2842 adv4f(i,j) = adv4f(i,j)+advf(i,j)*dxv(i,j,bi,bj)*drf(k)*
2843 $hfacz(i,j)*visca4*cosfacv(j)*recip_dyu(i,j,bi,bj)
2844 advf(i,j) = 0.d0
2845 end do
2846 end do
2847 do j = jmin, jmax
2848 do i = imin, imax
2849 aduvel(i,j-1,k,bi,bj) = aduvel(i,j-1,k,bi,bj)+0.25d0*adaf(i,j)
2850 $*(vtrans(i,j)+vtrans(i-1,j))
2851 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+0.25d0*adaf(i,j)*
2852 $(vtrans(i,j)+vtrans(i-1,j))
2853 advtrans(i-1,j) = advtrans(i-1,j)+0.25d0*adaf(i,j)*(uvel(i,j,
2854 $k,bi,bj)+uvel(i,j-1,k,bi,bj))
2855 advtrans(i,j) = advtrans(i,j)+0.25d0*adaf(i,j)*(uvel(i,j,k,bi,
2856 $bj)+uvel(i,j-1,k,bi,bj))
2857 adaf(i,j) = 0.d0
2858 end do
2859 end do
2860 do j = jmin, jmax
2861 do i = imin, imax
2862 adaf(i,j) = adaf(i,j)+adfzon(i,j)*ududxfac
2863 advf(i,j) = advf(i,j)+adfzon(i,j)*ahdudxfac
2864 adfzon(i,j) = 0.d0
2865 end do
2866 end do
2867 do j = jmin, jmax
2868 do i = imin, imax
2869 aduvel(i+1,j,k,bi,bj) = aduvel(i+1,j,k,bi,bj)-advf(i,j)*dyf(i,
2870 $j,bi,bj)*drf(k)*hfacc(i,j,k,bi,bj)*viscah*cosfacu(j)*recip_dxf(i,
2871 $j,bi,bj)
2872 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+advf(i,j)*dyf(i,j,
2873 $bi,bj)*drf(k)*hfacc(i,j,k,bi,bj)*viscah*cosfacu(j)*recip_dxf(i,j,
2874 $bi,bj)
2875 adv4f(i+1,j) = adv4f(i+1,j)+advf(i,j)*dyf(i,j,bi,bj)*drf(k)*
2876 $hfacc(i,j,k,bi,bj)*visca4*cosfacu(j)*recip_dxf(i,j,bi,bj)
2877 adv4f(i,j) = adv4f(i,j)-advf(i,j)*dyf(i,j,bi,bj)*drf(k)*
2878 $hfacc(i,j,k,bi,bj)*visca4*cosfacu(j)*recip_dxf(i,j,bi,bj)
2879 advf(i,j) = 0.d0
2880 end do
2881 end do
2882 do j = jmin, jmax
2883 do i = imin, imax
2884 adutrans(i+1,j) = adutrans(i+1,j)+0.25d0*adaf(i,j)*(uvel(i,j,
2885 $k,bi,bj)+uvel(i+1,j,k,bi,bj))
2886 adutrans(i,j) = adutrans(i,j)+0.25d0*adaf(i,j)*(uvel(i,j,k,bi,
2887 $bj)+uvel(i+1,j,k,bi,bj))
2888 aduvel(i+1,j,k,bi,bj) = aduvel(i+1,j,k,bi,bj)+0.25d0*adaf(i,j)
2889 $*(utrans(i,j)+utrans(i+1,j))
2890 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+0.25d0*adaf(i,j)*
2891 $(utrans(i,j)+utrans(i+1,j))
2892 adaf(i,j) = 0.d0
2893 end do
2894 end do
2895 if (no_slip_sides) then
2896 do j = 0, sny+1
2897 do i = 0, snx+2
2898 hfaczcloseds = hfacw(i,j,k,bi,bj)-hfacz(i,j)
2899 hfaczclosedn = hfacw(i,j,k,bi,bj)-hfacz(i,j+1)
2900 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)-2*adv4f(i,j)*
2901 $recip_hfacw(i,j,k,bi,bj)*recip_drf(k)*recip_raw(i,j,bi,bj)*
2902 $(hfaczcloseds*dxv(i,j,bi,bj)*recip_dyu(i,j,bi,bj)+hfaczclosedn*
2903 $dxv(i,j+1,bi,bj)*recip_dyu(i,j+1,bi,bj))*drf(k)*maskw(i,j,k,bi,bj)
2904 end do
2905 end do
2906 endif
2907 do j = 0, sny+1
2908 do i = 0, snx+2
2909 adfmer(i,j+1) = adfmer(i,j+1)+adv4f(i,j)*recip_drf(k)*
2910 $recip_hfacw(i,j,k,bi,bj)*recip_raw(i,j,bi,bj)*maskw(i,j,k,bi,bj)
2911 adfmer(i,j) = adfmer(i,j)-adv4f(i,j)*recip_drf(k)*
2912 $recip_hfacw(i,j,k,bi,bj)*recip_raw(i,j,bi,bj)*maskw(i,j,k,bi,bj)
2913 adfzon(i-1,j) = adfzon(i-1,j)-adv4f(i,j)*recip_drf(k)*
2914 $recip_hfacw(i,j,k,bi,bj)*recip_raw(i,j,bi,bj)*maskw(i,j,k,bi,bj)
2915 adfzon(i,j) = adfzon(i,j)+adv4f(i,j)*recip_drf(k)*
2916 $recip_hfacw(i,j,k,bi,bj)*recip_raw(i,j,bi,bj)*maskw(i,j,k,bi,bj)
2917 adv4f(i,j) = 0.d0
2918 end do
2919 end do
2920 do j = 1-oly+1, sny+oly
2921 do i = 1-olx, snx+olx
2922 aduvel(i,j-1,k,bi,bj) = aduvel(i,j-1,k,bi,bj)-adfmer(i,j)*
2923 $drf(k)*hfacz(i,j)*dxv(i,j,bi,bj)*recip_dyu(i,j,bi,bj)
2924 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+adfmer(i,j)*drf(k)*
2925 $hfacz(i,j)*dxv(i,j,bi,bj)*recip_dyu(i,j,bi,bj)
2926 adfmer(i,j) = 0.d0
2927 end do
2928 end do
2929 do j = 1-oly, sny+oly
2930 do i = 1-olx, snx+olx-1
2931 aduvel(i+1,j,k,bi,bj) = aduvel(i+1,j,k,bi,bj)+adfzon(i,j)*
2932 $drf(k)*hfacc(i,j,k,bi,bj)*dyf(i,j,bi,bj)*recip_dxf(i,j,bi,bj)
2933 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)-adfzon(i,j)*drf(k)*
2934 $hfacc(i,j,k,bi,bj)*dyf(i,j,bi,bj)*recip_dxf(i,j,bi,bj)
2935 adfzon(i,j) = 0.d0
2936 end do
2937 end do
2938 do j = 1-oly, sny+oly
2939 do i = 1-olx, snx+olx
2940 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+advtrans(i,j)*ya(i,
2941 $j)
2942 advtrans(i,j) = 0.d0
2943 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+adutrans(i,j)*xa(i,
2944 $j)
2945 adutrans(i,j) = 0.d0
2946 end do
2947 end do
2948 do j = 1-oly, sny+oly-1
2949 do i = 1-olx, snx+olx-1
2950 aduvel(i+1,j,k,bi,bj) = aduvel(i+1,j,k,bi,bj)+0.5*adke(i,j)*
2951 $uvel(i+1,j,k,bi,bj)
2952 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+0.5*adke(i,j)*
2953 $uvel(i,j,k,bi,bj)
2954 advvel(i,j+1,k,bi,bj) = advvel(i,j+1,k,bi,bj)+0.5*adke(i,j)*
2955 $vvel(i,j+1,k,bi,bj)
2956 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+0.5*adke(i,j)*
2957 $vvel(i,j,k,bi,bj)
2958 adke(i,j) = 0.d0
2959 end do
2960 end do
2961
2962 end
2963
2964
2965 subroutine mdcalc_phi_hyd( bi, bj, imin, imax, jmin, jmax, k,
2966 $theta, salt, phihyd, mythid )
2967 C***************************************************************
2968 C***************************************************************
2969 C** This routine was generated by the **
2970 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
2971 C***************************************************************
2972 C***************************************************************
2973 C==============================================
2974 C all entries are defined explicitly
2975 C==============================================
2976 implicit none
2977
2978 C==============================================
2979 C define parameters
2980 C==============================================
2981 integer max_len_fnam
2982 parameter ( max_len_fnam = 512 )
2983 integer max_no_threads
2984 parameter ( max_no_threads = 32 )
2985 integer maxnochkptlev
2986 parameter ( maxnochkptlev = 2 )
2987 integer npx
2988 parameter ( npx = 1 )
2989 integer npy
2990 parameter ( npy = 1 )
2991 integer nr
2992 parameter ( nr = 15 )
2993 integer nsx
2994 parameter ( nsx = 1 )
2995 integer nsy
2996 parameter ( nsy = 1 )
2997 integer snx
2998 parameter ( snx = 20 )
2999 integer nx
3000 parameter ( nx = snx*nsx*npx )
3001 integer sny
3002 parameter ( sny = 40 )
3003 integer ny
3004 parameter ( ny = sny*nsy*npy )
3005 integer olx
3006 parameter ( olx = 3 )
3007 integer oly
3008 parameter ( oly = 3 )
3009
3010 C==============================================
3011 C define common blocks
3012 C==============================================
3013 common /cadsalv/ salth
3014 real*4 salth(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
3015
3016 common /cadthetc/ thetah
3017 real*4 thetah(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
3018
3019 common /eeparams_i/ errormessageunit, standardmessageunit,
3020 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
3021 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
3022 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
3023 integer eedataunit
3024 integer errormessageunit
3025 integer ioerrorcount(max_no_threads)
3026 integer modeldataunit
3027 integer mybxhi(max_no_threads)
3028 integer mybxlo(max_no_threads)
3029 integer mybyhi(max_no_threads)
3030 integer mybylo(max_no_threads)
3031 integer myprocid
3032 integer mypx
3033 integer mypy
3034 integer myxgloballo
3035 integer myygloballo
3036 integer nthreads
3037 integer ntx
3038 integer nty
3039 integer numberofprocs
3040 integer pidio
3041 integer scrunit1
3042 integer scrunit2
3043 integer standardmessageunit
3044
3045 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
3046 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
3047 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
3048 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
3049 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
3050 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
3051 $tanphiatu, tanphiatv
3052 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3053 double precision drc(1:nr)
3054 double precision drf(1:nr)
3055 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3056 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3057 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3058 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3059 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3060 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3061 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3062 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3063 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3064 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3065 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3066 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3067 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3068 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3069 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3070 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3071 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3072 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3073 double precision rc(1:nr)
3074 double precision recip_drc(1:nr)
3075 double precision recip_drf(1:nr)
3076 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3077 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3078 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3079 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3080 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3081 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3082 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3083 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3084 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3085 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
3086 $nsy)
3087 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
3088 $nsy)
3089 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
3090 $nsy)
3091 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3092 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3093 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3094 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3095 double precision recip_rkfac
3096 double precision rf(1:nr+1)
3097 double precision rkfac
3098 double precision safac(1:nr)
3099 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3100 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3101 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3102 double precision xc0
3103 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3104 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3105 double precision yc0
3106 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3107
3108 common /parm_c/ checkptsuff, bathyfile, hydrogthetafile,
3109 $hydrogsaltfile, zonalwindfile, meridwindfile, thetaclimfile,
3110 $saltclimfile, buoyancyrelation, empmrfile, surfqfile, surfqswfile,
3111 $ uvelinitfile, vvelinitfile, psurfinitfile, dqdtfile
3112 character*(max_len_fnam) bathyfile
3113 character*(max_len_fnam) buoyancyrelation
3114 character*(5) checkptsuff(maxnochkptlev)
3115 character*(max_len_fnam) dqdtfile
3116 character*(max_len_fnam) empmrfile
3117 character*(max_len_fnam) hydrogsaltfile
3118 character*(max_len_fnam) hydrogthetafile
3119 character*(max_len_fnam) meridwindfile
3120 character*(max_len_fnam) psurfinitfile
3121 character*(max_len_fnam) saltclimfile
3122 character*(max_len_fnam) surfqfile
3123 character*(max_len_fnam) surfqswfile
3124 character*(max_len_fnam) thetaclimfile
3125 character*(max_len_fnam) uvelinitfile
3126 character*(max_len_fnam) vvelinitfile
3127 character*(max_len_fnam) zonalwindfile
3128
3129 common /parm_eos_lin/ talpha, sbeta, eostype
3130 character*(6) eostype
3131 double precision sbeta
3132 double precision talpha
3133
3134 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
3135 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
3136 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
3137 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
3138 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
3139 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
3140 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
3141 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
3142 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
3143 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
3144 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
3145 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
3146 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
3147 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
3148 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
3149 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
3150 double precision abeps
3151 double precision affacmom
3152 double precision beta
3153 double precision bottomdraglinear
3154 double precision bottomdragquadratic
3155 double precision cadjfreq
3156 double precision cffacmom
3157 double precision cg2dpcoffdfac
3158 double precision cg2dtargetresidual
3159 double precision cg3dtargetresidual
3160 double precision chkptfreq
3161 double precision cospower
3162 double precision delp(nr)
3163 double precision delr(nr)
3164 double precision delt
3165 double precision deltat
3166 double precision deltatclock
3167 double precision deltatmom
3168 double precision deltattracer
3169 double precision delx(nx)
3170 double precision dely(ny)
3171 double precision delz(nr)
3172 double precision diffk4s
3173 double precision diffk4t
3174 double precision diffkhs
3175 double precision diffkht
3176 double precision diffkps
3177 double precision diffkpt
3178 double precision diffkrs
3179 double precision diffkrt
3180 double precision diffkzs
3181 double precision diffkzt
3182 double precision dumpfreq
3183 double precision endtime
3184 double precision externforcingcycle
3185 double precision externforcingperiod
3186 double precision f0
3187 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3188 double precision fofacmom
3189 double precision freesurffac
3190 double precision gbaro
3191 double precision gravity
3192 double precision hfacmin
3193 double precision hfacmindp
3194 double precision hfacmindr
3195 double precision hfacmindz
3196 double precision horivertratio
3197 double precision implicdiv2dflow
3198 double precision implicsurfpress
3199 double precision ivdc_kappa
3200 double precision lambdasaltclimrelax
3201 double precision lambdathetaclimrelax
3202 double precision latfftfiltlo
3203 double precision mtfacmom
3204 double precision omega
3205 double precision pchkptfreq
3206 double precision pffacmom
3207 double precision phimin
3208 double precision rcd
3209 double precision recip_gravity
3210 double precision recip_horivertratio
3211 double precision recip_rhoconst
3212 double precision recip_rhonil
3213 double precision recip_rsphere
3214 double precision rhoconst
3215 double precision rhonil
3216 double precision ro_sealevel
3217 double precision rsphere
3218 double precision specvol_s(nr)
3219 double precision sref(nr)
3220 double precision starttime
3221 double precision taucd
3222 double precision tausaltclimrelax
3223 double precision tauthetaclimrelax
3224 double precision tavefreq
3225 double precision theta_s(nr)
3226 double precision thetamin
3227 double precision tref(nr)
3228 double precision vffacmom
3229 double precision visca4
3230 double precision viscah
3231 double precision viscap
3232 double precision viscar
3233 double precision viscaz
3234 double precision zonal_filt_lat
3235
3236 common /tamc_keys_i/ ikey_dynamics, ikey_yearly, ikey_daily_1,
3237 $ikey_daily_2, iloop_daily
3238 integer ikey_daily_1
3239 integer ikey_daily_2
3240 integer ikey_dynamics
3241 integer ikey_yearly
3242 integer iloop_daily
3243
3244 common /tamckeys/ key, ikey, idkey
3245 integer idkey
3246 integer ikey
3247 integer key
3248
3249 C==============================================
3250 C define arguments
3251 C==============================================
3252 integer bi
3253 integer bj
3254 integer imax
3255 integer imin
3256 integer jmax
3257 integer jmin
3258 integer k
3259 integer mythid
3260 double precision phihyd(1-olx:snx+olx,1-oly:sny+oly,nr)
3261 double precision salt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3262 double precision theta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3263
3264 C==============================================
3265 C define local variables
3266 C==============================================
3267 integer act1
3268 integer act2
3269 integer act3
3270 integer act4
3271 double precision alpharho(1-olx:snx+olx,1-oly:sny+oly)
3272 double precision atm_cp
3273 double precision atm_kappa
3274 double precision atm_po
3275 double precision ddrm
3276 double precision ddrm1
3277 double precision ddrp
3278 double precision ddrp1
3279 double precision drloc
3280 double precision drlockp1
3281 integer i
3282 integer ip1
3283 integer ip2
3284 integer j
3285 integer kkey
3286 integer max1
3287 integer max2
3288 integer max3
3289
3290 C**********************************************
3291 C executable statements of routine
3292 C**********************************************
3293 act1 = bi-mybxlo(mythid)
3294 max1 = mybxhi(mythid)-mybxlo(mythid)+1
3295 act2 = bj-mybylo(mythid)
3296 max2 = mybyhi(mythid)-mybylo(mythid)+1
3297 act3 = mythid-1
3298 max3 = ntx*nty
3299 act4 = ikey_dynamics-1
3300 ikey = act1+1+act2*max1+act3*max1*max2+act4*max1*max2*max3
3301 if (buoyancyrelation .eq. 'OCEANIC') then
3302 drloc = drc(k)
3303 if (k .eq. 1) then
3304 drloc = drf(1)
3305 endif
3306 if (k .eq. nr) then
3307 drlockp1 = 0.
3308 else
3309 drlockp1 = drc(k+1)
3310 endif
3311 if (k .eq. 1) then
3312 do j = jmin, jmax
3313 do i = imin, imax
3314 phihyd(i,j,k) = 0.
3315 end do
3316 end do
3317 endif
3318 kkey = (ikey-1)*nr+k
3319 do ip2 = 1, 1+sny+oly-(1-oly)
3320 do ip1 = 1, 1+snx+olx-(1-olx)
3321 thetah(ip1,ip2,kkey) = theta(ip1-1+1-olx,ip2-1+1-oly,k,bi,
3322 $bj)
3323 end do
3324 end do
3325 do ip2 = 1, 1+sny+oly-(1-oly)
3326 do ip1 = 1, 1+snx+olx-(1-olx)
3327 salth(ip1,ip2,kkey) = salt(ip1-1+1-olx,ip2-1+1-oly,k,bi,bj)
3328 end do
3329 end do
3330 call find_rho( bi,bj,imin,imax,jmin,jmax,k,k,eostype,theta,salt,
3331 $alpharho,mythid )
3332 do j = jmin, jmax
3333 do i = imin, imax
3334 phihyd(i,j,k) = phihyd(i,j,k)+0.5*drloc*gravity*alpharho(i,
3335 $j)*recip_rhoconst
3336 if (k .lt. nr) then
3337 phihyd(i,j,k+1) = phihyd(i,j,k)+0.5*drlockp1*gravity*
3338 $alpharho(i,j)*recip_rhoconst
3339 endif
3340 end do
3341 end do
3342 else if (buoyancyrelation .eq. 'ATMOSPHERIC') then
3343 atm_cp = 1004.d0
3344 atm_kappa = 2.d0/7.d0
3345 atm_po = 1.d+5
3346 if (k .eq. 1) then
3347 ddrp1 = atm_cp*((rc(k)/atm_po)**atm_kappa-(rf(k)/atm_po)**
3348 $atm_kappa)
3349 do j = jmin, jmax
3350 do i = imin, imax
3351 ddrp = ddrp1
3352 if (hfacc(i,j,k,bi,bj) .eq. 0.) then
3353 ddrp = 0.
3354 endif
3355 phihyd(i,j,k) = 0.-ddrp*(theta(i,j,k,bi,bj)-tref(k))
3356 end do
3357 end do
3358 else
3359 ddrp1 = atm_cp*((rc(k)/atm_po)**atm_kappa-(rc(k-1)/atm_po)**
3360 $atm_kappa)*0.5
3361 ddrm1 = ddrp1
3362 do j = jmin, jmax
3363 do i = imin, imax
3364 ddrp = ddrp1
3365 ddrm = ddrm1
3366 if (hfacc(i,j,k,bi,bj) .eq. 0.) then
3367 ddrp = 0.
3368 endif
3369 if (hfacc(i,j,k-1,bi,bj) .eq. 0.) then
3370 ddrm = 0.
3371 endif
3372 phihyd(i,j,k) = phihyd(i,j,k-1)-(ddrm*(theta(i,j,k-1,bi,
3373 $bj)-tref(k-1))+ddrp*(theta(i,j,k,bi,bj)-tref(k)))
3374 end do
3375 end do
3376 endif
3377 endif
3378 end
3379
3380
3381 subroutine adcalc_phi_hyd( bi, bj, imin, imax, jmin, jmax, k,
3382 $mythid, adtheta, adsalt, adphihyd )
3383 C***************************************************************
3384 C***************************************************************
3385 C** This routine was generated by the **
3386 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
3387 C***************************************************************
3388 C***************************************************************
3389 C==============================================
3390 C all entries are defined explicitly
3391 C==============================================
3392 implicit none
3393
3394 C==============================================
3395 C define parameters
3396 C==============================================
3397 integer max_len_fnam
3398 parameter ( max_len_fnam = 512 )
3399 integer max_no_threads
3400 parameter ( max_no_threads = 32 )
3401 integer maxnochkptlev
3402 parameter ( maxnochkptlev = 2 )
3403 integer npx
3404 parameter ( npx = 1 )
3405 integer npy
3406 parameter ( npy = 1 )
3407 integer nr
3408 parameter ( nr = 15 )
3409 integer nsx
3410 parameter ( nsx = 1 )
3411 integer nsy
3412 parameter ( nsy = 1 )
3413 integer snx
3414 parameter ( snx = 20 )
3415 integer nx
3416 parameter ( nx = snx*nsx*npx )
3417 integer sny
3418 parameter ( sny = 40 )
3419 integer ny
3420 parameter ( ny = sny*nsy*npy )
3421 integer olx
3422 parameter ( olx = 3 )
3423 integer oly
3424 parameter ( oly = 3 )
3425
3426 C==============================================
3427 C define common blocks
3428 C==============================================
3429 common /cadsalv/ salth
3430 real*4 salth(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
3431
3432 common /cadthetc/ thetah
3433 real*4 thetah(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
3434
3435 common /eeparams_i/ errormessageunit, standardmessageunit,
3436 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
3437 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
3438 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
3439 integer eedataunit
3440 integer errormessageunit
3441 integer ioerrorcount(max_no_threads)
3442 integer modeldataunit
3443 integer mybxhi(max_no_threads)
3444 integer mybxlo(max_no_threads)
3445 integer mybyhi(max_no_threads)
3446 integer mybylo(max_no_threads)
3447 integer myprocid
3448 integer mypx
3449 integer mypy
3450 integer myxgloballo
3451 integer myygloballo
3452 integer nthreads
3453 integer ntx
3454 integer nty
3455 integer numberofprocs
3456 integer pidio
3457 integer scrunit1
3458 integer scrunit2
3459 integer standardmessageunit
3460
3461 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
3462 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
3463 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
3464 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
3465 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
3466 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
3467 $tanphiatu, tanphiatv
3468 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3469 double precision drc(1:nr)
3470 double precision drf(1:nr)
3471 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3472 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3473 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3474 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3475 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3476 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3477 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3478 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3479 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3480 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3481 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3482 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3483 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3484 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3485 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3486 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3487 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3488 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3489 double precision rc(1:nr)
3490 double precision recip_drc(1:nr)
3491 double precision recip_drf(1:nr)
3492 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3493 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3494 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3495 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3496 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3497 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3498 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3499 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3500 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3501 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
3502 $nsy)
3503 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
3504 $nsy)
3505 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
3506 $nsy)
3507 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3508 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3509 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3510 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3511 double precision recip_rkfac
3512 double precision rf(1:nr+1)
3513 double precision rkfac
3514 double precision safac(1:nr)
3515 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3516 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3517 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3518 double precision xc0
3519 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3520 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3521 double precision yc0
3522 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3523
3524 common /parm_c/ checkptsuff, bathyfile, hydrogthetafile,
3525 $hydrogsaltfile, zonalwindfile, meridwindfile, thetaclimfile,
3526 $saltclimfile, buoyancyrelation, empmrfile, surfqfile, surfqswfile,
3527 $ uvelinitfile, vvelinitfile, psurfinitfile, dqdtfile
3528 character*(max_len_fnam) bathyfile
3529 character*(max_len_fnam) buoyancyrelation
3530 character*(5) checkptsuff(maxnochkptlev)
3531 character*(max_len_fnam) dqdtfile
3532 character*(max_len_fnam) empmrfile
3533 character*(max_len_fnam) hydrogsaltfile
3534 character*(max_len_fnam) hydrogthetafile
3535 character*(max_len_fnam) meridwindfile
3536 character*(max_len_fnam) psurfinitfile
3537 character*(max_len_fnam) saltclimfile
3538 character*(max_len_fnam) surfqfile
3539 character*(max_len_fnam) surfqswfile
3540 character*(max_len_fnam) thetaclimfile
3541 character*(max_len_fnam) uvelinitfile
3542 character*(max_len_fnam) vvelinitfile
3543 character*(max_len_fnam) zonalwindfile
3544
3545 common /parm_eos_lin/ talpha, sbeta, eostype
3546 character*(6) eostype
3547 double precision sbeta
3548 double precision talpha
3549
3550 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
3551 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
3552 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
3553 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
3554 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
3555 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
3556 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
3557 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
3558 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
3559 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
3560 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
3561 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
3562 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
3563 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
3564 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
3565 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
3566 double precision abeps
3567 double precision affacmom
3568 double precision beta
3569 double precision bottomdraglinear
3570 double precision bottomdragquadratic
3571 double precision cadjfreq
3572 double precision cffacmom
3573 double precision cg2dpcoffdfac
3574 double precision cg2dtargetresidual
3575 double precision cg3dtargetresidual
3576 double precision chkptfreq
3577 double precision cospower
3578 double precision delp(nr)
3579 double precision delr(nr)
3580 double precision delt
3581 double precision deltat
3582 double precision deltatclock
3583 double precision deltatmom
3584 double precision deltattracer
3585 double precision delx(nx)
3586 double precision dely(ny)
3587 double precision delz(nr)
3588 double precision diffk4s
3589 double precision diffk4t
3590 double precision diffkhs
3591 double precision diffkht
3592 double precision diffkps
3593 double precision diffkpt
3594 double precision diffkrs
3595 double precision diffkrt
3596 double precision diffkzs
3597 double precision diffkzt
3598 double precision dumpfreq
3599 double precision endtime
3600 double precision externforcingcycle
3601 double precision externforcingperiod
3602 double precision f0
3603 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3604 double precision fofacmom
3605 double precision freesurffac
3606 double precision gbaro
3607 double precision gravity
3608 double precision hfacmin
3609 double precision hfacmindp
3610 double precision hfacmindr
3611 double precision hfacmindz
3612 double precision horivertratio
3613 double precision implicdiv2dflow
3614 double precision implicsurfpress
3615 double precision ivdc_kappa
3616 double precision lambdasaltclimrelax
3617 double precision lambdathetaclimrelax
3618 double precision latfftfiltlo
3619 double precision mtfacmom
3620 double precision omega
3621 double precision pchkptfreq
3622 double precision pffacmom
3623 double precision phimin
3624 double precision rcd
3625 double precision recip_gravity
3626 double precision recip_horivertratio
3627 double precision recip_rhoconst
3628 double precision recip_rhonil
3629 double precision recip_rsphere
3630 double precision rhoconst
3631 double precision rhonil
3632 double precision ro_sealevel
3633 double precision rsphere
3634 double precision specvol_s(nr)
3635 double precision sref(nr)
3636 double precision starttime
3637 double precision taucd
3638 double precision tausaltclimrelax
3639 double precision tauthetaclimrelax
3640 double precision tavefreq
3641 double precision theta_s(nr)
3642 double precision thetamin
3643 double precision tref(nr)
3644 double precision vffacmom
3645 double precision visca4
3646 double precision viscah
3647 double precision viscap
3648 double precision viscar
3649 double precision viscaz
3650 double precision zonal_filt_lat
3651
3652 common /tamc_keys_i/ ikey_dynamics, ikey_yearly, ikey_daily_1,
3653 $ikey_daily_2, iloop_daily
3654 integer ikey_daily_1
3655 integer ikey_daily_2
3656 integer ikey_dynamics
3657 integer ikey_yearly
3658 integer iloop_daily
3659
3660 common /tamckeys/ key, ikey, idkey
3661 integer idkey
3662 integer ikey
3663 integer key
3664
3665 C==============================================
3666 C define arguments
3667 C==============================================
3668 double precision adphihyd(1-olx:snx+olx,1-oly:sny+oly,nr)
3669 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3670 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3671 integer bi
3672 integer bj
3673 integer imax
3674 integer imin
3675 integer jmax
3676 integer jmin
3677 integer k
3678 integer mythid
3679
3680 C==============================================
3681 C define local variables
3682 C==============================================
3683 integer act1
3684 integer act2
3685 integer act3
3686 integer act4
3687 double precision adalpharho(1-olx:snx+olx,1-oly:sny+oly)
3688 double precision adphihydh
3689 double precision atm_cp
3690 double precision atm_kappa
3691 double precision atm_po
3692 double precision ddrm
3693 double precision ddrm1
3694 double precision ddrp
3695 double precision ddrp1
3696 double precision drloc
3697 double precision drlockp1
3698 integer i
3699 integer ip1
3700 integer ip2
3701 integer j
3702 integer kkey
3703 integer max1
3704 integer max2
3705 integer max3
3706 double precision salt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3707 double precision theta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3708
3709 C----------------------------------------------
3710 C RESET LOCAL ADJOINT VARIABLES
3711 C----------------------------------------------
3712 do ip2 = 1-oly, sny+oly
3713 do ip1 = 1-olx, snx+olx
3714 adalpharho(ip1,ip2) = 0.d0
3715 end do
3716 end do
3717
3718 C----------------------------------------------
3719 C ROUTINE BODY
3720 C----------------------------------------------
3721 act1 = bi-mybxlo(mythid)
3722 max1 = mybxhi(mythid)-mybxlo(mythid)+1
3723 act2 = bj-mybylo(mythid)
3724 max2 = mybyhi(mythid)-mybylo(mythid)+1
3725 act3 = mythid-1
3726 max3 = ntx*nty
3727 act4 = ikey_dynamics-1
3728 ikey = act1+1+act2*max1+act3*max1*max2+act4*max1*max2*max3
3729 if (buoyancyrelation .eq. 'OCEANIC') then
3730 drloc = drc(k)
3731 if (k .eq. 1) then
3732 drloc = drf(1)
3733 endif
3734 if (k .eq. nr) then
3735 drlockp1 = 0.
3736 else
3737 drlockp1 = drc(k+1)
3738 endif
3739 kkey = (ikey-1)*nr+k
3740 do ip2 = 1, 1+sny+oly-(1-oly)
3741 do ip1 = 1, 1+snx+olx-(1-olx)
3742 theta(ip1-1+1-olx,ip2-1+1-oly,k,bi,bj) = thetah(ip1,ip2,
3743 $kkey)
3744 end do
3745 end do
3746 do ip2 = 1, 1+sny+oly-(1-oly)
3747 do ip1 = 1, 1+snx+olx-(1-olx)
3748 salt(ip1-1+1-olx,ip2-1+1-oly,k,bi,bj) = salth(ip1,ip2,kkey)
3749 end do
3750 end do
3751 do j = jmin, jmax
3752 do i = imin, imax
3753 if (k .lt. nr) then
3754 adalpharho(i,j) = adalpharho(i,j)+0.5*adphihyd(i,j,k+1)*
3755 $drlockp1*gravity*recip_rhoconst
3756 adphihyd(i,j,k) = adphihyd(i,j,k)+adphihyd(i,j,k+1)
3757 adphihyd(i,j,k+1) = 0.d0
3758 endif
3759 adphihydh = adphihyd(i,j,k)
3760 adphihyd(i,j,k) = 0.d0
3761 adalpharho(i,j) = adalpharho(i,j)+0.5*adphihydh*drloc*
3762 $gravity*recip_rhoconst
3763 adphihyd(i,j,k) = adphihyd(i,j,k)+adphihydh
3764 end do
3765 end do
3766 call adfind_rho( bi,bj,imin,imax,jmin,jmax,k,k,eostype,theta,
3767 $salt,adtheta,adsalt,adalpharho )
3768 if (k .eq. 1) then
3769 do j = jmin, jmax
3770 do i = imin, imax
3771 adphihyd(i,j,k) = 0.d0
3772 end do
3773 end do
3774 endif
3775 else if (buoyancyrelation .eq. 'ATMOSPHERIC') then
3776 atm_cp = 1004.d0
3777 atm_kappa = 2.d0/7.d0
3778 atm_po = 1.d+5
3779 if (k .eq. 1) then
3780 ddrp1 = atm_cp*((rc(k)/atm_po)**atm_kappa-(rf(k)/atm_po)**
3781 $atm_kappa)
3782 do j = jmin, jmax
3783 do i = imin, imax
3784 ddrp = ddrp1
3785 if (hfacc(i,j,k,bi,bj) .eq. 0.) then
3786 ddrp = 0.
3787 endif
3788 adtheta(i,j,k,bi,bj) = adtheta(i,j,k,bi,bj)-adphihyd(i,j,
3789 $k)*ddrp
3790 adphihyd(i,j,k) = 0.d0
3791 end do
3792 end do
3793 else
3794 ddrp1 = atm_cp*((rc(k)/atm_po)**atm_kappa-(rc(k-1)/atm_po)**
3795 $atm_kappa)*0.5
3796 ddrm1 = ddrp1
3797 do j = jmin, jmax
3798 do i = imin, imax
3799 ddrp = ddrp1
3800 ddrm = ddrm1
3801 if (hfacc(i,j,k,bi,bj) .eq. 0.) then
3802 ddrp = 0.
3803 endif
3804 if (hfacc(i,j,k-1,bi,bj) .eq. 0.) then
3805 ddrm = 0.
3806 endif
3807 adtheta(i,j,k-1,bi,bj) = adtheta(i,j,k-1,bi,bj)-
3808 $adphihyd(i,j,k)*ddrm
3809 adtheta(i,j,k,bi,bj) = adtheta(i,j,k,bi,bj)-adphihyd(i,j,
3810 $k)*ddrp
3811 adphihyd(i,j,k-1) = adphihyd(i,j,k-1)+adphihyd(i,j,k)
3812 adphihyd(i,j,k) = 0.d0
3813 end do
3814 end do
3815 endif
3816 endif
3817
3818 end
3819
3820
3821 subroutine adconvect( bi, bj, imin, imax, jmin, jmax, k, rhokm1,
3822 $rhokp1, mytime, adrhokm1, adrhokp1 )
3823 C***************************************************************
3824 C***************************************************************
3825 C** This routine was generated by the **
3826 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
3827 C***************************************************************
3828 C***************************************************************
3829 C==============================================
3830 C all entries are defined explicitly
3831 C==============================================
3832 implicit none
3833
3834 C==============================================
3835 C define parameters
3836 C==============================================
3837 integer npx
3838 parameter ( npx = 1 )
3839 integer npy
3840 parameter ( npy = 1 )
3841 integer nr
3842 parameter ( nr = 15 )
3843 integer nsx
3844 parameter ( nsx = 1 )
3845 integer nsy
3846 parameter ( nsy = 1 )
3847 integer snx
3848 parameter ( snx = 20 )
3849 integer nx
3850 parameter ( nx = snx*nsx*npx )
3851 integer sny
3852 parameter ( sny = 40 )
3853 integer ny
3854 parameter ( ny = sny*nsy*npy )
3855 integer olx
3856 parameter ( olx = 3 )
3857 integer oly
3858 parameter ( oly = 3 )
3859
3860 C==============================================
3861 C define common blocks
3862 C==============================================
3863 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
3864 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
3865 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3866 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3867 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3868 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3869 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3870 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3871 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3872 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3873 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3874 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3875 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3876 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3877 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3878 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
3879
3880 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
3881 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
3882 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
3883 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
3884 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
3885 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
3886 $tanphiatu, tanphiatv
3887 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3888 double precision drc(1:nr)
3889 double precision drf(1:nr)
3890 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3891 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3892 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3893 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3894 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3895 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3896 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3897 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3898 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3899 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3900 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3901 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3902 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3903 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
3904 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3905 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3906 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3907 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3908 double precision rc(1:nr)
3909 double precision recip_drc(1:nr)
3910 double precision recip_drf(1:nr)
3911 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3912 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3913 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3914 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3915 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3916 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3917 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3918 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3919 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3920 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
3921 $nsy)
3922 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
3923 $nsy)
3924 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
3925 $nsy)
3926 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3927 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3928 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3929 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3930 double precision recip_rkfac
3931 double precision rf(1:nr+1)
3932 double precision rkfac
3933 double precision safac(1:nr)
3934 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3935 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3936 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3937 double precision xc0
3938 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3939 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3940 double precision yc0
3941 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3942
3943 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
3944 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
3945 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
3946 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
3947 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
3948 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
3949 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
3950 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
3951 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
3952 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
3953 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
3954 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
3955 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
3956 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
3957 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
3958 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
3959 double precision abeps
3960 double precision affacmom
3961 double precision beta
3962 double precision bottomdraglinear
3963 double precision bottomdragquadratic
3964 double precision cadjfreq
3965 double precision cffacmom
3966 double precision cg2dpcoffdfac
3967 double precision cg2dtargetresidual
3968 double precision cg3dtargetresidual
3969 double precision chkptfreq
3970 double precision cospower
3971 double precision delp(nr)
3972 double precision delr(nr)
3973 double precision delt
3974 double precision deltat
3975 double precision deltatclock
3976 double precision deltatmom
3977 double precision deltattracer
3978 double precision delx(nx)
3979 double precision dely(ny)
3980 double precision delz(nr)
3981 double precision diffk4s
3982 double precision diffk4t
3983 double precision diffkhs
3984 double precision diffkht
3985 double precision diffkps
3986 double precision diffkpt
3987 double precision diffkrs
3988 double precision diffkrt
3989 double precision diffkzs
3990 double precision diffkzt
3991 double precision dumpfreq
3992 double precision endtime
3993 double precision externforcingcycle
3994 double precision externforcingperiod
3995 double precision f0
3996 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
3997 double precision fofacmom
3998 double precision freesurffac
3999 double precision gbaro
4000 double precision gravity
4001 double precision hfacmin
4002 double precision hfacmindp
4003 double precision hfacmindr
4004 double precision hfacmindz
4005 double precision horivertratio
4006 double precision implicdiv2dflow
4007 double precision implicsurfpress
4008 double precision ivdc_kappa
4009 double precision lambdasaltclimrelax
4010 double precision lambdathetaclimrelax
4011 double precision latfftfiltlo
4012 double precision mtfacmom
4013 double precision omega
4014 double precision pchkptfreq
4015 double precision pffacmom
4016 double precision phimin
4017 double precision rcd
4018 double precision recip_gravity
4019 double precision recip_horivertratio
4020 double precision recip_rhoconst
4021 double precision recip_rhonil
4022 double precision recip_rsphere
4023 double precision rhoconst
4024 double precision rhonil
4025 double precision ro_sealevel
4026 double precision rsphere
4027 double precision specvol_s(nr)
4028 double precision sref(nr)
4029 double precision starttime
4030 double precision taucd
4031 double precision tausaltclimrelax
4032 double precision tauthetaclimrelax
4033 double precision tavefreq
4034 double precision theta_s(nr)
4035 double precision thetamin
4036 double precision tref(nr)
4037 double precision vffacmom
4038 double precision visca4
4039 double precision viscah
4040 double precision viscap
4041 double precision viscar
4042 double precision viscaz
4043 double precision zonal_filt_lat
4044
4045 C==============================================
4046 C define arguments
4047 C==============================================
4048 double precision adrhokm1(1-olx:snx+olx,1-oly:sny+oly)
4049 double precision adrhokp1(1-olx:snx+olx,1-oly:sny+oly)
4050 integer bi
4051 integer bj
4052 integer imax
4053 integer imin
4054 integer jmax
4055 integer jmin
4056 integer k
4057 double precision mytime
4058 double precision rhokm1(1-olx:snx+olx,1-oly:sny+oly)
4059 double precision rhokp1(1-olx:snx+olx,1-oly:sny+oly)
4060
4061 C==============================================
4062 C define local variables
4063 C==============================================
4064 double precision adsmix(1-olx:snx+olx,1-oly:sny+oly)
4065 double precision adtmix(1-olx:snx+olx,1-oly:sny+oly)
4066 double precision dsum(1-olx:snx+olx,1-oly:sny+oly)
4067 integer i
4068 integer ip1
4069 integer ip2
4070 integer j
4071
4072 C==============================================
4073 C define external procedures and functions
4074 C==============================================
4075 logical different_multiple
4076 external different_multiple
4077
4078 C----------------------------------------------
4079 C RESET LOCAL ADJOINT VARIABLES
4080 C----------------------------------------------
4081 do ip2 = 1-oly, sny+oly
4082 do ip1 = 1-olx, snx+olx
4083 adsmix(ip1,ip2) = 0.d0
4084 end do
4085 end do
4086 do ip2 = 1-oly, sny+oly
4087 do ip1 = 1-olx, snx+olx
4088 adtmix(ip1,ip2) = 0.d0
4089 end do
4090 end do
4091
4092 C----------------------------------------------
4093 C ROUTINE BODY
4094 C----------------------------------------------
4095 if (different_multiple(cadjfreq,mytime,mytime-deltatclock)) then
4096 do j = jmin, jmax
4097 do i = imin, imax
4098 dsum(i,j) = hfacc(i,j,k-1,bi,bj)*drf(k-1)+hfacc(i,j,k,bi,bj)
4099 $*drf(k)
4100 end do
4101 end do
4102 do j = jmin, jmax
4103 do i = imin, imax
4104 if (hfacc(i,j,k,bi,bj) .gt. 0. .and. rhokm1(i,j) .gt.
4105 $rhokp1(i,j)) then
4106 adsmix(i,j) = adsmix(i,j)+adsalt(i,j,k,bi,bj)/dsum(i,j)
4107 adsalt(i,j,k,bi,bj) = 0.d0
4108 adsmix(i,j) = adsmix(i,j)+adsalt(i,j,k-1,bi,bj)/dsum(i,j)
4109 adsalt(i,j,k-1,bi,bj) = 0.d0
4110 adtmix(i,j) = adtmix(i,j)+adtheta(i,j,k,bi,bj)/dsum(i,j)
4111 adtheta(i,j,k,bi,bj) = 0.d0
4112 adtmix(i,j) = adtmix(i,j)+adtheta(i,j,k-1,bi,bj)/dsum(i,j)
4113 adtheta(i,j,k-1,bi,bj) = 0.d0
4114 endif
4115 end do
4116 end do
4117 do j = jmin, jmax
4118 do i = imin, imax
4119 adsalt(i,j,k-1,bi,bj) = adsalt(i,j,k-1,bi,bj)+adsmix(i,j)*
4120 $hfacc(i,j,k-1,bi,bj)*drf(k-1)
4121 adsalt(i,j,k,bi,bj) = adsalt(i,j,k,bi,bj)+adsmix(i,j)*
4122 $hfacc(i,j,k,bi,bj)*drf(k)
4123 adsmix(i,j) = 0.d0
4124 adtheta(i,j,k-1,bi,bj) = adtheta(i,j,k-1,bi,bj)+adtmix(i,j)*
4125 $hfacc(i,j,k-1,bi,bj)*drf(k-1)
4126 adtheta(i,j,k,bi,bj) = adtheta(i,j,k,bi,bj)+adtmix(i,j)*
4127 $hfacc(i,j,k,bi,bj)*drf(k)
4128 adtmix(i,j) = 0.d0
4129 end do
4130 end do
4131 endif
4132
4133 end
4134
4135
4136 subroutine mdconvective_adjustment( bi, bj, imin, imax, jmin,
4137 $jmax, mytime, myiter, mythid )
4138 C***************************************************************
4139 C***************************************************************
4140 C** This routine was generated by the **
4141 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
4142 C***************************************************************
4143 C***************************************************************
4144 C==============================================
4145 C all entries are defined explicitly
4146 C==============================================
4147 implicit none
4148
4149 C==============================================
4150 C define parameters
4151 C==============================================
4152 integer max_no_threads
4153 parameter ( max_no_threads = 32 )
4154 integer npx
4155 parameter ( npx = 1 )
4156 integer npy
4157 parameter ( npy = 1 )
4158 integer nr
4159 parameter ( nr = 15 )
4160 integer nsx
4161 parameter ( nsx = 1 )
4162 integer nsy
4163 parameter ( nsy = 1 )
4164 integer snx
4165 parameter ( snx = 20 )
4166 integer nx
4167 parameter ( nx = snx*nsx*npx )
4168 integer sny
4169 parameter ( sny = 40 )
4170 integer ny
4171 parameter ( ny = sny*nsy*npy )
4172 integer olx
4173 parameter ( olx = 3 )
4174 integer oly
4175 parameter ( oly = 3 )
4176
4177 C==============================================
4178 C define common blocks
4179 C==============================================
4180 common /cadrhok/ rhokh
4181 real*4 rhokh(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
4182
4183 common /cadrhokm1/ rhokm1h
4184 real*4 rhokm1h(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
4185
4186 common /cadsalt/ salth
4187 real*4 salth(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
4188
4189 common /cadsalu/ salti
4190 real*4 salti(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
4191
4192 common /cadtheta/ thetah
4193 real*4 thetah(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
4194
4195 common /cadthetb/ thetai
4196 real*4 thetai(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
4197
4198 common /dynvars_r/ etan, uvel, vvel, wvel, theta, salt, gu, gv,
4199 $gt, gs, gunm1, gvnm1, gtnm1, gsnm1
4200 double precision etan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4201 double precision gs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4202 double precision gsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4203 double precision gt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4204 double precision gtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4205 double precision gu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4206 double precision gunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4207 double precision gv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4208 double precision gvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4209 double precision salt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4210 double precision theta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4211 double precision uvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4212 double precision vvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4213 double precision wvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4214
4215 common /eeparams_i/ errormessageunit, standardmessageunit,
4216 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
4217 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
4218 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
4219 integer eedataunit
4220 integer errormessageunit
4221 integer ioerrorcount(max_no_threads)
4222 integer modeldataunit
4223 integer mybxhi(max_no_threads)
4224 integer mybxlo(max_no_threads)
4225 integer mybyhi(max_no_threads)
4226 integer mybylo(max_no_threads)
4227 integer myprocid
4228 integer mypx
4229 integer mypy
4230 integer myxgloballo
4231 integer myygloballo
4232 integer nthreads
4233 integer ntx
4234 integer nty
4235 integer numberofprocs
4236 integer pidio
4237 integer scrunit1
4238 integer scrunit2
4239 integer standardmessageunit
4240
4241 common /parm_eos_lin/ talpha, sbeta, eostype
4242 character*(6) eostype
4243 double precision sbeta
4244 double precision talpha
4245
4246 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
4247 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
4248 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
4249 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
4250 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
4251 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
4252 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
4253 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
4254 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
4255 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
4256 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
4257 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
4258 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
4259 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
4260 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
4261 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
4262 double precision abeps
4263 double precision affacmom
4264 double precision beta
4265 double precision bottomdraglinear
4266 double precision bottomdragquadratic
4267 double precision cadjfreq
4268 double precision cffacmom
4269 double precision cg2dpcoffdfac
4270 double precision cg2dtargetresidual
4271 double precision cg3dtargetresidual
4272 double precision chkptfreq
4273 double precision cospower
4274 double precision delp(nr)
4275 double precision delr(nr)
4276 double precision delt
4277 double precision deltat
4278 double precision deltatclock
4279 double precision deltatmom
4280 double precision deltattracer
4281 double precision delx(nx)
4282 double precision dely(ny)
4283 double precision delz(nr)
4284 double precision diffk4s
4285 double precision diffk4t
4286 double precision diffkhs
4287 double precision diffkht
4288 double precision diffkps
4289 double precision diffkpt
4290 double precision diffkrs
4291 double precision diffkrt
4292 double precision diffkzs
4293 double precision diffkzt
4294 double precision dumpfreq
4295 double precision endtime
4296 double precision externforcingcycle
4297 double precision externforcingperiod
4298 double precision f0
4299 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4300 double precision fofacmom
4301 double precision freesurffac
4302 double precision gbaro
4303 double precision gravity
4304 double precision hfacmin
4305 double precision hfacmindp
4306 double precision hfacmindr
4307 double precision hfacmindz
4308 double precision horivertratio
4309 double precision implicdiv2dflow
4310 double precision implicsurfpress
4311 double precision ivdc_kappa
4312 double precision lambdasaltclimrelax
4313 double precision lambdathetaclimrelax
4314 double precision latfftfiltlo
4315 double precision mtfacmom
4316 double precision omega
4317 double precision pchkptfreq
4318 double precision pffacmom
4319 double precision phimin
4320 double precision rcd
4321 double precision recip_gravity
4322 double precision recip_horivertratio
4323 double precision recip_rhoconst
4324 double precision recip_rhonil
4325 double precision recip_rsphere
4326 double precision rhoconst
4327 double precision rhonil
4328 double precision ro_sealevel
4329 double precision rsphere
4330 double precision specvol_s(nr)
4331 double precision sref(nr)
4332 double precision starttime
4333 double precision taucd
4334 double precision tausaltclimrelax
4335 double precision tauthetaclimrelax
4336 double precision tavefreq
4337 double precision theta_s(nr)
4338 double precision thetamin
4339 double precision tref(nr)
4340 double precision vffacmom
4341 double precision visca4
4342 double precision viscah
4343 double precision viscap
4344 double precision viscar
4345 double precision viscaz
4346 double precision zonal_filt_lat
4347
4348 common /tamc_keys_i/ ikey_dynamics, ikey_yearly, ikey_daily_1,
4349 $ikey_daily_2, iloop_daily
4350 integer ikey_daily_1
4351 integer ikey_daily_2
4352 integer ikey_dynamics
4353 integer ikey_yearly
4354 integer iloop_daily
4355
4356 common /tamckeys/ key, ikey, idkey
4357 integer idkey
4358 integer ikey
4359 integer key
4360
4361 C==============================================
4362 C define arguments
4363 C==============================================
4364 integer bi
4365 integer bj
4366 integer imax
4367 integer imin
4368 integer jmax
4369 integer jmin
4370 integer myiter
4371 integer mythid
4372 double precision mytime
4373
4374 C==============================================
4375 C define local variables
4376 C==============================================
4377 integer act1
4378 integer act2
4379 integer act3
4380 integer act4
4381 double precision convectcount(1-olx:snx+olx,1-oly:sny+oly,nr)
4382 integer help_h
4383 integer help_i
4384 integer help_j
4385 integer ip1
4386 integer ip2
4387 integer k
4388 integer kkey
4389 integer max1
4390 integer max2
4391 integer max3
4392 double precision rhok(1-olx:snx+olx,1-oly:sny+oly)
4393 double precision rhokm1(1-olx:snx+olx,1-oly:sny+oly)
4394
4395 C==============================================
4396 C define external procedures and functions
4397 C==============================================
4398 logical different_multiple
4399 external different_multiple
4400
4401 C**********************************************
4402 C executable statements of routine
4403 C**********************************************
4404 if (different_multiple(cadjfreq,mytime,mytime-deltatclock)) then
4405 act1 = bi-mybxlo(mythid)
4406 max1 = mybxhi(mythid)-mybxlo(mythid)+1
4407 act2 = bj-mybylo(mythid)
4408 max2 = mybyhi(mythid)-mybylo(mythid)+1
4409 act3 = mythid-1
4410 max3 = ntx*nty
4411 act4 = ikey_dynamics-1
4412 ikey = act1+1+act2*max1+act3*max1*max2+act4*max1*max2*max3
4413 do k = 2, nr
4414 kkey = (ikey-1)*nr+k
4415 do ip2 = 1, 1+sny+oly-(1-oly)
4416 do ip1 = 1, 1+snx+olx-(1-olx)
4417 thetai(ip1,ip2,kkey) = theta(ip1-1+1-olx,ip2-1+1-oly,k-1,
4418 $bi,bj)
4419 end do
4420 end do
4421 do ip2 = 1, 1+sny+oly-(1-oly)
4422 do ip1 = 1, 1+snx+olx-(1-olx)
4423 salti(ip1,ip2,kkey) = salt(ip1-1+1-olx,ip2-1+1-oly,k-1,bi,
4424 $bj)
4425 end do
4426 end do
4427 help_h = k-1
4428 help_i = k-1
4429 call find_rho( bi,bj,imin,imax,jmin,jmax,help_h,help_i,
4430 $eostype,theta,salt,rhokm1,mythid )
4431 do ip2 = 1, 1+sny+oly-(1-oly)
4432 do ip1 = 1, 1+snx+olx-(1-olx)
4433 thetah(ip1,ip2,kkey) = theta(ip1-1+1-olx,ip2-1+1-oly,k,bi,
4434 $bj)
4435 end do
4436 end do
4437 do ip2 = 1, 1+sny+oly-(1-oly)
4438 do ip1 = 1, 1+snx+olx-(1-olx)
4439 salth(ip1,ip2,kkey) = salt(ip1-1+1-olx,ip2-1+1-oly,k,bi,
4440 $bj)
4441 end do
4442 end do
4443 help_j = k-1
4444 call find_rho( bi,bj,imin,imax,jmin,jmax,k,help_j,eostype,
4445 $theta,salt,rhok,mythid )
4446 do ip2 = 1, 1+sny+oly-(1-oly)
4447 do ip1 = 1, 1+snx+olx-(1-olx)
4448 rhokm1h(ip1,ip2,kkey) = rhokm1(ip1-1+1-olx,ip2-1+1-oly)
4449 end do
4450 end do
4451 do ip2 = 1, 1+sny+oly-(1-oly)
4452 do ip1 = 1, 1+snx+olx-(1-olx)
4453 rhokh(ip1,ip2,kkey) = rhok(ip1-1+1-olx,ip2-1+1-oly)
4454 end do
4455 end do
4456 call convect( bi,bj,imin,imax,jmin,jmax,k,rhokm1,rhok,
4457 $convectcount,mytime,myiter,mythid )
4458 end do
4459 endif
4460 end
4461
4462
4463 subroutine adconvective_adjustment( bi, bj, imin, imax, jmin,
4464 $jmax, mytime, mythid )
4465 C***************************************************************
4466 C***************************************************************
4467 C** This routine was generated by the **
4468 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
4469 C***************************************************************
4470 C***************************************************************
4471 C==============================================
4472 C all entries are defined explicitly
4473 C==============================================
4474 implicit none
4475
4476 C==============================================
4477 C define parameters
4478 C==============================================
4479 integer max_no_threads
4480 parameter ( max_no_threads = 32 )
4481 integer npx
4482 parameter ( npx = 1 )
4483 integer npy
4484 parameter ( npy = 1 )
4485 integer nr
4486 parameter ( nr = 15 )
4487 integer nsx
4488 parameter ( nsx = 1 )
4489 integer nsy
4490 parameter ( nsy = 1 )
4491 integer snx
4492 parameter ( snx = 20 )
4493 integer nx
4494 parameter ( nx = snx*nsx*npx )
4495 integer sny
4496 parameter ( sny = 40 )
4497 integer ny
4498 parameter ( ny = sny*nsy*npy )
4499 integer olx
4500 parameter ( olx = 3 )
4501 integer oly
4502 parameter ( oly = 3 )
4503
4504 C==============================================
4505 C define common blocks
4506 C==============================================
4507 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
4508 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
4509 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4510 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4511 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4512 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4513 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4514 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4515 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4516 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4517 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4518 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4519 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4520 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4521 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4522 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4523
4524 common /cadrhok/ rhokh
4525 real*4 rhokh(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
4526
4527 common /cadrhokm1/ rhokm1h
4528 real*4 rhokm1h(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
4529
4530 common /cadsalt/ salth
4531 real*4 salth(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
4532
4533 common /cadsalu/ salti
4534 real*4 salti(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
4535
4536 common /cadtheta/ thetah
4537 real*4 thetah(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
4538
4539 common /cadthetb/ thetai
4540 real*4 thetai(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
4541
4542 common /dynvars_r/ etan, uvel, vvel, wvel, theta, salt, gu, gv,
4543 $gt, gs, gunm1, gvnm1, gtnm1, gsnm1
4544 double precision etan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4545 double precision gs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4546 double precision gsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4547 double precision gt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4548 double precision gtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4549 double precision gu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4550 double precision gunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4551 double precision gv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4552 double precision gvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4553 double precision salt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4554 double precision theta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4555 double precision uvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4556 double precision vvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4557 double precision wvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4558
4559 common /eeparams_i/ errormessageunit, standardmessageunit,
4560 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
4561 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
4562 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
4563 integer eedataunit
4564 integer errormessageunit
4565 integer ioerrorcount(max_no_threads)
4566 integer modeldataunit
4567 integer mybxhi(max_no_threads)
4568 integer mybxlo(max_no_threads)
4569 integer mybyhi(max_no_threads)
4570 integer mybylo(max_no_threads)
4571 integer myprocid
4572 integer mypx
4573 integer mypy
4574 integer myxgloballo
4575 integer myygloballo
4576 integer nthreads
4577 integer ntx
4578 integer nty
4579 integer numberofprocs
4580 integer pidio
4581 integer scrunit1
4582 integer scrunit2
4583 integer standardmessageunit
4584
4585 common /parm_eos_lin/ talpha, sbeta, eostype
4586 character*(6) eostype
4587 double precision sbeta
4588 double precision talpha
4589
4590 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
4591 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
4592 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
4593 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
4594 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
4595 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
4596 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
4597 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
4598 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
4599 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
4600 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
4601 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
4602 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
4603 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
4604 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
4605 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
4606 double precision abeps
4607 double precision affacmom
4608 double precision beta
4609 double precision bottomdraglinear
4610 double precision bottomdragquadratic
4611 double precision cadjfreq
4612 double precision cffacmom
4613 double precision cg2dpcoffdfac
4614 double precision cg2dtargetresidual
4615 double precision cg3dtargetresidual
4616 double precision chkptfreq
4617 double precision cospower
4618 double precision delp(nr)
4619 double precision delr(nr)
4620 double precision delt
4621 double precision deltat
4622 double precision deltatclock
4623 double precision deltatmom
4624 double precision deltattracer
4625 double precision delx(nx)
4626 double precision dely(ny)
4627 double precision delz(nr)
4628 double precision diffk4s
4629 double precision diffk4t
4630 double precision diffkhs
4631 double precision diffkht
4632 double precision diffkps
4633 double precision diffkpt
4634 double precision diffkrs
4635 double precision diffkrt
4636 double precision diffkzs
4637 double precision diffkzt
4638 double precision dumpfreq
4639 double precision endtime
4640 double precision externforcingcycle
4641 double precision externforcingperiod
4642 double precision f0
4643 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4644 double precision fofacmom
4645 double precision freesurffac
4646 double precision gbaro
4647 double precision gravity
4648 double precision hfacmin
4649 double precision hfacmindp
4650 double precision hfacmindr
4651 double precision hfacmindz
4652 double precision horivertratio
4653 double precision implicdiv2dflow
4654 double precision implicsurfpress
4655 double precision ivdc_kappa
4656 double precision lambdasaltclimrelax
4657 double precision lambdathetaclimrelax
4658 double precision latfftfiltlo
4659 double precision mtfacmom
4660 double precision omega
4661 double precision pchkptfreq
4662 double precision pffacmom
4663 double precision phimin
4664 double precision rcd
4665 double precision recip_gravity
4666 double precision recip_horivertratio
4667 double precision recip_rhoconst
4668 double precision recip_rhonil
4669 double precision recip_rsphere
4670 double precision rhoconst
4671 double precision rhonil
4672 double precision ro_sealevel
4673 double precision rsphere
4674 double precision specvol_s(nr)
4675 double precision sref(nr)
4676 double precision starttime
4677 double precision taucd
4678 double precision tausaltclimrelax
4679 double precision tauthetaclimrelax
4680 double precision tavefreq
4681 double precision theta_s(nr)
4682 double precision thetamin
4683 double precision tref(nr)
4684 double precision vffacmom
4685 double precision visca4
4686 double precision viscah
4687 double precision viscap
4688 double precision viscar
4689 double precision viscaz
4690 double precision zonal_filt_lat
4691
4692 common /tamc_keys_i/ ikey_dynamics, ikey_yearly, ikey_daily_1,
4693 $ikey_daily_2, iloop_daily
4694 integer ikey_daily_1
4695 integer ikey_daily_2
4696 integer ikey_dynamics
4697 integer ikey_yearly
4698 integer iloop_daily
4699
4700 common /tamckeys/ key, ikey, idkey
4701 integer idkey
4702 integer ikey
4703 integer key
4704
4705 C==============================================
4706 C define arguments
4707 C==============================================
4708 integer bi
4709 integer bj
4710 integer imax
4711 integer imin
4712 integer jmax
4713 integer jmin
4714 integer mythid
4715 double precision mytime
4716
4717 C==============================================
4718 C define local variables
4719 C==============================================
4720 integer act1
4721 integer act2
4722 integer act3
4723 integer act4
4724 double precision adrhok(1-olx:snx+olx,1-oly:sny+oly)
4725 double precision adrhokm1(1-olx:snx+olx,1-oly:sny+oly)
4726 integer help_h
4727 integer help_i
4728 integer help_j
4729 integer ip1
4730 integer ip2
4731 integer k
4732 integer kkey
4733 integer max1
4734 integer max2
4735 integer max3
4736 double precision rhok(1-olx:snx+olx,1-oly:sny+oly)
4737 double precision rhokm1(1-olx:snx+olx,1-oly:sny+oly)
4738
4739 C==============================================
4740 C define external procedures and functions
4741 C==============================================
4742 logical different_multiple
4743 external different_multiple
4744
4745 C----------------------------------------------
4746 C RESET LOCAL ADJOINT VARIABLES
4747 C----------------------------------------------
4748 do ip2 = 1-oly, sny+oly
4749 do ip1 = 1-olx, snx+olx
4750 adrhok(ip1,ip2) = 0.d0
4751 end do
4752 end do
4753 do ip2 = 1-oly, sny+oly
4754 do ip1 = 1-olx, snx+olx
4755 adrhokm1(ip1,ip2) = 0.d0
4756 end do
4757 end do
4758
4759 C----------------------------------------------
4760 C ROUTINE BODY
4761 C----------------------------------------------
4762 if (different_multiple(cadjfreq,mytime,mytime-deltatclock)) then
4763 act1 = bi-mybxlo(mythid)
4764 max1 = mybxhi(mythid)-mybxlo(mythid)+1
4765 act2 = bj-mybylo(mythid)
4766 max2 = mybyhi(mythid)-mybylo(mythid)+1
4767 act3 = mythid-1
4768 max3 = ntx*nty
4769 act4 = ikey_dynamics-1
4770 ikey = act1+1+act2*max1+act3*max1*max2+act4*max1*max2*max3
4771 do k = nr, 2, -1
4772 kkey = (ikey-1)*nr+k
4773 help_h = k-1
4774 help_i = k-1
4775 do ip2 = 1, 1+sny+oly-(1-oly)
4776 do ip1 = 1, 1+snx+olx-(1-olx)
4777 theta(ip1-1+1-olx,ip2-1+1-oly,k,bi,bj) = thetah(ip1,ip2,
4778 $kkey)
4779 end do
4780 end do
4781 do ip2 = 1, 1+sny+oly-(1-oly)
4782 do ip1 = 1, 1+snx+olx-(1-olx)
4783 salt(ip1-1+1-olx,ip2-1+1-oly,k,bi,bj) = salth(ip1,ip2,
4784 $kkey)
4785 end do
4786 end do
4787 help_j = k-1
4788 do ip2 = 1, 1+sny+oly-(1-oly)
4789 do ip1 = 1, 1+snx+olx-(1-olx)
4790 rhokm1(ip1-1+1-olx,ip2-1+1-oly) = rhokm1h(ip1,ip2,kkey)
4791 end do
4792 end do
4793 do ip2 = 1, 1+sny+oly-(1-oly)
4794 do ip1 = 1, 1+snx+olx-(1-olx)
4795 rhok(ip1-1+1-olx,ip2-1+1-oly) = rhokh(ip1,ip2,kkey)
4796 end do
4797 end do
4798 call adconvect( bi,bj,imin,imax,jmin,jmax,k,rhokm1,rhok,
4799 $mytime,adrhokm1,adrhok )
4800 call adfind_rho( bi,bj,imin,imax,jmin,jmax,k,help_j,eostype,
4801 $theta,salt,adtheta,adsalt,adrhok )
4802 do ip2 = 1, 1+sny+oly-(1-oly)
4803 do ip1 = 1, 1+snx+olx-(1-olx)
4804 theta(ip1-1+1-olx,ip2-1+1-oly,k-1,bi,bj) = thetai(ip1,ip2,
4805 $kkey)
4806 end do
4807 end do
4808 do ip2 = 1, 1+sny+oly-(1-oly)
4809 do ip1 = 1, 1+snx+olx-(1-olx)
4810 salt(ip1-1+1-olx,ip2-1+1-oly,k-1,bi,bj) = salti(ip1,ip2,
4811 $kkey)
4812 end do
4813 end do
4814 call adfind_rho( bi,bj,imin,imax,jmin,jmax,help_h,help_i,
4815 $eostype,theta,salt,adtheta,adsalt,adrhokm1 )
4816 end do
4817 endif
4818
4819 end
4820
4821
4822 subroutine adcorrection_step( bi, bj, imin, imax, jmin, jmax, k,
4823 $adphisurfx, adphisurfy )
4824 C***************************************************************
4825 C***************************************************************
4826 C** This routine was generated by the **
4827 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
4828 C***************************************************************
4829 C***************************************************************
4830 C==============================================
4831 C all entries are defined explicitly
4832 C==============================================
4833 implicit none
4834
4835 C==============================================
4836 C define parameters
4837 C==============================================
4838 integer npx
4839 parameter ( npx = 1 )
4840 integer npy
4841 parameter ( npy = 1 )
4842 integer nr
4843 parameter ( nr = 15 )
4844 integer nsx
4845 parameter ( nsx = 1 )
4846 integer nsy
4847 parameter ( nsy = 1 )
4848 integer snx
4849 parameter ( snx = 20 )
4850 integer nx
4851 parameter ( nx = snx*nsx*npx )
4852 integer sny
4853 parameter ( sny = 40 )
4854 integer ny
4855 parameter ( ny = sny*nsy*npy )
4856 integer olx
4857 parameter ( olx = 3 )
4858 integer oly
4859 parameter ( oly = 3 )
4860
4861 C==============================================
4862 C define common blocks
4863 C==============================================
4864 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
4865 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
4866 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4867 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4868 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4869 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4870 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4871 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4872 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4873 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4874 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4875 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4876 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4877 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4878 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4879 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
4880
4881 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
4882 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
4883 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
4884 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
4885 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
4886 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
4887 $tanphiatu, tanphiatv
4888 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4889 double precision drc(1:nr)
4890 double precision drf(1:nr)
4891 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4892 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4893 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4894 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4895 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4896 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4897 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4898 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4899 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4900 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
4901 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
4902 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
4903 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
4904 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
4905 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4906 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4907 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4908 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4909 double precision rc(1:nr)
4910 double precision recip_drc(1:nr)
4911 double precision recip_drf(1:nr)
4912 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4913 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4914 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4915 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4916 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4917 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4918 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4919 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4920 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4921 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
4922 $nsy)
4923 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
4924 $nsy)
4925 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
4926 $nsy)
4927 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4928 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4929 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4930 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4931 double precision recip_rkfac
4932 double precision rf(1:nr+1)
4933 double precision rkfac
4934 double precision safac(1:nr)
4935 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4936 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4937 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4938 double precision xc0
4939 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4940 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4941 double precision yc0
4942 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4943
4944 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
4945 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
4946 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
4947 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
4948 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
4949 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
4950 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
4951 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
4952 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
4953 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
4954 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
4955 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
4956 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
4957 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
4958 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
4959 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
4960 double precision abeps
4961 double precision affacmom
4962 double precision beta
4963 double precision bottomdraglinear
4964 double precision bottomdragquadratic
4965 double precision cadjfreq
4966 double precision cffacmom
4967 double precision cg2dpcoffdfac
4968 double precision cg2dtargetresidual
4969 double precision cg3dtargetresidual
4970 double precision chkptfreq
4971 double precision cospower
4972 double precision delp(nr)
4973 double precision delr(nr)
4974 double precision delt
4975 double precision deltat
4976 double precision deltatclock
4977 double precision deltatmom
4978 double precision deltattracer
4979 double precision delx(nx)
4980 double precision dely(ny)
4981 double precision delz(nr)
4982 double precision diffk4s
4983 double precision diffk4t
4984 double precision diffkhs
4985 double precision diffkht
4986 double precision diffkps
4987 double precision diffkpt
4988 double precision diffkrs
4989 double precision diffkrt
4990 double precision diffkzs
4991 double precision diffkzt
4992 double precision dumpfreq
4993 double precision endtime
4994 double precision externforcingcycle
4995 double precision externforcingperiod
4996 double precision f0
4997 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
4998 double precision fofacmom
4999 double precision freesurffac
5000 double precision gbaro
5001 double precision gravity
5002 double precision hfacmin
5003 double precision hfacmindp
5004 double precision hfacmindr
5005 double precision hfacmindz
5006 double precision horivertratio
5007 double precision implicdiv2dflow
5008 double precision implicsurfpress
5009 double precision ivdc_kappa
5010 double precision lambdasaltclimrelax
5011 double precision lambdathetaclimrelax
5012 double precision latfftfiltlo
5013 double precision mtfacmom
5014 double precision omega
5015 double precision pchkptfreq
5016 double precision pffacmom
5017 double precision phimin
5018 double precision rcd
5019 double precision recip_gravity
5020 double precision recip_horivertratio
5021 double precision recip_rhoconst
5022 double precision recip_rhonil
5023 double precision recip_rsphere
5024 double precision rhoconst
5025 double precision rhonil
5026 double precision ro_sealevel
5027 double precision rsphere
5028 double precision specvol_s(nr)
5029 double precision sref(nr)
5030 double precision starttime
5031 double precision taucd
5032 double precision tausaltclimrelax
5033 double precision tauthetaclimrelax
5034 double precision tavefreq
5035 double precision theta_s(nr)
5036 double precision thetamin
5037 double precision tref(nr)
5038 double precision vffacmom
5039 double precision visca4
5040 double precision viscah
5041 double precision viscap
5042 double precision viscar
5043 double precision viscaz
5044 double precision zonal_filt_lat
5045
5046 C==============================================
5047 C define arguments
5048 C==============================================
5049 double precision adphisurfx(1-olx:snx+olx,1-oly:sny+oly)
5050 double precision adphisurfy(1-olx:snx+olx,1-oly:sny+oly)
5051 integer bi
5052 integer bj
5053 integer imax
5054 integer imin
5055 integer jmax
5056 integer jmin
5057 integer k
5058
5059 C==============================================
5060 C define local variables
5061 C==============================================
5062 double precision hxfac
5063 double precision hyfac
5064 integer i
5065 integer j
5066
5067 C----------------------------------------------
5068 C ROUTINE BODY
5069 C----------------------------------------------
5070 hxfac = pffacmom
5071 hyfac = pffacmom
5072 do j = jmin, jmax
5073 do i = imin, imax
5074 adgv(i,j,k,bi,bj) = adgv(i,j,k,bi,bj)+adgvnm1(i,j,k,bi,bj)
5075 adgvnm1(i,j,k,bi,bj) = 0.d0
5076 adgvnm1(i,j,k,bi,bj) = adgvnm1(i,j,k,bi,bj)+advvel(i,j,k,bi,
5077 $bj)*masks(i,j,k,bi,bj)
5078 adphisurfy(i,j) = adphisurfy(i,j)-advvel(i,j,k,bi,bj)*
5079 $deltatmom*hyfac*implicsurfpress*masks(i,j,k,bi,bj)
5080 advvel(i,j,k,bi,bj) = 0.d0
5081 end do
5082 end do
5083 do j = jmin, jmax
5084 do i = imin, imax
5085 adgu(i,j,k,bi,bj) = adgu(i,j,k,bi,bj)+adgunm1(i,j,k,bi,bj)
5086 adgunm1(i,j,k,bi,bj) = 0.d0
5087 adgunm1(i,j,k,bi,bj) = adgunm1(i,j,k,bi,bj)+aduvel(i,j,k,bi,
5088 $bj)*maskw(i,j,k,bi,bj)
5089 adphisurfx(i,j) = adphisurfx(i,j)-aduvel(i,j,k,bi,bj)*
5090 $deltatmom*hxfac*implicsurfpress*maskw(i,j,k,bi,bj)
5091 aduvel(i,j,k,bi,bj) = 0.d0
5092 end do
5093 end do
5094
5095 end
5096
5097
5098 subroutine adcost_final( mythid )
5099 C***************************************************************
5100 C***************************************************************
5101 C** This routine was generated by the **
5102 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
5103 C***************************************************************
5104 C***************************************************************
5105 C==============================================
5106 C all entries are defined explicitly
5107 C==============================================
5108 implicit none
5109
5110 C==============================================
5111 C define parameters
5112 C==============================================
5113 integer max_no_threads
5114 parameter ( max_no_threads = 32 )
5115 integer nsx
5116 parameter ( nsx = 1 )
5117 integer nsy
5118 parameter ( nsy = 1 )
5119
5120 C==============================================
5121 C define common blocks
5122 C==============================================
5123 common /adcost_r/ adfc, adobjf_test
5124 double precision adfc
5125 double precision adobjf_test(nsx,nsy)
5126
5127 common /cost_aux_r/ mult_hq, mult_hs, mult_tauu, mult_tauv,
5128 $mult_hmean, mult_h, mult_temp, mult_salt, mult_sst, mult_atl,
5129 $mult_ctdt, mult_ctds, mult_test
5130 double precision mult_atl
5131 double precision mult_ctds
5132 double precision mult_ctdt
5133 double precision mult_h
5134 double precision mult_hmean
5135 double precision mult_hq
5136 double precision mult_hs
5137 double precision mult_salt
5138 double precision mult_sst
5139 double precision mult_tauu
5140 double precision mult_tauv
5141 double precision mult_temp
5142 double precision mult_test
5143
5144 common /eeparams_i/ errormessageunit, standardmessageunit,
5145 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
5146 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
5147 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
5148 integer eedataunit
5149 integer errormessageunit
5150 integer ioerrorcount(max_no_threads)
5151 integer modeldataunit
5152 integer mybxhi(max_no_threads)
5153 integer mybxlo(max_no_threads)
5154 integer mybyhi(max_no_threads)
5155 integer mybylo(max_no_threads)
5156 integer myprocid
5157 integer mypx
5158 integer mypy
5159 integer myxgloballo
5160 integer myygloballo
5161 integer nthreads
5162 integer ntx
5163 integer nty
5164 integer numberofprocs
5165 integer pidio
5166 integer scrunit1
5167 integer scrunit2
5168 integer standardmessageunit
5169
5170 C==============================================
5171 C define arguments
5172 C==============================================
5173 integer mythid
5174
5175 C==============================================
5176 C define local variables
5177 C==============================================
5178 integer bi
5179 integer bj
5180 integer ithi
5181 integer itlo
5182 integer jthi
5183 integer jtlo
5184
5185 C----------------------------------------------
5186 C ROUTINE BODY
5187 C----------------------------------------------
5188 jtlo = mybylo(mythid)
5189 jthi = mybyhi(mythid)
5190 itlo = mybxlo(mythid)
5191 ithi = mybxhi(mythid)
5192 call global_adsum_r8( mythid,adfc )
5193 do bj = jtlo, jthi
5194 do bi = itlo, ithi
5195 adobjf_test(bi,bj) = adobjf_test(bi,bj)+adfc*mult_test
5196 end do
5197 end do
5198
5199 end
5200
5201
5202 subroutine adcost_test( mythid )
5203 C***************************************************************
5204 C***************************************************************
5205 C** This routine was generated by the **
5206 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
5207 C***************************************************************
5208 C***************************************************************
5209 C==============================================
5210 C all entries are defined explicitly
5211 C==============================================
5212 implicit none
5213
5214 C==============================================
5215 C define parameters
5216 C==============================================
5217 integer max_no_threads
5218 parameter ( max_no_threads = 32 )
5219 integer nr
5220 parameter ( nr = 15 )
5221 integer nsx
5222 parameter ( nsx = 1 )
5223 integer nsy
5224 parameter ( nsy = 1 )
5225 integer olx
5226 parameter ( olx = 3 )
5227 integer oly
5228 parameter ( oly = 3 )
5229 integer snx
5230 parameter ( snx = 20 )
5231 integer sny
5232 parameter ( sny = 40 )
5233
5234 C==============================================
5235 C define common blocks
5236 C==============================================
5237 common /adcost_r/ adfc, adobjf_test
5238 double precision adfc
5239 double precision adobjf_test(nsx,nsy)
5240
5241 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
5242 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
5243 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
5244 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5245 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5246 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5247 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5248 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5249 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5250 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5251 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5252 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5253 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5254 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5255 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5256 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5257
5258 common /cost_test_i/ ilocout, jlocout, klocout
5259 integer ilocout
5260 integer jlocout
5261 integer klocout
5262
5263 common /eeparams_i/ errormessageunit, standardmessageunit,
5264 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
5265 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
5266 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
5267 integer eedataunit
5268 integer errormessageunit
5269 integer ioerrorcount(max_no_threads)
5270 integer modeldataunit
5271 integer mybxhi(max_no_threads)
5272 integer mybxlo(max_no_threads)
5273 integer mybyhi(max_no_threads)
5274 integer mybylo(max_no_threads)
5275 integer myprocid
5276 integer mypx
5277 integer mypy
5278 integer myxgloballo
5279 integer myygloballo
5280 integer nthreads
5281 integer ntx
5282 integer nty
5283 integer numberofprocs
5284 integer pidio
5285 integer scrunit1
5286 integer scrunit2
5287 integer standardmessageunit
5288
5289 C==============================================
5290 C define arguments
5291 C==============================================
5292 integer mythid
5293
5294 C==============================================
5295 C define local variables
5296 C==============================================
5297 integer bi
5298 integer bj
5299 integer i
5300 integer ig
5301 integer ithi
5302 integer itlo
5303 integer j
5304 integer jg
5305 integer jthi
5306 integer jtlo
5307
5308 C----------------------------------------------
5309 C ROUTINE BODY
5310 C----------------------------------------------
5311 jtlo = mybylo(mythid)
5312 jthi = mybyhi(mythid)
5313 itlo = mybxlo(mythid)
5314 ithi = mybxhi(mythid)
5315 ilocout = 6
5316 jlocout = 35
5317 klocout = 1
5318 do bj = jtlo, jthi
5319 do bi = itlo, ithi
5320 do j = 1, sny
5321 jg = myygloballo-1+(bj-1)*sny+j
5322 do i = 1, snx
5323 ig = myxgloballo-1+(bi-1)*snx+i
5324 if (ig .eq. ilocout .and. jg .eq. jlocout) then
5325 adtheta(i,j,klocout,bi,bj) = adtheta(i,j,klocout,bi,bj)+
5326 $adobjf_test(bi,bj)
5327 adobjf_test(bi,bj) = 0.d0
5328 endif
5329 end do
5330 end do
5331 end do
5332 end do
5333
5334 end
5335
5336
5337 subroutine adctrl_map_forcing( mythid )
5338 C***************************************************************
5339 C***************************************************************
5340 C** This routine was generated by the **
5341 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
5342 C***************************************************************
5343 C***************************************************************
5344 C==============================================
5345 C all entries are defined explicitly
5346 C==============================================
5347 implicit none
5348
5349 C==============================================
5350 C define parameters
5351 C==============================================
5352 integer max_len_fnam
5353 parameter ( max_len_fnam = 512 )
5354 integer max_no_threads
5355 parameter ( max_no_threads = 32 )
5356 integer nr
5357 parameter ( nr = 15 )
5358 integer nsx
5359 parameter ( nsx = 1 )
5360 integer nsy
5361 parameter ( nsy = 1 )
5362 integer olx
5363 parameter ( olx = 3 )
5364 integer oly
5365 parameter ( oly = 3 )
5366 integer optimcycle
5367 parameter ( optimcycle = 0 )
5368 integer snx
5369 parameter ( snx = 20 )
5370 integer sny
5371 parameter ( sny = 40 )
5372
5373 C==============================================
5374 C define common blocks
5375 C==============================================
5376 common /adcontrolvars_r/ adtmpfld2d, adtmpfld3d
5377 double precision adtmpfld2d(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
5378 double precision adtmpfld3d(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
5379 $nsy)
5380
5381 common /adffields/ adfu, adfv, adqnet, adempmr
5382 double precision adempmr(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
5383 double precision adfu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
5384 double precision adfv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
5385 double precision adqnet(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
5386
5387 common /controlfiles_c/ xx_theta_file, xx_salt_file, xx_tauu_file,
5388 $ xx_tauv_file, xx_sflux_file, xx_hflux_file, xx_sss_file,
5389 $xx_sst_file, xx_diffkr_file, xx_kapgm_file
5390 character*(max_len_fnam) xx_diffkr_file
5391 character*(max_len_fnam) xx_hflux_file
5392 character*(max_len_fnam) xx_kapgm_file
5393 character*(max_len_fnam) xx_salt_file
5394 character*(max_len_fnam) xx_sflux_file
5395 character*(max_len_fnam) xx_sss_file
5396 character*(max_len_fnam) xx_sst_file
5397 character*(max_len_fnam) xx_tauu_file
5398 character*(max_len_fnam) xx_tauv_file
5399 character*(max_len_fnam) xx_theta_file
5400
5401 common /eeparams_i/ errormessageunit, standardmessageunit,
5402 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
5403 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
5404 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
5405 integer eedataunit
5406 integer errormessageunit
5407 integer ioerrorcount(max_no_threads)
5408 integer modeldataunit
5409 integer mybxhi(max_no_threads)
5410 integer mybxlo(max_no_threads)
5411 integer mybyhi(max_no_threads)
5412 integer mybylo(max_no_threads)
5413 integer myprocid
5414 integer mypx
5415 integer mypy
5416 integer myxgloballo
5417 integer myygloballo
5418 integer nthreads
5419 integer ntx
5420 integer nty
5421 integer numberofprocs
5422 integer pidio
5423 integer scrunit1
5424 integer scrunit2
5425 integer standardmessageunit
5426
5427 C==============================================
5428 C define arguments
5429 C==============================================
5430 integer mythid
5431
5432 C==============================================
5433 C define local variables
5434 C==============================================
5435 integer bi
5436 integer bj
5437 logical doglobalread
5438 character*(80) fnamehflux
5439 character*(80) fnamesflux
5440 character*(80) fnametauu
5441 character*(80) fnametauv
5442 integer i
5443 integer il
5444 integer imax
5445 integer imin
5446 integer ithi
5447 integer itlo
5448 integer j
5449 integer jmax
5450 integer jmin
5451 integer jthi
5452 integer jtlo
5453 logical ladinit
5454
5455 C==============================================
5456 C define external procedures and functions
5457 C==============================================
5458 integer ilnblnk
5459 external ilnblnk
5460
5461 C----------------------------------------------
5462 C ROUTINE BODY
5463 C----------------------------------------------
5464 jtlo = mybylo(mythid)
5465 jthi = mybyhi(mythid)
5466 itlo = mybxlo(mythid)
5467 ithi = mybxhi(mythid)
5468 jmin = 1-oly
5469 jmax = sny+oly
5470 imin = 1-olx
5471 imax = snx+olx
5472 doglobalread = .false.
5473 ladinit = .false.
5474 il = ilnblnk(xx_tauu_file)
5475 write(fnametauu(1:80),'(2a,i10.10)') xx_tauu_file(1:il),'.',
5476 $optimcycle
5477 il = ilnblnk(xx_tauv_file)
5478 write(fnametauv(1:80),'(2a,i10.10)') xx_tauv_file(1:il),'.',
5479 $optimcycle
5480 il = ilnblnk(xx_sflux_file)
5481 write(fnamesflux(1:80),'(2a,i10.10)') xx_sflux_file(1:il),'.',
5482 $optimcycle
5483 il = ilnblnk(xx_hflux_file)
5484 write(fnamehflux(1:80),'(2a,i10.10)') xx_hflux_file(1:il),'.',
5485 $optimcycle
5486 do bj = jtlo, jthi
5487 do bi = itlo, ithi
5488 do j = jmin, jmax
5489 do i = imin, imax
5490 adtmpfld2d(i,j,bi,bj) = adtmpfld2d(i,j,bi,bj)+adqnet(i,j,
5491 $bi,bj)
5492 end do
5493 end do
5494 end do
5495 end do
5496 call adactive_read_xy( fnamehflux,1,doglobalread,ladinit,
5497 $optimcycle,mythid,adtmpfld2d )
5498 do bj = jtlo, jthi
5499 do bi = itlo, ithi
5500 do j = jmin, jmax
5501 do i = imin, imax
5502 adtmpfld2d(i,j,bi,bj) = adtmpfld2d(i,j,bi,bj)+adempmr(i,j,
5503 $bi,bj)
5504 end do
5505 end do
5506 end do
5507 end do
5508 call adactive_read_xy( fnamesflux,1,doglobalread,ladinit,
5509 $optimcycle,mythid,adtmpfld2d )
5510 do bj = jtlo, jthi
5511 do bi = itlo, ithi
5512 do j = jmin, jmax
5513 do i = imin, imax
5514 adtmpfld2d(i,j,bi,bj) = adtmpfld2d(i,j,bi,bj)+adfv(i,j,bi,
5515 $bj)
5516 end do
5517 end do
5518 end do
5519 end do
5520 call adactive_read_xy( fnametauv,1,doglobalread,ladinit,
5521 $optimcycle,mythid,adtmpfld2d )
5522 do bj = jtlo, jthi
5523 do bi = itlo, ithi
5524 do j = jmin, jmax
5525 do i = imin, imax
5526 adtmpfld2d(i,j,bi,bj) = adtmpfld2d(i,j,bi,bj)+adfu(i,j,bi,
5527 $bj)
5528 end do
5529 end do
5530 end do
5531 end do
5532 call adactive_read_xy( fnametauu,1,doglobalread,ladinit,
5533 $optimcycle,mythid,adtmpfld2d )
5534
5535 end
5536
5537
5538 subroutine adctrl_map_ini( mythid )
5539 C***************************************************************
5540 C***************************************************************
5541 C** This routine was generated by the **
5542 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
5543 C***************************************************************
5544 C***************************************************************
5545 C==============================================
5546 C all entries are defined explicitly
5547 C==============================================
5548 implicit none
5549
5550 C==============================================
5551 C define parameters
5552 C==============================================
5553 integer max_len_fnam
5554 parameter ( max_len_fnam = 512 )
5555 integer max_no_threads
5556 parameter ( max_no_threads = 32 )
5557 integer nr
5558 parameter ( nr = 15 )
5559 integer nsx
5560 parameter ( nsx = 1 )
5561 integer nsy
5562 parameter ( nsy = 1 )
5563 integer olx
5564 parameter ( olx = 3 )
5565 integer oly
5566 parameter ( oly = 3 )
5567 integer optimcycle
5568 parameter ( optimcycle = 0 )
5569 integer snx
5570 parameter ( snx = 20 )
5571 integer sny
5572 parameter ( sny = 40 )
5573
5574 C==============================================
5575 C define common blocks
5576 C==============================================
5577 common /adcontrolvars_r/ adtmpfld2d, adtmpfld3d
5578 double precision adtmpfld2d(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
5579 double precision adtmpfld3d(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
5580 $nsy)
5581
5582 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
5583 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
5584 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
5585 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5586 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5587 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5588 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5589 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5590 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5591 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5592 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5593 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5594 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5595 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5596 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5597 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5598
5599 common /controlfiles_c/ xx_theta_file, xx_salt_file, xx_tauu_file,
5600 $ xx_tauv_file, xx_sflux_file, xx_hflux_file, xx_sss_file,
5601 $xx_sst_file, xx_diffkr_file, xx_kapgm_file
5602 character*(max_len_fnam) xx_diffkr_file
5603 character*(max_len_fnam) xx_hflux_file
5604 character*(max_len_fnam) xx_kapgm_file
5605 character*(max_len_fnam) xx_salt_file
5606 character*(max_len_fnam) xx_sflux_file
5607 character*(max_len_fnam) xx_sss_file
5608 character*(max_len_fnam) xx_sst_file
5609 character*(max_len_fnam) xx_tauu_file
5610 character*(max_len_fnam) xx_tauv_file
5611 character*(max_len_fnam) xx_theta_file
5612
5613 common /eeparams_i/ errormessageunit, standardmessageunit,
5614 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
5615 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
5616 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
5617 integer eedataunit
5618 integer errormessageunit
5619 integer ioerrorcount(max_no_threads)
5620 integer modeldataunit
5621 integer mybxhi(max_no_threads)
5622 integer mybxlo(max_no_threads)
5623 integer mybyhi(max_no_threads)
5624 integer mybylo(max_no_threads)
5625 integer myprocid
5626 integer mypx
5627 integer mypy
5628 integer myxgloballo
5629 integer myygloballo
5630 integer nthreads
5631 integer ntx
5632 integer nty
5633 integer numberofprocs
5634 integer pidio
5635 integer scrunit1
5636 integer scrunit2
5637 integer standardmessageunit
5638
5639 C==============================================
5640 C define arguments
5641 C==============================================
5642 integer mythid
5643
5644 C==============================================
5645 C define local variables
5646 C==============================================
5647 integer bi
5648 integer bj
5649 logical doglobalread
5650 logical equal
5651 double precision fac
5652 character*(80) fnamesalt
5653 character*(80) fnametheta
5654 integer i
5655 integer il
5656 integer imax
5657 integer imin
5658 integer ithi
5659 integer itlo
5660 integer j
5661 integer jmax
5662 integer jmin
5663 integer jthi
5664 integer jtlo
5665 integer k
5666 logical ladinit
5667
5668 C==============================================
5669 C define external procedures and functions
5670 C==============================================
5671 integer ilnblnk
5672 external ilnblnk
5673
5674 C----------------------------------------------
5675 C ROUTINE BODY
5676 C----------------------------------------------
5677 jtlo = mybylo(mythid)
5678 jthi = mybyhi(mythid)
5679 itlo = mybxlo(mythid)
5680 ithi = mybxhi(mythid)
5681 jmin = 1-oly
5682 jmax = sny+oly
5683 imin = 1-olx
5684 imax = snx+olx
5685 doglobalread = .false.
5686 ladinit = .false.
5687 equal = .true.
5688 if (equal) then
5689 fac = 1.d0
5690 else
5691 fac = 0.d0
5692 endif
5693 il = ilnblnk(xx_theta_file)
5694 write(fnametheta(1:80),'(2a,i10.10)') xx_theta_file(1:il),'.',
5695 $optimcycle
5696 il = ilnblnk(xx_salt_file)
5697 write(fnamesalt(1:80),'(2a,i10.10)') xx_salt_file(1:il),'.',
5698 $optimcycle
5699 call adexch_xyz_r8( mythid,adgsnm1 )
5700 call adexch_xyz_r8( mythid,adsalt )
5701 call adexch_xyz_r8( mythid,adgtnm1 )
5702 call adexch_xyz_r8( mythid,adtheta )
5703 do bj = jtlo, jthi
5704 do bi = itlo, ithi
5705 do k = 1, nr
5706 do j = jmin, jmax
5707 do i = imin, imax
5708 adtmpfld3d(i,j,k,bi,bj) = adtmpfld3d(i,j,k,bi,bj)+
5709 $adgsnm1(i,j,k,bi,bj)*fac
5710 adtmpfld3d(i,j,k,bi,bj) = adtmpfld3d(i,j,k,bi,bj)+
5711 $adsalt(i,j,k,bi,bj)*fac
5712 end do
5713 end do
5714 end do
5715 end do
5716 end do
5717 call adactive_read_xyz( fnamesalt,1,doglobalread,ladinit,
5718 $optimcycle,mythid,adtmpfld3d )
5719 do bj = jtlo, jthi
5720 do bi = itlo, ithi
5721 do k = 1, nr
5722 do j = jmin, jmax
5723 do i = imin, imax
5724 adtmpfld3d(i,j,k,bi,bj) = adtmpfld3d(i,j,k,bi,bj)+
5725 $adgtnm1(i,j,k,bi,bj)*fac
5726 adtmpfld3d(i,j,k,bi,bj) = adtmpfld3d(i,j,k,bi,bj)+
5727 $adtheta(i,j,k,bi,bj)*fac
5728 end do
5729 end do
5730 end do
5731 end do
5732 end do
5733 call adactive_read_xyz( fnametheta,1,doglobalread,ladinit,
5734 $optimcycle,mythid,adtmpfld3d )
5735
5736 end
5737
5738
5739 subroutine adcycle_tracer( bi, bj, imin, imax, jmin, jmax, k,
5740 $adtracer, adgtracer, adgtrnm1 )
5741 C***************************************************************
5742 C***************************************************************
5743 C** This routine was generated by the **
5744 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
5745 C***************************************************************
5746 C***************************************************************
5747 C==============================================
5748 C all entries are defined explicitly
5749 C==============================================
5750 implicit none
5751
5752 C==============================================
5753 C define parameters
5754 C==============================================
5755 integer nr
5756 parameter ( nr = 15 )
5757 integer nsx
5758 parameter ( nsx = 1 )
5759 integer nsy
5760 parameter ( nsy = 1 )
5761 integer olx
5762 parameter ( olx = 3 )
5763 integer oly
5764 parameter ( oly = 3 )
5765 integer snx
5766 parameter ( snx = 20 )
5767 integer sny
5768 parameter ( sny = 40 )
5769
5770 C==============================================
5771 C define common blocks
5772 C==============================================
5773 C==============================================
5774 C define arguments
5775 C==============================================
5776 double precision adgtracer(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5777 double precision adgtrnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5778 double precision adtracer(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5779 integer bi
5780 integer bj
5781 integer imax
5782 integer imin
5783 integer jmax
5784 integer jmin
5785 integer k
5786
5787 C==============================================
5788 C define local variables
5789 C==============================================
5790 integer i
5791 integer j
5792
5793 C----------------------------------------------
5794 C ROUTINE BODY
5795 C----------------------------------------------
5796 do j = jmin, jmax
5797 do i = imin, imax
5798 adgtracer(i,j,k,bi,bj) = adgtracer(i,j,k,bi,bj)+adgtrnm1(i,j,
5799 $k,bi,bj)
5800 adgtrnm1(i,j,k,bi,bj) = 0.d0
5801 adgtrnm1(i,j,k,bi,bj) = adgtrnm1(i,j,k,bi,bj)+adtracer(i,j,k,
5802 $bi,bj)
5803 adtracer(i,j,k,bi,bj) = 0.d0
5804 end do
5805 end do
5806
5807 end
5808
5809
5810 subroutine addo_fields_blocking_exchanges( mythid )
5811 C***************************************************************
5812 C***************************************************************
5813 C** This routine was generated by the **
5814 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
5815 C***************************************************************
5816 C***************************************************************
5817 C==============================================
5818 C all entries are defined explicitly
5819 C==============================================
5820 implicit none
5821
5822 C==============================================
5823 C define parameters
5824 C==============================================
5825 integer nr
5826 parameter ( nr = 15 )
5827 integer nsx
5828 parameter ( nsx = 1 )
5829 integer nsy
5830 parameter ( nsy = 1 )
5831 integer olx
5832 parameter ( olx = 3 )
5833 integer oly
5834 parameter ( oly = 3 )
5835 integer snx
5836 parameter ( snx = 20 )
5837 integer sny
5838 parameter ( sny = 40 )
5839
5840 C==============================================
5841 C define common blocks
5842 C==============================================
5843 common /addynvars_cd/ aduveld, advveld, adetanm1, adunm1, advnm1,
5844 $adgucd, adgvcd
5845 double precision adetanm1(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
5846 double precision adgucd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5847 double precision adgvcd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5848 double precision adunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5849 double precision aduveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5850 double precision advnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5851 double precision advveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5852
5853 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
5854 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
5855 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
5856 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5857 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5858 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5859 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5860 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5861 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5862 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5863 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5864 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5865 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5866 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5867 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5868 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5869
5870 C==============================================
5871 C define arguments
5872 C==============================================
5873 integer mythid
5874
5875 C----------------------------------------------
5876 C ROUTINE BODY
5877 C----------------------------------------------
5878 call adexch_xyz_r8( mythid,advveld )
5879 call adexch_xyz_r8( mythid,aduveld )
5880 call adexch_xyz_r8( mythid,adsalt )
5881 call adexch_xyz_r8( mythid,adtheta )
5882 call adexch_xyz_r8( mythid,advvel )
5883 call adexch_xyz_r8( mythid,aduvel )
5884
5885 end
5886
5887
5888 subroutine mddynamics( mytime, myiter, mythid )
5889 C***************************************************************
5890 C***************************************************************
5891 C** This routine was generated by the **
5892 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
5893 C***************************************************************
5894 C***************************************************************
5895 C==============================================
5896 C all entries are defined explicitly
5897 C==============================================
5898 implicit none
5899
5900 C==============================================
5901 C define parameters
5902 C==============================================
5903 integer max_no_threads
5904 parameter ( max_no_threads = 32 )
5905 integer npx
5906 parameter ( npx = 1 )
5907 integer npy
5908 parameter ( npy = 1 )
5909 integer nr
5910 parameter ( nr = 15 )
5911 integer nsx
5912 parameter ( nsx = 1 )
5913 integer nsy
5914 parameter ( nsy = 1 )
5915 integer snx
5916 parameter ( snx = 20 )
5917 integer nx
5918 parameter ( nx = snx*nsx*npx )
5919 integer sny
5920 parameter ( sny = 40 )
5921 integer ny
5922 parameter ( ny = sny*nsy*npy )
5923 integer olx
5924 parameter ( olx = 3 )
5925 integer oly
5926 parameter ( oly = 3 )
5927
5928 C==============================================
5929 C define common blocks
5930 C==============================================
5931 common /cadgtnm1/ gtnm1h
5932 real*4 gtnm1h(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
5933
5934 common /cadkappars/ kapparsh
5935 real*4 kapparsh(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
5936
5937 common /cadkappart/ kapparth
5938 real*4 kapparth(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
5939
5940 common /cadkapparu/ kapparsi
5941 real*4 kapparsi(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
5942
5943 common /cadkapparv/ kapparti
5944 real*4 kapparti(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
5945
5946 common /cadsalw/ salth
5947 real*4 salth(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
5948
5949 common /cadsalx/ salti
5950 real*4 salti(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
5951
5952 common /cadsaly/ saltj
5953 real*4 saltj(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
5954
5955 common /cadthetd/ thetah
5956 real*4 thetah(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
5957
5958 common /cadthete/ thetai
5959 real*4 thetai(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
5960
5961 common /cadthetf/ thetaj
5962 real*4 thetaj(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
5963
5964 common /caduvel/ uvelh
5965 real*4 uvelh(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
5966
5967 common /cadvvel/ vvelh
5968 real*4 vvelh(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
5969
5970 common /cadwvel/ wvelh
5971 real*4 wvelh(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
5972
5973 common /dynvars_cd/ uveld, vveld, etanm1, unm1, vnm1, gucd, gvcd
5974 double precision etanm1(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
5975 double precision gucd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5976 double precision gvcd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5977 double precision unm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5978 double precision uveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5979 double precision vnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5980 double precision vveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5981
5982 common /dynvars_r/ etan, uvel, vvel, wvel, theta, salt, gu, gv,
5983 $gt, gs, gunm1, gvnm1, gtnm1, gsnm1
5984 double precision etan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
5985 double precision gs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5986 double precision gsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5987 double precision gt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5988 double precision gtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5989 double precision gu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5990 double precision gunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5991 double precision gv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5992 double precision gvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5993 double precision salt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5994 double precision theta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5995 double precision uvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5996 double precision vvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5997 double precision wvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
5998
5999 common /eeparams_i/ errormessageunit, standardmessageunit,
6000 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
6001 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
6002 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
6003 integer eedataunit
6004 integer errormessageunit
6005 integer ioerrorcount(max_no_threads)
6006 integer modeldataunit
6007 integer mybxhi(max_no_threads)
6008 integer mybxlo(max_no_threads)
6009 integer mybyhi(max_no_threads)
6010 integer mybylo(max_no_threads)
6011 integer myprocid
6012 integer mypx
6013 integer mypy
6014 integer myxgloballo
6015 integer myygloballo
6016 integer nthreads
6017 integer ntx
6018 integer nty
6019 integer numberofprocs
6020 integer pidio
6021 integer scrunit1
6022 integer scrunit2
6023 integer standardmessageunit
6024
6025 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
6026 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
6027 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
6028 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
6029 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
6030 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
6031 $tanphiatu, tanphiatv
6032 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6033 double precision drc(1:nr)
6034 double precision drf(1:nr)
6035 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6036 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6037 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6038 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6039 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6040 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6041 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6042 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6043 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6044 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
6045 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
6046 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
6047 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
6048 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
6049 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6050 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6051 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6052 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6053 double precision rc(1:nr)
6054 double precision recip_drc(1:nr)
6055 double precision recip_drf(1:nr)
6056 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6057 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6058 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6059 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6060 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6061 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6062 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6063 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6064 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6065 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
6066 $nsy)
6067 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
6068 $nsy)
6069 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
6070 $nsy)
6071 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6072 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6073 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6074 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6075 double precision recip_rkfac
6076 double precision rf(1:nr+1)
6077 double precision rkfac
6078 double precision safac(1:nr)
6079 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6080 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6081 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6082 double precision xc0
6083 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6084 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6085 double precision yc0
6086 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6087
6088 common /parm_eos_lin/ talpha, sbeta, eostype
6089 character*(6) eostype
6090 double precision sbeta
6091 double precision talpha
6092
6093 common /parm_l/ usingcartesiangrid, usingsphericalpolargrid,
6094 $no_slip_sides, no_slip_bottom, staggertimestep, momviscosity,
6095 $momadvection, momforcing, usecoriolis, mompressureforcing,
6096 $tempdiffusion, tempadvection, tempforcing, saltdiffusion,
6097 $saltadvection, saltforcing, implicitfreesurface, rigidlid,
6098 $momstepping, tempstepping, saltstepping, metricterms,
6099 $usingsphericalpolarmterms, useconstantf, usebetaplanef,
6100 $usespheref, implicitdiffusion, implicitviscosity,
6101 $dothetaclimrelax, dosaltclimrelax, periodicexternalforcing,
6102 $usingpcoords, usingzcoords, nonhydrostatic, globalfiles,
6103 $allowfreezing, groundatk1, usepickupbeforec35
6104 logical allowfreezing
6105 logical dosaltclimrelax
6106 logical dothetaclimrelax
6107 logical globalfiles
6108 logical groundatk1
6109 logical implicitdiffusion
6110 logical implicitfreesurface
6111 logical implicitviscosity
6112 logical metricterms
6113 logical momadvection
6114 logical momforcing
6115 logical mompressureforcing
6116 logical momstepping
6117 logical momviscosity
6118 logical no_slip_bottom
6119 logical no_slip_sides
6120 logical nonhydrostatic
6121 logical periodicexternalforcing
6122 logical rigidlid
6123 logical saltadvection
6124 logical saltdiffusion
6125 logical saltforcing
6126 logical saltstepping
6127 logical staggertimestep
6128 logical tempadvection
6129 logical tempdiffusion
6130 logical tempforcing
6131 logical tempstepping
6132 logical usebetaplanef
6133 logical useconstantf
6134 logical usecoriolis
6135 logical usepickupbeforec35
6136 logical usespheref
6137 logical usingcartesiangrid
6138 logical usingpcoords
6139 logical usingsphericalpolargrid
6140 logical usingsphericalpolarmterms
6141 logical usingzcoords
6142
6143 common /parm_packages/ usekpp, usegmredi, useobcs, useaim, useecco
6144 logical useaim
6145 logical useecco
6146 logical usegmredi
6147 logical usekpp
6148 logical useobcs
6149
6150 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
6151 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
6152 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
6153 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
6154 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
6155 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
6156 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
6157 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
6158 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
6159 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
6160 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
6161 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
6162 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
6163 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
6164 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
6165 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
6166 double precision abeps
6167 double precision affacmom
6168 double precision beta
6169 double precision bottomdraglinear
6170 double precision bottomdragquadratic
6171 double precision cadjfreq
6172 double precision cffacmom
6173 double precision cg2dpcoffdfac
6174 double precision cg2dtargetresidual
6175 double precision cg3dtargetresidual
6176 double precision chkptfreq
6177 double precision cospower
6178 double precision delp(nr)
6179 double precision delr(nr)
6180 double precision delt
6181 double precision deltat
6182 double precision deltatclock
6183 double precision deltatmom
6184 double precision deltattracer
6185 double precision delx(nx)
6186 double precision dely(ny)
6187 double precision delz(nr)
6188 double precision diffk4s
6189 double precision diffk4t
6190 double precision diffkhs
6191 double precision diffkht
6192 double precision diffkps
6193 double precision diffkpt
6194 double precision diffkrs
6195 double precision diffkrt
6196 double precision diffkzs
6197 double precision diffkzt
6198 double precision dumpfreq
6199 double precision endtime
6200 double precision externforcingcycle
6201 double precision externforcingperiod
6202 double precision f0
6203 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6204 double precision fofacmom
6205 double precision freesurffac
6206 double precision gbaro
6207 double precision gravity
6208 double precision hfacmin
6209 double precision hfacmindp
6210 double precision hfacmindr
6211 double precision hfacmindz
6212 double precision horivertratio
6213 double precision implicdiv2dflow
6214 double precision implicsurfpress
6215 double precision ivdc_kappa
6216 double precision lambdasaltclimrelax
6217 double precision lambdathetaclimrelax
6218 double precision latfftfiltlo
6219 double precision mtfacmom
6220 double precision omega
6221 double precision pchkptfreq
6222 double precision pffacmom
6223 double precision phimin
6224 double precision rcd
6225 double precision recip_gravity
6226 double precision recip_horivertratio
6227 double precision recip_rhoconst
6228 double precision recip_rhonil
6229 double precision recip_rsphere
6230 double precision rhoconst
6231 double precision rhonil
6232 double precision ro_sealevel
6233 double precision rsphere
6234 double precision specvol_s(nr)
6235 double precision sref(nr)
6236 double precision starttime
6237 double precision taucd
6238 double precision tausaltclimrelax
6239 double precision tauthetaclimrelax
6240 double precision tavefreq
6241 double precision theta_s(nr)
6242 double precision thetamin
6243 double precision tref(nr)
6244 double precision vffacmom
6245 double precision visca4
6246 double precision viscah
6247 double precision viscap
6248 double precision viscar
6249 double precision viscaz
6250 double precision zonal_filt_lat
6251
6252 common /tamc_keys_i/ ikey_dynamics, ikey_yearly, ikey_daily_1,
6253 $ikey_daily_2, iloop_daily
6254 integer ikey_daily_1
6255 integer ikey_daily_2
6256 integer ikey_dynamics
6257 integer ikey_yearly
6258 integer iloop_daily
6259
6260 common /tamckeys/ key, ikey, idkey
6261 integer idkey
6262 integer ikey
6263 integer key
6264
6265 C==============================================
6266 C define arguments
6267 C==============================================
6268 integer myiter
6269 integer mythid
6270 double precision mytime
6271
6272 C==============================================
6273 C define local variables
6274 C==============================================
6275 integer act1
6276 integer act2
6277 integer act3
6278 integer act4
6279 integer bi
6280 integer bj
6281 double precision convectcount(1-olx:snx+olx,1-oly:sny+oly,nr)
6282 double precision fvers(1-olx:snx+olx,1-oly:sny+oly,2)
6283 double precision fvert(1-olx:snx+olx,1-oly:sny+oly,2)
6284 double precision fveru(1-olx:snx+olx,1-oly:sny+oly,2)
6285 double precision fverv(1-olx:snx+olx,1-oly:sny+oly,2)
6286 integer help_h
6287 integer i
6288 integer imax
6289 integer imin
6290 integer ip1
6291 integer ip2
6292 integer ip3
6293 integer j
6294 integer jmax
6295 integer jmin
6296 integer k
6297 double precision kappars(1-olx:snx+olx,1-oly:sny+oly,nr)
6298 double precision kappart(1-olx:snx+olx,1-oly:sny+oly,nr)
6299 double precision kapparu(1-olx:snx+olx,1-oly:sny+oly,nr)
6300 double precision kapparv(1-olx:snx+olx,1-oly:sny+oly,nr)
6301 integer kdown
6302 integer kkey
6303 integer km1
6304 integer kup
6305 double precision maskc(1-olx:snx+olx,1-oly:sny+oly)
6306 double precision maskup(1-olx:snx+olx,1-oly:sny+oly)
6307 integer max1
6308 integer max2
6309 integer max3
6310 double precision phihyd(1-olx:snx+olx,1-oly:sny+oly,nr)
6311 double precision phisurfx(1-olx:snx+olx,1-oly:sny+oly)
6312 double precision phisurfy(1-olx:snx+olx,1-oly:sny+oly)
6313 double precision rhok(1-olx:snx+olx,1-oly:sny+oly)
6314 double precision rhokm1(1-olx:snx+olx,1-oly:sny+oly)
6315 double precision rtrans(1-olx:snx+olx,1-oly:sny+oly)
6316 double precision utrans(1-olx:snx+olx,1-oly:sny+oly)
6317 double precision vtrans(1-olx:snx+olx,1-oly:sny+oly)
6318 double precision xa(1-olx:snx+olx,1-oly:sny+oly)
6319 double precision ya(1-olx:snx+olx,1-oly:sny+oly)
6320
6321 C**********************************************
6322 C executable statements of routine
6323 C**********************************************
6324 do j = 1-oly, sny+oly
6325 do i = 1-olx, snx+olx
6326 do k = 1, nr
6327 phihyd(i,j,k) = 0.d0
6328 end do
6329 rhokm1(i,j) = 0.d0
6330 rhok(i,j) = 0.d0
6331 phisurfx(i,j) = 0.d0
6332 phisurfy(i,j) = 0.d0
6333 end do
6334 end do
6335 do bj = mybylo(mythid), mybyhi(mythid)
6336 do bi = mybxlo(mythid), mybxhi(mythid)
6337 act1 = bi-mybxlo(mythid)
6338 max1 = mybxhi(mythid)-mybxlo(mythid)+1
6339 act2 = bj-mybylo(mythid)
6340 max2 = mybyhi(mythid)-mybylo(mythid)+1
6341 act3 = mythid-1
6342 max3 = ntx*nty
6343 act4 = ikey_dynamics-1
6344 ikey = act1+1+act2*max1+act3*max1*max2+act4*max1*max2*max3
6345 do j = 1-oly, sny+oly
6346 do i = 1-olx, snx+olx
6347 fvert(i,j,1) = 0.d0
6348 fvert(i,j,2) = 0.d0
6349 fvers(i,j,1) = 0.d0
6350 fvers(i,j,2) = 0.d0
6351 fveru(i,j,1) = 0.d0
6352 fveru(i,j,2) = 0.d0
6353 fverv(i,j,1) = 0.d0
6354 fverv(i,j,2) = 0.d0
6355 end do
6356 end do
6357 do k = 1, nr
6358 do j = 1-oly, sny+oly
6359 do i = 1-olx, snx+olx
6360 kappart(i,j,k) = 0.d0
6361 kappars(i,j,k) = 0.d0
6362 end do
6363 end do
6364 end do
6365 imin = 1-olx+1
6366 imax = snx+olx
6367 jmin = 1-oly+1
6368 jmax = sny+oly
6369 do k = nr, 1, -1
6370 kkey = (ikey-1)*nr+k
6371 call integrate_for_w( bi,bj,k,uvel,vvel,wvel,mythid )
6372 if (usegmredi .or. k .gt. 1 .and. ivdc_kappa .ne. 0.) then
6373 do ip2 = 1, 1+sny+oly-(1-oly)
6374 do ip1 = 1, 1+snx+olx-(1-olx)
6375 thetaj(ip1,ip2,kkey) = theta(ip1-1+1-olx,ip2-1+1-oly,
6376 $k,bi,bj)
6377 end do
6378 end do
6379 do ip2 = 1, 1+sny+oly-(1-oly)
6380 do ip1 = 1, 1+snx+olx-(1-olx)
6381 saltj(ip1,ip2,kkey) = salt(ip1-1+1-olx,ip2-1+1-oly,k,
6382 $bi,bj)
6383 end do
6384 end do
6385 call find_rho( bi,bj,imin,imax,jmin,jmax,k,k,eostype,
6386 $theta,salt,rhok,mythid )
6387 if (k .gt. 1) then
6388 do ip2 = 1, 1+sny+oly-(1-oly)
6389 do ip1 = 1, 1+snx+olx-(1-olx)
6390 thetai(ip1,ip2,kkey) = theta(ip1-1+1-olx,ip2-1+1-
6391 $oly,k-1,bi,bj)
6392 end do
6393 end do
6394 do ip2 = 1, 1+sny+oly-(1-oly)
6395 do ip1 = 1, 1+snx+olx-(1-olx)
6396 salti(ip1,ip2,kkey) = salt(ip1-1+1-olx,ip2-1+1-oly,
6397 $k-1,bi,bj)
6398 end do
6399 end do
6400 help_h = k-1
6401 call find_rho( bi,bj,imin,imax,jmin,jmax,help_h,k,
6402 $eostype,theta,salt,rhokm1,mythid )
6403 endif
6404 endif
6405 if (k .gt. 1 .and. ivdc_kappa .ne. 0.) then
6406 call calc_ivdc( bi,bj,imin,imax,jmin,jmax,k,rhokm1,rhok,
6407 $convectcount,kappart,kappars,mytime,myiter,mythid )
6408 endif
6409 end do
6410 do ip3 = 1, nr
6411 do ip2 = 1, 1+sny+oly-(1-oly)
6412 do ip1 = 1, 1+snx+olx-(1-olx)
6413 wvelh(ip1,ip2,ip3,ikey) = wvel(ip1-1+1-olx,ip2-1+1-oly,
6414 $ip3,bi,bj)
6415 end do
6416 end do
6417 end do
6418 call external_forcing_surf( bi,bj,imin,imax,jmin,jmax,mythid )
6419 do ip3 = 1, nr
6420 do ip2 = 1, 1+sny+oly-(1-oly)
6421 do ip1 = 1, 1+snx+olx-(1-olx)
6422 kapparti(ip1,ip2,ip3,ikey) = kappart(ip1-1+1-olx,ip2-1+
6423 $1-oly,ip3)
6424 end do
6425 end do
6426 end do
6427 do ip3 = 1, nr
6428 do ip2 = 1, 1+sny+oly-(1-oly)
6429 do ip1 = 1, 1+snx+olx-(1-olx)
6430 kapparsi(ip1,ip2,ip3,ikey) = kappars(ip1-1+1-olx,ip2-1+
6431 $1-oly,ip3)
6432 end do
6433 end do
6434 end do
6435 do ip3 = 1, nr
6436 do ip2 = 1, 1+sny+oly-(1-oly)
6437 do ip1 = 1, 1+snx+olx-(1-olx)
6438 thetah(ip1,ip2,ip3,ikey) = theta(ip1-1+1-olx,ip2-1+1-
6439 $oly,ip3,bi,bj)
6440 end do
6441 end do
6442 end do
6443 do ip3 = 1, nr
6444 do ip2 = 1, 1+sny+oly-(1-oly)
6445 do ip1 = 1, 1+snx+olx-(1-olx)
6446 salth(ip1,ip2,ip3,ikey) = salt(ip1-1+1-olx,ip2-1+1-oly,
6447 $ip3,bi,bj)
6448 end do
6449 end do
6450 end do
6451 do ip3 = 1, nr
6452 do ip2 = 1, 1+sny+oly-(1-oly)
6453 do ip1 = 1, 1+snx+olx-(1-olx)
6454 uvelh(ip1,ip2,ip3,ikey) = uvel(ip1-1+1-olx,ip2-1+1-oly,
6455 $ip3,bi,bj)
6456 end do
6457 end do
6458 end do
6459 do ip3 = 1, nr
6460 do ip2 = 1, 1+sny+oly-(1-oly)
6461 do ip1 = 1, 1+snx+olx-(1-olx)
6462 vvelh(ip1,ip2,ip3,ikey) = vvel(ip1-1+1-olx,ip2-1+1-oly,
6463 $ip3,bi,bj)
6464 end do
6465 end do
6466 end do
6467 do k = nr, 1, -1
6468 kkey = (ikey-1)*nr+k
6469 km1 = max(1,k-1)
6470 kup = 1+mod(k+1,2)
6471 kdown = 1+mod(k,2)
6472 imin = 1-olx+2
6473 imax = snx+olx-1
6474 jmin = 1-oly+2
6475 jmax = sny+oly-1
6476 call calc_common_factors( bi,bj,imin,imax,jmin,jmax,k,km1,
6477 $kup,kdown,xa,ya,utrans,vtrans,rtrans,maskc,maskup,mythid )
6478 do ip2 = 1, 1+sny+oly-(1-oly)
6479 do ip1 = 1, 1+snx+olx-(1-olx)
6480 kapparth(ip1,ip2,kkey) = kappart(ip1-1+1-olx,ip2-1+1-
6481 $oly,k)
6482 end do
6483 end do
6484 do ip2 = 1, 1+sny+oly-(1-oly)
6485 do ip1 = 1, 1+snx+olx-(1-olx)
6486 kapparsh(ip1,ip2,kkey) = kappars(ip1-1+1-olx,ip2-1+1-
6487 $oly,k)
6488 end do
6489 end do
6490 call calc_diffusivity( bi,bj,imin,imax,jmin,jmax,k,maskc,
6491 $maskup,kappart,kappars,kapparu,kapparv,mythid )
6492 if (tempstepping) then
6493 call calc_gt( bi,bj,imin,imax,jmin,jmax,k,km1,kup,kdown,
6494 $xa,ya,utrans,vtrans,rtrans,maskup,maskc,kappart,fvert,mytime,
6495 $mythid )
6496 call timestep_tracer( bi,bj,imin,imax,jmin,jmax,k,theta,
6497 $gt,gtnm1,myiter,mythid )
6498 endif
6499 if (saltstepping) then
6500 call calc_gs( bi,bj,imin,imax,jmin,jmax,k,km1,kup,kdown,
6501 $xa,ya,utrans,vtrans,rtrans,maskup,maskc,kappars,fvers,mytime,
6502 $mythid )
6503 call timestep_tracer( bi,bj,imin,imax,jmin,jmax,k,salt,gs,
6504 $gsnm1,myiter,mythid )
6505 endif
6506 if (allowfreezing) then
6507 do ip2 = 1, 1+sny+oly-(1-oly)
6508 do ip1 = 1, 1+snx+olx-(1-olx)
6509 gtnm1h(ip1,ip2,kkey) = gtnm1(ip1-1+1-olx,ip2-1+1-oly,
6510 $k,bi,bj)
6511 end do
6512 end do
6513 call freeze( bi,bj,imin,imax,jmin,jmax,k,mythid )
6514 endif
6515 end do
6516 if (implicitdiffusion) then
6517 if (tempstepping) then
6518 call impldiff( bi,bj,imin,imax,jmin,jmax,deltattracer,
6519 $kappart,recip_hfacc,gtnm1,mythid )
6520 endif
6521 if (saltstepping) then
6522 call impldiff( bi,bj,imin,imax,jmin,jmax,deltattracer,
6523 $kappars,recip_hfacc,gsnm1,mythid )
6524 endif
6525 endif
6526 imin = 1-olx+2
6527 imax = snx+olx-1
6528 jmin = 1-oly+2
6529 jmax = sny+oly-1
6530 if (implicsurfpress .ne. 1.) then
6531 call calc_grad_phi_surf( bi,bj,imin,imax,jmin,jmax,etan,
6532 $phisurfx,phisurfy,mythid )
6533 endif
6534 do k = 1, nr
6535 km1 = max(1,k-1)
6536 kup = 1+mod(k+1,2)
6537 kdown = 1+mod(k,2)
6538 if (staggertimestep) then
6539 call mdcalc_phi_hyd( bi,bj,imin,imax,jmin,jmax,k,gtnm1,
6540 $gsnm1,phihyd,mythid )
6541 else
6542 call mdcalc_phi_hyd( bi,bj,imin,imax,jmin,jmax,k,theta,
6543 $salt,phihyd,mythid )
6544 endif
6545 if (momstepping) then
6546 call calc_mom_rhs( bi,bj,imin,imax,jmin,jmax,k,kup,kdown,
6547 $phihyd,kapparu,kapparv,fveru,fverv,mytime,mythid )
6548 call timestep( bi,bj,imin,imax,jmin,jmax,k,phihyd,
6549 $phisurfx,phisurfy,myiter,mythid )
6550 else
6551 do j = 1-oly, sny+oly
6552 do i = 1-olx, snx+olx
6553 gucd(i,j,k,bi,bj) = 0.
6554 gvcd(i,j,k,bi,bj) = 0.
6555 end do
6556 end do
6557 endif
6558 end do
6559 if (implicitviscosity .and. momstepping) then
6560 call impldiff( bi,bj,imin,imax,jmin,jmax,deltatmom,kapparu,
6561 $recip_hfacw,gunm1,mythid )
6562 call impldiff( bi,bj,imin,imax,jmin,jmax,deltatmom,kapparv,
6563 $recip_hfacs,gvnm1,mythid )
6564 call impldiff( bi,bj,imin,imax,jmin,jmax,deltatmom,kapparu,
6565 $recip_hfacw,vveld,mythid )
6566 call impldiff( bi,bj,imin,imax,jmin,jmax,deltatmom,kapparv,
6567 $recip_hfacs,uveld,mythid )
6568 endif
6569 end do
6570 end do
6571 end
6572
6573
6574 subroutine addynamics( mythid )
6575 C***************************************************************
6576 C***************************************************************
6577 C** This routine was generated by the **
6578 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
6579 C***************************************************************
6580 C***************************************************************
6581 C==============================================
6582 C all entries are defined explicitly
6583 C==============================================
6584 implicit none
6585
6586 C==============================================
6587 C define parameters
6588 C==============================================
6589 integer max_no_threads
6590 parameter ( max_no_threads = 32 )
6591 integer npx
6592 parameter ( npx = 1 )
6593 integer npy
6594 parameter ( npy = 1 )
6595 integer nr
6596 parameter ( nr = 15 )
6597 integer nsx
6598 parameter ( nsx = 1 )
6599 integer nsy
6600 parameter ( nsy = 1 )
6601 integer snx
6602 parameter ( snx = 20 )
6603 integer nx
6604 parameter ( nx = snx*nsx*npx )
6605 integer sny
6606 parameter ( sny = 40 )
6607 integer ny
6608 parameter ( ny = sny*nsy*npy )
6609 integer olx
6610 parameter ( olx = 3 )
6611 integer oly
6612 parameter ( oly = 3 )
6613
6614 C==============================================
6615 C define common blocks
6616 C==============================================
6617 common /addynvars_cd/ aduveld, advveld, adetanm1, adunm1, advnm1,
6618 $adgucd, adgvcd
6619 double precision adetanm1(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6620 double precision adgucd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6621 double precision adgvcd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6622 double precision adunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6623 double precision aduveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6624 double precision advnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6625 double precision advveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6626
6627 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
6628 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
6629 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6630 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6631 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6632 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6633 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6634 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6635 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6636 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6637 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6638 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6639 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6640 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6641 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6642 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6643
6644 common /cadgtnm1/ gtnm1h
6645 real*4 gtnm1h(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
6646
6647 common /cadkappars/ kapparsh
6648 real*4 kapparsh(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
6649
6650 common /cadkappart/ kapparth
6651 real*4 kapparth(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
6652
6653 common /cadkapparu/ kapparsi
6654 real*4 kapparsi(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
6655
6656 common /cadkapparv/ kapparti
6657 real*4 kapparti(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
6658
6659 common /cadsalw/ salth
6660 real*4 salth(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
6661
6662 common /cadsalx/ salti
6663 real*4 salti(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
6664
6665 common /cadsaly/ saltj
6666 real*4 saltj(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
6667
6668 common /cadthetd/ thetah
6669 real*4 thetah(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
6670
6671 common /cadthete/ thetai
6672 real*4 thetai(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
6673
6674 common /cadthetf/ thetaj
6675 real*4 thetaj(1+snx+olx-(1-olx),1+sny+oly-(1-oly),540)
6676
6677 common /caduvel/ uvelh
6678 real*4 uvelh(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
6679
6680 common /cadvvel/ vvelh
6681 real*4 vvelh(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
6682
6683 common /cadwvel/ wvelh
6684 real*4 wvelh(1+snx+olx-(1-olx),1+sny+oly-(1-oly),nr,36)
6685
6686 common /dynvars_r/ etan, uvel, vvel, wvel, theta, salt, gu, gv,
6687 $gt, gs, gunm1, gvnm1, gtnm1, gsnm1
6688 double precision etan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6689 double precision gs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6690 double precision gsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6691 double precision gt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6692 double precision gtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6693 double precision gu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6694 double precision gunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6695 double precision gv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6696 double precision gvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6697 double precision salt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6698 double precision theta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6699 double precision uvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6700 double precision vvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6701 double precision wvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
6702
6703 common /eeparams_i/ errormessageunit, standardmessageunit,
6704 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
6705 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
6706 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
6707 integer eedataunit
6708 integer errormessageunit
6709 integer ioerrorcount(max_no_threads)
6710 integer modeldataunit
6711 integer mybxhi(max_no_threads)
6712 integer mybxlo(max_no_threads)
6713 integer mybyhi(max_no_threads)
6714 integer mybylo(max_no_threads)
6715 integer myprocid
6716 integer mypx
6717 integer mypy
6718 integer myxgloballo
6719 integer myygloballo
6720 integer nthreads
6721 integer ntx
6722 integer nty
6723 integer numberofprocs
6724 integer pidio
6725 integer scrunit1
6726 integer scrunit2
6727 integer standardmessageunit
6728
6729 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
6730 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
6731 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
6732 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
6733 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
6734 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
6735 $tanphiatu, tanphiatv
6736 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6737 double precision drc(1:nr)
6738 double precision drf(1:nr)
6739 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6740 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6741 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6742 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6743 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6744 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6745 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6746 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6747 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6748 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
6749 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
6750 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
6751 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
6752 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
6753 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6754 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6755 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6756 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6757 double precision rc(1:nr)
6758 double precision recip_drc(1:nr)
6759 double precision recip_drf(1:nr)
6760 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6761 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6762 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6763 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6764 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6765 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6766 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6767 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6768 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6769 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
6770 $nsy)
6771 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
6772 $nsy)
6773 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
6774 $nsy)
6775 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6776 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6777 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6778 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6779 double precision recip_rkfac
6780 double precision rf(1:nr+1)
6781 double precision rkfac
6782 double precision safac(1:nr)
6783 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6784 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6785 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6786 double precision xc0
6787 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6788 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6789 double precision yc0
6790 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6791
6792 common /parm_eos_lin/ talpha, sbeta, eostype
6793 character*(6) eostype
6794 double precision sbeta
6795 double precision talpha
6796
6797 common /parm_l/ usingcartesiangrid, usingsphericalpolargrid,
6798 $no_slip_sides, no_slip_bottom, staggertimestep, momviscosity,
6799 $momadvection, momforcing, usecoriolis, mompressureforcing,
6800 $tempdiffusion, tempadvection, tempforcing, saltdiffusion,
6801 $saltadvection, saltforcing, implicitfreesurface, rigidlid,
6802 $momstepping, tempstepping, saltstepping, metricterms,
6803 $usingsphericalpolarmterms, useconstantf, usebetaplanef,
6804 $usespheref, implicitdiffusion, implicitviscosity,
6805 $dothetaclimrelax, dosaltclimrelax, periodicexternalforcing,
6806 $usingpcoords, usingzcoords, nonhydrostatic, globalfiles,
6807 $allowfreezing, groundatk1, usepickupbeforec35
6808 logical allowfreezing
6809 logical dosaltclimrelax
6810 logical dothetaclimrelax
6811 logical globalfiles
6812 logical groundatk1
6813 logical implicitdiffusion
6814 logical implicitfreesurface
6815 logical implicitviscosity
6816 logical metricterms
6817 logical momadvection
6818 logical momforcing
6819 logical mompressureforcing
6820 logical momstepping
6821 logical momviscosity
6822 logical no_slip_bottom
6823 logical no_slip_sides
6824 logical nonhydrostatic
6825 logical periodicexternalforcing
6826 logical rigidlid
6827 logical saltadvection
6828 logical saltdiffusion
6829 logical saltforcing
6830 logical saltstepping
6831 logical staggertimestep
6832 logical tempadvection
6833 logical tempdiffusion
6834 logical tempforcing
6835 logical tempstepping
6836 logical usebetaplanef
6837 logical useconstantf
6838 logical usecoriolis
6839 logical usepickupbeforec35
6840 logical usespheref
6841 logical usingcartesiangrid
6842 logical usingpcoords
6843 logical usingsphericalpolargrid
6844 logical usingsphericalpolarmterms
6845 logical usingzcoords
6846
6847 common /parm_packages/ usekpp, usegmredi, useobcs, useaim, useecco
6848 logical useaim
6849 logical useecco
6850 logical usegmredi
6851 logical usekpp
6852 logical useobcs
6853
6854 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
6855 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
6856 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
6857 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
6858 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
6859 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
6860 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
6861 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
6862 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
6863 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
6864 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
6865 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
6866 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
6867 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
6868 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
6869 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
6870 double precision abeps
6871 double precision affacmom
6872 double precision beta
6873 double precision bottomdraglinear
6874 double precision bottomdragquadratic
6875 double precision cadjfreq
6876 double precision cffacmom
6877 double precision cg2dpcoffdfac
6878 double precision cg2dtargetresidual
6879 double precision cg3dtargetresidual
6880 double precision chkptfreq
6881 double precision cospower
6882 double precision delp(nr)
6883 double precision delr(nr)
6884 double precision delt
6885 double precision deltat
6886 double precision deltatclock
6887 double precision deltatmom
6888 double precision deltattracer
6889 double precision delx(nx)
6890 double precision dely(ny)
6891 double precision delz(nr)
6892 double precision diffk4s
6893 double precision diffk4t
6894 double precision diffkhs
6895 double precision diffkht
6896 double precision diffkps
6897 double precision diffkpt
6898 double precision diffkrs
6899 double precision diffkrt
6900 double precision diffkzs
6901 double precision diffkzt
6902 double precision dumpfreq
6903 double precision endtime
6904 double precision externforcingcycle
6905 double precision externforcingperiod
6906 double precision f0
6907 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
6908 double precision fofacmom
6909 double precision freesurffac
6910 double precision gbaro
6911 double precision gravity
6912 double precision hfacmin
6913 double precision hfacmindp
6914 double precision hfacmindr
6915 double precision hfacmindz
6916 double precision horivertratio
6917 double precision implicdiv2dflow
6918 double precision implicsurfpress
6919 double precision ivdc_kappa
6920 double precision lambdasaltclimrelax
6921 double precision lambdathetaclimrelax
6922 double precision latfftfiltlo
6923 double precision mtfacmom
6924 double precision omega
6925 double precision pchkptfreq
6926 double precision pffacmom
6927 double precision phimin
6928 double precision rcd
6929 double precision recip_gravity
6930 double precision recip_horivertratio
6931 double precision recip_rhoconst
6932 double precision recip_rhonil
6933 double precision recip_rsphere
6934 double precision rhoconst
6935 double precision rhonil
6936 double precision ro_sealevel
6937 double precision rsphere
6938 double precision specvol_s(nr)
6939 double precision sref(nr)
6940 double precision starttime
6941 double precision taucd
6942 double precision tausaltclimrelax
6943 double precision tauthetaclimrelax
6944 double precision tavefreq
6945 double precision theta_s(nr)
6946 double precision thetamin
6947 double precision tref(nr)
6948 double precision vffacmom
6949 double precision visca4
6950 double precision viscah
6951 double precision viscap
6952 double precision viscar
6953 double precision viscaz
6954 double precision zonal_filt_lat
6955
6956 common /tamc_keys_i/ ikey_dynamics, ikey_yearly, ikey_daily_1,
6957 $ikey_daily_2, iloop_daily
6958 integer ikey_daily_1
6959 integer ikey_daily_2
6960 integer ikey_dynamics
6961 integer ikey_yearly
6962 integer iloop_daily
6963
6964 common /tamckeys/ key, ikey, idkey
6965 integer idkey
6966 integer ikey
6967 integer key
6968
6969 C==============================================
6970 C define arguments
6971 C==============================================
6972 integer mythid
6973
6974 C==============================================
6975 C define local variables
6976 C==============================================
6977 integer act1
6978 integer act2
6979 integer act3
6980 integer act4
6981 double precision adfvers(1-olx:snx+olx,1-oly:sny+oly,2)
6982 double precision adfvert(1-olx:snx+olx,1-oly:sny+oly,2)
6983 double precision adfveru(1-olx:snx+olx,1-oly:sny+oly,2)
6984 double precision adfverv(1-olx:snx+olx,1-oly:sny+oly,2)
6985 double precision adphihyd(1-olx:snx+olx,1-oly:sny+oly,nr)
6986 double precision adphisurfx(1-olx:snx+olx,1-oly:sny+oly)
6987 double precision adphisurfy(1-olx:snx+olx,1-oly:sny+oly)
6988 double precision adrhok(1-olx:snx+olx,1-oly:sny+oly)
6989 double precision adrhokm1(1-olx:snx+olx,1-oly:sny+oly)
6990 double precision adrtrans(1-olx:snx+olx,1-oly:sny+oly)
6991 double precision adutrans(1-olx:snx+olx,1-oly:sny+oly)
6992 double precision advtrans(1-olx:snx+olx,1-oly:sny+oly)
6993 integer bi
6994 integer bj
6995 integer help_h
6996 integer i
6997 integer imax
6998 integer imin
6999 integer ip1
7000 integer ip2
7001 integer ip3
7002 integer j
7003 integer jmax
7004 integer jmin
7005 integer k
7006 double precision kappars(1-olx:snx+olx,1-oly:sny+oly,nr)
7007 double precision kappart(1-olx:snx+olx,1-oly:sny+oly,nr)
7008 double precision kapparu(1-olx:snx+olx,1-oly:sny+oly,nr)
7009 double precision kapparv(1-olx:snx+olx,1-oly:sny+oly,nr)
7010 integer kdown
7011 integer kkey
7012 integer km1
7013 integer kup
7014 double precision maskc(1-olx:snx+olx,1-oly:sny+oly)
7015 double precision maskup(1-olx:snx+olx,1-oly:sny+oly)
7016 integer max1
7017 integer max2
7018 integer max3
7019 double precision rtrans(1-olx:snx+olx,1-oly:sny+oly)
7020 double precision utrans(1-olx:snx+olx,1-oly:sny+oly)
7021 double precision vtrans(1-olx:snx+olx,1-oly:sny+oly)
7022 double precision xa(1-olx:snx+olx,1-oly:sny+oly)
7023 double precision ya(1-olx:snx+olx,1-oly:sny+oly)
7024
7025 C----------------------------------------------
7026 C RESET LOCAL ADJOINT VARIABLES
7027 C----------------------------------------------
7028 do ip3 = 1, 2
7029 do ip2 = 1-oly, sny+oly
7030 do ip1 = 1-olx, snx+olx
7031 adfvers(ip1,ip2,ip3) = 0.d0
7032 end do
7033 end do
7034 end do
7035 do ip3 = 1, 2
7036 do ip2 = 1-oly, sny+oly
7037 do ip1 = 1-olx, snx+olx
7038 adfvert(ip1,ip2,ip3) = 0.d0
7039 end do
7040 end do
7041 end do
7042 do ip3 = 1, 2
7043 do ip2 = 1-oly, sny+oly
7044 do ip1 = 1-olx, snx+olx
7045 adfveru(ip1,ip2,ip3) = 0.d0
7046 end do
7047 end do
7048 end do
7049 do ip3 = 1, 2
7050 do ip2 = 1-oly, sny+oly
7051 do ip1 = 1-olx, snx+olx
7052 adfverv(ip1,ip2,ip3) = 0.d0
7053 end do
7054 end do
7055 end do
7056 do ip3 = 1, nr
7057 do ip2 = 1-oly, sny+oly
7058 do ip1 = 1-olx, snx+olx
7059 adphihyd(ip1,ip2,ip3) = 0.d0
7060 end do
7061 end do
7062 end do
7063 do ip2 = 1-oly, sny+oly
7064 do ip1 = 1-olx, snx+olx
7065 adphisurfx(ip1,ip2) = 0.d0
7066 end do
7067 end do
7068 do ip2 = 1-oly, sny+oly
7069 do ip1 = 1-olx, snx+olx
7070 adphisurfy(ip1,ip2) = 0.d0
7071 end do
7072 end do
7073 do ip2 = 1-oly, sny+oly
7074 do ip1 = 1-olx, snx+olx
7075 adrhok(ip1,ip2) = 0.d0
7076 end do
7077 end do
7078 do ip2 = 1-oly, sny+oly
7079 do ip1 = 1-olx, snx+olx
7080 adrhokm1(ip1,ip2) = 0.d0
7081 end do
7082 end do
7083 do ip2 = 1-oly, sny+oly
7084 do ip1 = 1-olx, snx+olx
7085 adrtrans(ip1,ip2) = 0.d0
7086 end do
7087 end do
7088 do ip2 = 1-oly, sny+oly
7089 do ip1 = 1-olx, snx+olx
7090 adutrans(ip1,ip2) = 0.d0
7091 end do
7092 end do
7093 do ip2 = 1-oly, sny+oly
7094 do ip1 = 1-olx, snx+olx
7095 advtrans(ip1,ip2) = 0.d0
7096 end do
7097 end do
7098
7099 C----------------------------------------------
7100 C ROUTINE BODY
7101 C----------------------------------------------
7102 do bj = mybylo(mythid), mybyhi(mythid)
7103 do bi = mybxlo(mythid), mybxhi(mythid)
7104 do ip3 = 1, 2
7105 do ip2 = 1-oly, sny+oly
7106 do ip1 = 1-olx, snx+olx
7107 adfvers(ip1,ip2,ip3) = 0.d0
7108 end do
7109 end do
7110 end do
7111 do ip3 = 1, 2
7112 do ip2 = 1-oly, sny+oly
7113 do ip1 = 1-olx, snx+olx
7114 adfvert(ip1,ip2,ip3) = 0.d0
7115 end do
7116 end do
7117 end do
7118 do ip3 = 1, nr
7119 do ip2 = 1-oly, sny+oly
7120 do ip1 = 1-olx, snx+olx
7121 adphihyd(ip1,ip2,ip3) = 0.d0
7122 end do
7123 end do
7124 end do
7125 do ip2 = 1-oly, sny+oly
7126 do ip1 = 1-olx, snx+olx
7127 adrtrans(ip1,ip2) = 0.d0
7128 end do
7129 end do
7130 do ip2 = 1-oly, sny+oly
7131 do ip1 = 1-olx, snx+olx
7132 adutrans(ip1,ip2) = 0.d0
7133 end do
7134 end do
7135 do ip2 = 1-oly, sny+oly
7136 do ip1 = 1-olx, snx+olx
7137 advtrans(ip1,ip2) = 0.d0
7138 end do
7139 end do
7140 act1 = bi-mybxlo(mythid)
7141 max1 = mybxhi(mythid)-mybxlo(mythid)+1
7142 act2 = bj-mybylo(mythid)
7143 max2 = mybyhi(mythid)-mybylo(mythid)+1
7144 act3 = mythid-1
7145 max3 = ntx*nty
7146 act4 = ikey_dynamics-1
7147 ikey = act1+1+act2*max1+act3*max1*max2+act4*max1*max2*max3
7148 imin = 1-olx+1
7149 imax = snx+olx
7150 jmin = 1-oly+1
7151 jmax = sny+oly
7152 do ip3 = 1, nr
7153 do ip2 = 1, 1+sny+oly-(1-oly)
7154 do ip1 = 1, 1+snx+olx-(1-olx)
7155 wvel(ip1-1+1-olx,ip2-1+1-oly,ip3,bi,bj) = wvelh(ip1,ip2,
7156 $ip3,ikey)
7157 end do
7158 end do
7159 end do
7160 do ip3 = 1, nr
7161 do ip2 = 1, 1+sny+oly-(1-oly)
7162 do ip1 = 1, 1+snx+olx-(1-olx)
7163 kappart(ip1-1+1-olx,ip2-1+1-oly,ip3) = kapparti(ip1,ip2,
7164 $ip3,ikey)
7165 end do
7166 end do
7167 end do
7168 do ip3 = 1, nr
7169 do ip2 = 1, 1+sny+oly-(1-oly)
7170 do ip1 = 1, 1+snx+olx-(1-olx)
7171 kappars(ip1-1+1-olx,ip2-1+1-oly,ip3) = kapparsi(ip1,ip2,
7172 $ip3,ikey)
7173 end do
7174 end do
7175 end do
7176 do ip3 = 1, nr
7177 do ip2 = 1, 1+sny+oly-(1-oly)
7178 do ip1 = 1, 1+snx+olx-(1-olx)
7179 theta(ip1-1+1-olx,ip2-1+1-oly,ip3,bi,bj) = thetah(ip1,
7180 $ip2,ip3,ikey)
7181 end do
7182 end do
7183 end do
7184 do ip3 = 1, nr
7185 do ip2 = 1, 1+sny+oly-(1-oly)
7186 do ip1 = 1, 1+snx+olx-(1-olx)
7187 salt(ip1-1+1-olx,ip2-1+1-oly,ip3,bi,bj) = salth(ip1,ip2,
7188 $ip3,ikey)
7189 end do
7190 end do
7191 end do
7192 do ip3 = 1, nr
7193 do ip2 = 1, 1+sny+oly-(1-oly)
7194 do ip1 = 1, 1+snx+olx-(1-olx)
7195 uvel(ip1-1+1-olx,ip2-1+1-oly,ip3,bi,bj) = uvelh(ip1,ip2,
7196 $ip3,ikey)
7197 end do
7198 end do
7199 end do
7200 do ip3 = 1, nr
7201 do ip2 = 1, 1+sny+oly-(1-oly)
7202 do ip1 = 1, 1+snx+olx-(1-olx)
7203 vvel(ip1-1+1-olx,ip2-1+1-oly,ip3,bi,bj) = vvelh(ip1,ip2,
7204 $ip3,ikey)
7205 end do
7206 end do
7207 end do
7208 do k = nr, 1, -1
7209 imin = 1-olx+2
7210 imax = snx+olx-1
7211 jmin = 1-oly+2
7212 jmax = sny+oly-1
7213 call calc_common_factors( bi,bj,imin,imax,jmin,jmax,k,km1,
7214 $kup,kdown,xa,ya,utrans,vtrans,rtrans,maskc,maskup,mythid )
7215 call calc_diffusivity( bi,bj,imin,imax,jmin,jmax,k,maskc,
7216 $maskup,kappart,kappars,kapparu,kapparv,mythid )
7217 end do
7218 imin = 1-olx+2
7219 imax = snx+olx-1
7220 jmin = 1-oly+2
7221 jmax = sny+oly-1
7222 if (implicitviscosity .and. momstepping) then
7223 call adimpldiff( bi,bj,imin,imax,jmin,jmax,deltatmom,
7224 $kapparv,recip_hfacs,aduveld )
7225 call adimpldiff( bi,bj,imin,imax,jmin,jmax,deltatmom,
7226 $kapparu,recip_hfacw,advveld )
7227 call adimpldiff( bi,bj,imin,imax,jmin,jmax,deltatmom,
7228 $kapparv,recip_hfacs,adgvnm1 )
7229 call adimpldiff( bi,bj,imin,imax,jmin,jmax,deltatmom,
7230 $kapparu,recip_hfacw,adgunm1 )
7231 endif
7232 do k = nr, 1, -1
7233 kup = 1+mod(k+1,2)
7234 kdown = 1+mod(k,2)
7235 if (momstepping) then
7236 call adtimestep( bi,bj,imin,imax,jmin,jmax,k,adphihyd,
7237 $adphisurfx,adphisurfy )
7238 call adcalc_mom_rhs( bi,bj,imin,imax,jmin,jmax,k,kup,
7239 $kdown,kapparu,kapparv,adphihyd,adfveru,adfverv )
7240 endif
7241 if (staggertimestep) then
7242 call adcalc_phi_hyd( bi,bj,imin,imax,jmin,jmax,k,mythid,
7243 $adgtnm1,adgsnm1,adphihyd )
7244 else
7245 call adcalc_phi_hyd( bi,bj,imin,imax,jmin,jmax,k,mythid,
7246 $adtheta,adsalt,adphihyd )
7247 endif
7248 end do
7249 if (implicsurfpress .ne. 1.) then
7250 call adcalc_grad_phi_surf( bi,bj,imin,imax,jmin,jmax,adetan,
7251 $adphisurfx,adphisurfy )
7252 endif
7253 do k = nr, 1, -1
7254 imin = 1-olx+2
7255 imax = snx+olx-1
7256 jmin = 1-oly+2
7257 jmax = sny+oly-1
7258 end do
7259 if (implicitdiffusion) then
7260 if (saltstepping) then
7261 call adimpldiff( bi,bj,imin,imax,jmin,jmax,deltattracer,
7262 $kappars,recip_hfacc,adgsnm1 )
7263 endif
7264 if (tempstepping) then
7265 call adimpldiff( bi,bj,imin,imax,jmin,jmax,deltattracer,
7266 $kappart,recip_hfacc,adgtnm1 )
7267 endif
7268 endif
7269 ikey = act1+1+act2*max1+act3*max1*max2+act4*max1*max2*max3
7270 do k = 1, nr
7271 kkey = (ikey-1)*nr+k
7272 km1 = max(1,k-1)
7273 kup = 1+mod(k+1,2)
7274 kdown = 1+mod(k,2)
7275 imin = 1-olx+2
7276 imax = snx+olx-1
7277 jmin = 1-oly+2
7278 jmax = sny+oly-1
7279 call calc_common_factors( bi,bj,imin,imax,jmin,jmax,k,km1,
7280 $kup,kdown,xa,ya,utrans,vtrans,rtrans,maskc,maskup,mythid )
7281 do ip2 = 1, 1+sny+oly-(1-oly)
7282 do ip1 = 1, 1+snx+olx-(1-olx)
7283 kappart(ip1-1+1-olx,ip2-1+1-oly,k) = kapparth(ip1,ip2,
7284 $kkey)
7285 end do
7286 end do
7287 do ip2 = 1, 1+sny+oly-(1-oly)
7288 do ip1 = 1, 1+snx+olx-(1-olx)
7289 kappars(ip1-1+1-olx,ip2-1+1-oly,k) = kapparsh(ip1,ip2,
7290 $kkey)
7291 end do
7292 end do
7293 call calc_diffusivity( bi,bj,imin,imax,jmin,jmax,k,maskc,
7294 $maskup,kappart,kappars,kapparu,kapparv,mythid )
7295 if (allowfreezing) then
7296 do ip2 = 1, 1+sny+oly-(1-oly)
7297 do ip1 = 1, 1+snx+olx-(1-olx)
7298 gtnm1(ip1-1+1-olx,ip2-1+1-oly,k,bi,bj) = gtnm1h(ip1,
7299 $ip2,kkey)
7300 end do
7301 end do
7302 call adfreeze( bi,bj,imin,imax,jmin,jmax,k )
7303 endif
7304 if (saltstepping) then
7305 call adtimestep_tracer( bi,bj,imin,imax,jmin,jmax,k,
7306 $adsalt,adgs,adgsnm1 )
7307 call adcalc_gs( bi,bj,imin,imax,jmin,jmax,k,km1,kup,kdown,
7308 $xa,ya,utrans,vtrans,rtrans,maskup,maskc,kappars,adutrans,advtrans,
7309 $adrtrans,adfvers )
7310 endif
7311 if (tempstepping) then
7312 call adtimestep_tracer( bi,bj,imin,imax,jmin,jmax,k,
7313 $adtheta,adgt,adgtnm1 )
7314 call adcalc_gt( bi,bj,imin,imax,jmin,jmax,k,km1,kup,kdown,
7315 $xa,ya,utrans,vtrans,rtrans,maskup,maskc,kappart,adutrans,advtrans,
7316 $adrtrans,adfvert )
7317 endif
7318 call adcalc_common_factors( bi,bj,imin,imax,jmin,jmax,k,
7319 $adutrans,advtrans,adrtrans )
7320 end do
7321 imin = 1-olx+1
7322 imax = snx+olx
7323 jmin = 1-oly+1
7324 jmax = sny+oly
7325 call adexternal_forcing_surf( bi,bj,imin,imax,jmin,jmax )
7326 do k = 1, nr
7327 kkey = (ikey-1)*nr+k
7328 if (usegmredi .or. k .gt. 1 .and. ivdc_kappa .ne. 0.) then
7329 if (k .gt. 1) then
7330 do ip2 = 1, 1+sny+oly-(1-oly)
7331 do ip1 = 1, 1+snx+olx-(1-olx)
7332 theta(ip1-1+1-olx,ip2-1+1-oly,k-1,bi,bj) =
7333 $thetai(ip1,ip2,kkey)
7334 end do
7335 end do
7336 do ip2 = 1, 1+sny+oly-(1-oly)
7337 do ip1 = 1, 1+snx+olx-(1-olx)
7338 salt(ip1-1+1-olx,ip2-1+1-oly,k-1,bi,bj) = salti(ip1,
7339 $ip2,kkey)
7340 end do
7341 end do
7342 help_h = k-1
7343 call adfind_rho( bi,bj,imin,imax,jmin,jmax,help_h,k,
7344 $eostype,theta,salt,adtheta,adsalt,adrhokm1 )
7345 endif
7346 do ip2 = 1, 1+sny+oly-(1-oly)
7347 do ip1 = 1, 1+snx+olx-(1-olx)
7348 theta(ip1-1+1-olx,ip2-1+1-oly,k,bi,bj) = thetaj(ip1,
7349 $ip2,kkey)
7350 end do
7351 end do
7352 do ip2 = 1, 1+sny+oly-(1-oly)
7353 do ip1 = 1, 1+snx+olx-(1-olx)
7354 salt(ip1-1+1-olx,ip2-1+1-oly,k,bi,bj) = saltj(ip1,ip2,
7355 $kkey)
7356 end do
7357 end do
7358 call adfind_rho( bi,bj,imin,imax,jmin,jmax,k,k,eostype,
7359 $theta,salt,adtheta,adsalt,adrhok )
7360 endif
7361 call adintegrate_for_w( bi,bj,k,aduvel,advvel,adwvel )
7362 end do
7363 do j = 1-oly, sny+oly
7364 do i = 1-olx, snx+olx
7365 adfvers(i,j,2) = 0.d0
7366 adfvers(i,j,1) = 0.d0
7367 adfvert(i,j,2) = 0.d0
7368 adfvert(i,j,1) = 0.d0
7369 end do
7370 end do
7371 end do
7372 end do
7373
7374 end
7375
7376
7377 subroutine adexternal_forcing_s( imin, imax, jmin, jmax, bi, bj,
7378 $klev, maskc )
7379 C***************************************************************
7380 C***************************************************************
7381 C** This routine was generated by the **
7382 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
7383 C***************************************************************
7384 C***************************************************************
7385 C==============================================
7386 C all entries are defined explicitly
7387 C==============================================
7388 implicit none
7389
7390 C==============================================
7391 C define parameters
7392 C==============================================
7393 integer nr
7394 parameter ( nr = 15 )
7395 integer nsx
7396 parameter ( nsx = 1 )
7397 integer nsy
7398 parameter ( nsy = 1 )
7399 integer olx
7400 parameter ( olx = 3 )
7401 integer oly
7402 parameter ( oly = 3 )
7403 integer snx
7404 parameter ( snx = 20 )
7405 integer sny
7406 parameter ( sny = 40 )
7407
7408 C==============================================
7409 C define common blocks
7410 C==============================================
7411 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
7412 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
7413 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7414 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7415 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7416 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7417 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7418 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7419 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7420 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7421 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7422 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7423 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7424 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7425 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7426 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7427
7428 common /adtendency_forcing/ adsurfacetendencyu,
7429 $adsurfacetendencyv, adsurfacetendencyt, adsurfacetendencys
7430 double precision adsurfacetendencys(1-olx:snx+olx,1-oly:sny+oly,
7431 $nsx,nsy)
7432 double precision adsurfacetendencyt(1-olx:snx+olx,1-oly:sny+oly,
7433 $nsx,nsy)
7434 double precision adsurfacetendencyu(1-olx:snx+olx,1-oly:sny+oly,
7435 $nsx,nsy)
7436 double precision adsurfacetendencyv(1-olx:snx+olx,1-oly:sny+oly,
7437 $nsx,nsy)
7438
7439 C==============================================
7440 C define arguments
7441 C==============================================
7442 integer bi
7443 integer bj
7444 integer imax
7445 integer imin
7446 integer jmax
7447 integer jmin
7448 integer klev
7449 double precision maskc(1-olx:snx+olx,1-oly:sny+oly)
7450
7451 C==============================================
7452 C define local variables
7453 C==============================================
7454 integer i
7455 integer j
7456
7457 C----------------------------------------------
7458 C ROUTINE BODY
7459 C----------------------------------------------
7460 if (klev .eq. 1) then
7461 do j = jmin, jmax
7462 do i = imin, imax
7463 adsurfacetendencys(i,j,bi,bj) = adsurfacetendencys(i,j,bi,
7464 $bj)+adgs(i,j,klev,bi,bj)*maskc(i,j)
7465 end do
7466 end do
7467 endif
7468
7469 end
7470
7471
7472 subroutine adexternal_forcing_surf( bi, bj, imin, imax, jmin,
7473 $jmax )
7474 C***************************************************************
7475 C***************************************************************
7476 C** This routine was generated by the **
7477 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
7478 C***************************************************************
7479 C***************************************************************
7480 C==============================================
7481 C all entries are defined explicitly
7482 C==============================================
7483 implicit none
7484
7485 C==============================================
7486 C define parameters
7487 C==============================================
7488 integer npx
7489 parameter ( npx = 1 )
7490 integer npy
7491 parameter ( npy = 1 )
7492 integer nr
7493 parameter ( nr = 15 )
7494 integer nsx
7495 parameter ( nsx = 1 )
7496 integer nsy
7497 parameter ( nsy = 1 )
7498 integer snx
7499 parameter ( snx = 20 )
7500 integer nx
7501 parameter ( nx = snx*nsx*npx )
7502 integer sny
7503 parameter ( sny = 40 )
7504 integer ny
7505 parameter ( ny = sny*nsy*npy )
7506 integer olx
7507 parameter ( olx = 3 )
7508 integer oly
7509 parameter ( oly = 3 )
7510
7511 C==============================================
7512 C define common blocks
7513 C==============================================
7514 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
7515 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
7516 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7517 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7518 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7519 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7520 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7521 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7522 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7523 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7524 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7525 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7526 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7527 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7528 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7529 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7530
7531 common /adffields/ adfu, adfv, adqnet, adempmr
7532 double precision adempmr(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7533 double precision adfu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7534 double precision adfv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7535 double precision adqnet(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7536
7537 common /adtendency_forcing/ adsurfacetendencyu,
7538 $adsurfacetendencyv, adsurfacetendencyt, adsurfacetendencys
7539 double precision adsurfacetendencys(1-olx:snx+olx,1-oly:sny+oly,
7540 $nsx,nsy)
7541 double precision adsurfacetendencyt(1-olx:snx+olx,1-oly:sny+oly,
7542 $nsx,nsy)
7543 double precision adsurfacetendencyu(1-olx:snx+olx,1-oly:sny+oly,
7544 $nsx,nsy)
7545 double precision adsurfacetendencyv(1-olx:snx+olx,1-oly:sny+oly,
7546 $nsx,nsy)
7547
7548 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
7549 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
7550 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
7551 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
7552 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
7553 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
7554 $tanphiatu, tanphiatv
7555 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7556 double precision drc(1:nr)
7557 double precision drf(1:nr)
7558 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7559 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7560 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7561 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7562 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7563 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7564 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7565 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7566 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7567 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
7568 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
7569 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
7570 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
7571 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
7572 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7573 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7574 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7575 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7576 double precision rc(1:nr)
7577 double precision recip_drc(1:nr)
7578 double precision recip_drf(1:nr)
7579 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7580 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7581 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7582 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7583 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7584 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7585 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7586 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7587 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7588 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
7589 $nsy)
7590 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
7591 $nsy)
7592 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
7593 $nsy)
7594 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7595 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7596 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7597 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7598 double precision recip_rkfac
7599 double precision rf(1:nr+1)
7600 double precision rkfac
7601 double precision safac(1:nr)
7602 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7603 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7604 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7605 double precision xc0
7606 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7607 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7608 double precision yc0
7609 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7610
7611 common /parm_a/ heatcapacity_cp, recip_cp, lamba_theta
7612 double precision heatcapacity_cp
7613 double precision lamba_theta
7614 double precision recip_cp
7615
7616 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
7617 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
7618 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
7619 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
7620 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
7621 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
7622 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
7623 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
7624 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
7625 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
7626 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
7627 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
7628 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
7629 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
7630 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
7631 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
7632 double precision abeps
7633 double precision affacmom
7634 double precision beta
7635 double precision bottomdraglinear
7636 double precision bottomdragquadratic
7637 double precision cadjfreq
7638 double precision cffacmom
7639 double precision cg2dpcoffdfac
7640 double precision cg2dtargetresidual
7641 double precision cg3dtargetresidual
7642 double precision chkptfreq
7643 double precision cospower
7644 double precision delp(nr)
7645 double precision delr(nr)
7646 double precision delt
7647 double precision deltat
7648 double precision deltatclock
7649 double precision deltatmom
7650 double precision deltattracer
7651 double precision delx(nx)
7652 double precision dely(ny)
7653 double precision delz(nr)
7654 double precision diffk4s
7655 double precision diffk4t
7656 double precision diffkhs
7657 double precision diffkht
7658 double precision diffkps
7659 double precision diffkpt
7660 double precision diffkrs
7661 double precision diffkrt
7662 double precision diffkzs
7663 double precision diffkzt
7664 double precision dumpfreq
7665 double precision endtime
7666 double precision externforcingcycle
7667 double precision externforcingperiod
7668 double precision f0
7669 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7670 double precision fofacmom
7671 double precision freesurffac
7672 double precision gbaro
7673 double precision gravity
7674 double precision hfacmin
7675 double precision hfacmindp
7676 double precision hfacmindr
7677 double precision hfacmindz
7678 double precision horivertratio
7679 double precision implicdiv2dflow
7680 double precision implicsurfpress
7681 double precision ivdc_kappa
7682 double precision lambdasaltclimrelax
7683 double precision lambdathetaclimrelax
7684 double precision latfftfiltlo
7685 double precision mtfacmom
7686 double precision omega
7687 double precision pchkptfreq
7688 double precision pffacmom
7689 double precision phimin
7690 double precision rcd
7691 double precision recip_gravity
7692 double precision recip_horivertratio
7693 double precision recip_rhoconst
7694 double precision recip_rhonil
7695 double precision recip_rsphere
7696 double precision rhoconst
7697 double precision rhonil
7698 double precision ro_sealevel
7699 double precision rsphere
7700 double precision specvol_s(nr)
7701 double precision sref(nr)
7702 double precision starttime
7703 double precision taucd
7704 double precision tausaltclimrelax
7705 double precision tauthetaclimrelax
7706 double precision tavefreq
7707 double precision theta_s(nr)
7708 double precision thetamin
7709 double precision tref(nr)
7710 double precision vffacmom
7711 double precision visca4
7712 double precision viscah
7713 double precision viscap
7714 double precision viscar
7715 double precision viscaz
7716 double precision zonal_filt_lat
7717
7718 C==============================================
7719 C define arguments
7720 C==============================================
7721 integer bi
7722 integer bj
7723 integer imax
7724 integer imin
7725 integer jmax
7726 integer jmin
7727
7728 C==============================================
7729 C define local variables
7730 C==============================================
7731 integer i
7732 integer j
7733
7734 C----------------------------------------------
7735 C ROUTINE BODY
7736 C----------------------------------------------
7737 do j = jmin, jmax
7738 do i = imin, imax
7739 adempmr(i,j,bi,bj) = adempmr(i,j,bi,bj)+35.*
7740 $adsurfacetendencys(i,j,bi,bj)*recip_drf(1)
7741 adsalt(i,j,1,bi,bj) = adsalt(i,j,1,bi,bj)-
7742 $adsurfacetendencys(i,j,bi,bj)*lambdasaltclimrelax
7743 adsurfacetendencys(i,j,bi,bj) = 0.d0
7744 adqnet(i,j,bi,bj) = adqnet(i,j,bi,bj)-adsurfacetendencyt(i,j,
7745 $bi,bj)*recip_cp*recip_rhonil*recip_drf(1)
7746 adtheta(i,j,1,bi,bj) = adtheta(i,j,1,bi,bj)-
7747 $adsurfacetendencyt(i,j,bi,bj)*lambdathetaclimrelax
7748 adsurfacetendencyt(i,j,bi,bj) = 0.d0
7749 adfv(i,j,bi,bj) = adfv(i,j,bi,bj)+adsurfacetendencyv(i,j,bi,
7750 $bj)*horivertratio*recip_rhonil*recip_drf(1)
7751 adsurfacetendencyv(i,j,bi,bj) = 0.d0
7752 adfu(i,j,bi,bj) = adfu(i,j,bi,bj)+adsurfacetendencyu(i,j,bi,
7753 $bj)*horivertratio*recip_rhonil*recip_drf(1)
7754 adsurfacetendencyu(i,j,bi,bj) = 0.d0
7755 end do
7756 end do
7757
7758 end
7759
7760
7761 subroutine adexternal_forcing_t( imin, imax, jmin, jmax, bi, bj,
7762 $klev, maskc )
7763 C***************************************************************
7764 C***************************************************************
7765 C** This routine was generated by the **
7766 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
7767 C***************************************************************
7768 C***************************************************************
7769 C==============================================
7770 C all entries are defined explicitly
7771 C==============================================
7772 implicit none
7773
7774 C==============================================
7775 C define parameters
7776 C==============================================
7777 integer nr
7778 parameter ( nr = 15 )
7779 integer nsx
7780 parameter ( nsx = 1 )
7781 integer nsy
7782 parameter ( nsy = 1 )
7783 integer olx
7784 parameter ( olx = 3 )
7785 integer oly
7786 parameter ( oly = 3 )
7787 integer snx
7788 parameter ( snx = 20 )
7789 integer sny
7790 parameter ( sny = 40 )
7791
7792 C==============================================
7793 C define common blocks
7794 C==============================================
7795 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
7796 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
7797 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7798 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7799 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7800 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7801 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7802 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7803 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7804 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7805 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7806 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7807 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7808 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7809 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7810 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7811
7812 common /adtendency_forcing/ adsurfacetendencyu,
7813 $adsurfacetendencyv, adsurfacetendencyt, adsurfacetendencys
7814 double precision adsurfacetendencys(1-olx:snx+olx,1-oly:sny+oly,
7815 $nsx,nsy)
7816 double precision adsurfacetendencyt(1-olx:snx+olx,1-oly:sny+oly,
7817 $nsx,nsy)
7818 double precision adsurfacetendencyu(1-olx:snx+olx,1-oly:sny+oly,
7819 $nsx,nsy)
7820 double precision adsurfacetendencyv(1-olx:snx+olx,1-oly:sny+oly,
7821 $nsx,nsy)
7822
7823 C==============================================
7824 C define arguments
7825 C==============================================
7826 integer bi
7827 integer bj
7828 integer imax
7829 integer imin
7830 integer jmax
7831 integer jmin
7832 integer klev
7833 double precision maskc(1-olx:snx+olx,1-oly:sny+oly)
7834
7835 C==============================================
7836 C define local variables
7837 C==============================================
7838 integer i
7839 integer j
7840
7841 C----------------------------------------------
7842 C ROUTINE BODY
7843 C----------------------------------------------
7844 if (klev .eq. 1) then
7845 do j = jmin, jmax
7846 do i = imin, imax
7847 adsurfacetendencyt(i,j,bi,bj) = adsurfacetendencyt(i,j,bi,
7848 $bj)+adgt(i,j,klev,bi,bj)*maskc(i,j)
7849 end do
7850 end do
7851 endif
7852
7853 end
7854
7855
7856 subroutine adexternal_forcing_u( imin, imax, jmin, jmax, bi, bj,
7857 $klev )
7858 C***************************************************************
7859 C***************************************************************
7860 C** This routine was generated by the **
7861 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
7862 C***************************************************************
7863 C***************************************************************
7864 C==============================================
7865 C all entries are defined explicitly
7866 C==============================================
7867 implicit none
7868
7869 C==============================================
7870 C define parameters
7871 C==============================================
7872 integer npx
7873 parameter ( npx = 1 )
7874 integer npy
7875 parameter ( npy = 1 )
7876 integer nr
7877 parameter ( nr = 15 )
7878 integer nsx
7879 parameter ( nsx = 1 )
7880 integer nsy
7881 parameter ( nsy = 1 )
7882 integer snx
7883 parameter ( snx = 20 )
7884 integer nx
7885 parameter ( nx = snx*nsx*npx )
7886 integer sny
7887 parameter ( sny = 40 )
7888 integer ny
7889 parameter ( ny = sny*nsy*npy )
7890 integer olx
7891 parameter ( olx = 3 )
7892 integer oly
7893 parameter ( oly = 3 )
7894
7895 C==============================================
7896 C define common blocks
7897 C==============================================
7898 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
7899 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
7900 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7901 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7902 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7903 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7904 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7905 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7906 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7907 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7908 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7909 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7910 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7911 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7912 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7913 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
7914
7915 common /adtendency_forcing/ adsurfacetendencyu,
7916 $adsurfacetendencyv, adsurfacetendencyt, adsurfacetendencys
7917 double precision adsurfacetendencys(1-olx:snx+olx,1-oly:sny+oly,
7918 $nsx,nsy)
7919 double precision adsurfacetendencyt(1-olx:snx+olx,1-oly:sny+oly,
7920 $nsx,nsy)
7921 double precision adsurfacetendencyu(1-olx:snx+olx,1-oly:sny+oly,
7922 $nsx,nsy)
7923 double precision adsurfacetendencyv(1-olx:snx+olx,1-oly:sny+oly,
7924 $nsx,nsy)
7925
7926 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
7927 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
7928 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
7929 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
7930 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
7931 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
7932 $tanphiatu, tanphiatv
7933 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7934 double precision drc(1:nr)
7935 double precision drf(1:nr)
7936 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7937 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7938 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7939 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7940 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7941 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7942 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7943 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7944 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7945 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
7946 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
7947 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
7948 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
7949 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
7950 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7951 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7952 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7953 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7954 double precision rc(1:nr)
7955 double precision recip_drc(1:nr)
7956 double precision recip_drf(1:nr)
7957 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7958 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7959 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7960 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7961 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7962 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7963 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7964 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7965 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7966 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
7967 $nsy)
7968 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
7969 $nsy)
7970 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
7971 $nsy)
7972 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7973 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7974 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7975 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7976 double precision recip_rkfac
7977 double precision rf(1:nr+1)
7978 double precision rkfac
7979 double precision safac(1:nr)
7980 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7981 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7982 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7983 double precision xc0
7984 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7985 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7986 double precision yc0
7987 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
7988
7989 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
7990 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
7991 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
7992 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
7993 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
7994 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
7995 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
7996 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
7997 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
7998 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
7999 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
8000 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
8001 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
8002 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
8003 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
8004 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
8005 double precision abeps
8006 double precision affacmom
8007 double precision beta
8008 double precision bottomdraglinear
8009 double precision bottomdragquadratic
8010 double precision cadjfreq
8011 double precision cffacmom
8012 double precision cg2dpcoffdfac
8013 double precision cg2dtargetresidual
8014 double precision cg3dtargetresidual
8015 double precision chkptfreq
8016 double precision cospower
8017 double precision delp(nr)
8018 double precision delr(nr)
8019 double precision delt
8020 double precision deltat
8021 double precision deltatclock
8022 double precision deltatmom
8023 double precision deltattracer
8024 double precision delx(nx)
8025 double precision dely(ny)
8026 double precision delz(nr)
8027 double precision diffk4s
8028 double precision diffk4t
8029 double precision diffkhs
8030 double precision diffkht
8031 double precision diffkps
8032 double precision diffkpt
8033 double precision diffkrs
8034 double precision diffkrt
8035 double precision diffkzs
8036 double precision diffkzt
8037 double precision dumpfreq
8038 double precision endtime
8039 double precision externforcingcycle
8040 double precision externforcingperiod
8041 double precision f0
8042 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8043 double precision fofacmom
8044 double precision freesurffac
8045 double precision gbaro
8046 double precision gravity
8047 double precision hfacmin
8048 double precision hfacmindp
8049 double precision hfacmindr
8050 double precision hfacmindz
8051 double precision horivertratio
8052 double precision implicdiv2dflow
8053 double precision implicsurfpress
8054 double precision ivdc_kappa
8055 double precision lambdasaltclimrelax
8056 double precision lambdathetaclimrelax
8057 double precision latfftfiltlo
8058 double precision mtfacmom
8059 double precision omega
8060 double precision pchkptfreq
8061 double precision pffacmom
8062 double precision phimin
8063 double precision rcd
8064 double precision recip_gravity
8065 double precision recip_horivertratio
8066 double precision recip_rhoconst
8067 double precision recip_rhonil
8068 double precision recip_rsphere
8069 double precision rhoconst
8070 double precision rhonil
8071 double precision ro_sealevel
8072 double precision rsphere
8073 double precision specvol_s(nr)
8074 double precision sref(nr)
8075 double precision starttime
8076 double precision taucd
8077 double precision tausaltclimrelax
8078 double precision tauthetaclimrelax
8079 double precision tavefreq
8080 double precision theta_s(nr)
8081 double precision thetamin
8082 double precision tref(nr)
8083 double precision vffacmom
8084 double precision visca4
8085 double precision viscah
8086 double precision viscap
8087 double precision viscar
8088 double precision viscaz
8089 double precision zonal_filt_lat
8090
8091 C==============================================
8092 C define arguments
8093 C==============================================
8094 integer bi
8095 integer bj
8096 integer imax
8097 integer imin
8098 integer jmax
8099 integer jmin
8100 integer klev
8101
8102 C==============================================
8103 C define local variables
8104 C==============================================
8105 integer i
8106 integer j
8107
8108 C----------------------------------------------
8109 C ROUTINE BODY
8110 C----------------------------------------------
8111 if (klev .eq. 1) then
8112 do j = jmin, jmax
8113 do i = imin, imax
8114 adsurfacetendencyu(i,j,bi,bj) = adsurfacetendencyu(i,j,bi,
8115 $bj)+adgu(i,j,klev,bi,bj)*fofacmom*maskw(i,j,klev,bi,bj)
8116 end do
8117 end do
8118 endif
8119
8120 end
8121
8122
8123 subroutine adexternal_forcing_v( imin, imax, jmin, jmax, bi, bj,
8124 $klev )
8125 C***************************************************************
8126 C***************************************************************
8127 C** This routine was generated by the **
8128 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
8129 C***************************************************************
8130 C***************************************************************
8131 C==============================================
8132 C all entries are defined explicitly
8133 C==============================================
8134 implicit none
8135
8136 C==============================================
8137 C define parameters
8138 C==============================================
8139 integer npx
8140 parameter ( npx = 1 )
8141 integer npy
8142 parameter ( npy = 1 )
8143 integer nr
8144 parameter ( nr = 15 )
8145 integer nsx
8146 parameter ( nsx = 1 )
8147 integer nsy
8148 parameter ( nsy = 1 )
8149 integer snx
8150 parameter ( snx = 20 )
8151 integer nx
8152 parameter ( nx = snx*nsx*npx )
8153 integer sny
8154 parameter ( sny = 40 )
8155 integer ny
8156 parameter ( ny = sny*nsy*npy )
8157 integer olx
8158 parameter ( olx = 3 )
8159 integer oly
8160 parameter ( oly = 3 )
8161
8162 C==============================================
8163 C define common blocks
8164 C==============================================
8165 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
8166 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
8167 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8168 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8169 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8170 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8171 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8172 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8173 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8174 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8175 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8176 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8177 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8178 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8179 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8180 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8181
8182 common /adtendency_forcing/ adsurfacetendencyu,
8183 $adsurfacetendencyv, adsurfacetendencyt, adsurfacetendencys
8184 double precision adsurfacetendencys(1-olx:snx+olx,1-oly:sny+oly,
8185 $nsx,nsy)
8186 double precision adsurfacetendencyt(1-olx:snx+olx,1-oly:sny+oly,
8187 $nsx,nsy)
8188 double precision adsurfacetendencyu(1-olx:snx+olx,1-oly:sny+oly,
8189 $nsx,nsy)
8190 double precision adsurfacetendencyv(1-olx:snx+olx,1-oly:sny+oly,
8191 $nsx,nsy)
8192
8193 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
8194 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
8195 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
8196 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
8197 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
8198 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
8199 $tanphiatu, tanphiatv
8200 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8201 double precision drc(1:nr)
8202 double precision drf(1:nr)
8203 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8204 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8205 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8206 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8207 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8208 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8209 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8210 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8211 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8212 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
8213 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
8214 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
8215 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
8216 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
8217 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8218 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8219 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8220 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8221 double precision rc(1:nr)
8222 double precision recip_drc(1:nr)
8223 double precision recip_drf(1:nr)
8224 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8225 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8226 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8227 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8228 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8229 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8230 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8231 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8232 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8233 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
8234 $nsy)
8235 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
8236 $nsy)
8237 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
8238 $nsy)
8239 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8240 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8241 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8242 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8243 double precision recip_rkfac
8244 double precision rf(1:nr+1)
8245 double precision rkfac
8246 double precision safac(1:nr)
8247 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8248 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8249 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8250 double precision xc0
8251 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8252 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8253 double precision yc0
8254 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8255
8256 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
8257 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
8258 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
8259 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
8260 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
8261 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
8262 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
8263 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
8264 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
8265 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
8266 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
8267 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
8268 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
8269 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
8270 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
8271 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
8272 double precision abeps
8273 double precision affacmom
8274 double precision beta
8275 double precision bottomdraglinear
8276 double precision bottomdragquadratic
8277 double precision cadjfreq
8278 double precision cffacmom
8279 double precision cg2dpcoffdfac
8280 double precision cg2dtargetresidual
8281 double precision cg3dtargetresidual
8282 double precision chkptfreq
8283 double precision cospower
8284 double precision delp(nr)
8285 double precision delr(nr)
8286 double precision delt
8287 double precision deltat
8288 double precision deltatclock
8289 double precision deltatmom
8290 double precision deltattracer
8291 double precision delx(nx)
8292 double precision dely(ny)
8293 double precision delz(nr)
8294 double precision diffk4s
8295 double precision diffk4t
8296 double precision diffkhs
8297 double precision diffkht
8298 double precision diffkps
8299 double precision diffkpt
8300 double precision diffkrs
8301 double precision diffkrt
8302 double precision diffkzs
8303 double precision diffkzt
8304 double precision dumpfreq
8305 double precision endtime
8306 double precision externforcingcycle
8307 double precision externforcingperiod
8308 double precision f0
8309 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8310 double precision fofacmom
8311 double precision freesurffac
8312 double precision gbaro
8313 double precision gravity
8314 double precision hfacmin
8315 double precision hfacmindp
8316 double precision hfacmindr
8317 double precision hfacmindz
8318 double precision horivertratio
8319 double precision implicdiv2dflow
8320 double precision implicsurfpress
8321 double precision ivdc_kappa
8322 double precision lambdasaltclimrelax
8323 double precision lambdathetaclimrelax
8324 double precision latfftfiltlo
8325 double precision mtfacmom
8326 double precision omega
8327 double precision pchkptfreq
8328 double precision pffacmom
8329 double precision phimin
8330 double precision rcd
8331 double precision recip_gravity
8332 double precision recip_horivertratio
8333 double precision recip_rhoconst
8334 double precision recip_rhonil
8335 double precision recip_rsphere
8336 double precision rhoconst
8337 double precision rhonil
8338 double precision ro_sealevel
8339 double precision rsphere
8340 double precision specvol_s(nr)
8341 double precision sref(nr)
8342 double precision starttime
8343 double precision taucd
8344 double precision tausaltclimrelax
8345 double precision tauthetaclimrelax
8346 double precision tavefreq
8347 double precision theta_s(nr)
8348 double precision thetamin
8349 double precision tref(nr)
8350 double precision vffacmom
8351 double precision visca4
8352 double precision viscah
8353 double precision viscap
8354 double precision viscar
8355 double precision viscaz
8356 double precision zonal_filt_lat
8357
8358 C==============================================
8359 C define arguments
8360 C==============================================
8361 integer bi
8362 integer bj
8363 integer imax
8364 integer imin
8365 integer jmax
8366 integer jmin
8367 integer klev
8368
8369 C==============================================
8370 C define local variables
8371 C==============================================
8372 integer i
8373 integer j
8374
8375 C----------------------------------------------
8376 C ROUTINE BODY
8377 C----------------------------------------------
8378 if (klev .eq. 1) then
8379 do j = jmin, jmax
8380 do i = imin, imax
8381 adsurfacetendencyv(i,j,bi,bj) = adsurfacetendencyv(i,j,bi,
8382 $bj)+adgv(i,j,klev,bi,bj)*fofacmom*masks(i,j,klev,bi,bj)
8383 end do
8384 end do
8385 endif
8386
8387 end
8388
8389
8390 subroutine adfind_rho( bi, bj, imin, imax, jmin, jmax, k, kref,
8391 $eqn, tfld, sfld, adtfld, adsfld, adrholoc )
8392 C***************************************************************
8393 C***************************************************************
8394 C** This routine was generated by the **
8395 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
8396 C***************************************************************
8397 C***************************************************************
8398 C==============================================
8399 C all entries are defined explicitly
8400 C==============================================
8401 implicit none
8402
8403 C==============================================
8404 C define parameters
8405 C==============================================
8406 integer npx
8407 parameter ( npx = 1 )
8408 integer npy
8409 parameter ( npy = 1 )
8410 integer nr
8411 parameter ( nr = 15 )
8412 integer nsx
8413 parameter ( nsx = 1 )
8414 integer nsy
8415 parameter ( nsy = 1 )
8416 integer snx
8417 parameter ( snx = 20 )
8418 integer nx
8419 parameter ( nx = snx*nsx*npx )
8420 integer sny
8421 parameter ( sny = 40 )
8422 integer ny
8423 parameter ( ny = sny*nsy*npy )
8424 integer olx
8425 parameter ( olx = 3 )
8426 integer oly
8427 parameter ( oly = 3 )
8428
8429 C==============================================
8430 C define common blocks
8431 C==============================================
8432 common /parm_eos_lin/ talpha, sbeta, eostype
8433 character*(6) eostype
8434 double precision sbeta
8435 double precision talpha
8436
8437 common /parm_eos_nl/ eosc, eossig0, eosreft, eosrefs
8438 double precision eosc(9,nr+1)
8439 double precision eosrefs(nr+1)
8440 double precision eosreft(nr+1)
8441 double precision eossig0(nr+1)
8442
8443 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
8444 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
8445 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
8446 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
8447 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
8448 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
8449 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
8450 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
8451 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
8452 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
8453 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
8454 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
8455 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
8456 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
8457 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
8458 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
8459 double precision abeps
8460 double precision affacmom
8461 double precision beta
8462 double precision bottomdraglinear
8463 double precision bottomdragquadratic
8464 double precision cadjfreq
8465 double precision cffacmom
8466 double precision cg2dpcoffdfac
8467 double precision cg2dtargetresidual
8468 double precision cg3dtargetresidual
8469 double precision chkptfreq
8470 double precision cospower
8471 double precision delp(nr)
8472 double precision delr(nr)
8473 double precision delt
8474 double precision deltat
8475 double precision deltatclock
8476 double precision deltatmom
8477 double precision deltattracer
8478 double precision delx(nx)
8479 double precision dely(ny)
8480 double precision delz(nr)
8481 double precision diffk4s
8482 double precision diffk4t
8483 double precision diffkhs
8484 double precision diffkht
8485 double precision diffkps
8486 double precision diffkpt
8487 double precision diffkrs
8488 double precision diffkrt
8489 double precision diffkzs
8490 double precision diffkzt
8491 double precision dumpfreq
8492 double precision endtime
8493 double precision externforcingcycle
8494 double precision externforcingperiod
8495 double precision f0
8496 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8497 double precision fofacmom
8498 double precision freesurffac
8499 double precision gbaro
8500 double precision gravity
8501 double precision hfacmin
8502 double precision hfacmindp
8503 double precision hfacmindr
8504 double precision hfacmindz
8505 double precision horivertratio
8506 double precision implicdiv2dflow
8507 double precision implicsurfpress
8508 double precision ivdc_kappa
8509 double precision lambdasaltclimrelax
8510 double precision lambdathetaclimrelax
8511 double precision latfftfiltlo
8512 double precision mtfacmom
8513 double precision omega
8514 double precision pchkptfreq
8515 double precision pffacmom
8516 double precision phimin
8517 double precision rcd
8518 double precision recip_gravity
8519 double precision recip_horivertratio
8520 double precision recip_rhoconst
8521 double precision recip_rhonil
8522 double precision recip_rsphere
8523 double precision rhoconst
8524 double precision rhonil
8525 double precision ro_sealevel
8526 double precision rsphere
8527 double precision specvol_s(nr)
8528 double precision sref(nr)
8529 double precision starttime
8530 double precision taucd
8531 double precision tausaltclimrelax
8532 double precision tauthetaclimrelax
8533 double precision tavefreq
8534 double precision theta_s(nr)
8535 double precision thetamin
8536 double precision tref(nr)
8537 double precision vffacmom
8538 double precision visca4
8539 double precision viscah
8540 double precision viscap
8541 double precision viscar
8542 double precision viscaz
8543 double precision zonal_filt_lat
8544
8545 C==============================================
8546 C define arguments
8547 C==============================================
8548 double precision adrholoc(1-olx:snx+olx,1-oly:sny+oly)
8549 double precision adsfld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8550 double precision adtfld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8551 integer bi
8552 integer bj
8553 character*(*) eqn
8554 integer imax
8555 integer imin
8556 integer jmax
8557 integer jmin
8558 integer k
8559 integer kref
8560 double precision sfld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8561 double precision tfld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8562
8563 C==============================================
8564 C define local variables
8565 C==============================================
8566 double precision addeltasig
8567 double precision adsp
8568 double precision adtp
8569 integer i
8570 integer j
8571 double precision refsalt
8572 double precision reftemp
8573 double precision sp
8574 double precision tp
8575
8576 C----------------------------------------------
8577 C RESET LOCAL ADJOINT VARIABLES
8578 C----------------------------------------------
8579 addeltasig = 0.d0
8580 adsp = 0.d0
8581 adtp = 0.d0
8582
8583 C----------------------------------------------
8584 C ROUTINE BODY
8585 C----------------------------------------------
8586 if (eqn .eq. 'LINEAR') then
8587 do j = jmin, jmax
8588 do i = imin, imax
8589 adsfld(i,j,k,bi,bj) = adsfld(i,j,k,bi,bj)+adrholoc(i,j)*
8590 $rhonil*sbeta
8591 adtfld(i,j,k,bi,bj) = adtfld(i,j,k,bi,bj)-adrholoc(i,j)*
8592 $rhonil*talpha
8593 adrholoc(i,j) = 0.d0
8594 end do
8595 end do
8596 else if (eqn .eq. 'POLY3') then
8597 reftemp = eosreft(kref)
8598 refsalt = eosrefs(kref)
8599 do j = jmin, jmax
8600 addeltasig = 0.d0
8601 adsp = 0.d0
8602 adtp = 0.d0
8603 do i = imin, imax
8604 addeltasig = 0.d0
8605 adsp = 0.d0
8606 adtp = 0.d0
8607 tp = tfld(i,j,k,bi,bj)-reftemp
8608 sp = sfld(i,j,k,bi,bj)-refsalt
8609 addeltasig = addeltasig+adrholoc(i,j)
8610 adrholoc(i,j) = 0.d0
8611 adsp = adsp+addeltasig*((eosc(9,kref)*sp+eosc(5,kref))*sp+
8612 $eosc(2,kref)+(eosc(9,kref)*sp+eosc(5,kref)+eosc(9,kref)*sp)*sp+
8613 $(eosc(7,kref)*tp+eosc(8,kref)*sp+eosc(4,kref)+eosc(8,kref)*sp)*tp)
8614 adtp = adtp+addeltasig*((eosc(6,kref)*tp+eosc(7,kref)*sp+
8615 $eosc(3,kref))*tp+(eosc(8,kref)*sp+eosc(4,kref))*sp+eosc(1,kref)+
8616 $(eosc(6,kref)*tp+eosc(7,kref)*sp+eosc(3,kref)+eosc(6,kref)*tp)*tp)
8617 addeltasig = 0.d0
8618 adsfld(i,j,k,bi,bj) = adsfld(i,j,k,bi,bj)+adsp
8619 adsp = 0.d0
8620 adtfld(i,j,k,bi,bj) = adtfld(i,j,k,bi,bj)+adtp
8621 adtp = 0.d0
8622 end do
8623 end do
8624 endif
8625 do j = 1-oly, sny+oly
8626 do i = 1-olx, snx+olx
8627 adrholoc(i,j) = 0.d0
8628 end do
8629 end do
8630
8631 end
8632
8633
8634 subroutine adfreeze( bi, bj, imin, imax, jmin, jmax, k )
8635 C***************************************************************
8636 C***************************************************************
8637 C** This routine was generated by the **
8638 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
8639 C***************************************************************
8640 C***************************************************************
8641 C==============================================
8642 C all entries are defined explicitly
8643 C==============================================
8644 implicit none
8645
8646 C==============================================
8647 C define parameters
8648 C==============================================
8649 integer nr
8650 parameter ( nr = 15 )
8651 integer nsx
8652 parameter ( nsx = 1 )
8653 integer nsy
8654 parameter ( nsy = 1 )
8655 integer olx
8656 parameter ( olx = 3 )
8657 integer oly
8658 parameter ( oly = 3 )
8659 integer snx
8660 parameter ( snx = 20 )
8661 integer sny
8662 parameter ( sny = 40 )
8663
8664 C==============================================
8665 C define common blocks
8666 C==============================================
8667 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
8668 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
8669 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8670 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8671 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8672 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8673 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8674 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8675 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8676 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8677 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8678 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8679 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8680 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8681 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8682 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8683
8684 common /dynvars_r/ etan, uvel, vvel, wvel, theta, salt, gu, gv,
8685 $gt, gs, gunm1, gvnm1, gtnm1, gsnm1
8686 double precision etan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8687 double precision gs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8688 double precision gsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8689 double precision gt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8690 double precision gtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8691 double precision gu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8692 double precision gunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8693 double precision gv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8694 double precision gvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8695 double precision salt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8696 double precision theta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8697 double precision uvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8698 double precision vvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8699 double precision wvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8700
8701 C==============================================
8702 C define arguments
8703 C==============================================
8704 integer bi
8705 integer bj
8706 integer imax
8707 integer imin
8708 integer jmax
8709 integer jmin
8710 integer k
8711
8712 C==============================================
8713 C define local variables
8714 C==============================================
8715 integer i
8716 integer j
8717 double precision tfreezing
8718
8719 C----------------------------------------------
8720 C ROUTINE BODY
8721 C----------------------------------------------
8722 tfreezing = -1.9
8723 do j = jmin, jmax
8724 do i = imin, imax
8725 if (gtnm1(i,j,k,bi,bj) .lt. tfreezing) then
8726 adgtnm1(i,j,k,bi,bj) = 0.d0
8727 endif
8728 end do
8729 end do
8730
8731 end
8732
8733
8734 subroutine adimpldiff( bi, bj, imin, imax, jmin, jmax, deltatx,
8735 $kapparx, recip_hfac, adgxnm1 )
8736 C***************************************************************
8737 C***************************************************************
8738 C** This routine was generated by the **
8739 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
8740 C***************************************************************
8741 C***************************************************************
8742 C==============================================
8743 C all entries are defined explicitly
8744 C==============================================
8745 implicit none
8746
8747 C==============================================
8748 C define parameters
8749 C==============================================
8750 integer nr
8751 parameter ( nr = 15 )
8752 integer nsx
8753 parameter ( nsx = 1 )
8754 integer nsy
8755 parameter ( nsy = 1 )
8756 integer olx
8757 parameter ( olx = 3 )
8758 integer oly
8759 parameter ( oly = 3 )
8760 integer snx
8761 parameter ( snx = 20 )
8762 integer sny
8763 parameter ( sny = 40 )
8764
8765 C==============================================
8766 C define common blocks
8767 C==============================================
8768 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
8769 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
8770 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
8771 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
8772 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
8773 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
8774 $tanphiatu, tanphiatv
8775 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8776 double precision drc(1:nr)
8777 double precision drf(1:nr)
8778 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8779 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8780 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8781 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8782 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8783 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8784 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8785 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8786 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8787 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
8788 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
8789 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
8790 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
8791 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
8792 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8793 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8794 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8795 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8796 double precision rc(1:nr)
8797 double precision recip_drc(1:nr)
8798 double precision recip_drf(1:nr)
8799 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8800 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8801 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8802 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8803 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8804 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8805 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8806 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8807 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8808 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
8809 $nsy)
8810 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
8811 $nsy)
8812 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
8813 $nsy)
8814 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8815 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8816 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8817 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8818 double precision recip_rkfac
8819 double precision rf(1:nr+1)
8820 double precision rkfac
8821 double precision safac(1:nr)
8822 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8823 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8824 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8825 double precision xc0
8826 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8827 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8828 double precision yc0
8829 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
8830
8831 C==============================================
8832 C define arguments
8833 C==============================================
8834 double precision adgxnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8835 integer bi
8836 integer bj
8837 double precision deltatx
8838 integer imax
8839 integer imin
8840 integer jmax
8841 integer jmin
8842 double precision kapparx(1-olx:snx+olx,1-oly:sny+oly,nr)
8843 double precision recip_hfac(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
8844 $nsy)
8845
8846 C==============================================
8847 C define local variables
8848 C==============================================
8849 double precision a(1-olx:snx+olx,1-oly:sny+oly,nr)
8850 double precision adgynm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
8851 double precision b(1-olx:snx+olx,1-oly:sny+oly,nr)
8852 double precision bet(1-olx:snx+olx,1-oly:sny+oly,nr)
8853 double precision c(1-olx:snx+olx,1-oly:sny+oly,nr)
8854 double precision gam(1-olx:snx+olx,1-oly:sny+oly,nr)
8855 integer i
8856 integer ip1
8857 integer ip2
8858 integer ip3
8859 integer ip4
8860 integer ip5
8861 integer j
8862 integer k
8863
8864 C----------------------------------------------
8865 C RESET LOCAL ADJOINT VARIABLES
8866 C----------------------------------------------
8867 do ip5 = 1, nsy
8868 do ip4 = 1, nsx
8869 do ip3 = 1, nr
8870 do ip2 = 1-oly, sny+oly
8871 do ip1 = 1-olx, snx+olx
8872 adgynm1(ip1,ip2,ip3,ip4,ip5) = 0.d0
8873 end do
8874 end do
8875 end do
8876 end do
8877 end do
8878
8879 C----------------------------------------------
8880 C ROUTINE BODY
8881 C----------------------------------------------
8882 do j = jmin, jmax
8883 do i = imin, imax
8884 a(i,j,1) = 0.d0
8885 end do
8886 end do
8887 do k = 2, nr
8888 do j = jmin, jmax
8889 do i = imin, imax
8890 a(i,j,k) = -(deltatx*recip_hfac(i,j,k,bi,bj)*recip_drf(k)*
8891 $kapparx(i,j,k)*recip_drc(k))
8892 end do
8893 end do
8894 end do
8895 do k = 1, nr-1
8896 do j = jmin, jmax
8897 do i = imin, imax
8898 c(i,j,k) = -(deltatx*recip_hfac(i,j,k,bi,bj)*recip_drf(k)*
8899 $kapparx(i,j,k+1)*recip_drc(k+1))
8900 if (recip_hfac(i,j,k+1,bi,bj) .eq. 0.) then
8901 c(i,j,k) = 0.
8902 endif
8903 end do
8904 end do
8905 end do
8906 do j = jmin, jmax
8907 do i = imin, imax
8908 c(i,j,nr) = 0.d0
8909 end do
8910 end do
8911 do k = 1, nr
8912 do j = jmin, jmax
8913 do i = imin, imax
8914 b(i,j,k) = 1.d0-c(i,j,k)-a(i,j,k)
8915 end do
8916 end do
8917 end do
8918 do k = 1, nr
8919 do j = jmin, jmax
8920 do i = imin, imax
8921 bet(i,j,k) = 0.d0
8922 gam(i,j,k) = 0.d0
8923 end do
8924 end do
8925 end do
8926 if (nr .gt. 1) then
8927 do j = jmin, jmax
8928 do i = imin, imax
8929 if (b(i,j,1) .ne. 0.) then
8930 bet(i,j,1) = 1.d0/b(i,j,1)
8931 endif
8932 end do
8933 end do
8934 endif
8935 if (nr .gt. 2) then
8936 do k = 2, nr
8937 do j = jmin, jmax
8938 do i = imin, imax
8939 gam(i,j,k) = c(i,j,k-1)*bet(i,j,k-1)
8940 if (b(i,j,k)-a(i,j,k)*gam(i,j,k) .ne. 0.) then
8941 bet(i,j,k) = 1.d0/(b(i,j,k)-a(i,j,k)*gam(i,j,k))
8942 endif
8943 end do
8944 end do
8945 end do
8946 endif
8947 do k = 1, nr
8948 do j = jmin, jmax
8949 do i = imin, imax
8950 adgynm1(i,j,k,bi,bj) = adgynm1(i,j,k,bi,bj)+adgxnm1(i,j,k,
8951 $bi,bj)
8952 adgxnm1(i,j,k,bi,bj) = 0.d0
8953 end do
8954 end do
8955 end do
8956 do k = 1, nr-1
8957 do j = jmin, jmax
8958 do i = imin, imax
8959 adgynm1(i,j,k+1,bi,bj) = adgynm1(i,j,k+1,bi,bj)-adgynm1(i,j,
8960 $k,bi,bj)*gam(i,j,k+1)
8961 end do
8962 end do
8963 end do
8964 do k = nr, 2, -1
8965 do j = jmin, jmax
8966 do i = imin, imax
8967 adgxnm1(i,j,k,bi,bj) = adgxnm1(i,j,k,bi,bj)+adgynm1(i,j,k,
8968 $bi,bj)*bet(i,j,k)
8969 adgynm1(i,j,k-1,bi,bj) = adgynm1(i,j,k-1,bi,bj)-adgynm1(i,j,
8970 $k,bi,bj)*bet(i,j,k)*a(i,j,k)
8971 adgynm1(i,j,k,bi,bj) = 0.d0
8972 end do
8973 end do
8974 end do
8975 do j = jmin, jmax
8976 do i = imin, imax
8977 adgxnm1(i,j,1,bi,bj) = adgxnm1(i,j,1,bi,bj)+adgynm1(i,j,1,bi,
8978 $bj)*bet(i,j,1)
8979 adgynm1(i,j,1,bi,bj) = 0.d0
8980 end do
8981 end do
8982
8983 end
8984
8985
8986 subroutine mdinitialise_varia( mythid )
8987 C***************************************************************
8988 C***************************************************************
8989 C** This routine was generated by the **
8990 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
8991 C***************************************************************
8992 C***************************************************************
8993 C==============================================
8994 C all entries are defined explicitly
8995 C==============================================
8996 implicit none
8997
8998 C==============================================
8999 C define parameters
9000 C==============================================
9001 integer max_no_threads
9002 parameter ( max_no_threads = 32 )
9003 integer npx
9004 parameter ( npx = 1 )
9005 integer npy
9006 parameter ( npy = 1 )
9007 integer nr
9008 parameter ( nr = 15 )
9009 integer nsx
9010 parameter ( nsx = 1 )
9011 integer nsy
9012 parameter ( nsy = 1 )
9013 integer snx
9014 parameter ( snx = 20 )
9015 integer nx
9016 parameter ( nx = snx*nsx*npx )
9017 integer sny
9018 parameter ( sny = 40 )
9019 integer ny
9020 parameter ( ny = sny*nsy*npy )
9021 integer olx
9022 parameter ( olx = 3 )
9023 integer oly
9024 parameter ( oly = 3 )
9025
9026 C==============================================
9027 C define common blocks
9028 C==============================================
9029 common /eeparams_i/ errormessageunit, standardmessageunit,
9030 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
9031 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
9032 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
9033 integer eedataunit
9034 integer errormessageunit
9035 integer ioerrorcount(max_no_threads)
9036 integer modeldataunit
9037 integer mybxhi(max_no_threads)
9038 integer mybxlo(max_no_threads)
9039 integer mybyhi(max_no_threads)
9040 integer mybylo(max_no_threads)
9041 integer myprocid
9042 integer mypx
9043 integer mypy
9044 integer myxgloballo
9045 integer myygloballo
9046 integer nthreads
9047 integer ntx
9048 integer nty
9049 integer numberofprocs
9050 integer pidio
9051 integer scrunit1
9052 integer scrunit2
9053 integer standardmessageunit
9054
9055 common /parm_i/ cg2dmaxiters, cg2dchkresfreq, cg3dmaxiters,
9056 $cg3dchkresfreq, niter0, ntimesteps, nenditer, numstepsperpickup,
9057 $writestateprec, nchecklev, writebinaryprec, readbinaryprec, nshap,
9058 $ zonal_filt_sinpow, zonal_filt_cospow
9059 integer cg2dchkresfreq
9060 integer cg2dmaxiters
9061 integer cg3dchkresfreq
9062 integer cg3dmaxiters
9063 integer nchecklev
9064 integer nenditer
9065 integer niter0
9066 integer nshap
9067 integer ntimesteps
9068 integer numstepsperpickup
9069 integer readbinaryprec
9070 integer writebinaryprec
9071 integer writestateprec
9072 integer zonal_filt_cospow
9073 integer zonal_filt_sinpow
9074
9075 common /parm_l/ usingcartesiangrid, usingsphericalpolargrid,
9076 $no_slip_sides, no_slip_bottom, staggertimestep, momviscosity,
9077 $momadvection, momforcing, usecoriolis, mompressureforcing,
9078 $tempdiffusion, tempadvection, tempforcing, saltdiffusion,
9079 $saltadvection, saltforcing, implicitfreesurface, rigidlid,
9080 $momstepping, tempstepping, saltstepping, metricterms,
9081 $usingsphericalpolarmterms, useconstantf, usebetaplanef,
9082 $usespheref, implicitdiffusion, implicitviscosity,
9083 $dothetaclimrelax, dosaltclimrelax, periodicexternalforcing,
9084 $usingpcoords, usingzcoords, nonhydrostatic, globalfiles,
9085 $allowfreezing, groundatk1, usepickupbeforec35
9086 logical allowfreezing
9087 logical dosaltclimrelax
9088 logical dothetaclimrelax
9089 logical globalfiles
9090 logical groundatk1
9091 logical implicitdiffusion
9092 logical implicitfreesurface
9093 logical implicitviscosity
9094 logical metricterms
9095 logical momadvection
9096 logical momforcing
9097 logical mompressureforcing
9098 logical momstepping
9099 logical momviscosity
9100 logical no_slip_bottom
9101 logical no_slip_sides
9102 logical nonhydrostatic
9103 logical periodicexternalforcing
9104 logical rigidlid
9105 logical saltadvection
9106 logical saltdiffusion
9107 logical saltforcing
9108 logical saltstepping
9109 logical staggertimestep
9110 logical tempadvection
9111 logical tempdiffusion
9112 logical tempforcing
9113 logical tempstepping
9114 logical usebetaplanef
9115 logical useconstantf
9116 logical usecoriolis
9117 logical usepickupbeforec35
9118 logical usespheref
9119 logical usingcartesiangrid
9120 logical usingpcoords
9121 logical usingsphericalpolargrid
9122 logical usingsphericalpolarmterms
9123 logical usingzcoords
9124
9125 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
9126 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
9127 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
9128 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
9129 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
9130 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
9131 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
9132 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
9133 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
9134 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
9135 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
9136 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
9137 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
9138 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
9139 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
9140 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
9141 double precision abeps
9142 double precision affacmom
9143 double precision beta
9144 double precision bottomdraglinear
9145 double precision bottomdragquadratic
9146 double precision cadjfreq
9147 double precision cffacmom
9148 double precision cg2dpcoffdfac
9149 double precision cg2dtargetresidual
9150 double precision cg3dtargetresidual
9151 double precision chkptfreq
9152 double precision cospower
9153 double precision delp(nr)
9154 double precision delr(nr)
9155 double precision delt
9156 double precision deltat
9157 double precision deltatclock
9158 double precision deltatmom
9159 double precision deltattracer
9160 double precision delx(nx)
9161 double precision dely(ny)
9162 double precision delz(nr)
9163 double precision diffk4s
9164 double precision diffk4t
9165 double precision diffkhs
9166 double precision diffkht
9167 double precision diffkps
9168 double precision diffkpt
9169 double precision diffkrs
9170 double precision diffkrt
9171 double precision diffkzs
9172 double precision diffkzt
9173 double precision dumpfreq
9174 double precision endtime
9175 double precision externforcingcycle
9176 double precision externforcingperiod
9177 double precision f0
9178 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9179 double precision fofacmom
9180 double precision freesurffac
9181 double precision gbaro
9182 double precision gravity
9183 double precision hfacmin
9184 double precision hfacmindp
9185 double precision hfacmindr
9186 double precision hfacmindz
9187 double precision horivertratio
9188 double precision implicdiv2dflow
9189 double precision implicsurfpress
9190 double precision ivdc_kappa
9191 double precision lambdasaltclimrelax
9192 double precision lambdathetaclimrelax
9193 double precision latfftfiltlo
9194 double precision mtfacmom
9195 double precision omega
9196 double precision pchkptfreq
9197 double precision pffacmom
9198 double precision phimin
9199 double precision rcd
9200 double precision recip_gravity
9201 double precision recip_horivertratio
9202 double precision recip_rhoconst
9203 double precision recip_rhonil
9204 double precision recip_rsphere
9205 double precision rhoconst
9206 double precision rhonil
9207 double precision ro_sealevel
9208 double precision rsphere
9209 double precision specvol_s(nr)
9210 double precision sref(nr)
9211 double precision starttime
9212 double precision taucd
9213 double precision tausaltclimrelax
9214 double precision tauthetaclimrelax
9215 double precision tavefreq
9216 double precision theta_s(nr)
9217 double precision thetamin
9218 double precision tref(nr)
9219 double precision vffacmom
9220 double precision visca4
9221 double precision viscah
9222 double precision viscap
9223 double precision viscar
9224 double precision viscaz
9225 double precision zonal_filt_lat
9226
9227 C==============================================
9228 C define arguments
9229 C==============================================
9230 integer mythid
9231
9232 C==============================================
9233 C define local variables
9234 C==============================================
9235 integer bi
9236 integer bj
9237 integer imax
9238 integer imin
9239 integer jmax
9240 integer jmin
9241
9242 C**********************************************
9243 C executable statements of routine
9244 C**********************************************
9245 call barrier( mythid )
9246 call ini_fields( mythid )
9247 call barrier( mythid )
9248 if (usepickupbeforec35) then
9249 if (starttime .ne. 0.) then
9250 call mdthe_correction_step( starttime,niter0,mythid )
9251 endif
9252 endif
9253 if (starttime .eq. 0.) then
9254 do bj = mybylo(mythid), mybyhi(mythid)
9255 do bi = mybxlo(mythid), mybxhi(mythid)
9256 imin = 1-olx
9257 imax = snx+olx
9258 jmin = 1-oly
9259 jmax = sny+oly
9260 call convective_adjustment_ini( bi,bj,imin,imax,jmin,jmax,
9261 $starttime,niter0,mythid )
9262 end do
9263 end do
9264 call barrier( mythid )
9265 endif
9266 call packages_init_variables( mythid )
9267 if (tavefreq .gt. 0.) then
9268 do bj = mybylo(mythid), mybyhi(mythid)
9269 bi = mybxhi(mythid)
9270 end do
9271 endif
9272 end
9273
9274
9275 subroutine adinitialise_varia( mythid )
9276 C***************************************************************
9277 C***************************************************************
9278 C** This routine was generated by the **
9279 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
9280 C***************************************************************
9281 C***************************************************************
9282 C==============================================
9283 C all entries are defined explicitly
9284 C==============================================
9285 implicit none
9286
9287 C==============================================
9288 C define parameters
9289 C==============================================
9290 integer npx
9291 parameter ( npx = 1 )
9292 integer npy
9293 parameter ( npy = 1 )
9294 integer nr
9295 parameter ( nr = 15 )
9296 integer nsx
9297 parameter ( nsx = 1 )
9298 integer nsy
9299 parameter ( nsy = 1 )
9300 integer snx
9301 parameter ( snx = 20 )
9302 integer nx
9303 parameter ( nx = snx*nsx*npx )
9304 integer sny
9305 parameter ( sny = 40 )
9306 integer ny
9307 parameter ( ny = sny*nsy*npy )
9308 integer olx
9309 parameter ( olx = 3 )
9310 integer oly
9311 parameter ( oly = 3 )
9312
9313 C==============================================
9314 C define common blocks
9315 C==============================================
9316 common /addynvars_cd/ addynvars_cd1, addynvars_cd2, addynvars_cd3,
9317 $ addynvars_cd4, addynvars_cd5, addynvars_cd6, addynvars_cd7
9318 double precision addynvars_cd1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9319 $nsy)
9320 double precision addynvars_cd2(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9321 $nsy)
9322 double precision addynvars_cd3(1-olx:snx+olx,1-oly:sny+oly,nsx,
9323 $nsy)
9324 double precision addynvars_cd4(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9325 $nsy)
9326 double precision addynvars_cd5(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9327 $nsy)
9328 double precision addynvars_cd6(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9329 $nsy)
9330 double precision addynvars_cd7(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9331 $nsy)
9332
9333 common /addynvars_r/ addynvars_r1, addynvars_r2, addynvars_r3,
9334 $addynvars_r4, addynvars_r5, addynvars_r6, addynvars_r7,
9335 $addynvars_r8, addynvars_r9, addynvars_r10, addynvars_r11,
9336 $addynvars_r12, addynvars_r13, addynvars_r14
9337 double precision addynvars_r1(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9338 double precision addynvars_r10(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9339 $nsy)
9340 double precision addynvars_r11(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9341 $nsy)
9342 double precision addynvars_r12(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9343 $nsy)
9344 double precision addynvars_r13(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9345 $nsy)
9346 double precision addynvars_r14(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9347 $nsy)
9348 double precision addynvars_r2(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9349 $nsy)
9350 double precision addynvars_r3(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9351 $nsy)
9352 double precision addynvars_r4(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9353 $nsy)
9354 double precision addynvars_r5(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9355 $nsy)
9356 double precision addynvars_r6(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9357 $nsy)
9358 double precision addynvars_r7(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9359 $nsy)
9360 double precision addynvars_r8(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9361 $nsy)
9362 double precision addynvars_r9(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
9363 $nsy)
9364
9365 common /parm_l/ usingcartesiangrid, usingsphericalpolargrid,
9366 $no_slip_sides, no_slip_bottom, staggertimestep, momviscosity,
9367 $momadvection, momforcing, usecoriolis, mompressureforcing,
9368 $tempdiffusion, tempadvection, tempforcing, saltdiffusion,
9369 $saltadvection, saltforcing, implicitfreesurface, rigidlid,
9370 $momstepping, tempstepping, saltstepping, metricterms,
9371 $usingsphericalpolarmterms, useconstantf, usebetaplanef,
9372 $usespheref, implicitdiffusion, implicitviscosity,
9373 $dothetaclimrelax, dosaltclimrelax, periodicexternalforcing,
9374 $usingpcoords, usingzcoords, nonhydrostatic, globalfiles,
9375 $allowfreezing, groundatk1, usepickupbeforec35
9376 logical allowfreezing
9377 logical dosaltclimrelax
9378 logical dothetaclimrelax
9379 logical globalfiles
9380 logical groundatk1
9381 logical implicitdiffusion
9382 logical implicitfreesurface
9383 logical implicitviscosity
9384 logical metricterms
9385 logical momadvection
9386 logical momforcing
9387 logical mompressureforcing
9388 logical momstepping
9389 logical momviscosity
9390 logical no_slip_bottom
9391 logical no_slip_sides
9392 logical nonhydrostatic
9393 logical periodicexternalforcing
9394 logical rigidlid
9395 logical saltadvection
9396 logical saltdiffusion
9397 logical saltforcing
9398 logical saltstepping
9399 logical staggertimestep
9400 logical tempadvection
9401 logical tempdiffusion
9402 logical tempforcing
9403 logical tempstepping
9404 logical usebetaplanef
9405 logical useconstantf
9406 logical usecoriolis
9407 logical usepickupbeforec35
9408 logical usespheref
9409 logical usingcartesiangrid
9410 logical usingpcoords
9411 logical usingsphericalpolargrid
9412 logical usingsphericalpolarmterms
9413 logical usingzcoords
9414
9415 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
9416 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
9417 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
9418 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
9419 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
9420 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
9421 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
9422 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
9423 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
9424 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
9425 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
9426 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
9427 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
9428 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
9429 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
9430 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
9431 double precision abeps
9432 double precision affacmom
9433 double precision beta
9434 double precision bottomdraglinear
9435 double precision bottomdragquadratic
9436 double precision cadjfreq
9437 double precision cffacmom
9438 double precision cg2dpcoffdfac
9439 double precision cg2dtargetresidual
9440 double precision cg3dtargetresidual
9441 double precision chkptfreq
9442 double precision cospower
9443 double precision delp(nr)
9444 double precision delr(nr)
9445 double precision delt
9446 double precision deltat
9447 double precision deltatclock
9448 double precision deltatmom
9449 double precision deltattracer
9450 double precision delx(nx)
9451 double precision dely(ny)
9452 double precision delz(nr)
9453 double precision diffk4s
9454 double precision diffk4t
9455 double precision diffkhs
9456 double precision diffkht
9457 double precision diffkps
9458 double precision diffkpt
9459 double precision diffkrs
9460 double precision diffkrt
9461 double precision diffkzs
9462 double precision diffkzt
9463 double precision dumpfreq
9464 double precision endtime
9465 double precision externforcingcycle
9466 double precision externforcingperiod
9467 double precision f0
9468 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9469 double precision fofacmom
9470 double precision freesurffac
9471 double precision gbaro
9472 double precision gravity
9473 double precision hfacmin
9474 double precision hfacmindp
9475 double precision hfacmindr
9476 double precision hfacmindz
9477 double precision horivertratio
9478 double precision implicdiv2dflow
9479 double precision implicsurfpress
9480 double precision ivdc_kappa
9481 double precision lambdasaltclimrelax
9482 double precision lambdathetaclimrelax
9483 double precision latfftfiltlo
9484 double precision mtfacmom
9485 double precision omega
9486 double precision pchkptfreq
9487 double precision pffacmom
9488 double precision phimin
9489 double precision rcd
9490 double precision recip_gravity
9491 double precision recip_horivertratio
9492 double precision recip_rhoconst
9493 double precision recip_rhonil
9494 double precision recip_rsphere
9495 double precision rhoconst
9496 double precision rhonil
9497 double precision ro_sealevel
9498 double precision rsphere
9499 double precision specvol_s(nr)
9500 double precision sref(nr)
9501 double precision starttime
9502 double precision taucd
9503 double precision tausaltclimrelax
9504 double precision tauthetaclimrelax
9505 double precision tavefreq
9506 double precision theta_s(nr)
9507 double precision thetamin
9508 double precision tref(nr)
9509 double precision vffacmom
9510 double precision visca4
9511 double precision viscah
9512 double precision viscap
9513 double precision viscar
9514 double precision viscaz
9515 double precision zonal_filt_lat
9516
9517 C==============================================
9518 C define arguments
9519 C==============================================
9520 integer mythid
9521
9522 C==============================================
9523 C define local variables
9524 C==============================================
9525 integer ip1
9526 integer ip2
9527 integer ip3
9528 integer ip4
9529 integer ip5
9530
9531 C----------------------------------------------
9532 C ROUTINE BODY
9533 C----------------------------------------------
9534 call barrier( mythid )
9535 call barrier( mythid )
9536 if (starttime .eq. 0.) then
9537 call barrier( mythid )
9538 endif
9539 call adpackages_init_variables( mythid )
9540 if (starttime .eq. 0.) then
9541 call barrier( mythid )
9542 endif
9543 if (usepickupbeforec35) then
9544 if (starttime .ne. 0.) then
9545 call adthe_correction_step( starttime,mythid )
9546 endif
9547 endif
9548 call barrier( mythid )
9549 do ip5 = 1, nsy
9550 do ip4 = 1, nsx
9551 do ip3 = 1, nr
9552 do ip2 = 1-oly, sny+oly
9553 do ip1 = 1-olx, snx+olx
9554 addynvars_cd1(ip1,ip2,ip3,ip4,ip5) = 0.d0
9555 end do
9556 end do
9557 end do
9558 end do
9559 end do
9560 do ip5 = 1, nsy
9561 do ip4 = 1, nsx
9562 do ip3 = 1, nr
9563 do ip2 = 1-oly, sny+oly
9564 do ip1 = 1-olx, snx+olx
9565 addynvars_cd2(ip1,ip2,ip3,ip4,ip5) = 0.d0
9566 end do
9567 end do
9568 end do
9569 end do
9570 end do
9571 do ip4 = 1, nsy
9572 do ip3 = 1, nsx
9573 do ip2 = 1-oly, sny+oly
9574 do ip1 = 1-olx, snx+olx
9575 addynvars_cd3(ip1,ip2,ip3,ip4) = 0.d0
9576 end do
9577 end do
9578 end do
9579 end do
9580 do ip5 = 1, nsy
9581 do ip4 = 1, nsx
9582 do ip3 = 1, nr
9583 do ip2 = 1-oly, sny+oly
9584 do ip1 = 1-olx, snx+olx
9585 addynvars_cd4(ip1,ip2,ip3,ip4,ip5) = 0.d0
9586 end do
9587 end do
9588 end do
9589 end do
9590 end do
9591 do ip5 = 1, nsy
9592 do ip4 = 1, nsx
9593 do ip3 = 1, nr
9594 do ip2 = 1-oly, sny+oly
9595 do ip1 = 1-olx, snx+olx
9596 addynvars_cd5(ip1,ip2,ip3,ip4,ip5) = 0.d0
9597 end do
9598 end do
9599 end do
9600 end do
9601 end do
9602 do ip4 = 1, nsy
9603 do ip3 = 1, nsx
9604 do ip2 = 1-oly, sny+oly
9605 do ip1 = 1-olx, snx+olx
9606 addynvars_r1(ip1,ip2,ip3,ip4) = 0.d0
9607 end do
9608 end do
9609 end do
9610 end do
9611 do ip5 = 1, nsy
9612 do ip4 = 1, nsx
9613 do ip3 = 1, nr
9614 do ip2 = 1-oly, sny+oly
9615 do ip1 = 1-olx, snx+olx
9616 addynvars_r10(ip1,ip2,ip3,ip4,ip5) = 0.d0
9617 end do
9618 end do
9619 end do
9620 end do
9621 end do
9622 do ip5 = 1, nsy
9623 do ip4 = 1, nsx
9624 do ip3 = 1, nr
9625 do ip2 = 1-oly, sny+oly
9626 do ip1 = 1-olx, snx+olx
9627 addynvars_r11(ip1,ip2,ip3,ip4,ip5) = 0.d0
9628 end do
9629 end do
9630 end do
9631 end do
9632 end do
9633 do ip5 = 1, nsy
9634 do ip4 = 1, nsx
9635 do ip3 = 1, nr
9636 do ip2 = 1-oly, sny+oly
9637 do ip1 = 1-olx, snx+olx
9638 addynvars_r12(ip1,ip2,ip3,ip4,ip5) = 0.d0
9639 end do
9640 end do
9641 end do
9642 end do
9643 end do
9644 do ip5 = 1, nsy
9645 do ip4 = 1, nsx
9646 do ip3 = 1, nr
9647 do ip2 = 1-oly, sny+oly
9648 do ip1 = 1-olx, snx+olx
9649 addynvars_r13(ip1,ip2,ip3,ip4,ip5) = 0.d0
9650 end do
9651 end do
9652 end do
9653 end do
9654 end do
9655 do ip5 = 1, nsy
9656 do ip4 = 1, nsx
9657 do ip3 = 1, nr
9658 do ip2 = 1-oly, sny+oly
9659 do ip1 = 1-olx, snx+olx
9660 addynvars_r14(ip1,ip2,ip3,ip4,ip5) = 0.d0
9661 end do
9662 end do
9663 end do
9664 end do
9665 end do
9666 do ip5 = 1, nsy
9667 do ip4 = 1, nsx
9668 do ip3 = 1, nr
9669 do ip2 = 1-oly, sny+oly
9670 do ip1 = 1-olx, snx+olx
9671 addynvars_r2(ip1,ip2,ip3,ip4,ip5) = 0.d0
9672 end do
9673 end do
9674 end do
9675 end do
9676 end do
9677 do ip5 = 1, nsy
9678 do ip4 = 1, nsx
9679 do ip3 = 1, nr
9680 do ip2 = 1-oly, sny+oly
9681 do ip1 = 1-olx, snx+olx
9682 addynvars_r3(ip1,ip2,ip3,ip4,ip5) = 0.d0
9683 end do
9684 end do
9685 end do
9686 end do
9687 end do
9688 do ip5 = 1, nsy
9689 do ip4 = 1, nsx
9690 do ip3 = 1, nr
9691 do ip2 = 1-oly, sny+oly
9692 do ip1 = 1-olx, snx+olx
9693 addynvars_r4(ip1,ip2,ip3,ip4,ip5) = 0.d0
9694 end do
9695 end do
9696 end do
9697 end do
9698 end do
9699 do ip5 = 1, nsy
9700 do ip4 = 1, nsx
9701 do ip3 = 1, nr
9702 do ip2 = 1-oly, sny+oly
9703 do ip1 = 1-olx, snx+olx
9704 addynvars_r5(ip1,ip2,ip3,ip4,ip5) = 0.d0
9705 end do
9706 end do
9707 end do
9708 end do
9709 end do
9710 do ip5 = 1, nsy
9711 do ip4 = 1, nsx
9712 do ip3 = 1, nr
9713 do ip2 = 1-oly, sny+oly
9714 do ip1 = 1-olx, snx+olx
9715 addynvars_r6(ip1,ip2,ip3,ip4,ip5) = 0.d0
9716 end do
9717 end do
9718 end do
9719 end do
9720 end do
9721 do ip5 = 1, nsy
9722 do ip4 = 1, nsx
9723 do ip3 = 1, nr
9724 do ip2 = 1-oly, sny+oly
9725 do ip1 = 1-olx, snx+olx
9726 addynvars_r7(ip1,ip2,ip3,ip4,ip5) = 0.d0
9727 end do
9728 end do
9729 end do
9730 end do
9731 end do
9732 do ip5 = 1, nsy
9733 do ip4 = 1, nsx
9734 do ip3 = 1, nr
9735 do ip2 = 1-oly, sny+oly
9736 do ip1 = 1-olx, snx+olx
9737 addynvars_r8(ip1,ip2,ip3,ip4,ip5) = 0.d0
9738 end do
9739 end do
9740 end do
9741 end do
9742 end do
9743 do ip5 = 1, nsy
9744 do ip4 = 1, nsx
9745 do ip3 = 1, nr
9746 do ip2 = 1-oly, sny+oly
9747 do ip1 = 1-olx, snx+olx
9748 addynvars_r9(ip1,ip2,ip3,ip4,ip5) = 0.d0
9749 end do
9750 end do
9751 end do
9752 end do
9753 end do
9754 call barrier( mythid )
9755
9756 end
9757
9758
9759 subroutine adintegrate_for_w( bi, bj, k, adufld, advfld, adwfld )
9760 C***************************************************************
9761 C***************************************************************
9762 C** This routine was generated by the **
9763 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
9764 C***************************************************************
9765 C***************************************************************
9766 C==============================================
9767 C all entries are defined explicitly
9768 C==============================================
9769 implicit none
9770
9771 C==============================================
9772 C define parameters
9773 C==============================================
9774 integer nr
9775 parameter ( nr = 15 )
9776 integer nsx
9777 parameter ( nsx = 1 )
9778 integer nsy
9779 parameter ( nsy = 1 )
9780 integer olx
9781 parameter ( olx = 3 )
9782 integer oly
9783 parameter ( oly = 3 )
9784 integer snx
9785 parameter ( snx = 20 )
9786 integer sny
9787 parameter ( sny = 40 )
9788
9789 C==============================================
9790 C define common blocks
9791 C==============================================
9792 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
9793 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
9794 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
9795 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
9796 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
9797 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
9798 $tanphiatu, tanphiatv
9799 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9800 double precision drc(1:nr)
9801 double precision drf(1:nr)
9802 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9803 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9804 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9805 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9806 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9807 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9808 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9809 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9810 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9811 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
9812 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
9813 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
9814 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
9815 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
9816 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9817 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9818 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9819 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9820 double precision rc(1:nr)
9821 double precision recip_drc(1:nr)
9822 double precision recip_drf(1:nr)
9823 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9824 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9825 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9826 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9827 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9828 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9829 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9830 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9831 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9832 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
9833 $nsy)
9834 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
9835 $nsy)
9836 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
9837 $nsy)
9838 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9839 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9840 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9841 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9842 double precision recip_rkfac
9843 double precision rf(1:nr+1)
9844 double precision rkfac
9845 double precision safac(1:nr)
9846 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9847 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9848 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9849 double precision xc0
9850 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9851 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9852 double precision yc0
9853 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
9854
9855 common /parm_l/ usingcartesiangrid, usingsphericalpolargrid,
9856 $no_slip_sides, no_slip_bottom, staggertimestep, momviscosity,
9857 $momadvection, momforcing, usecoriolis, mompressureforcing,
9858 $tempdiffusion, tempadvection, tempforcing, saltdiffusion,
9859 $saltadvection, saltforcing, implicitfreesurface, rigidlid,
9860 $momstepping, tempstepping, saltstepping, metricterms,
9861 $usingsphericalpolarmterms, useconstantf, usebetaplanef,
9862 $usespheref, implicitdiffusion, implicitviscosity,
9863 $dothetaclimrelax, dosaltclimrelax, periodicexternalforcing,
9864 $usingpcoords, usingzcoords, nonhydrostatic, globalfiles,
9865 $allowfreezing, groundatk1, usepickupbeforec35
9866 logical allowfreezing
9867 logical dosaltclimrelax
9868 logical dothetaclimrelax
9869 logical globalfiles
9870 logical groundatk1
9871 logical implicitdiffusion
9872 logical implicitfreesurface
9873 logical implicitviscosity
9874 logical metricterms
9875 logical momadvection
9876 logical momforcing
9877 logical mompressureforcing
9878 logical momstepping
9879 logical momviscosity
9880 logical no_slip_bottom
9881 logical no_slip_sides
9882 logical nonhydrostatic
9883 logical periodicexternalforcing
9884 logical rigidlid
9885 logical saltadvection
9886 logical saltdiffusion
9887 logical saltforcing
9888 logical saltstepping
9889 logical staggertimestep
9890 logical tempadvection
9891 logical tempdiffusion
9892 logical tempforcing
9893 logical tempstepping
9894 logical usebetaplanef
9895 logical useconstantf
9896 logical usecoriolis
9897 logical usepickupbeforec35
9898 logical usespheref
9899 logical usingcartesiangrid
9900 logical usingpcoords
9901 logical usingsphericalpolargrid
9902 logical usingsphericalpolarmterms
9903 logical usingzcoords
9904
9905 C==============================================
9906 C define arguments
9907 C==============================================
9908 double precision adufld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
9909 double precision advfld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
9910 double precision adwfld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
9911 integer bi
9912 integer bj
9913 integer k
9914
9915 C==============================================
9916 C define local variables
9917 C==============================================
9918 double precision adutrans(1-olx:snx+olx,1-oly:sny+oly)
9919 double precision advtrans(1-olx:snx+olx,1-oly:sny+oly)
9920 integer i
9921 integer ip1
9922 integer ip2
9923 integer j
9924
9925 C----------------------------------------------
9926 C RESET LOCAL ADJOINT VARIABLES
9927 C----------------------------------------------
9928 do ip2 = 1-oly, sny+oly
9929 do ip1 = 1-olx, snx+olx
9930 adutrans(ip1,ip2) = 0.d0
9931 end do
9932 end do
9933 do ip2 = 1-oly, sny+oly
9934 do ip1 = 1-olx, snx+olx
9935 advtrans(ip1,ip2) = 0.d0
9936 end do
9937 end do
9938
9939 C----------------------------------------------
9940 C ROUTINE BODY
9941 C----------------------------------------------
9942 if (k .eq. 1 .and. rigidlid) then
9943 do j = 1-oly, sny+oly-1
9944 do i = 1-olx, snx+olx-1
9945 adwfld(i,j,k,bi,bj) = 0.d0
9946 end do
9947 end do
9948 else if (k .eq. nr) then
9949 do j = 1-oly, sny+oly-1
9950 do i = 1-olx, snx+olx-1
9951 adutrans(i+1,j) = adutrans(i+1,j)-adwfld(i,j,k,bi,bj)*
9952 $recip_ra(i,j,bi,bj)
9953 adutrans(i,j) = adutrans(i,j)+adwfld(i,j,k,bi,bj)*
9954 $recip_ra(i,j,bi,bj)
9955 advtrans(i,j+1) = advtrans(i,j+1)-adwfld(i,j,k,bi,bj)*
9956 $recip_ra(i,j,bi,bj)
9957 advtrans(i,j) = advtrans(i,j)+adwfld(i,j,k,bi,bj)*
9958 $recip_ra(i,j,bi,bj)
9959 adwfld(i,j,k,bi,bj) = 0.d0
9960 end do
9961 end do
9962 else
9963 do j = 1-oly, sny+oly-1
9964 do i = 1-olx, snx+olx-1
9965 adutrans(i+1,j) = adutrans(i+1,j)-adwfld(i,j,k,bi,bj)*
9966 $recip_ra(i,j,bi,bj)
9967 adutrans(i,j) = adutrans(i,j)+adwfld(i,j,k,bi,bj)*
9968 $recip_ra(i,j,bi,bj)
9969 advtrans(i,j+1) = advtrans(i,j+1)-adwfld(i,j,k,bi,bj)*
9970 $recip_ra(i,j,bi,bj)
9971 advtrans(i,j) = advtrans(i,j)+adwfld(i,j,k,bi,bj)*
9972 $recip_ra(i,j,bi,bj)
9973 adwfld(i,j,k+1,bi,bj) = adwfld(i,j,k+1,bi,bj)+adwfld(i,j,k,
9974 $bi,bj)
9975 adwfld(i,j,k,bi,bj) = 0.d0
9976 end do
9977 end do
9978 endif
9979 do j = 1-oly, sny+oly
9980 do i = 1-olx, snx+olx
9981 advfld(i,j,k,bi,bj) = advfld(i,j,k,bi,bj)+advtrans(i,j)*dxg(i,
9982 $j,bi,bj)*drf(k)*hfacs(i,j,k,bi,bj)
9983 advtrans(i,j) = 0.d0
9984 adufld(i,j,k,bi,bj) = adufld(i,j,k,bi,bj)+adutrans(i,j)*dyg(i,
9985 $j,bi,bj)*drf(k)*hfacw(i,j,k,bi,bj)
9986 adutrans(i,j) = 0.d0
9987 end do
9988 end do
9989
9990 end
9991
9992
9993 subroutine adpackages_init_variables( mythid )
9994 C***************************************************************
9995 C***************************************************************
9996 C** This routine was generated by the **
9997 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
9998 C***************************************************************
9999 C***************************************************************
10000 C==============================================
10001 C all entries are defined explicitly
10002 C==============================================
10003 implicit none
10004
10005 C==============================================
10006 C define parameters
10007 C==============================================
10008 integer nsx
10009 parameter ( nsx = 1 )
10010 integer nsy
10011 parameter ( nsy = 1 )
10012 integer olx
10013 parameter ( olx = 3 )
10014 integer oly
10015 parameter ( oly = 3 )
10016 integer snx
10017 parameter ( snx = 20 )
10018 integer sny
10019 parameter ( sny = 40 )
10020
10021 C==============================================
10022 C define common blocks
10023 C==============================================
10024 common /adcost_r/ adcost_r1, adcost_r14
10025 double precision adcost_r1
10026 double precision adcost_r14(nsx,nsy)
10027
10028 common /adffields/ adffields1, adffields2, adffields3, adffields4
10029 double precision adffields1(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10030 double precision adffields2(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10031 double precision adffields3(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10032 double precision adffields4(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10033
10034 C==============================================
10035 C define arguments
10036 C==============================================
10037 integer mythid
10038
10039 C==============================================
10040 C define local variables
10041 C==============================================
10042 integer ip1
10043 integer ip2
10044 integer ip3
10045 integer ip4
10046
10047 C----------------------------------------------
10048 C ROUTINE BODY
10049 C----------------------------------------------
10050 call barrier( mythid )
10051 do ip4 = 1, nsy
10052 do ip3 = 1, nsx
10053 do ip2 = 1-oly, sny+oly
10054 do ip1 = 1-olx, snx+olx
10055 adffields1(ip1,ip2,ip3,ip4) = 0.d0
10056 end do
10057 end do
10058 end do
10059 end do
10060 do ip4 = 1, nsy
10061 do ip3 = 1, nsx
10062 do ip2 = 1-oly, sny+oly
10063 do ip1 = 1-olx, snx+olx
10064 adffields2(ip1,ip2,ip3,ip4) = 0.d0
10065 end do
10066 end do
10067 end do
10068 end do
10069 do ip4 = 1, nsy
10070 do ip3 = 1, nsx
10071 do ip2 = 1-oly, sny+oly
10072 do ip1 = 1-olx, snx+olx
10073 adffields3(ip1,ip2,ip3,ip4) = 0.d0
10074 end do
10075 end do
10076 end do
10077 end do
10078 do ip4 = 1, nsy
10079 do ip3 = 1, nsx
10080 do ip2 = 1-oly, sny+oly
10081 do ip1 = 1-olx, snx+olx
10082 adffields4(ip1,ip2,ip3,ip4) = 0.d0
10083 end do
10084 end do
10085 end do
10086 end do
10087 call barrier( mythid )
10088 adcost_r1 = 0.d0
10089 call barrier( mythid )
10090 call adctrl_map_ini( mythid )
10091
10092 end
10093
10094
10095 subroutine adsolve_for_pressure( mythid )
10096 C***************************************************************
10097 C***************************************************************
10098 C** This routine was generated by the **
10099 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
10100 C***************************************************************
10101 C***************************************************************
10102 C==============================================
10103 C all entries are defined explicitly
10104 C==============================================
10105 implicit none
10106
10107 C==============================================
10108 C define parameters
10109 C==============================================
10110 integer max_no_threads
10111 parameter ( max_no_threads = 32 )
10112 integer npx
10113 parameter ( npx = 1 )
10114 integer npy
10115 parameter ( npy = 1 )
10116 integer nr
10117 parameter ( nr = 15 )
10118 integer nsx
10119 parameter ( nsx = 1 )
10120 integer nsy
10121 parameter ( nsy = 1 )
10122 integer snx
10123 parameter ( snx = 20 )
10124 integer nx
10125 parameter ( nx = snx*nsx*npx )
10126 integer sny
10127 parameter ( sny = 40 )
10128 integer ny
10129 parameter ( ny = sny*nsy*npy )
10130 integer olx
10131 parameter ( olx = 3 )
10132 integer oly
10133 parameter ( oly = 3 )
10134
10135 C==============================================
10136 C define common blocks
10137 C==============================================
10138 common /addynvars_cd/ aduveld, advveld, adetanm1, adunm1, advnm1,
10139 $adgucd, adgvcd
10140 double precision adetanm1(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10141 double precision adgucd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10142 double precision adgvcd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10143 double precision adunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10144 double precision aduveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10145 double precision advnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10146 double precision advveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10147
10148 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
10149 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
10150 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10151 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10152 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10153 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10154 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10155 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10156 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10157 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10158 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10159 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10160 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10161 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10162 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10163 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10164
10165 common /eeparams_i/ errormessageunit, standardmessageunit,
10166 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
10167 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
10168 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
10169 integer eedataunit
10170 integer errormessageunit
10171 integer ioerrorcount(max_no_threads)
10172 integer modeldataunit
10173 integer mybxhi(max_no_threads)
10174 integer mybxlo(max_no_threads)
10175 integer mybyhi(max_no_threads)
10176 integer mybylo(max_no_threads)
10177 integer myprocid
10178 integer mypx
10179 integer mypy
10180 integer myxgloballo
10181 integer myygloballo
10182 integer nthreads
10183 integer ntx
10184 integer nty
10185 integer numberofprocs
10186 integer pidio
10187 integer scrunit1
10188 integer scrunit2
10189 integer standardmessageunit
10190
10191 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
10192 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
10193 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
10194 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
10195 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
10196 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
10197 $tanphiatu, tanphiatv
10198 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10199 double precision drc(1:nr)
10200 double precision drf(1:nr)
10201 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10202 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10203 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10204 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10205 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10206 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10207 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10208 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10209 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10210 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
10211 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
10212 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
10213 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
10214 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
10215 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10216 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10217 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10218 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10219 double precision rc(1:nr)
10220 double precision recip_drc(1:nr)
10221 double precision recip_drf(1:nr)
10222 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10223 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10224 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10225 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10226 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10227 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10228 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10229 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10230 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10231 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
10232 $nsy)
10233 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
10234 $nsy)
10235 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
10236 $nsy)
10237 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10238 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10239 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10240 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10241 double precision recip_rkfac
10242 double precision rf(1:nr+1)
10243 double precision rkfac
10244 double precision safac(1:nr)
10245 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10246 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10247 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10248 double precision xc0
10249 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10250 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10251 double precision yc0
10252 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10253
10254 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
10255 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
10256 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
10257 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
10258 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
10259 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
10260 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
10261 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
10262 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
10263 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
10264 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
10265 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
10266 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
10267 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
10268 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
10269 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
10270 double precision abeps
10271 double precision affacmom
10272 double precision beta
10273 double precision bottomdraglinear
10274 double precision bottomdragquadratic
10275 double precision cadjfreq
10276 double precision cffacmom
10277 double precision cg2dpcoffdfac
10278 double precision cg2dtargetresidual
10279 double precision cg3dtargetresidual
10280 double precision chkptfreq
10281 double precision cospower
10282 double precision delp(nr)
10283 double precision delr(nr)
10284 double precision delt
10285 double precision deltat
10286 double precision deltatclock
10287 double precision deltatmom
10288 double precision deltattracer
10289 double precision delx(nx)
10290 double precision dely(ny)
10291 double precision delz(nr)
10292 double precision diffk4s
10293 double precision diffk4t
10294 double precision diffkhs
10295 double precision diffkht
10296 double precision diffkps
10297 double precision diffkpt
10298 double precision diffkrs
10299 double precision diffkrt
10300 double precision diffkzs
10301 double precision diffkzt
10302 double precision dumpfreq
10303 double precision endtime
10304 double precision externforcingcycle
10305 double precision externforcingperiod
10306 double precision f0
10307 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10308 double precision fofacmom
10309 double precision freesurffac
10310 double precision gbaro
10311 double precision gravity
10312 double precision hfacmin
10313 double precision hfacmindp
10314 double precision hfacmindr
10315 double precision hfacmindz
10316 double precision horivertratio
10317 double precision implicdiv2dflow
10318 double precision implicsurfpress
10319 double precision ivdc_kappa
10320 double precision lambdasaltclimrelax
10321 double precision lambdathetaclimrelax
10322 double precision latfftfiltlo
10323 double precision mtfacmom
10324 double precision omega
10325 double precision pchkptfreq
10326 double precision pffacmom
10327 double precision phimin
10328 double precision rcd
10329 double precision recip_gravity
10330 double precision recip_horivertratio
10331 double precision recip_rhoconst
10332 double precision recip_rhonil
10333 double precision recip_rsphere
10334 double precision rhoconst
10335 double precision rhonil
10336 double precision ro_sealevel
10337 double precision rsphere
10338 double precision specvol_s(nr)
10339 double precision sref(nr)
10340 double precision starttime
10341 double precision taucd
10342 double precision tausaltclimrelax
10343 double precision tauthetaclimrelax
10344 double precision tavefreq
10345 double precision theta_s(nr)
10346 double precision thetamin
10347 double precision tref(nr)
10348 double precision vffacmom
10349 double precision visca4
10350 double precision viscah
10351 double precision viscap
10352 double precision viscar
10353 double precision viscaz
10354 double precision zonal_filt_lat
10355
10356 common /solve_barot/ bo_surf, recip_bo
10357 double precision bo_surf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10358 double precision recip_bo(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10359
10360 C==============================================
10361 C define arguments
10362 C==============================================
10363 integer mythid
10364
10365 C==============================================
10366 C define local variables
10367 C==============================================
10368 double precision adcg2d_b(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10369 double precision adcg2d_x(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10370 integer bi
10371 integer bj
10372 integer i
10373 integer ip1
10374 integer ip2
10375 integer ip3
10376 integer ip4
10377 integer j
10378 integer k
10379 integer numiters
10380 double precision residual
10381 double precision tolerance
10382 double precision uf(1-olx:snx+olx,1-oly:sny+oly)
10383 double precision vf(1-olx:snx+olx,1-oly:sny+oly)
10384
10385 C----------------------------------------------
10386 C RESET LOCAL ADJOINT VARIABLES
10387 C----------------------------------------------
10388 do ip4 = 1, nsy
10389 do ip3 = 1, nsx
10390 do ip2 = 1-oly, sny+oly
10391 do ip1 = 1-olx, snx+olx
10392 adcg2d_b(ip1,ip2,ip3,ip4) = 0.d0
10393 end do
10394 end do
10395 end do
10396 end do
10397 do ip4 = 1, nsy
10398 do ip3 = 1, nsx
10399 do ip2 = 1-oly, sny+oly
10400 do ip1 = 1-olx, snx+olx
10401 adcg2d_x(ip1,ip2,ip3,ip4) = 0.d0
10402 end do
10403 end do
10404 end do
10405 end do
10406
10407 C----------------------------------------------
10408 C ROUTINE BODY
10409 C----------------------------------------------
10410 tolerance = cg2dtargetresidual
10411 do bj = mybylo(mythid), mybyhi(mythid)
10412 do bi = mybxlo(mythid), mybxhi(mythid)
10413 do j = 1-oly, sny+oly
10414 do i = 1-olx, snx+olx
10415 adcg2d_x(i,j,bi,bj) = adcg2d_x(i,j,bi,bj)+adetan(i,j,bi,
10416 $bj)*recip_bo(i,j,bi,bj)
10417 adetan(i,j,bi,bj) = 0.d0
10418 end do
10419 end do
10420 end do
10421 end do
10422 call adexch_xy_r8( mythid,adcg2d_x )
10423 call cg2d( adcg2d_x,adcg2d_b,tolerance,residual,numiters,mythid )
10424 do ip4 = 1, nsy
10425 do ip3 = 1, nsx
10426 do ip2 = 1-oly, sny+oly
10427 do ip1 = 1-olx, snx+olx
10428 adcg2d_x(ip1,ip2,ip3,ip4) = 0.d0
10429 end do
10430 end do
10431 end do
10432 end do
10433 do bj = mybylo(mythid), mybyhi(mythid)
10434 do bi = mybxlo(mythid), mybxhi(mythid)
10435 do j = 1, sny
10436 do i = 1, snx
10437 adetan(i,j,bi,bj) = adetan(i,j,bi,bj)-adcg2d_b(i,j,bi,bj)*
10438 $(freesurffac*ra(i,j,bi,bj)/deltatmom/deltatmom)
10439 end do
10440 end do
10441 end do
10442 end do
10443 do bj = mybyhi(mythid), mybylo(mythid), -1
10444 do bi = mybxhi(mythid), mybxlo(mythid), -1
10445 do k = 1, nr
10446 do j = 1, sny+1
10447 do i = 1, snx+1
10448 uf(i,j) = dyg(i,j,bi,bj)*drf(k)*hfacw(i,j,k,bi,bj)
10449 vf(i,j) = dxg(i,j,bi,bj)*drf(k)*hfacs(i,j,k,bi,bj)
10450 end do
10451 end do
10452 call adcalc_div_ghat( bi,bj,k,uf,vf,adcg2d_b )
10453 end do
10454 end do
10455 end do
10456 do bj = mybylo(mythid), mybyhi(mythid)
10457 do bi = mybxlo(mythid), mybxhi(mythid)
10458 do j = 1-oly, sny+oly
10459 do i = 1-olx, snx+olx
10460 adetan(i,j,bi,bj) = adetan(i,j,bi,bj)+adcg2d_x(i,j,bi,bj)*
10461 $bo_surf(i,j,bi,bj)
10462 adcg2d_x(i,j,bi,bj) = 0.d0
10463 adetan(i,j,bi,bj) = adetan(i,j,bi,bj)+adetanm1(i,j,bi,bj)
10464 adetanm1(i,j,bi,bj) = 0.d0
10465 end do
10466 end do
10467 end do
10468 end do
10469
10470 end
10471
10472
10473 subroutine mdthe_correction_step( mytime, myiter, mythid )
10474 C***************************************************************
10475 C***************************************************************
10476 C** This routine was generated by the **
10477 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
10478 C***************************************************************
10479 C***************************************************************
10480 C==============================================
10481 C all entries are defined explicitly
10482 C==============================================
10483 implicit none
10484
10485 C==============================================
10486 C define parameters
10487 C==============================================
10488 integer max_no_threads
10489 parameter ( max_no_threads = 32 )
10490 integer nr
10491 parameter ( nr = 15 )
10492 integer nsx
10493 parameter ( nsx = 1 )
10494 integer nsy
10495 parameter ( nsy = 1 )
10496 integer olx
10497 parameter ( olx = 3 )
10498 integer oly
10499 parameter ( oly = 3 )
10500 integer snx
10501 parameter ( snx = 20 )
10502 integer sny
10503 parameter ( sny = 40 )
10504
10505 C==============================================
10506 C define common blocks
10507 C==============================================
10508 common /dynvars_r/ etan, uvel, vvel, wvel, theta, salt, gu, gv,
10509 $gt, gs, gunm1, gvnm1, gtnm1, gsnm1
10510 double precision etan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10511 double precision gs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10512 double precision gsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10513 double precision gt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10514 double precision gtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10515 double precision gu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10516 double precision gunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10517 double precision gv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10518 double precision gvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10519 double precision salt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10520 double precision theta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10521 double precision uvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10522 double precision vvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10523 double precision wvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10524
10525 common /eeparams_i/ errormessageunit, standardmessageunit,
10526 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
10527 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
10528 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
10529 integer eedataunit
10530 integer errormessageunit
10531 integer ioerrorcount(max_no_threads)
10532 integer modeldataunit
10533 integer mybxhi(max_no_threads)
10534 integer mybxlo(max_no_threads)
10535 integer mybyhi(max_no_threads)
10536 integer mybylo(max_no_threads)
10537 integer myprocid
10538 integer mypx
10539 integer mypy
10540 integer myxgloballo
10541 integer myygloballo
10542 integer nthreads
10543 integer ntx
10544 integer nty
10545 integer numberofprocs
10546 integer pidio
10547 integer scrunit1
10548 integer scrunit2
10549 integer standardmessageunit
10550
10551 common /parm_l/ usingcartesiangrid, usingsphericalpolargrid,
10552 $no_slip_sides, no_slip_bottom, staggertimestep, momviscosity,
10553 $momadvection, momforcing, usecoriolis, mompressureforcing,
10554 $tempdiffusion, tempadvection, tempforcing, saltdiffusion,
10555 $saltadvection, saltforcing, implicitfreesurface, rigidlid,
10556 $momstepping, tempstepping, saltstepping, metricterms,
10557 $usingsphericalpolarmterms, useconstantf, usebetaplanef,
10558 $usespheref, implicitdiffusion, implicitviscosity,
10559 $dothetaclimrelax, dosaltclimrelax, periodicexternalforcing,
10560 $usingpcoords, usingzcoords, nonhydrostatic, globalfiles,
10561 $allowfreezing, groundatk1, usepickupbeforec35
10562 logical allowfreezing
10563 logical dosaltclimrelax
10564 logical dothetaclimrelax
10565 logical globalfiles
10566 logical groundatk1
10567 logical implicitdiffusion
10568 logical implicitfreesurface
10569 logical implicitviscosity
10570 logical metricterms
10571 logical momadvection
10572 logical momforcing
10573 logical mompressureforcing
10574 logical momstepping
10575 logical momviscosity
10576 logical no_slip_bottom
10577 logical no_slip_sides
10578 logical nonhydrostatic
10579 logical periodicexternalforcing
10580 logical rigidlid
10581 logical saltadvection
10582 logical saltdiffusion
10583 logical saltforcing
10584 logical saltstepping
10585 logical staggertimestep
10586 logical tempadvection
10587 logical tempdiffusion
10588 logical tempforcing
10589 logical tempstepping
10590 logical usebetaplanef
10591 logical useconstantf
10592 logical usecoriolis
10593 logical usepickupbeforec35
10594 logical usespheref
10595 logical usingcartesiangrid
10596 logical usingpcoords
10597 logical usingsphericalpolargrid
10598 logical usingsphericalpolarmterms
10599 logical usingzcoords
10600
10601 C==============================================
10602 C define arguments
10603 C==============================================
10604 integer myiter
10605 integer mythid
10606 double precision mytime
10607
10608 C==============================================
10609 C define local variables
10610 C==============================================
10611 integer bi
10612 integer bj
10613 integer imax
10614 integer imin
10615 integer jmax
10616 integer jmin
10617 integer k
10618 double precision phisurfx(1-olx:snx+olx,1-oly:sny+oly)
10619 double precision phisurfy(1-olx:snx+olx,1-oly:sny+oly)
10620
10621 C**********************************************
10622 C executable statements of routine
10623 C**********************************************
10624 do bj = mybylo(mythid), mybyhi(mythid)
10625 do bi = mybxlo(mythid), mybxhi(mythid)
10626 imin = 1-olx+1
10627 imax = snx+olx
10628 jmin = 1-oly+1
10629 jmax = sny+oly
10630 call calc_grad_phi_surf( bi,bj,imin,imax,jmin,jmax,etan,
10631 $phisurfx,phisurfy,mythid )
10632 do k = 1, nr
10633 if (momstepping) then
10634 call correction_step( bi,bj,imin,imax,jmin,jmax,k,
10635 $phisurfx,phisurfy,mytime,mythid )
10636 endif
10637 if (tempstepping) then
10638 call cycle_tracer( bi,bj,imin,imax,jmin,jmax,k,theta,gt,
10639 $gtnm1,mytime,mythid )
10640 endif
10641 if (saltstepping) then
10642 call cycle_tracer( bi,bj,imin,imax,jmin,jmax,k,salt,gs,
10643 $gsnm1,mytime,mythid )
10644 endif
10645 end do
10646 call mdconvective_adjustment( bi,bj,imin,imax,jmin,jmax,
10647 $mytime,myiter,mythid )
10648 end do
10649 end do
10650 end
10651
10652
10653 subroutine adthe_correction_step( mytime, mythid )
10654 C***************************************************************
10655 C***************************************************************
10656 C** This routine was generated by the **
10657 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
10658 C***************************************************************
10659 C***************************************************************
10660 C==============================================
10661 C all entries are defined explicitly
10662 C==============================================
10663 implicit none
10664
10665 C==============================================
10666 C define parameters
10667 C==============================================
10668 integer max_no_threads
10669 parameter ( max_no_threads = 32 )
10670 integer nr
10671 parameter ( nr = 15 )
10672 integer nsx
10673 parameter ( nsx = 1 )
10674 integer nsy
10675 parameter ( nsy = 1 )
10676 integer olx
10677 parameter ( olx = 3 )
10678 integer oly
10679 parameter ( oly = 3 )
10680 integer snx
10681 parameter ( snx = 20 )
10682 integer sny
10683 parameter ( sny = 40 )
10684
10685 C==============================================
10686 C define common blocks
10687 C==============================================
10688 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
10689 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
10690 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10691 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10692 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10693 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10694 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10695 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10696 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10697 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10698 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10699 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10700 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10701 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10702 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10703 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10704
10705 common /eeparams_i/ errormessageunit, standardmessageunit,
10706 $scrunit1, scrunit2, eedataunit, modeldataunit, numberofprocs,
10707 $pidio, myprocid, mypx, mypy, myxgloballo, myygloballo, nthreads,
10708 $mybxlo, mybxhi, mybylo, mybyhi, ntx, nty, ioerrorcount
10709 integer eedataunit
10710 integer errormessageunit
10711 integer ioerrorcount(max_no_threads)
10712 integer modeldataunit
10713 integer mybxhi(max_no_threads)
10714 integer mybxlo(max_no_threads)
10715 integer mybyhi(max_no_threads)
10716 integer mybylo(max_no_threads)
10717 integer myprocid
10718 integer mypx
10719 integer mypy
10720 integer myxgloballo
10721 integer myygloballo
10722 integer nthreads
10723 integer ntx
10724 integer nty
10725 integer numberofprocs
10726 integer pidio
10727 integer scrunit1
10728 integer scrunit2
10729 integer standardmessageunit
10730
10731 common /parm_l/ usingcartesiangrid, usingsphericalpolargrid,
10732 $no_slip_sides, no_slip_bottom, staggertimestep, momviscosity,
10733 $momadvection, momforcing, usecoriolis, mompressureforcing,
10734 $tempdiffusion, tempadvection, tempforcing, saltdiffusion,
10735 $saltadvection, saltforcing, implicitfreesurface, rigidlid,
10736 $momstepping, tempstepping, saltstepping, metricterms,
10737 $usingsphericalpolarmterms, useconstantf, usebetaplanef,
10738 $usespheref, implicitdiffusion, implicitviscosity,
10739 $dothetaclimrelax, dosaltclimrelax, periodicexternalforcing,
10740 $usingpcoords, usingzcoords, nonhydrostatic, globalfiles,
10741 $allowfreezing, groundatk1, usepickupbeforec35
10742 logical allowfreezing
10743 logical dosaltclimrelax
10744 logical dothetaclimrelax
10745 logical globalfiles
10746 logical groundatk1
10747 logical implicitdiffusion
10748 logical implicitfreesurface
10749 logical implicitviscosity
10750 logical metricterms
10751 logical momadvection
10752 logical momforcing
10753 logical mompressureforcing
10754 logical momstepping
10755 logical momviscosity
10756 logical no_slip_bottom
10757 logical no_slip_sides
10758 logical nonhydrostatic
10759 logical periodicexternalforcing
10760 logical rigidlid
10761 logical saltadvection
10762 logical saltdiffusion
10763 logical saltforcing
10764 logical saltstepping
10765 logical staggertimestep
10766 logical tempadvection
10767 logical tempdiffusion
10768 logical tempforcing
10769 logical tempstepping
10770 logical usebetaplanef
10771 logical useconstantf
10772 logical usecoriolis
10773 logical usepickupbeforec35
10774 logical usespheref
10775 logical usingcartesiangrid
10776 logical usingpcoords
10777 logical usingsphericalpolargrid
10778 logical usingsphericalpolarmterms
10779 logical usingzcoords
10780
10781 C==============================================
10782 C define arguments
10783 C==============================================
10784 integer mythid
10785 double precision mytime
10786
10787 C==============================================
10788 C define local variables
10789 C==============================================
10790 double precision adphisurfx(1-olx:snx+olx,1-oly:sny+oly)
10791 double precision adphisurfy(1-olx:snx+olx,1-oly:sny+oly)
10792 integer bi
10793 integer bj
10794 integer imax
10795 integer imin
10796 integer ip1
10797 integer ip2
10798 integer jmax
10799 integer jmin
10800 integer k
10801
10802 C----------------------------------------------
10803 C RESET LOCAL ADJOINT VARIABLES
10804 C----------------------------------------------
10805 do ip2 = 1-oly, sny+oly
10806 do ip1 = 1-olx, snx+olx
10807 adphisurfx(ip1,ip2) = 0.d0
10808 end do
10809 end do
10810 do ip2 = 1-oly, sny+oly
10811 do ip1 = 1-olx, snx+olx
10812 adphisurfy(ip1,ip2) = 0.d0
10813 end do
10814 end do
10815
10816 C----------------------------------------------
10817 C ROUTINE BODY
10818 C----------------------------------------------
10819 do bj = mybyhi(mythid), mybylo(mythid), -1
10820 do bi = mybxhi(mythid), mybxlo(mythid), -1
10821 imin = 1-olx+1
10822 imax = snx+olx
10823 jmin = 1-oly+1
10824 jmax = sny+oly
10825 call adconvective_adjustment( bi,bj,imin,imax,jmin,jmax,
10826 $mytime,mythid )
10827 do k = nr, 1, -1
10828 if (saltstepping) then
10829 call adcycle_tracer( bi,bj,imin,imax,jmin,jmax,k,adsalt,
10830 $adgs,adgsnm1 )
10831 endif
10832 if (tempstepping) then
10833 call adcycle_tracer( bi,bj,imin,imax,jmin,jmax,k,adtheta,
10834 $adgt,adgtnm1 )
10835 endif
10836 if (momstepping) then
10837 call adcorrection_step( bi,bj,imin,imax,jmin,jmax,k,
10838 $adphisurfx,adphisurfy )
10839 endif
10840 end do
10841 call adcalc_grad_phi_surf( bi,bj,imin,imax,jmin,jmax,adetan,
10842 $adphisurfx,adphisurfy )
10843 end do
10844 end do
10845
10846 end
10847
10848
10849 subroutine adthe_main_loop( mythid )
10850 C***************************************************************
10851 C***************************************************************
10852 C** This routine was generated by the **
10853 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
10854 C***************************************************************
10855 C***************************************************************
10856 C==============================================
10857 C all entries are defined explicitly
10858 C==============================================
10859 implicit none
10860
10861 C==============================================
10862 C define parameters
10863 C==============================================
10864 integer nchklev_1
10865 parameter ( nchklev_1 = 36 )
10866 integer nchklev_2
10867 parameter ( nchklev_2 = 30 )
10868 integer nchklev_3
10869 parameter ( nchklev_3 = 60 )
10870 integer npx
10871 parameter ( npx = 1 )
10872 integer npy
10873 parameter ( npy = 1 )
10874 integer nr
10875 parameter ( nr = 15 )
10876 integer nsx
10877 parameter ( nsx = 1 )
10878 integer nsy
10879 parameter ( nsy = 1 )
10880 integer snx
10881 parameter ( snx = 20 )
10882 integer nx
10883 parameter ( nx = snx*nsx*npx )
10884 integer sny
10885 parameter ( sny = 40 )
10886 integer ny
10887 parameter ( ny = sny*nsy*npy )
10888 integer olx
10889 parameter ( olx = 3 )
10890 integer oly
10891 parameter ( oly = 3 )
10892
10893 C==============================================
10894 C define common blocks
10895 C==============================================
10896 common /cost_r/ fc, objf_hflux, objf_sflux, objf_tauu, objf_tauv,
10897 $objf_hmean, objf_h, objf_temp, objf_salt, objf_sst, objf_atl,
10898 $objf_ctdt, objf_ctds, objf_test
10899 double precision fc
10900 double precision objf_atl(nsx,nsy)
10901 double precision objf_ctds(nsx,nsy)
10902 double precision objf_ctdt(nsx,nsy)
10903 double precision objf_h(nsx,nsy)
10904 double precision objf_hflux(nsx,nsy)
10905 double precision objf_hmean
10906 double precision objf_salt(nsx,nsy)
10907 double precision objf_sflux(nsx,nsy)
10908 double precision objf_sst(nsx,nsy)
10909 double precision objf_tauu(nsx,nsy)
10910 double precision objf_tauv(nsx,nsy)
10911 double precision objf_temp(nsx,nsy)
10912 double precision objf_test(nsx,nsy)
10913
10914 common /dynvars_cd/ uveld, vveld, etanm1, unm1, vnm1, gucd, gvcd
10915 double precision etanm1(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10916 double precision gucd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10917 double precision gvcd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10918 double precision unm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10919 double precision uveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10920 double precision vnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10921 double precision vveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10922
10923 common /dynvars_r/ etan, uvel, vvel, wvel, theta, salt, gu, gv,
10924 $gt, gs, gunm1, gvnm1, gtnm1, gsnm1
10925 double precision etan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
10926 double precision gs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10927 double precision gsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10928 double precision gt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10929 double precision gtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10930 double precision gu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10931 double precision gunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10932 double precision gv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10933 double precision gvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10934 double precision salt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10935 double precision theta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10936 double precision uvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10937 double precision vvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10938 double precision wvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
10939
10940 common /parm_i/ cg2dmaxiters, cg2dchkresfreq, cg3dmaxiters,
10941 $cg3dchkresfreq, niter0, ntimesteps, nenditer, numstepsperpickup,
10942 $writestateprec, nchecklev, writebinaryprec, readbinaryprec, nshap,
10943 $ zonal_filt_sinpow, zonal_filt_cospow
10944 integer cg2dchkresfreq
10945 integer cg2dmaxiters
10946 integer cg3dchkresfreq
10947 integer cg3dmaxiters
10948 integer nchecklev
10949 integer nenditer
10950 integer niter0
10951 integer nshap
10952 integer ntimesteps
10953 integer numstepsperpickup
10954 integer readbinaryprec
10955 integer writebinaryprec
10956 integer writestateprec
10957 integer zonal_filt_cospow
10958 integer zonal_filt_sinpow
10959
10960 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
10961 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
10962 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
10963 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
10964 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
10965 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
10966 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
10967 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
10968 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
10969 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
10970 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
10971 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
10972 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
10973 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
10974 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
10975 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
10976 double precision abeps
10977 double precision affacmom
10978 double precision beta
10979 double precision bottomdraglinear
10980 double precision bottomdragquadratic
10981 double precision cadjfreq
10982 double precision cffacmom
10983 double precision cg2dpcoffdfac
10984 double precision cg2dtargetresidual
10985 double precision cg3dtargetresidual
10986 double precision chkptfreq
10987 double precision cospower
10988 double precision delp(nr)
10989 double precision delr(nr)
10990 double precision delt
10991 double precision deltat
10992 double precision deltatclock
10993 double precision deltatmom
10994 double precision deltattracer
10995 double precision delx(nx)
10996 double precision dely(ny)
10997 double precision delz(nr)
10998 double precision diffk4s
10999 double precision diffk4t
11000 double precision diffkhs
11001 double precision diffkht
11002 double precision diffkps
11003 double precision diffkpt
11004 double precision diffkrs
11005 double precision diffkrt
11006 double precision diffkzs
11007 double precision diffkzt
11008 double precision dumpfreq
11009 double precision endtime
11010 double precision externforcingcycle
11011 double precision externforcingperiod
11012 double precision f0
11013 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11014 double precision fofacmom
11015 double precision freesurffac
11016 double precision gbaro
11017 double precision gravity
11018 double precision hfacmin
11019 double precision hfacmindp
11020 double precision hfacmindr
11021 double precision hfacmindz
11022 double precision horivertratio
11023 double precision implicdiv2dflow
11024 double precision implicsurfpress
11025 double precision ivdc_kappa
11026 double precision lambdasaltclimrelax
11027 double precision lambdathetaclimrelax
11028 double precision latfftfiltlo
11029 double precision mtfacmom
11030 double precision omega
11031 double precision pchkptfreq
11032 double precision pffacmom
11033 double precision phimin
11034 double precision rcd
11035 double precision recip_gravity
11036 double precision recip_horivertratio
11037 double precision recip_rhoconst
11038 double precision recip_rhonil
11039 double precision recip_rsphere
11040 double precision rhoconst
11041 double precision rhonil
11042 double precision ro_sealevel
11043 double precision rsphere
11044 double precision specvol_s(nr)
11045 double precision sref(nr)
11046 double precision starttime
11047 double precision taucd
11048 double precision tausaltclimrelax
11049 double precision tauthetaclimrelax
11050 double precision tavefreq
11051 double precision theta_s(nr)
11052 double precision thetamin
11053 double precision tref(nr)
11054 double precision vffacmom
11055 double precision visca4
11056 double precision viscah
11057 double precision viscap
11058 double precision viscar
11059 double precision viscaz
11060 double precision zonal_filt_lat
11061
11062 common /tamc_keys_i/ ikey_dynamics, ikey_yearly, ikey_daily_1,
11063 $ikey_daily_2, iloop_daily
11064 integer ikey_daily_1
11065 integer ikey_daily_2
11066 integer ikey_dynamics
11067 integer ikey_yearly
11068 integer iloop_daily
11069
11070 C==============================================
11071 C define arguments
11072 C==============================================
11073 integer mythid
11074
11075 C==============================================
11076 C define local variables
11077 C==============================================
11078 double precision fch
11079 integer ilev_1
11080 integer ilev_2
11081 integer ilev_3
11082 integer iloop
11083 integer max_lev2
11084 integer max_lev3
11085 integer myiter
11086 double precision mytime
11087
11088 C----------------------------------------------
11089 C RESET GLOBAL ADJOINT VARIABLES
11090 C----------------------------------------------
11091 call adzero
11092
11093 C----------------------------------------------
11094 C ROUTINE BODY
11095 C----------------------------------------------
11096 C----------------------------------------------
11097 C OPEN FILES OF TAPE: tapelev3
11098 C----------------------------------------------
11099 call adopen( 'tapelev3_1_the_main_loop_gsnm1',30,8,1,8,17940 )
11100 call adopen( 'tapelev3_2_the_main_loop_gtnm1',30,8,2,8,17940 )
11101 call adopen( 'tapelev3_3_the_main_loop_gunm1',30,8,3,8,17940 )
11102 call adopen( 'tapelev3_4_the_main_loop_gvnm1',30,8,4,8,17940 )
11103 call adopen( 'tapelev3_5_the_main_loop_theta',30,8,5,8,17940 )
11104 call adopen( 'tapelev3_6_the_main_loop_salt',29,8,6,8,17940 )
11105 call adopen( 'tapelev3_7_the_main_loop_uvel',29,8,7,8,17940 )
11106 call adopen( 'tapelev3_8_the_main_loop_vvel',29,8,8,8,17940 )
11107 call adopen( 'tapelev3_9_the_main_loop_wvel',29,8,9,8,17940 )
11108 call adopen( 'tapelev3_10_the_main_loop_etan',30,8,10,8,1196 )
11109 call adopen( 'tapelev3_11_the_main_loop_etanm1',32,8,11,8,1196 )
11110 call adopen( 'tapelev3_12_the_main_loop_uveld',31,8,12,8,17940 )
11111 call adopen( 'tapelev3_13_the_main_loop_vveld',31,8,13,8,17940 )
11112 call adopen( 'tapelev3_14_the_main_loop_unm1',30,8,14,8,17940 )
11113 call adopen( 'tapelev3_15_the_main_loop_vnm1',30,8,15,8,17940 )
11114
11115 C----------------------------------------------
11116 C FUNCTION AND TAPE COMPUTATIONS
11117 C----------------------------------------------
11118 ikey_dynamics = 1
11119 call initialise_varia( mythid )
11120 call ctrl_map_forcing( mythid )
11121 call barrier( mythid )
11122 max_lev3 = ntimesteps/(nchklev_1*nchklev_2)+1
11123 max_lev2 = ntimesteps/nchklev_1+1
11124 do ilev_3 = 1, nchklev_3
11125 if (ilev_3 .le. max_lev3) then
11126 call adwrite( 'tapelev3_1_the_main_loop_gsnm1',30,8,1,gsnm1,8,
11127 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11128 call adwrite( 'tapelev3_2_the_main_loop_gtnm1',30,8,2,gtnm1,8,
11129 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11130 call adwrite( 'tapelev3_3_the_main_loop_gunm1',30,8,3,gunm1,8,
11131 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11132 call adwrite( 'tapelev3_4_the_main_loop_gvnm1',30,8,4,gvnm1,8,
11133 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11134 call adwrite( 'tapelev3_5_the_main_loop_theta',30,8,5,theta,8,
11135 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11136 call adwrite( 'tapelev3_6_the_main_loop_salt',29,8,6,salt,8,
11137 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11138 call adwrite( 'tapelev3_7_the_main_loop_uvel',29,8,7,uvel,8,
11139 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11140 call adwrite( 'tapelev3_8_the_main_loop_vvel',29,8,8,vvel,8,
11141 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11142 call adwrite( 'tapelev3_9_the_main_loop_wvel',29,8,9,wvel,8,
11143 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11144 call adwrite( 'tapelev3_10_the_main_loop_etan',30,8,10,etan,8,
11145 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nsx*nsy,ilev_3 )
11146 call adwrite( 'tapelev3_11_the_main_loop_etanm1',32,8,11,
11147 $etanm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nsx*nsy,ilev_3 )
11148 call adwrite( 'tapelev3_12_the_main_loop_uveld',31,8,12,uveld,
11149 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11150 call adwrite( 'tapelev3_13_the_main_loop_vveld',31,8,13,vveld,
11151 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11152 call adwrite( 'tapelev3_14_the_main_loop_unm1',30,8,14,unm1,8,
11153 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11154 call adwrite( 'tapelev3_15_the_main_loop_vnm1',30,8,15,vnm1,8,
11155 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11156 do ilev_2 = 1, nchklev_2
11157 if (ilev_2 .le. max_lev2) then
11158 do ilev_1 = 1, nchklev_1
11159 iloop = (ilev_3-1)*nchklev_2*nchklev_1+(ilev_2-1)*
11160 $nchklev_1+ilev_1
11161 if (iloop .le. ntimesteps) then
11162 myiter = niter0+iloop-1
11163 mytime = starttime+float(iloop-1)*deltatclock
11164 ikey_dynamics = ilev_1
11165 call dynamics( mytime,myiter,mythid )
11166 call solve_for_pressure( mythid )
11167 call dummy_in_stepping( mytime,myiter,mythid )
11168 mytime = starttime+deltatclock*float(iloop)
11169 call the_correction_step( mytime,myiter,mythid )
11170 call do_fields_blocking_exchanges( mythid )
11171 endif
11172 end do
11173 endif
11174 end do
11175 endif
11176 end do
11177 call barrier( mythid )
11178 call cost_test( mythid )
11179 call cost_final( mythid )
11180
11181 C----------------------------------------------
11182 C SAVE DEPENDEND VARIABLES
11183 C----------------------------------------------
11184 fch = fc
11185
11186 C----------------------------------------------
11187 C ADJOINT COMPUTATIONS
11188 C----------------------------------------------
11189 call barrier( mythid )
11190 do ilev_3 = 1, nchklev_3
11191 if (ilev_3 .le. max_lev3) then
11192 do ilev_2 = 1, nchklev_2
11193 if (ilev_2 .le. max_lev2) then
11194 do ilev_1 = 1, nchklev_1
11195 iloop = (ilev_3-1)*nchklev_2*nchklev_1+(ilev_2-1)*
11196 $nchklev_1+ilev_1
11197 if (iloop .le. ntimesteps) then
11198 myiter = niter0+iloop-1
11199 mytime = starttime+float(iloop-1)*deltatclock
11200 call dummy_in_stepping( mytime,myiter,mythid )
11201 endif
11202 end do
11203 endif
11204 end do
11205 endif
11206 end do
11207 call barrier( mythid )
11208 call adcost_final( mythid )
11209 call adcost_test( mythid )
11210 call barrier( mythid )
11211 do ilev_3 = nchklev_3, 1, -1
11212 if (ilev_3 .le. max_lev3) then
11213 call adread( 'tapelev3_1_the_main_loop_gsnm1',30,8,1,gsnm1,8,
11214 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11215 call adread( 'tapelev3_2_the_main_loop_gtnm1',30,8,2,gtnm1,8,
11216 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11217 call adread( 'tapelev3_3_the_main_loop_gunm1',30,8,3,gunm1,8,
11218 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11219 call adread( 'tapelev3_4_the_main_loop_gvnm1',30,8,4,gvnm1,8,
11220 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11221 call adread( 'tapelev3_5_the_main_loop_theta',30,8,5,theta,8,
11222 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11223 call adread( 'tapelev3_6_the_main_loop_salt',29,8,6,salt,8,(1+
11224 $snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11225 call adread( 'tapelev3_7_the_main_loop_uvel',29,8,7,uvel,8,(1+
11226 $snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11227 call adread( 'tapelev3_8_the_main_loop_vvel',29,8,8,vvel,8,(1+
11228 $snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11229 call adread( 'tapelev3_9_the_main_loop_wvel',29,8,9,wvel,8,(1+
11230 $snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11231 call adread( 'tapelev3_10_the_main_loop_etan',30,8,10,etan,8,
11232 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nsx*nsy,ilev_3 )
11233 call adread( 'tapelev3_11_the_main_loop_etanm1',32,8,11,
11234 $etanm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nsx*nsy,ilev_3 )
11235 call adread( 'tapelev3_12_the_main_loop_uveld',31,8,12,uveld,
11236 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11237 call adread( 'tapelev3_13_the_main_loop_vveld',31,8,13,vveld,
11238 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11239 call adread( 'tapelev3_14_the_main_loop_unm1',30,8,14,unm1,8,
11240 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11241 call adread( 'tapelev3_15_the_main_loop_vnm1',30,8,15,vnm1,8,
11242 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_3 )
11243 C----------------------------------------------
11244 C OPEN FILES OF TAPE: tapelev2
11245 C----------------------------------------------
11246 call adopen( 'tapelev2_1_the_main_loop_gsnm1',30,9,1,8,17940 )
11247 call adopen( 'tapelev2_2_the_main_loop_gtnm1',30,9,2,8,17940 )
11248 call adopen( 'tapelev2_3_the_main_loop_gunm1',30,9,3,8,17940 )
11249 call adopen( 'tapelev2_4_the_main_loop_gvnm1',30,9,4,8,17940 )
11250 call adopen( 'tapelev2_5_the_main_loop_theta',30,9,5,8,17940 )
11251 call adopen( 'tapelev2_6_the_main_loop_salt',29,9,6,8,17940 )
11252 call adopen( 'tapelev2_7_the_main_loop_uvel',29,9,7,8,17940 )
11253 call adopen( 'tapelev2_8_the_main_loop_vvel',29,9,8,8,17940 )
11254 call adopen( 'tapelev2_9_the_main_loop_wvel',29,9,9,8,17940 )
11255 call adopen( 'tapelev2_10_the_main_loop_etan',30,9,10,8,1196 )
11256 call adopen( 'tapelev2_11_the_main_loop_etanm1',32,9,11,8,
11257 $1196 )
11258 call adopen( 'tapelev2_12_the_main_loop_uveld',31,9,12,8,
11259 $17940 )
11260 call adopen( 'tapelev2_13_the_main_loop_vveld',31,9,13,8,
11261 $17940 )
11262 call adopen( 'tapelev2_14_the_main_loop_unm1',30,9,14,8,17940
11263 $)
11264 call adopen( 'tapelev2_15_the_main_loop_vnm1',30,9,15,8,17940
11265 $)
11266
11267 C----------------------------------------------
11268 C TAPE COMPUTATIONS
11269 C----------------------------------------------
11270 do ilev_2 = 1, nchklev_2-1
11271 if (ilev_2 .le. max_lev2) then
11272 call adwrite( 'tapelev2_1_the_main_loop_gsnm1',30,9,1,
11273 $gsnm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11274 $)
11275 call adwrite( 'tapelev2_2_the_main_loop_gtnm1',30,9,2,
11276 $gtnm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11277 $)
11278 call adwrite( 'tapelev2_3_the_main_loop_gunm1',30,9,3,
11279 $gunm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11280 $)
11281 call adwrite( 'tapelev2_4_the_main_loop_gvnm1',30,9,4,
11282 $gvnm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11283 $)
11284 call adwrite( 'tapelev2_5_the_main_loop_theta',30,9,5,
11285 $theta,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11286 $)
11287 call adwrite( 'tapelev2_6_the_main_loop_salt',29,9,6,salt,
11288 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11289 call adwrite( 'tapelev2_7_the_main_loop_uvel',29,9,7,uvel,
11290 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11291 call adwrite( 'tapelev2_8_the_main_loop_vvel',29,9,8,vvel,
11292 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11293 call adwrite( 'tapelev2_9_the_main_loop_wvel',29,9,9,wvel,
11294 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11295 call adwrite( 'tapelev2_10_the_main_loop_etan',30,9,10,
11296 $etan,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nsx*nsy,ilev_2 )
11297 call adwrite( 'tapelev2_11_the_main_loop_etanm1',32,9,11,
11298 $etanm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nsx*nsy,ilev_2 )
11299 call adwrite( 'tapelev2_12_the_main_loop_uveld',31,9,12,
11300 $uveld,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11301 $)
11302 call adwrite( 'tapelev2_13_the_main_loop_vveld',31,9,13,
11303 $vveld,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11304 $)
11305 call adwrite( 'tapelev2_14_the_main_loop_unm1',30,9,14,
11306 $unm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11307 call adwrite( 'tapelev2_15_the_main_loop_vnm1',30,9,15,
11308 $vnm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11309 do ilev_1 = 1, nchklev_1
11310 iloop = (ilev_3-1)*nchklev_2*nchklev_1+(ilev_2-1)*
11311 $nchklev_1+ilev_1
11312 if (iloop .le. ntimesteps) then
11313 myiter = niter0+iloop-1
11314 mytime = starttime+float(iloop-1)*deltatclock
11315 ikey_dynamics = ilev_1
11316 call dynamics( mytime,myiter,mythid )
11317 call solve_for_pressure( mythid )
11318 call dummy_in_stepping( mytime,myiter,mythid )
11319 mytime = starttime+deltatclock*float(iloop)
11320 call the_correction_step( mytime,myiter,mythid )
11321 call do_fields_blocking_exchanges( mythid )
11322 endif
11323 end do
11324 endif
11325 end do
11326 ilev_2 = nchklev_2
11327 if (ilev_2 .le. max_lev2) then
11328 call adwrite( 'tapelev2_1_the_main_loop_gsnm1',30,9,1,gsnm1,
11329 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11330 call adwrite( 'tapelev2_2_the_main_loop_gtnm1',30,9,2,gtnm1,
11331 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11332 call adwrite( 'tapelev2_3_the_main_loop_gunm1',30,9,3,gunm1,
11333 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11334 call adwrite( 'tapelev2_4_the_main_loop_gvnm1',30,9,4,gvnm1,
11335 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11336 call adwrite( 'tapelev2_5_the_main_loop_theta',30,9,5,theta,
11337 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11338 call adwrite( 'tapelev2_6_the_main_loop_salt',29,9,6,salt,8,
11339 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11340 call adwrite( 'tapelev2_7_the_main_loop_uvel',29,9,7,uvel,8,
11341 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11342 call adwrite( 'tapelev2_8_the_main_loop_vvel',29,9,8,vvel,8,
11343 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11344 call adwrite( 'tapelev2_9_the_main_loop_wvel',29,9,9,wvel,8,
11345 $(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11346 call adwrite( 'tapelev2_10_the_main_loop_etan',30,9,10,etan,
11347 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nsx*nsy,ilev_2 )
11348 call adwrite( 'tapelev2_11_the_main_loop_etanm1',32,9,11,
11349 $etanm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nsx*nsy,ilev_2 )
11350 call adwrite( 'tapelev2_12_the_main_loop_uveld',31,9,12,
11351 $uveld,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11352 $)
11353 call adwrite( 'tapelev2_13_the_main_loop_vveld',31,9,13,
11354 $vveld,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11355 $)
11356 call adwrite( 'tapelev2_14_the_main_loop_unm1',30,9,14,unm1,
11357 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11358 call adwrite( 'tapelev2_15_the_main_loop_vnm1',30,9,15,vnm1,
11359 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11360 do ilev_1 = 1, nchklev_1
11361 iloop = (ilev_3-1)*nchklev_2*nchklev_1+(ilev_2-1)*
11362 $nchklev_1+ilev_1
11363 if (iloop .le. ntimesteps) then
11364 myiter = niter0+iloop-1
11365 mytime = starttime+float(iloop-1)*deltatclock
11366 call dummy_in_stepping( mytime,myiter,mythid )
11367 endif
11368 end do
11369 endif
11370
11371 C----------------------------------------------
11372 C ADJOINT COMPUTATIONS
11373 C----------------------------------------------
11374 do ilev_2 = nchklev_2, 1, -1
11375 if (ilev_2 .le. max_lev2) then
11376 call adread( 'tapelev2_1_the_main_loop_gsnm1',30,9,1,
11377 $gsnm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11378 $)
11379 call adread( 'tapelev2_2_the_main_loop_gtnm1',30,9,2,
11380 $gtnm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11381 $)
11382 call adread( 'tapelev2_3_the_main_loop_gunm1',30,9,3,
11383 $gunm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11384 $)
11385 call adread( 'tapelev2_4_the_main_loop_gvnm1',30,9,4,
11386 $gvnm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11387 $)
11388 call adread( 'tapelev2_5_the_main_loop_theta',30,9,5,
11389 $theta,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11390 $)
11391 call adread( 'tapelev2_6_the_main_loop_salt',29,9,6,salt,
11392 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11393 call adread( 'tapelev2_7_the_main_loop_uvel',29,9,7,uvel,
11394 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11395 call adread( 'tapelev2_8_the_main_loop_vvel',29,9,8,vvel,
11396 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11397 call adread( 'tapelev2_9_the_main_loop_wvel',29,9,9,wvel,
11398 $8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11399 call adread( 'tapelev2_10_the_main_loop_etan',30,9,10,
11400 $etan,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nsx*nsy,ilev_2 )
11401 call adread( 'tapelev2_11_the_main_loop_etanm1',32,9,11,
11402 $etanm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nsx*nsy,ilev_2 )
11403 call adread( 'tapelev2_12_the_main_loop_uveld',31,9,12,
11404 $uveld,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11405 $)
11406 call adread( 'tapelev2_13_the_main_loop_vveld',31,9,13,
11407 $vveld,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2
11408 $)
11409 call adread( 'tapelev2_14_the_main_loop_unm1',30,9,14,
11410 $unm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11411 call adread( 'tapelev2_15_the_main_loop_vnm1',30,9,15,
11412 $vnm1,8,(1+snx+olx-(1-olx))*(1+sny+oly-(1-oly))*nr*nsx*nsy,ilev_2 )
11413 C----------------------------------------------
11414 C TAPE COMPUTATIONS
11415 C----------------------------------------------
11416 do ilev_1 = 1, nchklev_1
11417 iloop = (ilev_3-1)*nchklev_2*nchklev_1+(ilev_2-1)*
11418 $nchklev_1+ilev_1
11419 if (iloop .le. ntimesteps) then
11420 myiter = niter0+iloop-1
11421 mytime = starttime+float(iloop-1)*deltatclock
11422 ikey_dynamics = ilev_1
11423 call mddynamics( mytime,myiter,mythid )
11424 call solve_for_pressure( mythid )
11425 call dummy_in_stepping( mytime,myiter,mythid )
11426 mytime = starttime+deltatclock*float(iloop)
11427 call mdthe_correction_step( mytime,myiter,mythid )
11428 call do_fields_blocking_exchanges( mythid )
11429 endif
11430 end do
11431
11432 C----------------------------------------------
11433 C ADJOINT COMPUTATIONS
11434 C----------------------------------------------
11435 do ilev_1 = nchklev_1, 1, -1
11436 iloop = (ilev_3-1)*nchklev_2*nchklev_1+(ilev_2-1)*
11437 $nchklev_1+ilev_1
11438 if (iloop .le. ntimesteps) then
11439 myiter = niter0+iloop-1
11440 mytime = starttime+float(iloop-1)*deltatclock
11441 ikey_dynamics = ilev_1
11442 call dummy_in_stepping( mytime,myiter,mythid )
11443 mytime = starttime+deltatclock*float(iloop)
11444 call addo_fields_blocking_exchanges( mythid )
11445 call adthe_correction_step( mytime,mythid )
11446 mytime = starttime+float(iloop-1)*deltatclock
11447 call addummy_in_stepping( mytime,myiter,mythid )
11448 call adsolve_for_pressure( mythid )
11449 call addynamics( mythid )
11450 endif
11451 end do
11452
11453 endif
11454 end do
11455
11456 C----------------------------------------------
11457 C CLOSE FILES OF TAPE: tapelev2
11458 C----------------------------------------------
11459 call adclose( 'tapelev2_1_the_main_loop_gsnm1',30,9,1,8,17940
11460 $)
11461 call adclose( 'tapelev2_2_the_main_loop_gtnm1',30,9,2,8,17940
11462 $)
11463 call adclose( 'tapelev2_3_the_main_loop_gunm1',30,9,3,8,17940
11464 $)
11465 call adclose( 'tapelev2_4_the_main_loop_gvnm1',30,9,4,8,17940
11466 $)
11467 call adclose( 'tapelev2_5_the_main_loop_theta',30,9,5,8,17940
11468 $)
11469 call adclose( 'tapelev2_6_the_main_loop_salt',29,9,6,8,17940 )
11470 call adclose( 'tapelev2_7_the_main_loop_uvel',29,9,7,8,17940 )
11471 call adclose( 'tapelev2_8_the_main_loop_vvel',29,9,8,8,17940 )
11472 call adclose( 'tapelev2_9_the_main_loop_wvel',29,9,9,8,17940 )
11473 call adclose( 'tapelev2_10_the_main_loop_etan',30,9,10,8,1196
11474 $)
11475 call adclose( 'tapelev2_11_the_main_loop_etanm1',32,9,11,8,
11476 $1196 )
11477 call adclose( 'tapelev2_12_the_main_loop_uveld',31,9,12,8,
11478 $17940 )
11479 call adclose( 'tapelev2_13_the_main_loop_vveld',31,9,13,8,
11480 $17940 )
11481 call adclose( 'tapelev2_14_the_main_loop_unm1',30,9,14,8,
11482 $17940 )
11483 call adclose( 'tapelev2_15_the_main_loop_vnm1',30,9,15,8,
11484 $17940 )
11485
11486 endif
11487 end do
11488 call barrier( mythid )
11489 call adctrl_map_forcing( mythid )
11490 ikey_dynamics = 1
11491 call adinitialise_varia( mythid )
11492
11493 C----------------------------------------------
11494 C CLOSE FILES OF TAPE: tapelev3
11495 C----------------------------------------------
11496 call adclose( 'tapelev3_1_the_main_loop_gsnm1',30,8,1,8,17940 )
11497 call adclose( 'tapelev3_2_the_main_loop_gtnm1',30,8,2,8,17940 )
11498 call adclose( 'tapelev3_3_the_main_loop_gunm1',30,8,3,8,17940 )
11499 call adclose( 'tapelev3_4_the_main_loop_gvnm1',30,8,4,8,17940 )
11500 call adclose( 'tapelev3_5_the_main_loop_theta',30,8,5,8,17940 )
11501 call adclose( 'tapelev3_6_the_main_loop_salt',29,8,6,8,17940 )
11502 call adclose( 'tapelev3_7_the_main_loop_uvel',29,8,7,8,17940 )
11503 call adclose( 'tapelev3_8_the_main_loop_vvel',29,8,8,8,17940 )
11504 call adclose( 'tapelev3_9_the_main_loop_wvel',29,8,9,8,17940 )
11505 call adclose( 'tapelev3_10_the_main_loop_etan',30,8,10,8,1196 )
11506 call adclose( 'tapelev3_11_the_main_loop_etanm1',32,8,11,8,1196 )
11507 call adclose( 'tapelev3_12_the_main_loop_uveld',31,8,12,8,17940 )
11508 call adclose( 'tapelev3_13_the_main_loop_vveld',31,8,13,8,17940 )
11509 call adclose( 'tapelev3_14_the_main_loop_unm1',30,8,14,8,17940 )
11510 call adclose( 'tapelev3_15_the_main_loop_vnm1',30,8,15,8,17940 )
11511
11512 C----------------------------------------------
11513 C GET DEPENDEND VARIABLES
11514 C----------------------------------------------
11515 fc = fch
11516
11517
11518 end
11519
11520
11521 subroutine adtimestep( bi, bj, imin, imax, jmin, jmax, k,
11522 $adphihyd, adphisurfx, adphisurfy )
11523 C***************************************************************
11524 C***************************************************************
11525 C** This routine was generated by the **
11526 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
11527 C***************************************************************
11528 C***************************************************************
11529 C==============================================
11530 C all entries are defined explicitly
11531 C==============================================
11532 implicit none
11533
11534 C==============================================
11535 C define parameters
11536 C==============================================
11537 integer npx
11538 parameter ( npx = 1 )
11539 integer npy
11540 parameter ( npy = 1 )
11541 integer nr
11542 parameter ( nr = 15 )
11543 integer nsx
11544 parameter ( nsx = 1 )
11545 integer nsy
11546 parameter ( nsy = 1 )
11547 integer snx
11548 parameter ( snx = 20 )
11549 integer nx
11550 parameter ( nx = snx*nsx*npx )
11551 integer sny
11552 parameter ( sny = 40 )
11553 integer ny
11554 parameter ( ny = sny*nsy*npy )
11555 integer olx
11556 parameter ( olx = 3 )
11557 integer oly
11558 parameter ( oly = 3 )
11559
11560 C==============================================
11561 C define common blocks
11562 C==============================================
11563 common /addynvars_cd/ aduveld, advveld, adetanm1, adunm1, advnm1,
11564 $adgucd, adgvcd
11565 double precision adetanm1(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11566 double precision adgucd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11567 double precision adgvcd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11568 double precision adunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11569 double precision aduveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11570 double precision advnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11571 double precision advveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11572
11573 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
11574 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
11575 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11576 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11577 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11578 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11579 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11580 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11581 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11582 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11583 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11584 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11585 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11586 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11587 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11588 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
11589
11590 common /grid_r/ dxc, dxf, dxg, dxv, dyc, dyf, dyg, dyu, drc, drf,
11591 $h, hfacc, hfacw, hfacs, depthink, recip_dxc, recip_dxf, recip_dxg,
11592 $ recip_dxv, recip_dyc, recip_dyf, recip_dyg, recip_dyu, recip_drc,
11593 $ recip_drf, recip_h, recip_hfacc, recip_hfacw, recip_hfacs, rkfac,
11594 $ recip_rkfac, safac, xc, yc, ra, raw, ras, raz, rc, rf, yc0, xc0,
11595 $xg, yg, maskw, masks, recip_ra, recip_raw, recip_ras, recip_raz,
11596 $tanphiatu, tanphiatv
11597 double precision depthink(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11598 double precision drc(1:nr)
11599 double precision drf(1:nr)
11600 double precision dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11601 double precision dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11602 double precision dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11603 double precision dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11604 double precision dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11605 double precision dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11606 double precision dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11607 double precision dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11608 double precision h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11609 double precision hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
11610 double precision hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
11611 double precision hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
11612 double precision masks(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
11613 double precision maskw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,nsy)
11614 double precision ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11615 double precision ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11616 double precision raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11617 double precision raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11618 double precision rc(1:nr)
11619 double precision recip_drc(1:nr)
11620 double precision recip_drf(1:nr)
11621 double precision recip_dxc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11622 double precision recip_dxf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11623 double precision recip_dxg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11624 double precision recip_dxv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11625 double precision recip_dyc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11626 double precision recip_dyf(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11627 double precision recip_dyg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11628 double precision recip_dyu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11629 double precision recip_h(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11630 double precision recip_hfacc(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
11631 $nsy)
11632 double precision recip_hfacs(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
11633 $nsy)
11634 double precision recip_hfacw(1-olx:snx+olx,1-oly:sny+oly,1:nr,nsx,
11635 $nsy)
11636 double precision recip_ra(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11637 double precision recip_ras(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11638 double precision recip_raw(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11639 double precision recip_raz(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11640 double precision recip_rkfac
11641 double precision rf(1:nr+1)
11642 double precision rkfac
11643 double precision safac(1:nr)
11644 double precision tanphiatu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11645 double precision tanphiatv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11646 double precision xc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11647 double precision xc0
11648 double precision xg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11649 double precision yc(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11650 double precision yc0
11651 double precision yg(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11652
11653 common /parm_l/ usingcartesiangrid, usingsphericalpolargrid,
11654 $no_slip_sides, no_slip_bottom, staggertimestep, momviscosity,
11655 $momadvection, momforcing, usecoriolis, mompressureforcing,
11656 $tempdiffusion, tempadvection, tempforcing, saltdiffusion,
11657 $saltadvection, saltforcing, implicitfreesurface, rigidlid,
11658 $momstepping, tempstepping, saltstepping, metricterms,
11659 $usingsphericalpolarmterms, useconstantf, usebetaplanef,
11660 $usespheref, implicitdiffusion, implicitviscosity,
11661 $dothetaclimrelax, dosaltclimrelax, periodicexternalforcing,
11662 $usingpcoords, usingzcoords, nonhydrostatic, globalfiles,
11663 $allowfreezing, groundatk1, usepickupbeforec35
11664 logical allowfreezing
11665 logical dosaltclimrelax
11666 logical dothetaclimrelax
11667 logical globalfiles
11668 logical groundatk1
11669 logical implicitdiffusion
11670 logical implicitfreesurface
11671 logical implicitviscosity
11672 logical metricterms
11673 logical momadvection
11674 logical momforcing
11675 logical mompressureforcing
11676 logical momstepping
11677 logical momviscosity
11678 logical no_slip_bottom
11679 logical no_slip_sides
11680 logical nonhydrostatic
11681 logical periodicexternalforcing
11682 logical rigidlid
11683 logical saltadvection
11684 logical saltdiffusion
11685 logical saltforcing
11686 logical saltstepping
11687 logical staggertimestep
11688 logical tempadvection
11689 logical tempdiffusion
11690 logical tempforcing
11691 logical tempstepping
11692 logical usebetaplanef
11693 logical useconstantf
11694 logical usecoriolis
11695 logical usepickupbeforec35
11696 logical usespheref
11697 logical usingcartesiangrid
11698 logical usingpcoords
11699 logical usingsphericalpolargrid
11700 logical usingsphericalpolarmterms
11701 logical usingzcoords
11702
11703 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
11704 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
11705 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
11706 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
11707 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
11708 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
11709 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
11710 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
11711 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
11712 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
11713 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
11714 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
11715 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
11716 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
11717 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
11718 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
11719 double precision abeps
11720 double precision affacmom
11721 double precision beta
11722 double precision bottomdraglinear
11723 double precision bottomdragquadratic
11724 double precision cadjfreq
11725 double precision cffacmom
11726 double precision cg2dpcoffdfac
11727 double precision cg2dtargetresidual
11728 double precision cg3dtargetresidual
11729 double precision chkptfreq
11730 double precision cospower
11731 double precision delp(nr)
11732 double precision delr(nr)
11733 double precision delt
11734 double precision deltat
11735 double precision deltatclock
11736 double precision deltatmom
11737 double precision deltattracer
11738 double precision delx(nx)
11739 double precision dely(ny)
11740 double precision delz(nr)
11741 double precision diffk4s
11742 double precision diffk4t
11743 double precision diffkhs
11744 double precision diffkht
11745 double precision diffkps
11746 double precision diffkpt
11747 double precision diffkrs
11748 double precision diffkrt
11749 double precision diffkzs
11750 double precision diffkzt
11751 double precision dumpfreq
11752 double precision endtime
11753 double precision externforcingcycle
11754 double precision externforcingperiod
11755 double precision f0
11756 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11757 double precision fofacmom
11758 double precision freesurffac
11759 double precision gbaro
11760 double precision gravity
11761 double precision hfacmin
11762 double precision hfacmindp
11763 double precision hfacmindr
11764 double precision hfacmindz
11765 double precision horivertratio
11766 double precision implicdiv2dflow
11767 double precision implicsurfpress
11768 double precision ivdc_kappa
11769 double precision lambdasaltclimrelax
11770 double precision lambdathetaclimrelax
11771 double precision latfftfiltlo
11772 double precision mtfacmom
11773 double precision omega
11774 double precision pchkptfreq
11775 double precision pffacmom
11776 double precision phimin
11777 double precision rcd
11778 double precision recip_gravity
11779 double precision recip_horivertratio
11780 double precision recip_rhoconst
11781 double precision recip_rhonil
11782 double precision recip_rsphere
11783 double precision rhoconst
11784 double precision rhonil
11785 double precision ro_sealevel
11786 double precision rsphere
11787 double precision specvol_s(nr)
11788 double precision sref(nr)
11789 double precision starttime
11790 double precision taucd
11791 double precision tausaltclimrelax
11792 double precision tauthetaclimrelax
11793 double precision tavefreq
11794 double precision theta_s(nr)
11795 double precision thetamin
11796 double precision tref(nr)
11797 double precision vffacmom
11798 double precision visca4
11799 double precision viscah
11800 double precision viscap
11801 double precision viscar
11802 double precision viscaz
11803 double precision zonal_filt_lat
11804
11805 C==============================================
11806 C define arguments
11807 C==============================================
11808 double precision adphihyd(1-olx:snx+olx,1-oly:sny+oly,nr)
11809 double precision adphisurfx(1-olx:snx+olx,1-oly:sny+oly)
11810 double precision adphisurfy(1-olx:snx+olx,1-oly:sny+oly)
11811 integer bi
11812 integer bj
11813 integer imax
11814 integer imin
11815 integer jmax
11816 integer jmin
11817 integer k
11818
11819 C==============================================
11820 C define local variables
11821 C==============================================
11822 double precision ab05
11823 double precision ab15
11824 integer i
11825 integer j
11826 double precision phxfac
11827 double precision phyfac
11828 double precision psfac
11829
11830 C----------------------------------------------
11831 C ROUTINE BODY
11832 C----------------------------------------------
11833 ab15 = 1.5+abeps
11834 ab05 = (-0.5)-abeps
11835 psfac = pffacmom*(1.d0-implicsurfpress)
11836 if (staggertimestep) then
11837 phyfac = pffacmom*deltatmom
11838 do j = jmin, jmax
11839 do i = imin, imax
11840 adphihyd(i,j-1,k) = adphihyd(i,j-1,k)+adgvnm1(i,j,k,bi,bj)*
11841 $recip_dyc(i,j,bi,bj)*phyfac*masks(i,j,k,bi,bj)
11842 adphihyd(i,j,k) = adphihyd(i,j,k)-adgvnm1(i,j,k,bi,bj)*
11843 $recip_dyc(i,j,bi,bj)*phyfac*masks(i,j,k,bi,bj)
11844 end do
11845 end do
11846 endif
11847 do j = jmin, jmax
11848 do i = imin, imax
11849 adgv(i,j,k,bi,bj) = adgv(i,j,k,bi,bj)+adgvnm1(i,j,k,bi,bj)*
11850 $deltatmom*ab15*masks(i,j,k,bi,bj)
11851 adgvcd(i,j,k,bi,bj) = adgvcd(i,j,k,bi,bj)+adgvnm1(i,j,k,bi,bj)
11852 $*deltatmom*masks(i,j,k,bi,bj)
11853 adphisurfy(i,j) = adphisurfy(i,j)-adgvnm1(i,j,k,bi,bj)*
11854 $deltatmom*psfac*masks(i,j,k,bi,bj)
11855 advvel(i,j,k,bi,bj) = advvel(i,j,k,bi,bj)+adgvnm1(i,j,k,bi,bj)
11856 adgvnm1(i,j,k,bi,bj) = adgvnm1(i,j,k,bi,bj)*deltatmom*ab05*
11857 $masks(i,j,k,bi,bj)
11858 end do
11859 end do
11860 if (staggertimestep) then
11861 phxfac = pffacmom*deltatmom
11862 do j = jmin, jmax
11863 do i = imin, imax
11864 adphihyd(i-1,j,k) = adphihyd(i-1,j,k)+adgunm1(i,j,k,bi,bj)*
11865 $recip_dxc(i,j,bi,bj)*phxfac*maskw(i,j,k,bi,bj)
11866 adphihyd(i,j,k) = adphihyd(i,j,k)-adgunm1(i,j,k,bi,bj)*
11867 $recip_dxc(i,j,bi,bj)*phxfac*maskw(i,j,k,bi,bj)
11868 end do
11869 end do
11870 endif
11871 psfac = pffacmom*(1.d0-implicsurfpress)
11872 do j = jmin, jmax
11873 do i = imin, imax
11874 adgu(i,j,k,bi,bj) = adgu(i,j,k,bi,bj)+adgunm1(i,j,k,bi,bj)*
11875 $deltatmom*ab15*maskw(i,j,k,bi,bj)
11876 adgucd(i,j,k,bi,bj) = adgucd(i,j,k,bi,bj)+adgunm1(i,j,k,bi,bj)
11877 $*deltatmom*maskw(i,j,k,bi,bj)
11878 adphisurfx(i,j) = adphisurfx(i,j)-adgunm1(i,j,k,bi,bj)*
11879 $deltatmom*psfac*maskw(i,j,k,bi,bj)
11880 aduvel(i,j,k,bi,bj) = aduvel(i,j,k,bi,bj)+adgunm1(i,j,k,bi,bj)
11881 adgunm1(i,j,k,bi,bj) = adgunm1(i,j,k,bi,bj)*deltatmom*ab05*
11882 $maskw(i,j,k,bi,bj)
11883 end do
11884 end do
11885
11886 end
11887
11888
11889 subroutine adtimestep_tracer( bi, bj, imin, imax, jmin, jmax, k,
11890 $adtracer, adgtracer, adgtrnm1 )
11891 C***************************************************************
11892 C***************************************************************
11893 C** This routine was generated by the **
11894 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
11895 C***************************************************************
11896 C***************************************************************
11897 C==============================================
11898 C all entries are defined explicitly
11899 C==============================================
11900 implicit none
11901
11902 C==============================================
11903 C define parameters
11904 C==============================================
11905 integer npx
11906 parameter ( npx = 1 )
11907 integer npy
11908 parameter ( npy = 1 )
11909 integer nr
11910 parameter ( nr = 15 )
11911 integer nsx
11912 parameter ( nsx = 1 )
11913 integer nsy
11914 parameter ( nsy = 1 )
11915 integer snx
11916 parameter ( snx = 20 )
11917 integer nx
11918 parameter ( nx = snx*nsx*npx )
11919 integer sny
11920 parameter ( sny = 40 )
11921 integer ny
11922 parameter ( ny = sny*nsy*npy )
11923 integer olx
11924 parameter ( olx = 3 )
11925 integer oly
11926 parameter ( oly = 3 )
11927
11928 C==============================================
11929 C define common blocks
11930 C==============================================
11931 common /parm_r/ cg2dtargetresidual, cg2dpcoffdfac,
11932 $cg3dtargetresidual, delp, delz, delr, delx, dely, deltat,
11933 $deltatmom, deltattracer, deltatclock, abeps, starttime, phimin,
11934 $thetamin, rsphere, recip_rsphere, f0, fcori, beta, viscah, viscaz,
11935 $ visca4, viscar, diffkht, diffkzt, diffk4t, diffkrt, diffkhs,
11936 $diffkzs, diffk4s, diffkrs, delt, taucd, rcd, freesurffac,
11937 $implicsurfpress, implicdiv2dflow, hfacmin, hfacmindz, gravity,
11938 $recip_gravity, gbaro, rhonil, recip_rhonil, recip_rhoconst,
11939 $rhoconst, tref, sref, endtime, chkptfreq, pchkptfreq, dumpfreq,
11940 $tavefreq, affacmom, vffacmom, pffacmom, cffacmom, fofacmom,
11941 $mtfacmom, cospower, cadjfreq, omega, tauthetaclimrelax,
11942 $lambdathetaclimrelax, tausaltclimrelax, lambdasaltclimrelax,
11943 $externforcingcycle, externforcingperiod, viscap, diffkpt, diffkps,
11944 $ hfacmindr, hfacmindp, theta_s, specvol_s, horivertratio,
11945 $recip_horivertratio, latfftfiltlo, ivdc_kappa, ro_sealevel,
11946 $zonal_filt_lat, bottomdraglinear, bottomdragquadratic
11947 double precision abeps
11948 double precision affacmom
11949 double precision beta
11950 double precision bottomdraglinear
11951 double precision bottomdragquadratic
11952 double precision cadjfreq
11953 double precision cffacmom
11954 double precision cg2dpcoffdfac
11955 double precision cg2dtargetresidual
11956 double precision cg3dtargetresidual
11957 double precision chkptfreq
11958 double precision cospower
11959 double precision delp(nr)
11960 double precision delr(nr)
11961 double precision delt
11962 double precision deltat
11963 double precision deltatclock
11964 double precision deltatmom
11965 double precision deltattracer
11966 double precision delx(nx)
11967 double precision dely(ny)
11968 double precision delz(nr)
11969 double precision diffk4s
11970 double precision diffk4t
11971 double precision diffkhs
11972 double precision diffkht
11973 double precision diffkps
11974 double precision diffkpt
11975 double precision diffkrs
11976 double precision diffkrt
11977 double precision diffkzs
11978 double precision diffkzt
11979 double precision dumpfreq
11980 double precision endtime
11981 double precision externforcingcycle
11982 double precision externforcingperiod
11983 double precision f0
11984 double precision fcori(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
11985 double precision fofacmom
11986 double precision freesurffac
11987 double precision gbaro
11988 double precision gravity
11989 double precision hfacmin
11990 double precision hfacmindp
11991 double precision hfacmindr
11992 double precision hfacmindz
11993 double precision horivertratio
11994 double precision implicdiv2dflow
11995 double precision implicsurfpress
11996 double precision ivdc_kappa
11997 double precision lambdasaltclimrelax
11998 double precision lambdathetaclimrelax
11999 double precision latfftfiltlo
12000 double precision mtfacmom
12001 double precision omega
12002 double precision pchkptfreq
12003 double precision pffacmom
12004 double precision phimin
12005 double precision rcd
12006 double precision recip_gravity
12007 double precision recip_horivertratio
12008 double precision recip_rhoconst
12009 double precision recip_rhonil
12010 double precision recip_rsphere
12011 double precision rhoconst
12012 double precision rhonil
12013 double precision ro_sealevel
12014 double precision rsphere
12015 double precision specvol_s(nr)
12016 double precision sref(nr)
12017 double precision starttime
12018 double precision taucd
12019 double precision tausaltclimrelax
12020 double precision tauthetaclimrelax
12021 double precision tavefreq
12022 double precision theta_s(nr)
12023 double precision thetamin
12024 double precision tref(nr)
12025 double precision vffacmom
12026 double precision visca4
12027 double precision viscah
12028 double precision viscap
12029 double precision viscar
12030 double precision viscaz
12031 double precision zonal_filt_lat
12032
12033 C==============================================
12034 C define arguments
12035 C==============================================
12036 double precision adgtracer(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12037 double precision adgtrnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12038 double precision adtracer(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12039 integer bi
12040 integer bj
12041 integer imax
12042 integer imin
12043 integer jmax
12044 integer jmin
12045 integer k
12046
12047 C==============================================
12048 C define local variables
12049 C==============================================
12050 double precision ab05
12051 double precision ab15
12052 integer i
12053 integer j
12054
12055 C----------------------------------------------
12056 C ROUTINE BODY
12057 C----------------------------------------------
12058 ab15 = 1.5+abeps
12059 ab05 = (-0.5)-abeps
12060 do j = jmin, jmax
12061 do i = imin, imax
12062 adgtracer(i,j,k,bi,bj) = adgtracer(i,j,k,bi,bj)+adgtrnm1(i,j,
12063 $k,bi,bj)*deltattracer*ab15
12064 adtracer(i,j,k,bi,bj) = adtracer(i,j,k,bi,bj)+adgtrnm1(i,j,k,
12065 $bi,bj)
12066 adgtrnm1(i,j,k,bi,bj) = adgtrnm1(i,j,k,bi,bj)*deltattracer*
12067 $ab05
12068 end do
12069 end do
12070
12071 end
12072
12073
12074 subroutine adzero
12075 C***************************************************************
12076 C***************************************************************
12077 C** This routine was generated by the **
12078 C** Tangent linear and Adjoint Model Compiler, TAMC 5.2.14 **
12079 C***************************************************************
12080 C***************************************************************
12081 C==============================================
12082 C all entries are defined explicitly
12083 C==============================================
12084 implicit none
12085
12086 C==============================================
12087 C define parameters
12088 C==============================================
12089 integer nr
12090 parameter ( nr = 15 )
12091 integer nsx
12092 parameter ( nsx = 1 )
12093 integer nsy
12094 parameter ( nsy = 1 )
12095 integer olx
12096 parameter ( olx = 3 )
12097 integer oly
12098 parameter ( oly = 3 )
12099 integer snx
12100 parameter ( snx = 20 )
12101 integer sny
12102 parameter ( sny = 40 )
12103
12104 C==============================================
12105 C define common blocks
12106 C==============================================
12107 common /adcontrolvars_r/ adtmpfld2d, adtmpfld3d
12108 double precision adtmpfld2d(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
12109 double precision adtmpfld3d(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,
12110 $nsy)
12111
12112 common /adcost_r/ adfc, adobjf_test
12113 double precision adfc
12114 double precision adobjf_test(nsx,nsy)
12115
12116 common /addynvars_cd/ aduveld, advveld, adetanm1, adunm1, advnm1,
12117 $adgucd, adgvcd
12118 double precision adetanm1(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
12119 double precision adgucd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12120 double precision adgvcd(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12121 double precision adunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12122 double precision aduveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12123 double precision advnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12124 double precision advveld(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12125
12126 common /addynvars_r/ adetan, aduvel, advvel, adwvel, adtheta,
12127 $adsalt, adgu, adgv, adgt, adgs, adgunm1, adgvnm1, adgtnm1, adgsnm1
12128 double precision adetan(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
12129 double precision adgs(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12130 double precision adgsnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12131 double precision adgt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12132 double precision adgtnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12133 double precision adgu(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12134 double precision adgunm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12135 double precision adgv(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12136 double precision adgvnm1(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12137 double precision adsalt(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12138 double precision adtheta(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12139 double precision aduvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12140 double precision advvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12141 double precision adwvel(1-olx:snx+olx,1-oly:sny+oly,nr,nsx,nsy)
12142
12143 common /adffields/ adfu, adfv, adqnet, adempmr
12144 double precision adempmr(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
12145 double precision adfu(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
12146 double precision adfv(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
12147 double precision adqnet(1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
12148
12149 common /adtendency_forcing/ adsurfacetendencyu,
12150 $adsurfacetendencyv, adsurfacetendencyt, adsurfacetendencys
12151 double precision adsurfacetendencys(1-olx:snx+olx,1-oly:sny+oly,
12152 $nsx,nsy)
12153 double precision adsurfacetendencyt(1-olx:snx+olx,1-oly:sny+oly,
12154 $nsx,nsy)
12155 double precision adsurfacetendencyu(1-olx:snx+olx,1-oly:sny+oly,
12156 $nsx,nsy)
12157 double precision adsurfacetendencyv(1-olx:snx+olx,1-oly:sny+oly,
12158 $nsx,nsy)
12159
12160 C==============================================
12161 C define local variables
12162 C==============================================
12163 integer ip1
12164 integer ip2
12165 integer ip3
12166 integer ip4
12167 integer ip5
12168
12169 do ip4 = 1, nsy
12170 do ip3 = 1, nsx
12171 do ip2 = 1-oly, sny+oly
12172 do ip1 = 1-olx, snx+olx
12173 adtmpfld2d(ip1,ip2,ip3,ip4) = 0.d0
12174 end do
12175 end do
12176 end do
12177 end do
12178 do ip5 = 1, nsy
12179 do ip4 = 1, nsx
12180 do ip3 = 1, nr
12181 do ip2 = 1-oly, sny+oly
12182 do ip1 = 1-olx, snx+olx
12183 adtmpfld3d(ip1,ip2,ip3,ip4,ip5) = 0.d0
12184 end do
12185 end do
12186 end do
12187 end do
12188 end do
12189 do ip2 = 1, nsy
12190 do ip1 = 1, nsx
12191 adobjf_test(ip1,ip2) = 0.d0
12192 end do
12193 end do
12194 do ip5 = 1, nsy
12195 do ip4 = 1, nsx
12196 do ip3 = 1, nr
12197 do ip2 = 1-oly, sny+oly
12198 do ip1 = 1-olx, snx+olx
12199 aduveld(ip1,ip2,ip3,ip4,ip5) = 0.d0
12200 end do
12201 end do
12202 end do
12203 end do
12204 end do
12205 do ip5 = 1, nsy
12206 do ip4 = 1, nsx
12207 do ip3 = 1, nr
12208 do ip2 = 1-oly, sny+oly
12209 do ip1 = 1-olx, snx+olx
12210 advveld(ip1,ip2,ip3,ip4,ip5) = 0.d0
12211 end do
12212 end do
12213 end do
12214 end do
12215 end do
12216 do ip4 = 1, nsy
12217 do ip3 = 1, nsx
12218 do ip2 = 1-oly, sny+oly
12219 do ip1 = 1-olx, snx+olx
12220 adetanm1(ip1,ip2,ip3,ip4) = 0.d0
12221 end do
12222 end do
12223 end do
12224 end do
12225 do ip5 = 1, nsy
12226 do ip4 = 1, nsx
12227 do ip3 = 1, nr
12228 do ip2 = 1-oly, sny+oly
12229 do ip1 = 1-olx, snx+olx
12230 adunm1(ip1,ip2,ip3,ip4,ip5) = 0.d0
12231 end do
12232 end do
12233 end do
12234 end do
12235 end do
12236 do ip5 = 1, nsy
12237 do ip4 = 1, nsx
12238 do ip3 = 1, nr
12239 do ip2 = 1-oly, sny+oly
12240 do ip1 = 1-olx, snx+olx
12241 advnm1(ip1,ip2,ip3,ip4,ip5) = 0.d0
12242 end do
12243 end do
12244 end do
12245 end do
12246 end do
12247 do ip5 = 1, nsy
12248 do ip4 = 1, nsx
12249 do ip3 = 1, nr
12250 do ip2 = 1-oly, sny+oly
12251 do ip1 = 1-olx, snx+olx
12252 adgucd(ip1,ip2,ip3,ip4,ip5) = 0.d0
12253 end do
12254 end do
12255 end do
12256 end do
12257 end do
12258 do ip5 = 1, nsy
12259 do ip4 = 1, nsx
12260 do ip3 = 1, nr
12261 do ip2 = 1-oly, sny+oly
12262 do ip1 = 1-olx, snx+olx
12263 adgvcd(ip1,ip2,ip3,ip4,ip5) = 0.d0
12264 end do
12265 end do
12266 end do
12267 end do
12268 end do
12269 do ip4 = 1, nsy
12270 do ip3 = 1, nsx
12271 do ip2 = 1-oly, sny+oly
12272 do ip1 = 1-olx, snx+olx
12273 adetan(ip1,ip2,ip3,ip4) = 0.d0
12274 end do
12275 end do
12276 end do
12277 end do
12278 do ip5 = 1, nsy
12279 do ip4 = 1, nsx
12280 do ip3 = 1, nr
12281 do ip2 = 1-oly, sny+oly
12282 do ip1 = 1-olx, snx+olx
12283 aduvel(ip1,ip2,ip3,ip4,ip5) = 0.d0
12284 end do
12285 end do
12286 end do
12287 end do
12288 end do
12289 do ip5 = 1, nsy
12290 do ip4 = 1, nsx
12291 do ip3 = 1, nr
12292 do ip2 = 1-oly, sny+oly
12293 do ip1 = 1-olx, snx+olx
12294 advvel(ip1,ip2,ip3,ip4,ip5) = 0.d0
12295 end do
12296 end do
12297 end do
12298 end do
12299 end do
12300 do ip5 = 1, nsy
12301 do ip4 = 1, nsx
12302 do ip3 = 1, nr
12303 do ip2 = 1-oly, sny+oly
12304 do ip1 = 1-olx, snx+olx
12305 adwvel(ip1,ip2,ip3,ip4,ip5) = 0.d0
12306 end do
12307 end do
12308 end do
12309 end do
12310 end do
12311 do ip5 = 1, nsy
12312 do ip4 = 1, nsx
12313 do ip3 = 1, nr
12314 do ip2 = 1-oly, sny+oly
12315 do ip1 = 1-olx, snx+olx
12316 adtheta(ip1,ip2,ip3,ip4,ip5) = 0.d0
12317 end do
12318 end do
12319 end do
12320 end do
12321 end do
12322 do ip5 = 1, nsy
12323 do ip4 = 1, nsx
12324 do ip3 = 1, nr
12325 do ip2 = 1-oly, sny+oly
12326 do ip1 = 1-olx, snx+olx
12327 adsalt(ip1,ip2,ip3,ip4,ip5) = 0.d0
12328 end do
12329 end do
12330 end do
12331 end do
12332 end do
12333 do ip5 = 1, nsy
12334 do ip4 = 1, nsx
12335 do ip3 = 1, nr
12336 do ip2 = 1-oly, sny+oly
12337 do ip1 = 1-olx, snx+olx
12338 adgu(ip1,ip2,ip3,ip4,ip5) = 0.d0
12339 end do
12340 end do
12341 end do
12342 end do
12343 end do
12344 do ip5 = 1, nsy
12345 do ip4 = 1, nsx
12346 do ip3 = 1, nr
12347 do ip2 = 1-oly, sny+oly
12348 do ip1 = 1-olx, snx+olx
12349 adgv(ip1,ip2,ip3,ip4,ip5) = 0.d0
12350 end do
12351 end do
12352 end do
12353 end do
12354 end do
12355 do ip5 = 1, nsy
12356 do ip4 = 1, nsx
12357 do ip3 = 1, nr
12358 do ip2 = 1-oly, sny+oly
12359 do ip1 = 1-olx, snx+olx
12360 adgt(ip1,ip2,ip3,ip4,ip5) = 0.d0
12361 end do
12362 end do
12363 end do
12364 end do
12365 end do
12366 do ip5 = 1, nsy
12367 do ip4 = 1, nsx
12368 do ip3 = 1, nr
12369 do ip2 = 1-oly, sny+oly
12370 do ip1 = 1-olx, snx+olx
12371 adgs(ip1,ip2,ip3,ip4,ip5) = 0.d0
12372 end do
12373 end do
12374 end do
12375 end do
12376 end do
12377 do ip5 = 1, nsy
12378 do ip4 = 1, nsx
12379 do ip3 = 1, nr
12380 do ip2 = 1-oly, sny+oly
12381 do ip1 = 1-olx, snx+olx
12382 adgunm1(ip1,ip2,ip3,ip4,ip5) = 0.d0
12383 end do
12384 end do
12385 end do
12386 end do
12387 end do
12388 do ip5 = 1, nsy
12389 do ip4 = 1, nsx
12390 do ip3 = 1, nr
12391 do ip2 = 1-oly, sny+oly
12392 do ip1 = 1-olx, snx+olx
12393 adgvnm1(ip1,ip2,ip3,ip4,ip5) = 0.d0
12394 end do
12395 end do
12396 end do
12397 end do
12398 end do
12399 do ip5 = 1, nsy
12400 do ip4 = 1, nsx
12401 do ip3 = 1, nr
12402 do ip2 = 1-oly, sny+oly
12403 do ip1 = 1-olx, snx+olx
12404 adgtnm1(ip1,ip2,ip3,ip4,ip5) = 0.d0
12405 end do
12406 end do
12407 end do
12408 end do
12409 end do
12410 do ip5 = 1, nsy
12411 do ip4 = 1, nsx
12412 do ip3 = 1, nr
12413 do ip2 = 1-oly, sny+oly
12414 do ip1 = 1-olx, snx+olx
12415 adgsnm1(ip1,ip2,ip3,ip4,ip5) = 0.d0
12416 end do
12417 end do
12418 end do
12419 end do
12420 end do
12421 do ip4 = 1, nsy
12422 do ip3 = 1, nsx
12423 do ip2 = 1-oly, sny+oly
12424 do ip1 = 1-olx, snx+olx
12425 adfu(ip1,ip2,ip3,ip4) = 0.d0
12426 end do
12427 end do
12428 end do
12429 end do
12430 do ip4 = 1, nsy
12431 do ip3 = 1, nsx
12432 do ip2 = 1-oly, sny+oly
12433 do ip1 = 1-olx, snx+olx
12434 adfv(ip1,ip2,ip3,ip4) = 0.d0
12435 end do
12436 end do
12437 end do
12438 end do
12439 do ip4 = 1, nsy
12440 do ip3 = 1, nsx
12441 do ip2 = 1-oly, sny+oly
12442 do ip1 = 1-olx, snx+olx
12443 adqnet(ip1,ip2,ip3,ip4) = 0.d0
12444 end do
12445 end do
12446 end do
12447 end do
12448 do ip4 = 1, nsy
12449 do ip3 = 1, nsx
12450 do ip2 = 1-oly, sny+oly
12451 do ip1 = 1-olx, snx+olx
12452 adempmr(ip1,ip2,ip3,ip4) = 0.d0
12453 end do
12454 end do
12455 end do
12456 end do
12457 do ip4 = 1, nsy
12458 do ip3 = 1, nsx
12459 do ip2 = 1-oly, sny+oly
12460 do ip1 = 1-olx, snx+olx
12461 adsurfacetendencyu(ip1,ip2,ip3,ip4) = 0.d0
12462 end do
12463 end do
12464 end do
12465 end do
12466 do ip4 = 1, nsy
12467 do ip3 = 1, nsx
12468 do ip2 = 1-oly, sny+oly
12469 do ip1 = 1-olx, snx+olx
12470 adsurfacetendencyv(ip1,ip2,ip3,ip4) = 0.d0
12471 end do
12472 end do
12473 end do
12474 end do
12475 do ip4 = 1, nsy
12476 do ip3 = 1, nsx
12477 do ip2 = 1-oly, sny+oly
12478 do ip1 = 1-olx, snx+olx
12479 adsurfacetendencyt(ip1,ip2,ip3,ip4) = 0.d0
12480 end do
12481 end do
12482 end do
12483 end do
12484 do ip4 = 1, nsy
12485 do ip3 = 1, nsx
12486 do ip2 = 1-oly, sny+oly
12487 do ip1 = 1-olx, snx+olx
12488 adsurfacetendencys(ip1,ip2,ip3,ip4) = 0.d0
12489 end do
12490 end do
12491 end do
12492 end do
12493 end

  ViewVC Help
Powered by ViewVC 1.1.22