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

Annotation 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 - (hide annotations) (download)
Fri Jul 13 13:25:45 2001 UTC (22 years, 10 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 heimbach 1.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