118
119
122
123
124
125 integer, intent(in) :: ng, tile
126 integer, intent(in) :: LBi, UBi, LBj, UBj
127 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
128 integer, intent(in) :: nrhs
129
130#ifdef ASSUMED_SHAPE
131 real(r8), intent(in) :: om_v(LBi:,LBj:)
132 real(r8), intent(in) :: on_u(LBi:,LBj:)
133 real(r8), intent(in) :: Hz(LBi:,LBj:,:)
134 real(r8), intent(in) :: z_r(LBi:,LBj:,:)
135 real(r8), intent(in) :: z_w(LBi:,LBj:,0:)
136 real(r8), intent(in) :: rho(LBi:,LBj:,:)
137# ifdef ATM_PRESS
138 real(r8), intent(in) :: Pair(LBi:,LBj:)
139# endif
140# ifdef TIDE_GENERATING_FORCES
141 real(r8), intent(in) :: eq_tide(LBi:,LBj:)
142 real(r8), intent(inout) :: ad_eq_tide(LBi:,LBj:)
143# endif
144# ifdef DIAGNOSTICS_UV
145
146
147# endif
148 real(r8), intent(inout) :: ad_Hz(LBi:,LBj:,:)
149 real(r8), intent(inout) :: ad_z_r(LBi:,LBj:,:)
150 real(r8), intent(inout) :: ad_z_w(LBi:,LBj:,0:)
151 real(r8), intent(inout) :: ad_rho(LBi:,LBj:,:)
152 real(r8), intent(inout) :: ad_ru(LBi:,LBj:,0:,:)
153 real(r8), intent(inout) :: ad_rv(LBi:,LBj:,0:,:)
154#else
155 real(r8), intent(in) :: om_v(LBi:UBi,LBj:UBj)
156 real(r8), intent(in) :: on_u(LBi:UBi,LBj:UBj)
157 real(r8), intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
158 real(r8), intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
159 real(r8), intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
160 real(r8), intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
161# ifdef ATM_PRESS
162 real(r8), intent(in) :: Pair(LBi:UBi,LBj:UBj)
163# endif
164# ifdef TIDE_GENERATING_FORCES
165 real(r8), intent(in) :: eq_tide(LBi:,LBj:)
166 real(r8), intent(out) :: ad_eq_tide(LBi:,LBj:)
167# endif
168# ifdef DIAGNOSTICS_UV
169
170
171# endif
172 real(r8), intent(inout) :: ad_Hz(LBi:UBi,LBj:UBj,N(ng))
173 real(r8), intent(inout) :: ad_z_r(LBi:UBi,LBj:UBj,N(ng))
174 real(r8), intent(inout) :: ad_z_w(LBi:UBi,LBj:UBj,0:N(ng))
175 real(r8), intent(inout) :: ad_rho(LBi:UBi,LBj:UBj,N(ng))
176 real(r8), intent(inout) :: ad_ru(LBi:UBi,LBj:UBj,0:N(ng),2)
177 real(r8), intent(inout) :: ad_rv(LBi:UBi,LBj:UBj,0:N(ng),2)
178#endif
179
180
181
182 integer :: i, j, k, kk
183
184 real(r8) :: fac, fac1, fac2, fac3
185 real(r8) :: cff1, cff2, cff3, cff4
186 real(r8) :: adfac, adfac1, adfac2
187 real(r8) :: ad_cff1, ad_cff2, ad_cff3, ad_cff4
188#ifdef WJ_GRADP
189 real(r8) :: gamma, ad_gamma
190#endif
191
192 real(r8), dimension(IminS:ImaxS) :: phie
193 real(r8), dimension(IminS:ImaxS) :: phix
194
195 real(r8), dimension(IminS:ImaxS) :: ad_phie
196 real(r8), dimension(IminS:ImaxS) :: ad_phix
197
198#include "set_bounds.h"
199
200
201
202
203
204 ad_cff1=0.0_r8
205 ad_cff2=0.0_r8
206 ad_cff3=0.0_r8
207 ad_cff4=0.0_r8
208
209#ifdef WJ_GRADP
210 ad_gamma=0.0_r8
211#endif
212 DO i=imins,imaxs
213 ad_phie(i)=0.0_r8
214 ad_phix(i)=0.0_r8
215 END DO
216
217
218
219
220
221#ifdef ATM_PRESS
223#endif
225 fac2=1000.0_r8*
g/
rho0
227
228 j_loop : DO j=jstr,jend
229 IF (j.ge.jstrv) THEN
230
231
232
233
234
235
237 DO i=istr,iend
238#ifdef TIDE_GENERATING_FORCES
239 cff1=z_w(i,j ,
n(ng))-eq_tide(i,j )-z_r(i,j ,
n(ng))+ &
240 & z_w(i,j-1,
n(ng))-eq_tide(i,j-1)-z_r(i,j-1,
n(ng))
241#else
242 cff1=z_w(i,j ,
n(ng))-z_r(i,j ,
n(ng))+ &
243 & z_w(i,j-1,
n(ng))-z_r(i,j-1,
n(ng))
244#endif
245 phie(i)=fac1*(rho(i,j,
n(ng))-rho(i,j-1,
n(ng)))*cff1
246#ifdef ATM_PRESS
247 phie(i)=phie(i)+fac*(pair(i,j)-pair(i,j-1))
248#endif
249#ifdef RHO_SURF
250 phie(i)=phie(i)+ &
251 & (fac2+fac1*(rho(i,j,
n(ng))+rho(i,j-1,
n(ng))))* &
252 & (z_w(i,j,
n(ng))-z_w(i,j-1,
n(ng)))
253#endif
254 END DO
256 DO i=istr,iend
257#ifdef WJ_GRADP
258 cff1=1.0_r8/((z_r(i,j ,kk+1)-z_r(i,j ,kk))* &
259 & (z_r(i,j-1,kk+1)-z_r(i,j-1,kk)))
260 cff2=z_r(i,j ,kk )-z_r(i,j-1,kk )+ &
261 & z_r(i,j ,kk+1)-z_r(i,j-1,kk+1)
262 cff3=z_r(i,j ,kk+1)-z_r(i,j ,kk )- &
263 & z_r(i,j-1,kk+1)+z_r(i,j-1,kk )
264 gamma=0.125_r8*cff1*cff2*cff3
265
266 cff1=(1.0_r8+gamma)*(rho(i,j,kk+1)-rho(i,j-1,kk+1))+ &
267 & (1.0_r8-gamma)*(rho(i,j,kk )-rho(i,j-1,kk ))
268 cff2=rho(i,j,kk+1)+rho(i,j-1,kk+1)- &
269 & rho(i,j,kk )-rho(i,j-1,kk )
270 cff3=z_r(i,j,kk+1)+z_r(i,j-1,kk+1)- &
271 & z_r(i,j,kk )-z_r(i,j-1,kk )
272 cff4=(1.0_r8+gamma)*(z_r(i,j,kk+1)-z_r(i,j-1,kk+1))+ &
273 & (1.0_r8-gamma)*(z_r(i,j,kk )-z_r(i,j-1,kk ))
274 phie(i)=phie(i)+ &
275 & fac3*(cff1*cff3-cff2*cff4)
276#else
277 cff1=rho(i,j,kk+1)-rho(i,j-1,kk+1)+ &
278 & rho(i,j,kk )-rho(i,j-1,kk )
279 cff2=rho(i,j,kk+1)+rho(i,j-1,kk+1)- &
280 & rho(i,j,kk )-rho(i,j-1,kk )
281 cff3=z_r(i,j,kk+1)+z_r(i,j-1,kk+1)- &
282 & z_r(i,j,kk )-z_r(i,j-1,kk )
283 cff4=z_r(i,j,kk+1)-z_r(i,j-1,kk+1)+ &
284 & z_r(i,j,kk )-z_r(i,j-1,kk )
285 phie(i)=phie(i)+ &
286 & fac3*(cff1*cff3-cff2*cff4)
287#endif
288 END DO
289 END DO
290
291
292
293
294 DO i=istr,iend
295#ifdef DIAGNOSTICS_UV
296
297#endif
298
299
300
301
302
303
304 adfac=-0.5_r8*om_v(i,j)*ad_rv(i,j,k,nrhs)
305 adfac1=adfac*phie(i)
306 ad_phie(i)=ad_phie(i)+ &
307 & (hz(i,j,k)+hz(i,j-1,k))*adfac
308 ad_hz(i,j-1,k)=ad_hz(i,j-1,k)+adfac1
309 ad_hz(i,j ,k)=ad_hz(i,j ,k)+adfac1
310 ad_rv(i,j,k,nrhs)=0.0_r8
311#ifdef WJ_GRADP
312 cff1=1.0_r8/((z_r(i,j ,k+1)-z_r(i,j ,k))* &
313 & (z_r(i,j-1,k+1)-z_r(i,j-1,k)))
314 cff2=z_r(i,j ,k )-z_r(i,j-1,k )+ &
315 & z_r(i,j ,k+1)-z_r(i,j-1,k+1)
316 cff3=z_r(i,j ,k+1)-z_r(i,j ,k )- &
317 & z_r(i,j-1,k+1)+z_r(i,j-1,k )
318 gamma=0.125_r8*cff1*cff2*cff3
319
320 cff1=(1.0_r8+gamma)*(rho(i,j,k+1)-rho(i,j-1,k+1))+ &
321 & (1.0_r8-gamma)*(rho(i,j,k )-rho(i,j-1,k ))
322 cff2=rho(i,j,k+1)+rho(i,j-1,k+1)- &
323 & rho(i,j,k )-rho(i,j-1,k )
324 cff3=z_r(i,j,k+1)+z_r(i,j-1,k+1)- &
325 & z_r(i,j,k )-z_r(i,j-1,k )
326 cff4=(1.0_r8+gamma)*(z_r(i,j,k+1)-z_r(i,j-1,k+1))+ &
327 & (1.0_r8-gamma)*(z_r(i,j,k )-z_r(i,j-1,k ))
328
329
330
331
332
333
334 adfac=fac3*ad_phie(i)
335 ad_cff1=ad_cff1+cff3*adfac
336 ad_cff2=ad_cff2-cff4*adfac
337 ad_cff3=ad_cff3+cff1*adfac
338 ad_cff4=ad_cff4-cff2*adfac
339
340
341
342
343
344
345
346
347
348 adfac1=(1.0_r8+gamma)*ad_cff4
349 adfac2=(1.0_r8-gamma)*ad_cff4
350 ad_z_r(i,j-1,k )=ad_z_r(i,j-1,k )-adfac2-ad_cff3
351 ad_z_r(i,j ,k )=ad_z_r(i,j ,k )+adfac2-ad_cff3
352 ad_z_r(i,j-1,k+1)=ad_z_r(i,j-1,k+1)-adfac1+ad_cff3
353 ad_z_r(i,j ,k+1)=ad_z_r(i,j ,k+1)+adfac1+ad_cff3
354 ad_gamma=ad_gamma+ &
355 & (z_r(i,j,k+1)-z_r(i,j-1,k+1)- &
356 & z_r(i,j,k )+z_r(i,j-1,k ))*ad_cff4
357 ad_cff4=0.0_r8
358 ad_cff3=0.0_r8
359
360
361
362
363
364
365
366
367
368 adfac1=(1.0_r8+gamma)*ad_cff1
369 adfac2=(1.0_r8-gamma)*ad_cff1
370 ad_rho(i,j-1,k )=ad_rho(i,j-1,k )-adfac2-ad_cff2
371 ad_rho(i,j ,k )=ad_rho(i,j ,k )+adfac2-ad_cff2
372 ad_rho(i,j-1,k+1)=ad_rho(i,j-1,k+1)-adfac1+ad_cff2
373 ad_rho(i,j ,k+1)=ad_rho(i,j ,k+1)+adfac1+ad_cff2
374 ad_gamma=ad_gamma+ &
375 & (rho(i,j,k+1)-rho(i,j-1,k+1)- &
376 & rho(i,j,k )+rho(i,j-1,k ))*ad_cff1
377 ad_cff2=0.0_r8
378 ad_cff1=0.0_r8
379
380 cff1=1.0_r8/((z_r(i,j ,k+1)-z_r(i,j ,k))* &
381 & (z_r(i,j-1,k+1)-z_r(i,j-1,k)))
382 cff2=z_r(i,j ,k )-z_r(i,j-1,k )+ &
383 & z_r(i,j ,k+1)-z_r(i,j-1,k+1)
384 cff3=z_r(i,j ,k+1)-z_r(i,j ,k )- &
385 & z_r(i,j-1,k+1)+z_r(i,j-1,k )
386
387
388
389
390
391 adfac=0.125_r8*ad_gamma
392 adfac1=adfac*cff1
393 ad_cff3=ad_cff3+cff2*adfac1
394 ad_cff2=ad_cff2+cff3*adfac1
395 ad_cff1=ad_cff1+cff2*cff3*adfac
396 ad_gamma=0.0_r8
397
398
399
400
401
402 ad_z_r(i,j-1,k )=ad_z_r(i,j-1,k )-ad_cff2+ad_cff3
403 ad_z_r(i,j ,k )=ad_z_r(i,j ,k )+ad_cff2-ad_cff3
404 ad_z_r(i,j-1,k+1)=ad_z_r(i,j-1,k+1)-ad_cff2-ad_cff3
405 ad_z_r(i,j ,k+1)=ad_z_r(i,j ,k+1)+ad_cff2+ad_cff3
406 ad_cff3=0.0_r8
407 ad_cff2=0.0_r8
408
409
410
411
412
413 adfac=-cff1*cff1*ad_cff1
414 adfac1=adfac*(z_r(i,j-1,k+1)-z_r(i,j-1,k))
415 adfac2=adfac*(z_r(i,j ,k+1)-z_r(i,j ,k))
416 ad_z_r(i,j-1,k )=ad_z_r(i,j-1,k )-adfac2
417 ad_z_r(i,j ,k )=ad_z_r(i,j ,k )-adfac1
418 ad_z_r(i,j-1,k+1)=ad_z_r(i,j-1,k+1)+adfac2
419 ad_z_r(i,j ,k+1)=ad_z_r(i,j ,k+1)+adfac1
420 ad_cff1=0.0_r8
421#else
422
423 cff1=rho(i,j,k+1)-rho(i,j-1,k+1)+ &
424 & rho(i,j,k )-rho(i,j-1,k )
425 cff2=rho(i,j,k+1)+rho(i,j-1,k+1)- &
426 & rho(i,j,k )-rho(i,j-1,k )
427 cff3=z_r(i,j,k+1)+z_r(i,j-1,k+1)- &
428 & z_r(i,j,k )-z_r(i,j-1,k )
429 cff4=z_r(i,j,k+1)-z_r(i,j-1,k+1)+ &
430 & z_r(i,j,k )-z_r(i,j-1,k )
431
432
433
434
435
436
437
438 adfac=fac3*ad_phie(i)
439 ad_cff1=ad_cff1+cff3*adfac
440 ad_cff2=ad_cff2-cff4*adfac
441 ad_cff3=ad_cff3+cff1*adfac
442 ad_cff4=ad_cff4-cff2*adfac
443
444
445
446
447
448 ad_z_r(i,j-1,k )=ad_z_r(i,j-1,k )-ad_cff3-ad_cff4
449 ad_z_r(i,j ,k )=ad_z_r(i,j ,k )-ad_cff3+ad_cff4
450 ad_z_r(i,j-1,k+1)=ad_z_r(i,j-1,k+1)+ad_cff3-ad_cff4
451 ad_z_r(i,j ,k+1)=ad_z_r(i,j ,k+1)+ad_cff3+ad_cff4
452 ad_cff4=0.0_r8
453 ad_cff3=0.0_r8
454
455
456
457
458
459 ad_rho(i,j-1,k )=ad_rho(i,j-1,k )-ad_cff1-ad_cff2
460 ad_rho(i,j ,k )=ad_rho(i,j ,k )+ad_cff1-ad_cff2
461 ad_rho(i,j-1,k+1)=ad_rho(i,j-1,k+1)-ad_cff1+ad_cff2
462 ad_rho(i,j ,k+1)=ad_rho(i,j ,k+1)+ad_cff1+ad_cff2
463 ad_cff2=0.0_r8
464 ad_cff1=0.0_r8
465#endif
466 END DO
467 END DO
468
469
470
471 DO i=istr,iend
472#ifdef TIDE_GENERATING_FORCES
473 cff1=z_w(i,j ,
n(ng))-eq_tide(i,j )-z_r(i,j ,
n(ng))+ &
474 & z_w(i,j-1,
n(ng))-eq_tide(i,j-1)-z_r(i,j-1,
n(ng))
475#else
476 cff1=z_w(i,j ,
n(ng))-z_r(i,j ,
n(ng))+ &
477 & z_w(i,j-1,
n(ng))-z_r(i,j-1,
n(ng))
478#endif
479 phie(i)=fac1*(rho(i,j,
n(ng))-rho(i,j-1,
n(ng)))*cff1
480#ifdef ATM_PRESS
481 phie(i)=phie(i)+fac*(pair(i,j)-pair(i,j-1))
482#endif
483#ifdef RHO_SURF
484 phie(i)=phie(i)+ &
485 & (fac2+fac1*(rho(i,j,
n(ng))+rho(i,j-1,
n(ng))))* &
486 & (z_w(i,j,
n(ng))-z_w(i,j-1,
n(ng)))
487#endif
488# ifdef DIAGNOSTICS_UV
489
490# endif
491
492
493
494
495
496
497 adfac=-0.5_r8*om_v(i,j)*ad_rv(i,j,
n(ng),nrhs)
498 adfac1=adfac*phie(i)
499 ad_phie(i)=ad_phie(i)+(hz(i,j ,
n(ng))+ &
500 & hz(i,j-1,
n(ng)))*adfac
501 ad_hz(i,j-1,
n(ng))=ad_hz(i,j-1,
n(ng))+adfac1
502 ad_hz(i,j ,
n(ng))=ad_hz(i,j ,
n(ng))+adfac1
503 ad_rv(i,j,
n(ng),nrhs)=0.0
504#ifdef RHO_SURF
505
506
507
508
509
510
511 adfac1=fac1*(z_w(i,j,
n(ng))-z_w(i,j-1,
n(ng)))* &
512 & ad_phie(i)
513 adfac2=(fac2+fac1*(rho(i,j,
n(ng))+rho(i,j-1,
n(ng))))* &
514 & ad_phie(i)
515 ad_rho(i,j-1,
n(ng))=ad_rho(i,j-1,
n(ng))+adfac1
516 ad_rho(i,j ,
n(ng))=ad_rho(i,j ,
n(ng))+adfac1
517 ad_z_w(i,j-1,
n(ng))=ad_z_w(i,j-1,
n(ng))-adfac2
518 ad_z_w(i,j ,
n(ng))=ad_z_w(i,j ,
n(ng))+adfac2
519#endif
520
521
522
523
524 adfac=fac1*ad_phie(i)
525 adfac1=adfac*cff1
526 ad_rho(i,j-1,
n(ng))=ad_rho(i,j-1,
n(ng))-adfac1
527 ad_rho(i,j ,
n(ng))=ad_rho(i,j ,
n(ng))+adfac1
528 ad_cff1=ad_cff1+ &
529 & (rho(i,j,
n(ng))-rho(i,j-1,
n(ng)))*adfac
530 ad_phie(i)=0.0_r8
531#ifdef TIDE_GENERATING_FORCES
532
533
534
535
536
537 ad_eq_tide(i,j-1)=ad_eq_tide(i,j-1)-ad_cff1
538 ad_eq_tide(i,j )=ad_eq_tide(i,j )-ad_cff1
539 ad_z_r(i,j-1,
n(ng))=ad_z_r(i,j-1,
n(ng))-ad_cff1
540 ad_z_r(i,j ,
n(ng))=ad_z_r(i,j ,
n(ng))-ad_cff1
541 ad_z_w(i,j-1,
n(ng))=ad_z_w(i,j-1,
n(ng))+ad_cff1
542 ad_z_w(i,j ,
n(ng))=ad_z_w(i,j ,
n(ng))+ad_cff1
543 ad_cff1=0.0_r8
544#else
545
546
547
548 ad_z_r(i,j-1,
n(ng))=ad_z_r(i,j-1,
n(ng))-ad_cff1
549 ad_z_r(i,j ,
n(ng))=ad_z_r(i,j ,
n(ng))-ad_cff1
550 ad_z_w(i,j-1,
n(ng))=ad_z_w(i,j-1,
n(ng))+ad_cff1
551 ad_z_w(i,j ,
n(ng))=ad_z_w(i,j ,
n(ng))+ad_cff1
552 ad_cff1=0.0_r8
553#endif
554 END DO
555 END IF
556
557
558
559
560
561
562
563
564
565
567 DO i=istru,iend
568#ifdef TIDE_GENERATING_FORCES
569 cff1=z_w(i ,j,
n(ng))-eq_tide(i ,j)-z_r(i ,j,
n(ng))+ &
570 & z_w(i-1,j,
n(ng))-eq_tide(i-1,j)-z_r(i-1,j,
n(ng))
571#else
572 cff1=z_w(i ,j,
n(ng))-z_r(i ,j,
n(ng))+ &
573 & z_w(i-1,j,
n(ng))-z_r(i-1,j,
n(ng))
574#endif
575 phix(i)=fac1*(rho(i,j,
n(ng))-rho(i-1,j,
n(ng)))*cff1
576#ifdef ATM_PRESS
577 phix(i)=phix(i)+fac*(pair(i,j)-pair(i-1,j))
578#endif
579#ifdef RHO_SURF
580 phix(i)=phix(i)+ &
581 & (fac2+fac1*(rho(i,j,
n(ng))+rho(i-1,j,
n(ng))))* &
582 & (z_w(i,j,
n(ng))-z_w(i-1,j,
n(ng)))
583#endif
584 END DO
586 DO i=istru,iend
587#ifdef WJ_GRADP
588 cff1=1.0_r8/((z_r(i ,j,kk+1)-z_r(i ,j,kk))* &
589 & (z_r(i-1,j,kk+1)-z_r(i-1,j,kk)))
590 cff2=z_r(i ,j,kk )-z_r(i-1,j,kk )+ &
591 & z_r(i ,j,kk+1)-z_r(i-1,j,k+1)
592 cff3=z_r(i ,j,kk+1)-z_r(i ,j,kk )- &
593 & z_r(i-1,j,kk+1)+z_r(i-1,j,kk )
594 gamma=0.125_r8*cff1*cff2*cff3
595
596 cff1=(1.0_r8+gamma)*(rho(i,j,kk+1)-rho(i-1,j,kk+1))+ &
597 & (1.0_r8-gamma)*(rho(i,j,kk )-rho(i-1,j,kk ))
598 cff2=rho(i,j,kk+1)+rho(i-1,j,kk+1)- &
599 & rho(i,j,kk )-rho(i-1,j,kk )
600 cff3=z_r(i,j,kk+1)+z_r(i-1,j,kk+1)- &
601 & z_r(i,j,kk )-z_r(i-1,j,kk )
602 cff4=(1.0_r8+gamma)*(z_r(i,j,kk+1)-z_r(i-1,j,kk+1))+ &
603 & (1.0_r8-gamma)*(z_r(i,j,kk )-z_r(i-1,j,kk ))
604 phix(i)=phix(i)+ &
605 & fac3*(cff1*cff3-cff2*cff4)
606#else
607 cff1=rho(i,j,kk+1)-rho(i-1,j,kk+1)+ &
608 & rho(i,j,kk )-rho(i-1,j,kk )
609 cff2=rho(i,j,kk+1)+rho(i-1,j,kk+1)- &
610 & rho(i,j,kk )-rho(i-1,j,kk )
611 cff3=z_r(i,j,kk+1)+z_r(i-1,j,kk+1)- &
612 & z_r(i,j,kk )-z_r(i-1,j,kk )
613 cff4=z_r(i,j,kk+1)-z_r(i-1,j,kk+1)+ &
614 & z_r(i,j,kk )-z_r(i-1,j,kk )
615 phix(i)=phix(i)+ &
616 & fac3*(cff1*cff3-cff2*cff4)
617#endif
618 END DO
619 END DO
620
621
622
623
624 DO i=istru,iend
625# ifdef DIAGNOSTICS_UV
626
627# endif
628
629
630
631
632
633
634 adfac=-0.5_r8*on_u(i,j)*ad_ru(i,j,k,nrhs)
635 adfac1=adfac*phix(i)
636 ad_phix(i)=ad_phix(i)+ &
637 & (hz(i,j,k)+hz(i-1,j,k))*adfac
638 ad_hz(i-1,j,k)=ad_hz(i-1,j,k)+adfac1
639 ad_hz(i ,j,k)=ad_hz(i ,j,k)+adfac1
640 ad_ru(i,j,k,nrhs)=0.0
641#ifdef WJ_GRADP
642 cff1=1.0_r8/((z_r(i ,j,k+1)-z_r(i ,j,k))* &
643 & (z_r(i-1,j,k+1)-z_r(i-1,j,k)))
644 cff2=z_r(i ,j,k )-z_r(i-1,j,k )+ &
645 & z_r(i ,j,k+1)-z_r(i-1,j,k+1)
646 cff3=z_r(i ,j,k+1)-z_r(i ,j,k )- &
647 & z_r(i-1,j,k+1)+z_r(i-1,j,k )
648 gamma=0.125_r8*cff1*cff2*cff3
649
650 cff1=(1.0_r8+gamma)*(rho(i,j,k+1)-rho(i-1,j,k+1))+ &
651 & (1.0_r8-gamma)*(rho(i,j,k )-rho(i-1,j,k ))
652 cff2=rho(i,j,k+1)+rho(i-1,j,k+1)- &
653 & rho(i,j,k )-rho(i-1,j,k )
654 cff3=z_r(i,j,k+1)+z_r(i-1,j,k+1)- &
655 & z_r(i,j,k )-z_r(i-1,j,k )
656 cff4=(1.0_r8+gamma)*(z_r(i,j,k+1)-z_r(i-1,j,k+1))+ &
657 & (1.0_r8-gamma)*(z_r(i,j,k )-z_r(i-1,j,k ))
658
659
660
661
662
663
664 adfac=fac3*ad_phix(i)
665 ad_cff1=ad_cff1+cff3*adfac
666 ad_cff2=ad_cff2-cff4*adfac
667 ad_cff3=ad_cff3+cff1*adfac
668 ad_cff4=ad_cff4-cff2*adfac
669
670
671
672
673
674
675
676
677
678 adfac1=(1.0_r8+gamma)*ad_cff4
679 adfac2=(1.0_r8-gamma)*ad_cff4
680 ad_z_r(i-1,j,k )=ad_z_r(i-1,j,k )-adfac2-ad_cff3
681 ad_z_r(i ,j,k )=ad_z_r(i ,j,k )+adfac2-ad_cff3
682 ad_z_r(i-1,j,k+1)=ad_z_r(i-1,j,k+1)-adfac1+ad_cff3
683 ad_z_r(i ,j,k+1)=ad_z_r(i ,j,k+1)+adfac1+ad_cff3
684 ad_gamma=ad_gamma+ &
685 & (z_r(i,j,k+1)-z_r(i-1,j,k+1)- &
686 & z_r(i,j,k )+z_r(i-1,j,k ))*ad_cff4
687 ad_cff4=0.0_r8
688 ad_cff3=0.0_r8
689
690
691
692
693
694
695
696
697
698 adfac1=(1.0_r8+gamma)*ad_cff1
699 adfac2=(1.0_r8-gamma)*ad_cff1
700 ad_rho(i-1,j,k )=ad_rho(i-1,j,k )-adfac2-ad_cff2
701 ad_rho(i ,j,k )=ad_rho(i ,j,k )+adfac2-ad_cff2
702 ad_rho(i-1,j,k+1)=ad_rho(i-1,j,k+1)-adfac1+ad_cff2
703 ad_rho(i ,j,k+1)=ad_rho(i ,j,k+1)+adfac1+ad_cff2
704 ad_gamma=ad_gamma+ &
705 & (rho(i,j,k+1)-rho(i-1,j,k+1)- &
706 & rho(i,j,k )+rho(i-1,j,k ))*ad_cff1
707 ad_cff2=0.0_r8
708 ad_cff1=0.0_r8
709
710 cff1=1.0_r8/((z_r(i ,j,k+1)-z_r(i ,j,k))* &
711 & (z_r(i-1,j,k+1)-z_r(i-1,j,k)))
712 cff2=z_r(i ,j,k )-z_r(i-1,j,k )+ &
713 & z_r(i ,j,k+1)-z_r(i-1,j,k+1)
714 cff3=z_r(i ,j,k+1)-z_r(i ,j,k )- &
715 & z_r(i-1,j,k+1)+z_r(i-1,j,k )
716
717
718
719
720
721 adfac=0.125_r8*ad_gamma
722 adfac1=adfac*cff1
723 ad_cff3=ad_cff3+cff2*adfac1
724 ad_cff2=ad_cff2+cff3*adfac1
725 ad_cff1=ad_cff1+cff2*cff3*adfac
726 ad_gamma=0.0_r8
727
728
729
730
731
732 ad_z_r(i-1,j,k )=ad_z_r(i-1,j,k )-ad_cff2+ad_cff3
733 ad_z_r(i ,j,k )=ad_z_r(i ,j,k )+ad_cff2-ad_cff3
734 ad_z_r(i-1,j,k+1)=ad_z_r(i-1,j,k+1)-ad_cff2-ad_cff3
735 ad_z_r(i ,j,k+1)=ad_z_r(i ,j,k+1)+ad_cff2+ad_cff3
736 ad_cff3=0.0
737 ad_cff2=0.0
738
739
740
741
742
743 adfac=-cff1*cff1*ad_cff1
744 adfac1=adfac*(z_r(i-1,j,k+1)-z_r(i-1,j,k))
745 adfac2=adfac*(z_r(i ,j,k+1)-z_r(i ,j,k))
746 ad_z_r(i-1,j,k )=ad_z_r(i-1,j,k )-adfac2
747 ad_z_r(i ,j,k )=ad_z_r(i ,j,k )-adfac1
748 ad_z_r(i-1,j,k+1)=ad_z_r(i-1,j,k+1)+adfac2
749 ad_z_r(i ,j,k+1)=ad_z_r(i ,j,k+1)+adfac1
750 ad_cff1=0.0_r8
751#else
752 cff1=rho(i,j,k+1)-rho(i-1,j,k+1)+ &
753 & rho(i,j,k )-rho(i-1,j,k )
754 cff2=rho(i,j,k+1)+rho(i-1,j,k+1)- &
755 & rho(i,j,k )-rho(i-1,j,k )
756 cff3=z_r(i,j,k+1)+z_r(i-1,j,k+1)- &
757 & z_r(i,j,k )-z_r(i-1,j,k )
758 cff4=z_r(i,j,k+1)-z_r(i-1,j,k+1)+ &
759 & z_r(i,j,k )-z_r(i-1,j,k )
760
761
762
763
764
765
766 adfac=fac3*ad_phix(i)
767 ad_cff1=ad_cff1+cff3*adfac
768 ad_cff2=ad_cff2-cff4*adfac
769 ad_cff3=ad_cff3+cff1*adfac
770 ad_cff4=ad_cff4-cff2*adfac
771
772
773
774
775
776 ad_z_r(i-1,j,k )=ad_z_r(i-1,j,k )-ad_cff3-ad_cff4
777 ad_z_r(i ,j,k )=ad_z_r(i ,j,k )-ad_cff3+ad_cff4
778 ad_z_r(i-1,j,k+1)=ad_z_r(i-1,j,k+1)+ad_cff3-ad_cff4
779 ad_z_r(i ,j,k+1)=ad_z_r(i ,j,k+1)+ad_cff3+ad_cff4
780 ad_cff4=0.0_r8
781 ad_cff3=0.0_r8
782
783
784
785
786
787 ad_rho(i-1,j,k )=ad_rho(i-1,j,k )-ad_cff2-ad_cff1
788 ad_rho(i ,j,k )=ad_rho(i ,j,k )-ad_cff2+ad_cff1
789 ad_rho(i-1,j,k+1)=ad_rho(i-1,j,k+1)+ad_cff2-ad_cff1
790 ad_rho(i ,j,k+1)=ad_rho(i ,j,k+1)+ad_cff2+ad_cff1
791 ad_cff2=0.0_r8
792 ad_cff1=0.0_r8
793#endif
794 END DO
795 END DO
796
797
798
799 DO i=istru,iend
800#ifdef TIDE_GENERATING_FORCES
801 cff1=z_w(i ,j,
n(ng))-eq_tide(i ,j)-z_r(i ,j,
n(ng))+ &
802 & z_w(i-1,j,
n(ng))-eq_tide(i-1,j)-z_r(i-1,j,
n(ng))
803#else
804 cff1=z_w(i ,j,
n(ng))-z_r(i ,j,
n(ng))+ &
805 & z_w(i-1,j,
n(ng))-z_r(i-1,j,
n(ng))
806#endif
807 phix(i)=fac1*(rho(i,j,
n(ng))-rho(i-1,j,
n(ng)))*cff1
808#ifdef ATM_PRESS
809 phix(i)=phix(i)+fac*(pair(i,j)-pair(i-1,j))
810#endif
811#ifdef RHO_SURF
812 phix(i)=phix(i)+ &
813 & (fac2+fac1*(rho(i,j,
n(ng))+rho(i-1,j,
n(ng))))* &
814 & (z_w(i,j,
n(ng))-z_w(i-1,j,
n(ng)))
815#endif
816#ifdef DIAGNOSTICS_UV
817
818#endif
819
820
821
822
823
824
825 adfac=-0.5_r8*on_u(i,j)*ad_ru(i,j,
n(ng),nrhs)
826 adfac1=adfac*phix(i)
827 ad_phix(i)=ad_phix(i)+(hz(i ,j,
n(ng))+ &
828 & hz(i-1,j,
n(ng)))*adfac
829 ad_hz(i-1,j,
n(ng))=ad_hz(i-1,j,
n(ng))+adfac1
830 ad_hz(i ,j,
n(ng))=ad_hz(i ,j,
n(ng))+adfac1
831 ad_ru(i,j,
n(ng),nrhs)=0.0_r8
832#ifdef RHO_SURF
833
834
835
836
837
838
839 adfac1=fac1*(z_w(i,j,
n(ng))-z_w(i-1,j,
n(ng)))* &
840 & ad_phix(i)
841 adfac2=(fac2+fac1*(rho(i,j,
n(ng))+rho(i-1,j,
n(ng))))* &
842 & ad_phix(i)
843 ad_rho(i-1,j,
n(ng))=ad_rho(i-1,j,
n(ng))+adfac1
844 ad_rho(i ,j,
n(ng))=ad_rho(i ,j,
n(ng))+adfac1
845 ad_z_w(i-1,j,
n(ng))=ad_z_w(i-1,j,
n(ng))-adfac2
846 ad_z_w(i ,j,
n(ng))=ad_z_w(i ,j,
n(ng))+adfac2
847#endif
848
849
850
851
852 adfac=fac1*ad_phix(i)
853 adfac1=adfac*cff1
854 ad_rho(i-1,j,
n(ng))=ad_rho(i-1,j,
n(ng))-adfac1
855 ad_rho(i ,j,
n(ng))=ad_rho(i ,j,
n(ng))+adfac1
856 ad_cff1=ad_cff1+ &
857 & (rho(i,j,
n(ng))-rho(i-1,j,
n(ng)))*adfac
858 ad_phix(i)=0.0
859#ifdef TIDE_GENERATING_FORCES
860
861
862
863
864
865 ad_eq_tide(i-1,j)=ad_eq_tide(i-1,j)-ad_cff1
866 ad_eq_tide(i ,j)=ad_eq_tide(i ,j)-ad_cff1
867 ad_z_r(i-1,j,
n(ng))=ad_z_r(i-1,j,
n(ng))-ad_cff1
868 ad_z_r(i ,j,
n(ng))=ad_z_r(i ,j,
n(ng))-ad_cff1
869 ad_z_w(i-1,j,
n(ng))=ad_z_w(i-1,j,
n(ng))+ad_cff1
870 ad_z_w(i ,j,
n(ng))=ad_z_w(i ,j,
n(ng))+ad_cff1
871 ad_cff1=0.0_r8
872#else
873
874
875
876 ad_z_r(i-1,j,
n(ng))=ad_z_r(i-1,j,
n(ng))-ad_cff1
877 ad_z_r(i ,j,
n(ng))=ad_z_r(i ,j,
n(ng))-ad_cff1
878 ad_z_w(i-1,j,
n(ng))=ad_z_w(i-1,j,
n(ng))+ad_cff1
879 ad_z_w(i ,j,
n(ng))=ad_z_w(i ,j,
n(ng))+ad_cff1
880 ad_cff1=0.0_r8
881#endif
882 END DO
883 END DO j_loop
884
885 RETURN
integer, dimension(:), allocatable n