98 & LBi, UBi, LBj, UBj, &
99 & IminS, ImaxS, JminS, JmaxS, &
106#ifdef TIDE_GENERATING_FORCES
107 & eq_tide, tl_eq_tide, &
123 integer,
intent(in) :: ng, tile
124 integer,
intent(in) :: LBi, UBi, LBj, UBj
125 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
126 integer,
intent(in) :: nrhs
129 real(r8),
intent(in) :: om_v(LBi:,LBj:)
130 real(r8),
intent(in) :: on_u(LBi:,LBj:)
131 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
132 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
133 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
134 real(r8),
intent(in) :: rho(LBi:,LBj:,:)
136 real(r8),
intent(in) :: tl_Hz(LBi:,LBj:,:)
137 real(r8),
intent(in) :: tl_z_r(LBi:,LBj:,:)
138 real(r8),
intent(in) :: tl_z_w(LBi:,LBj:,0:)
139 real(r8),
intent(in) :: tl_rho(LBi:,LBj:,:)
141# ifdef TIDE_GENERATING_FORCES
142 real(r8),
intent(in) :: eq_tide(LBi:,LBj:)
143 real(r8),
intent(in) :: tl_eq_tide(LBi:,LBj:)
146 real(r8),
intent(in) :: Pair(LBi:,LBj:)
148# ifdef DIAGNOSTICS_UV
152 real(r8),
intent(inout) :: tl_ru(LBi:,LBj:,0:,:)
153 real(r8),
intent(inout) :: tl_rv(LBi:,LBj:,0:,:)
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))
162 real(r8),
intent(in) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
163 real(r8),
intent(in) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
164 real(r8),
intent(in) :: tl_z_w(LBi:UBi,LBj:UBj,0:N(ng))
165 real(r8),
intent(in) :: tl_rho(LBi:UBi,LBj:UBj,N(ng))
167# ifdef TIDE_GENERATING_FORCES
168 real(r8),
intent(in) :: eq_tide(LBi:,LBj:)
169 real(r8),
intent(in) :: tl_eq_tide(LBi:,LBj:)
172 real(r8),
intent(in) :: Pair(LBi:UBi,LBj:UBj)
174# ifdef DIAGNOSTICS_UV
178 real(r8),
intent(inout) :: tl_ru(LBi:UBi,LBj:UBj,0:N(ng),2)
179 real(r8),
intent(inout) :: tl_rv(LBi:UBi,LBj:UBj,0:N(ng),2)
186 real(r8) :: fac, fac1, fac2, fac3
187 real(r8) :: cff1, cff2, cff3, cff4
188 real(r8) :: tl_cff1, tl_cff2, tl_cff3, tl_cff4
190 real(r8) :: gamma, tl_gamma
193 real(r8),
dimension(IminS:ImaxS) :: phie
194 real(r8),
dimension(IminS:ImaxS) :: phix
196 real(r8),
dimension(IminS:ImaxS) :: tl_phie
197 real(r8),
dimension(IminS:ImaxS) :: tl_phix
199#include "set_bounds.h"
211 fac2=1000.0_r8*
g/
rho0
216#ifdef TIDE_GENERATING_FORCES
217 cff1=z_w(i ,j,n(ng))-eq_tide(i ,j)-z_r(i ,j,n(ng))+ &
218 & z_w(i-1,j,n(ng))-eq_tide(i-1,j)-z_r(i-1,j,n(ng))
219 tl_cff1=tl_z_w(i ,j,n(ng))-tl_eq_tide(i ,j)- &
220 & tl_z_r(i ,j,n(ng))+ &
221 & tl_z_w(i-1,j,n(ng))-tl_eq_tide(i-1,j)- &
222 & tl_z_r(i-1,j,n(ng))
224 cff1=z_w(i ,j,n(ng))-z_r(i ,j,n(ng))+ &
225 & z_w(i-1,j,n(ng))-z_r(i-1,j,n(ng))
226 tl_cff1=tl_z_w(i ,j,n(ng))-tl_z_r(i ,j,n(ng))+ &
227 & tl_z_w(i-1,j,n(ng))-tl_z_r(i-1,j,n(ng))
229 phix(i)=fac1*(rho(i,j,n(ng))-rho(i-1,j,n(ng)))*cff1
231 & ((tl_rho(i,j,n(ng))-tl_rho(i-1,j,n(ng)))*cff1+ &
232 & (rho(i,j,n(ng))-rho(i-1,j,n(ng)))*tl_cff1)
234 phix(i)=phix(i)+fac*(pair(i,j)-pair(i-1,j))
238 & (fac2+fac1*(rho(i,j,n(ng))+rho(i-1,j,n(ng))))* &
239 & (z_w(i,j,n(ng))-z_w(i-1,j,n(ng)))
240 tl_phix(i)=tl_phix(i)+ &
241 & (fac1*(tl_rho(i,j,n(ng))+tl_rho(i-1,j,n(ng))))* &
242 & (z_w(i,j,n(ng))-z_w(i-1,j,n(ng)))+ &
243 & (fac2+fac1*(rho(i,j,n(ng))+rho(i-1,j,n(ng))))* &
244 & (tl_z_w(i,j,n(ng))-tl_z_w(i-1,j,n(ng)))
249 tl_ru(i,j,n(ng),nrhs)=-0.5_r8*on_u(i,j)* &
250 & ((tl_hz(i ,j,n(ng))+ &
251 & tl_hz(i-1,j,n(ng)))*phix(i)+ &
253 & hz(i-1,j,n(ng)))*tl_phix(i))
265 cff1=1.0_r8/((z_r(i ,j,k+1)-z_r(i ,j,k))* &
266 & (z_r(i-1,j,k+1)-z_r(i-1,j,k)))
267 tl_cff1=-cff1*cff1*((tl_z_r(i ,j,k+1)-tl_z_r(i ,j,k))* &
268 & (z_r(i-1,j,k+1)-z_r(i-1,j,k))+ &
269 & (z_r(i ,j,k+1)-z_r(i ,j,k))* &
270 & (tl_z_r(i-1,j,k+1)-tl_z_r(i-1,j,k)))
271 cff2=z_r(i ,j,k )-z_r(i-1,j,k )+ &
272 & z_r(i ,j,k+1)-z_r(i-1,j,k+1)
273 tl_cff2=tl_z_r(i ,j,k )-tl_z_r(i-1,j,k )+ &
274 & tl_z_r(i ,j,k+1)-tl_z_r(i-1,j,k+1)
275 cff3=z_r(i ,j,k+1)-z_r(i ,j,k )- &
276 & z_r(i-1,j,k+1)+z_r(i-1,j,k )
277 tl_cff3=tl_z_r(i ,j,k+1)-tl_z_r(i ,j,k )- &
278 & tl_z_r(i-1,j,k+1)+tl_z_r(i-1,j,k )
279 gamma=0.125_r8*cff1*cff2*cff3
280 tl_gamma=0.125_r8*(tl_cff1*cff2*cff3+ &
281 & cff1*(tl_cff2*cff3+ &
284 cff1=(1.0_r8+gamma)*(rho(i,j,k+1)-rho(i-1,j,k+1))+ &
285 & (1.0_r8-gamma)*(rho(i,j,k )-rho(i-1,j,k ))
286 tl_cff1=tl_gamma*(rho(i,j,k+1)-rho(i-1,j,k+1)- &
287 & rho(i,j,k )+rho(i-1,j,k ))+ &
288 & (1.0_r8+gamma)*(tl_rho(i ,j,k+1)- &
289 & tl_rho(i-1,j,k+1))+ &
290 & (1.0_r8-gamma)*(tl_rho(i ,j,k )- &
292 cff2=rho(i,j,k+1)+rho(i-1,j,k+1)- &
293 & rho(i,j,k )-rho(i-1,j,k )
294 tl_cff2=tl_rho(i,j,k+1)+tl_rho(i-1,j,k+1)- &
295 & tl_rho(i,j,k )-tl_rho(i-1,j,k )
296 cff3=z_r(i,j,k+1)+z_r(i-1,j,k+1)- &
297 & z_r(i,j,k )-z_r(i-1,j,k )
298 tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i-1,j,k+1)- &
299 & tl_z_r(i,j,k )-tl_z_r(i-1,j,k )
300 cff4=(1.0_r8+gamma)*(z_r(i,j,k+1)-z_r(i-1,j,k+1))+ &
301 & (1.0_r8-gamma)*(z_r(i,j,k )-z_r(i-1,j,k ))
302 tl_cff4=tl_gamma*(z_r(i,j,k+1)-z_r(i-1,j,k+1)- &
303 & z_r(i,j,k )+z_r(i-1,j,k ))+ &
304 & (1.0_r8+gamma)*(tl_z_r(i ,j,k+1)- &
305 & tl_z_r(i-1,j,k+1))+ &
306 & (1.0_r8-gamma)*(tl_z_r(i ,j,k )- &
309 & fac3*(cff1*cff3-cff2*cff4)
310 tl_phix(i)=tl_phix(i)+ &
311 & fac3*(tl_cff1*cff3+ &
316 cff1=rho(i,j,k+1)-rho(i-1,j,k+1)+ &
317 & rho(i,j,k )-rho(i-1,j,k )
318 cff2=rho(i,j,k+1)+rho(i-1,j,k+1)- &
319 & rho(i,j,k )-rho(i-1,j,k )
320 tl_cff1=tl_rho(i,j,k+1)-tl_rho(i-1,j,k+1)+ &
321 & tl_rho(i,j,k )-tl_rho(i-1,j,k )
322 tl_cff2=tl_rho(i,j,k+1)+tl_rho(i-1,j,k+1)- &
323 & tl_rho(i,j,k )-tl_rho(i-1,j,k )
324 cff3=z_r(i,j,k+1)+z_r(i-1,j,k+1)- &
325 & z_r(i,j,k )-z_r(i-1,j,k )
326 cff4=z_r(i,j,k+1)-z_r(i-1,j,k+1)+ &
327 & z_r(i,j,k )-z_r(i-1,j,k )
328 tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i-1,j,k+1)- &
329 & tl_z_r(i,j,k )-tl_z_r(i-1,j,k )
330 tl_cff4=tl_z_r(i,j,k+1)-tl_z_r(i-1,j,k+1)+ &
331 & tl_z_r(i,j,k )-tl_z_r(i-1,j,k )
333 & fac3*(cff1*cff3-cff2*cff4)
334 tl_phix(i)=tl_phix(i)+ &
335 & fac3*(tl_cff1*cff3+ &
343 tl_ru(i,j,k,nrhs)=-0.5_r8*on_u(i,j)* &
344 & ((tl_hz(i,j,k)+tl_hz(i-1,j,k))* &
346 & (hz(i,j,k)+hz(i-1,j,k))* &
362#ifdef TIDE_GENERATING_FORCES
363 cff1=z_w(i,j ,n(ng))-eq_tide(i,j )-z_r(i,j ,n(ng))+ &
364 & z_w(i,j-1,n(ng))-eq_tide(i,j-1)-z_r(i,j-1,n(ng))
365 tl_cff1=tl_z_w(i,j ,n(ng))-tl_eq_tide(i,j )- &
366 & tl_z_r(i,j ,n(ng))+ &
367 & tl_z_w(i,j-1,n(ng))-tl_eq_tide(i,j-1)- &
368 & tl_z_r(i,j-1,n(ng))
370 cff1=z_w(i,j ,n(ng))-z_r(i,j ,n(ng))+ &
371 & z_w(i,j-1,n(ng))-z_r(i,j-1,n(ng))
372 tl_cff1=tl_z_w(i,j ,n(ng))-tl_z_r(i,j ,n(ng))+ &
373 & tl_z_w(i,j-1,n(ng))-tl_z_r(i,j-1,n(ng))
375 phie(i)=fac1*(rho(i,j,n(ng))-rho(i,j-1,n(ng)))*cff1
377 & ((tl_rho(i,j,n(ng))-tl_rho(i,j-1,n(ng)))*cff1+ &
378 & (rho(i,j,n(ng))-rho(i,j-1,n(ng)))*tl_cff1)
380 phie(i)=phie(i)+fac*(pair(i,j)-pair(i,j-1))
384 & (fac2+fac1*(rho(i,j,n(ng))+rho(i,j-1,n(ng))))* &
385 & (z_w(i,j,n(ng))-z_w(i,j-1,n(ng)))
386 tl_phie(i)=tl_phie(i)+ &
387 & (fac1*(tl_rho(i,j,n(ng))+tl_rho(i,j-1,n(ng))))* &
388 & (z_w(i,j,n(ng))-z_w(i,j-1,n(ng)))+ &
389 & (fac2+fac1*(rho(i,j,n(ng))+rho(i,j-1,n(ng))))* &
390 & (tl_z_w(i,j,n(ng))-tl_z_w(i,j-1,n(ng)))
395 tl_rv(i,j,n(ng),nrhs)=-0.5_r8*om_v(i,j)* &
396 & ((tl_hz(i,j ,n(ng))+ &
397 & tl_hz(i,j-1,n(ng)))*phie(i)+ &
399 & hz(i,j-1,n(ng)))*tl_phie(i))
400# ifdef DIAGNOSTICS_UV
411 cff1=1.0_r8/((z_r(i,j ,k+1)-z_r(i,j ,k))* &
412 & (z_r(i,j-1,k+1)-z_r(i,j-1,k)))
413 tl_cff1=-cff1*cff1*((tl_z_r(i,j ,k+1)-tl_z_r(i,j ,k))* &
414 & (z_r(i,j-1,k+1)-z_r(i,j-1,k))+ &
415 & (z_r(i,j ,k+1)-z_r(i,j ,k))* &
416 & (tl_z_r(i,j-1,k+1)-tl_z_r(i,j-1,k)))
417 cff2=z_r(i,j ,k )-z_r(i,j-1,k )+ &
418 & z_r(i,j ,k+1)-z_r(i,j-1,k+1)
419 tl_cff2=tl_z_r(i,j ,k )-tl_z_r(i,j-1,k )+ &
420 & tl_z_r(i,j ,k+1)-tl_z_r(i,j-1,k+1)
421 cff3=z_r(i,j ,k+1)-z_r(i,j ,k )- &
422 & z_r(i,j-1,k+1)+z_r(i,j-1,k )
423 tl_cff3=tl_z_r(i,j ,k+1)-tl_z_r(i,j ,k )- &
424 & tl_z_r(i,j-1,k+1)+tl_z_r(i,j-1,k )
425 gamma=0.125_r8*cff1*cff2*cff3
426 tl_gamma=0.125_r8*(tl_cff1*cff2*cff3+ &
427 & cff1*(tl_cff2*cff3+ &
430 cff1=(1.0_r8+gamma)*(rho(i,j,k+1)-rho(i,j-1,k+1))+ &
431 & (1.0_r8-gamma)*(rho(i,j,k )-rho(i,j-1,k ))
432 tl_cff1=tl_gamma*(rho(i,j,k+1)-rho(i,j-1,k+1)- &
433 & rho(i,j,k )+rho(i,j-1,k ))+ &
434 & (1.0_r8+gamma)*(tl_rho(i,j ,k+1)- &
435 & tl_rho(i,j-1,k+1))+ &
436 & (1.0_r8-gamma)*(tl_rho(i,j ,k )- &
438 cff2=rho(i,j,k+1)+rho(i,j-1,k+1)- &
439 & rho(i,j,k )-rho(i,j-1,k )
440 tl_cff2=tl_rho(i,j,k+1)+tl_rho(i,j-1,k+1)- &
441 & tl_rho(i,j,k )-tl_rho(i,j-1,k )
442 cff3=z_r(i,j,k+1)+z_r(i,j-1,k+1)- &
443 & z_r(i,j,k )-z_r(i,j-1,k )
444 tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i,j-1,k+1)- &
445 & tl_z_r(i,j,k )-tl_z_r(i,j-1,k )
446 cff4=(1.0_r8+gamma)*(z_r(i,j,k+1)-z_r(i,j-1,k+1))+ &
447 & (1.0_r8-gamma)*(z_r(i,j,k )-z_r(i,j-1,k ))
448 tl_cff4=tl_gamma*(z_r(i,j,k+1)-z_r(i,j-1,k+1)- &
449 & z_r(i,j,k )+z_r(i,j-1,k ))+ &
450 & (1.0_r8+gamma)*(tl_z_r(i,j ,k+1)- &
451 & tl_z_r(i,j-1,k+1))+ &
452 & (1.0_r8-gamma)*(tl_z_r(i,j ,k )- &
455 & fac3*(cff1*cff3-cff2*cff4)
456 tl_phie(i)=tl_phie(i)+ &
457 & fac3*(tl_cff1*cff3+ &
462 cff1=rho(i,j,k+1)-rho(i,j-1,k+1)+ &
463 & rho(i,j,k )-rho(i,j-1,k )
464 cff2=rho(i,j,k+1)+rho(i,j-1,k+1)- &
465 & rho(i,j,k )-rho(i,j-1,k )
466 tl_cff1=tl_rho(i,j,k+1)-tl_rho(i,j-1,k+1)+ &
467 & tl_rho(i,j,k )-tl_rho(i,j-1,k )
468 tl_cff2=tl_rho(i,j,k+1)+tl_rho(i,j-1,k+1)- &
469 & tl_rho(i,j,k )-tl_rho(i,j-1,k )
470 cff3=z_r(i,j,k+1)+z_r(i,j-1,k+1)- &
471 & z_r(i,j,k )-z_r(i,j-1,k )
472 cff4=z_r(i,j,k+1)-z_r(i,j-1,k+1)+ &
473 & z_r(i,j,k )-z_r(i,j-1,k )
474 tl_cff3=tl_z_r(i,j,k+1)+tl_z_r(i,j-1,k+1)- &
475 & tl_z_r(i,j,k )-tl_z_r(i,j-1,k )
476 tl_cff4=tl_z_r(i,j,k+1)-tl_z_r(i,j-1,k+1)+ &
477 & tl_z_r(i,j,k )-tl_z_r(i,j-1,k )
479 & fac3*(cff1*cff3-cff2*cff4)
480 tl_phie(i)=tl_phie(i)+ &
481 & fac3*(tl_cff1*cff3+ &
489 tl_rv(i,j,k,nrhs)=-0.5_r8*om_v(i,j)* &
490 & ((tl_hz(i,j,k)+tl_hz(i,j-1,k))* &
492 & (hz(i,j,k)+hz(i,j-1,k))* &