99 & LBi, UBi, LBj, UBj, &
100 & IminS, ImaxS, JminS, JmaxS, &
107#ifdef TIDE_GENERATING_FORCES
108 & eq_tide, tl_eq_tide, &
124 integer,
intent(in) :: ng, tile
125 integer,
intent(in) :: LBi, UBi, LBj, UBj
126 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
127 integer,
intent(in) :: nrhs
130 real(r8),
intent(in) :: om_v(LBi:,LBj:)
131 real(r8),
intent(in) :: on_u(LBi:,LBj:)
132 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
133 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
134 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
135 real(r8),
intent(in) :: rho(LBi:,LBj:,:)
137 real(r8),
intent(in) :: tl_Hz(LBi:,LBj:,:)
138 real(r8),
intent(in) :: tl_z_r(LBi:,LBj:,:)
139 real(r8),
intent(in) :: tl_z_w(LBi:,LBj:,0:)
140 real(r8),
intent(in) :: tl_rho(LBi:,LBj:,:)
142# ifdef TIDE_GENERATING_FORCES
143 real(r8),
intent(in) :: eq_tide(LBi:,LBj:)
144 real(r8),
intent(in) :: tl_eq_tide(LBi:,LBj:)
147 real(r8),
intent(in) :: Pair(LBi:,LBj:)
149# ifdef DIAGNOSTICS_UV
153 real(r8),
intent(inout) :: tl_ru(LBi:,LBj:,0:,:)
154 real(r8),
intent(inout) :: tl_rv(LBi:,LBj:,0:,:)
156 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
157 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
158 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
159 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
160 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
161 real(r8),
intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
163 real(r8),
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
164 real(r8),
intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
165 real(r8),
intent(in) :: tl_z_w(LBi:UBi,LBj:UBj,0:N(ng))
166 real(r8),
intent(in) :: tl_rho(LBi:UBi,LBj:UBj,N(ng))
168# ifdef TIDE_GENERATING_FORCES
169 real(r8),
intent(in) :: eq_tide(LBi:,LBj:)
170 real(r8),
intent(in) :: tl_eq_tide(LBi:,LBj:)
173 real(r8),
intent(in) :: Pair(LBi:UBi,LBj:UBj)
175# ifdef DIAGNOSTICS_UV
179 real(r8),
intent(inout) :: tl_ru(LBi:UBi,LBj:UBj,0:N(ng),2)
180 real(r8),
intent(inout) :: tl_rv(LBi:UBi,LBj:UBj,0:N(ng),2)
187 real(r8) :: fac, fac1, fac2, fac3
188 real(r8) :: cff1, cff2, cff3, cff4
189 real(r8) :: tl_cff1, tl_cff2, tl_cff3, tl_cff4
191 real(r8) :: gamma, tl_gamma
194 real(r8),
dimension(IminS:ImaxS) :: phie
195 real(r8),
dimension(IminS:ImaxS) :: phix
197 real(r8),
dimension(IminS:ImaxS) :: tl_phie
198 real(r8),
dimension(IminS:ImaxS) :: tl_phix
200#include "set_bounds.h"
212 fac2=1000.0_r8*
g/
rho0
217#ifdef TIDE_GENERATING_FORCES
218 cff1=z_w(i ,j,n(ng))-eq_tide(i ,j)-z_r(i ,j,n(ng))+ &
219 & z_w(i-1,j,n(ng))-eq_tide(i-1,j)-z_r(i-1,j,n(ng))
220 tl_cff1=tl_z_w(i ,j,n(ng))-tl_eq_tide(i ,j)- &
221 & tl_z_r(i ,j,n(ng))+ &
222 & tl_z_w(i-1,j,n(ng))-tl_eq_tide(i-1,j)- &
223 & tl_z_r(i-1,j,n(ng))
225 cff1=z_w(i ,j,n(ng))-z_r(i ,j,n(ng))+ &
226 & z_w(i-1,j,n(ng))-z_r(i-1,j,n(ng))
227 tl_cff1=tl_z_w(i ,j,n(ng))-tl_z_r(i ,j,n(ng))+ &
228 & tl_z_w(i-1,j,n(ng))-tl_z_r(i-1,j,n(ng))
230 phix(i)=fac1*(rho(i,j,n(ng))-rho(i-1,j,n(ng)))*cff1
232 & ((tl_rho(i,j,n(ng))-tl_rho(i-1,j,n(ng)))*cff1+ &
233 & (rho(i,j,n(ng))-rho(i-1,j,n(ng)))*tl_cff1)- &
238 phix(i)=phix(i)+fac*(pair(i,j)-pair(i-1,j))
242 & (fac2+fac1*(rho(i,j,n(ng))+rho(i-1,j,n(ng))))* &
243 & (z_w(i,j,n(ng))-z_w(i-1,j,n(ng)))
244 tl_phix(i)=tl_phix(i)+ &
245 & (fac1*(tl_rho(i,j,n(ng))+tl_rho(i-1,j,n(ng))))* &
246 & (z_w(i,j,n(ng))-z_w(i-1,j,n(ng)))+ &
247 & (fac2+fac1*(rho(i,j,n(ng))+rho(i-1,j,n(ng))))* &
248 & (tl_z_w(i,j,n(ng))-tl_z_w(i-1,j,n(ng)))- &
250 & fac1*(rho(i,j,n(ng))+rho(i-1,j,n(ng)))* &
251 & (z_w(i,j,n(ng))-z_w(i-1,j,n(ng)))
257 tl_ru(i,j,n(ng),nrhs)=-0.5_r8*on_u(i,j)* &
258 & ((tl_hz(i ,j,n(ng))+ &
259 & tl_hz(i-1,j,n(ng)))*phix(i)+ &
261 & hz(i-1,j,n(ng)))*tl_phix(i))+ &
263 & 0.5_r8*on_u(i,j)* &
265 & hz(i-1,j,n(ng)))*phix(i)
278 cff1=1.0_r8/((z_r(i ,j,k+1)-z_r(i ,j,k))* &
279 & (z_r(i-1,j,k+1)-z_r(i-1,j,k)))
280 tl_cff1=-cff1*cff1*((tl_z_r(i ,j,k+1)-tl_z_r(i ,j,k))* &
281 & (z_r(i-1,j,k+1)-z_r(i-1,j,k))+ &
282 & (z_r(i ,j,k+1)-z_r(i ,j,k))* &
283 & (tl_z_r(i-1,j,k+1)-tl_z_r(i-1,j,k)))+ &
287 cff2=z_r(i ,j,k )-z_r(i-1,j,k )+ &
288 & z_r(i ,j,k+1)-z_r(i-1,j,k+1)
289 tl_cff2=tl_z_r(i ,j,k )-tl_z_r(i-1,j,k )+ &
290 & tl_z_r(i ,j,k+1)-tl_z_r(i-1,j,k+1)
291 cff3=z_r(i ,j,k+1)-z_r(i ,j,k )- &
292 & z_r(i-1,j,k+1)+z_r(i-1,j,k )
293 tl_cff3=tl_z_r(i ,j,k+1)-tl_z_r(i ,j,k )- &
294 & tl_z_r(i-1,j,k+1)+tl_z_r(i-1,j,k )
295 gamma=0.125_r8*cff1*cff2*cff3
296 tl_gamma=0.125_r8*(tl_cff1*cff2*cff3+ &
297 & cff1*(tl_cff2*cff3+ &
303 cff1=(1.0_r8+gamma)*(rho(i,j,k+1)-rho(i-1,j,k+1))+ &
304 & (1.0_r8-gamma)*(rho(i,j,k )-rho(i-1,j,k ))
305 tl_cff1=tl_gamma*(rho(i,j,k+1)-rho(i-1,j,k+1)- &
306 & rho(i,j,k )+rho(i-1,j,k ))+ &
307 & (1.0_r8+gamma)*(tl_rho(i ,j,k+1)- &
308 & tl_rho(i-1,j,k+1))+ &
309 & (1.0_r8-gamma)*(tl_rho(i ,j,k )- &
310 & tl_rho(i-1,j,k ))- &
312 & gamma*((rho(i,j,k+1)-rho(i-1,j,k+1))- &
313 & (rho(i,j,k )-rho(i-1,j,k )))
315 cff2=rho(i,j,k+1)+rho(i-1,j,k+1)- &
316 & rho(i,j,k )-rho(i-1,j,k )
317 tl_cff2=tl_rho(i,j,k+1)+tl_rho(i-1,j,k+1)- &
318 & tl_rho(i,j,k )-tl_rho(i-1,j,k )
319 cff3=z_r(i,j,k+1)+z_r(i-1,j,k+1)- &
320 & z_r(i,j,k )-z_r(i-1,j,k )
321 tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i-1,j,k+1)- &
322 & tl_z_r(i,j,k )-tl_z_r(i-1,j,k )
323 cff4=(1.0_r8+gamma)*(z_r(i,j,k+1)-z_r(i-1,j,k+1))+ &
324 & (1.0_r8-gamma)*(z_r(i,j,k )-z_r(i-1,j,k ))
325 tl_cff4=tl_gamma*(z_r(i,j,k+1)-z_r(i-1,j,k+1)- &
326 & z_r(i,j,k )+z_r(i-1,j,k ))+ &
327 & (1.0_r8+gamma)*(tl_z_r(i ,j,k+1)- &
328 & tl_z_r(i-1,j,k+1))+ &
329 & (1.0_r8-gamma)*(tl_z_r(i ,j,k )- &
330 & tl_z_r(i-1,j,k ))- &
332 & gamma*((z_r(i,j,k+1)-z_r(i-1,j,k+1))- &
333 & (z_r(i,j,k )-z_r(i-1,j,k )))
336 & fac3*(cff1*cff3-cff2*cff4)
337 tl_phix(i)=tl_phix(i)+ &
338 & fac3*(tl_cff1*cff3+ &
347 cff1=rho(i,j,k+1)-rho(i-1,j,k+1)+ &
348 & rho(i,j,k )-rho(i-1,j,k )
349 cff2=rho(i,j,k+1)+rho(i-1,j,k+1)- &
350 & rho(i,j,k )-rho(i-1,j,k )
351 tl_cff1=tl_rho(i,j,k+1)-tl_rho(i-1,j,k+1)+ &
352 & tl_rho(i,j,k )-tl_rho(i-1,j,k )
353 tl_cff2=tl_rho(i,j,k+1)+tl_rho(i-1,j,k+1)- &
354 & tl_rho(i,j,k )-tl_rho(i-1,j,k )
355 cff3=z_r(i,j,k+1)+z_r(i-1,j,k+1)- &
356 & z_r(i,j,k )-z_r(i-1,j,k )
357 cff4=z_r(i,j,k+1)-z_r(i-1,j,k+1)+ &
358 & z_r(i,j,k )-z_r(i-1,j,k )
359 tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i-1,j,k+1)- &
360 & tl_z_r(i,j,k )-tl_z_r(i-1,j,k )
361 tl_cff4=tl_z_r(i,j,k+1)-tl_z_r(i-1,j,k+1)+ &
362 & tl_z_r(i,j,k )-tl_z_r(i-1,j,k )
364 & fac3*(cff1*cff3-cff2*cff4)
365 tl_phix(i)=tl_phix(i)+ &
366 & fac3*(tl_cff1*cff3+ &
378 tl_ru(i,j,k,nrhs)=-0.5_r8*on_u(i,j)* &
379 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
381 & (hz(i,j,k)+hz(i-1,j,k))* &
384 & 0.5_r8*on_u(i,j)* &
385 & (hz(i,j,k)+hz(i-1,j,k))*phix(i)
401 cff1=z_w(i,j ,n(ng))-z_r(i,j ,n(ng))+ &
402 & z_w(i,j-1,n(ng))-z_r(i,j-1,n(ng))
403 tl_cff1=tl_z_w(i,j ,n(ng))-tl_z_r(i,j ,n(ng))+ &
404 & tl_z_w(i,j-1,n(ng))-tl_z_r(i,j-1,n(ng))
405 phie(i)=fac1*(rho(i,j,n(ng))-rho(i,j-1,n(ng)))*cff1
407 & ((tl_rho(i,j,n(ng))-tl_rho(i,j-1,n(ng)))*cff1+ &
408 & (rho(i,j,n(ng))-rho(i,j-1,n(ng)))*tl_cff1)- &
413 phie(i)=phie(i)+fac*(pair(i,j)-pair(i,j-1))
417 & (fac2+fac1*(rho(i,j,n(ng))+rho(i,j-1,n(ng))))* &
418 & (z_w(i,j,n(ng))-z_w(i,j-1,n(ng)))
419 tl_phie(i)=tl_phie(i)+ &
420 & (fac1*(tl_rho(i,j,n(ng))+tl_rho(i,j-1,n(ng))))* &
421 & (z_w(i,j,n(ng))-z_w(i,j-1,n(ng)))+ &
422 & (fac2+fac1*(rho(i,j,n(ng))+rho(i,j-1,n(ng))))* &
423 & (tl_z_w(i,j,n(ng))-tl_z_w(i,j-1,n(ng)))- &
425 & fac1*(rho(i,j,n(ng))+rho(i,j-1,n(ng)))* &
426 & (z_w(i,j,n(ng))-z_w(i,j-1,n(ng)))
432 tl_rv(i,j,n(ng),nrhs)=-0.5_r8*om_v(i,j)* &
433 & ((tl_hz(i,j ,n(ng))+ &
434 & tl_hz(i,j-1,n(ng)))*phie(i)+ &
436 & hz(i,j-1,n(ng)))*tl_phie(i))+ &
438 & 0.5_r8*om_v(i,j)* &
440 & hz(i,j-1,n(ng)))*phie(i)
453 cff1=1.0_r8/((z_r(i,j ,k+1)-z_r(i,j ,k))* &
454 & (z_r(i,j-1,k+1)-z_r(i,j-1,k)))
455 tl_cff1=-cff1*cff1*((tl_z_r(i,j ,k+1)-tl_z_r(i,j ,k))* &
456 & (z_r(i,j-1,k+1)-z_r(i,j-1,k))+ &
457 & (z_r(i,j ,k+1)-z_r(i,j ,k))* &
458 & (tl_z_r(i,j-1,k+1)-tl_z_r(i,j-1,k)))+ &
462 cff2=z_r(i,j ,k )-z_r(i,j-1,k )+ &
463 & z_r(i,j ,k+1)-z_r(i,j-1,k+1)
464 tl_cff2=tl_z_r(i,j ,k )-tl_z_r(i,j-1,k )+ &
465 & tl_z_r(i,j ,k+1)-tl_z_r(i,j-1,k+1)
466 cff3=z_r(i,j ,k+1)-z_r(i,j ,k )- &
467 & z_r(i,j-1,k+1)+z_r(i,j-1,k )
468 tl_cff3=tl_z_r(i,j ,k+1)-tl_z_r(i,j ,k )- &
469 & tl_z_r(i,j-1,k+1)+tl_z_r(i,j-1,k )
470 gamma=0.125_r8*cff1*cff2*cff3
471 tl_gamma=0.125_r8*(tl_cff1*cff2*cff3+ &
472 & cff1*(tl_cff2*cff3+ &
478 cff1=(1.0_r8+gamma)*(rho(i,j,k+1)-rho(i,j-1,k+1))+ &
479 & (1.0_r8-gamma)*(rho(i,j,k )-rho(i,j-1,k ))
480 tl_cff1=tl_gamma*(rho(i,j,k+1)-rho(i,j-1,k+1)- &
481 & rho(i,j,k )+rho(i,j-1,k ))+ &
482 & (1.0_r8+gamma)*(tl_rho(i,j ,k+1)- &
483 & tl_rho(i,j-1,k+1))+ &
484 & (1.0_r8-gamma)*(tl_rho(i,j ,k )- &
485 & tl_rho(i,j-1,k ))- &
487 & gamma*((rho(i,j,k+1)-rho(i,j-1,k+1))- &
488 & (rho(i,j,k )-rho(i,j-1,k )))
490 cff2=rho(i,j,k+1)+rho(i,j-1,k+1)- &
491 & rho(i,j,k )-rho(i,j-1,k )
492 tl_cff2=tl_rho(i,j,k+1)+tl_rho(i,j-1,k+1)- &
493 & tl_rho(i,j,k )-tl_rho(i,j-1,k )
494 cff3=z_r(i,j,k+1)+z_r(i,j-1,k+1)- &
495 & z_r(i,j,k )-z_r(i,j-1,k )
496 tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i,j-1,k+1)- &
497 & tl_z_r(i,j,k )-tl_z_r(i,j-1,k )
498 cff4=(1.0_r8+gamma)*(z_r(i,j,k+1)-z_r(i,j-1,k+1))+ &
499 & (1.0_r8-gamma)*(z_r(i,j,k )-z_r(i,j-1,k ))
500 tl_cff4=tl_gamma*(z_r(i,j,k+1)-z_r(i,j-1,k+1)- &
501 & z_r(i,j,k )+z_r(i,j-1,k ))+ &
502 & (1.0_r8+gamma)*(tl_z_r(i,j ,k+1)- &
503 & tl_z_r(i,j-1,k+1))+ &
504 & (1.0_r8-gamma)*(tl_z_r(i,j ,k )- &
505 & tl_z_r(i,j-1,k ))- &
507 & gamma*((z_r(i,j,k+1)-z_r(i,j-1,k+1))- &
508 & (z_r(i,j,k )-z_r(i,j-1,k )))
511 & fac3*(cff1*cff3-cff2*cff4)
512 tl_phie(i)=tl_phie(i)+ &
513 & fac3*(tl_cff1*cff3+ &
522 cff1=rho(i,j,k+1)-rho(i,j-1,k+1)+ &
523 & rho(i,j,k )-rho(i,j-1,k )
524 cff2=rho(i,j,k+1)+rho(i,j-1,k+1)- &
525 & rho(i,j,k )-rho(i,j-1,k )
526 tl_cff1=tl_rho(i,j,k+1)-tl_rho(i,j-1,k+1)+ &
527 & tl_rho(i,j,k )-tl_rho(i,j-1,k )
528 tl_cff2=tl_rho(i,j,k+1)+tl_rho(i,j-1,k+1)- &
529 & tl_rho(i,j,k )-tl_rho(i,j-1,k )
530 cff3=z_r(i,j,k+1)+z_r(i,j-1,k+1)- &
531 & z_r(i,j,k )-z_r(i,j-1,k )
532 cff4=z_r(i,j,k+1)-z_r(i,j-1,k+1)+ &
533 & z_r(i,j,k )-z_r(i,j-1,k )
534 tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i,j-1,k+1)- &
535 & tl_z_r(i,j,k )-tl_z_r(i,j-1,k )
536 tl_cff4=tl_z_r(i,j,k+1)-tl_z_r(i,j-1,k+1)+ &
537 & tl_z_r(i,j,k )-tl_z_r(i,j-1,k )
539 & fac3*(cff1*cff3-cff2*cff4)
540 tl_phie(i)=tl_phie(i)+ &
541 & fac3*(tl_cff1*cff3+ &
553 tl_rv(i,j,k,nrhs)=-0.5_r8*om_v(i,j)* &
554 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
556 & (hz(i,j,k)+hz(i,j-1,k))* &
559 & 0.5_r8*om_v(i,j)* &
560 & (hz(i,j,k)+hz(i,j-1,k))*phie(i)