110 & LBi, UBi, LBj, UBj, &
111 & IminS, ImaxS, JminS, JmaxS, &
117 & umask_wet, vmask_wet, &
122#ifdef TIDE_GENERATING_FORCES
142 integer,
intent(in) :: ng, tile
143 integer,
intent(in) :: LBi, UBi, LBj, UBj
144 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
145 integer,
intent(in) :: nrhs
149 real(r8),
intent(in) :: umask(LBi:,LBj:)
150 real(r8),
intent(in) :: vmask(LBi:,LBj:)
153 real(r8),
intent(in) :: umask_wet(LBi:,LBj:)
154 real(r8),
intent(in) :: vmask_wet(LBi:,LBj:)
156 real(r8),
intent(in) :: om_v(LBi:,LBj:)
157 real(r8),
intent(in) :: on_u(LBi:,LBj:)
158 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
159 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
160 real(r8),
intent(in) :: z_w(LBi:,LBj:,0:)
161 real(r8),
intent(in) :: rho(LBi:,LBj:,:)
162# ifdef TIDE_GENERATING_FORCES
163 real(r8),
intent(in) :: eq_tide(LBi:,LBj:)
166 real(r8),
intent(in) :: zetat(LBi:,LBj:)
169 real(r8),
intent(in) :: Pair(LBi:,LBj:)
171# ifdef DIAGNOSTICS_UV
172 real(r8),
intent(inout) :: DiaRU(LBi:,LBj:,:,:,:)
173 real(r8),
intent(inout) :: DiaRV(LBi:,LBj:,:,:,:)
175 real(r8),
intent(inout) :: ru(LBi:,LBj:,0:,:)
176 real(r8),
intent(inout) :: rv(LBi:,LBj:,0:,:)
179 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
180 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
183 real(r8),
intent(in) :: umask_wet(LBi:UBi,LBj:UBj)
184 real(r8),
intent(in) :: vmask_wet(LBi:UBi,LBj:UBj)
186 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
187 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
188 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
189 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
190 real(r8),
intent(in) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
191 real(r8),
intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
192# ifdef TIDE_GENERATING_FORCES
193 real(r8),
intent(in) :: eq_tide(LBi:UBi,LBj:UBj)
196 real(r8),
intent(in) :: zetat(LBi:UBi,LBj:UBj)
199 real(r8),
intent(in) :: Pair(LBi:UBi,LBj:UBj)
201# ifdef DIAGNOSTICS_UV
202 real(r8),
intent(inout) :: DiaRU(LBi:UBi,LBj:UBj,N(ng),2,NDrhs)
203 real(r8),
intent(inout) :: DiaRV(LBi:UBi,LBj:UBj,N(ng),2,NDrhs)
205 real(r8),
intent(inout) :: ru(LBi:UBi,LBj:UBj,0:N(ng),2)
206 real(r8),
intent(inout) :: rv(LBi:UBi,LBj:UBj,0:N(ng),2)
213 real(r8),
parameter :: OneFifth = 0.2_r8
214 real(r8),
parameter :: OneTwelfth = 1.0_r8/12.0_r8
215 real(r8),
parameter :: eps = 1.0e-10_r8
217 real(r8) :: GRho, GRho0, HalfGRho
218 real(r8) :: cff, cff1, cff2
220 real(r8) :: OneAtm, fac
222 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS,N(ng)) :: P
224 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: dR
225 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: dZ
227 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: FC
228 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: aux
229 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: dRx
230 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: dZx
232#include "set_bounds.h"
251 dr(i,k)=rho(i,j,k+1)-rho(i,j,k)
252 dz(i,k)=z_r(i,j,k+1)-z_r(i,j,k)
256 dr(i,n(ng))=dr(i,n(ng)-1)
257 dz(i,n(ng))=dz(i,n(ng)-1)
263 cff=2.0_r8*dr(i,k)*dr(i,k-1)
265 dr(i,k)=cff/(dr(i,k)+dr(i,k-1))
269 dz(i,k)=2.0_r8*dz(i,k)*dz(i,k-1)/(dz(i,k)+dz(i,k-1))
273 cff1=1.0_r8/(z_r(i,j,n(ng))-z_r(i,j,n(ng)-1))
274 cff2=0.5_r8*(rho(i,j,n(ng))-rho(i,j,n(ng)-1))* &
275 & (z_w(i,j,n(ng))-z_r(i,j,n(ng)))*cff1
276 p(i,j,n(ng))=
g*z_w(i,j,n(ng))+ &
281 & fac*(pair(i,j)-oneatm)+ &
283 & grho*(rho(i,j,n(ng))+cff2)* &
284 & (z_w(i,j,n(ng))-z_r(i,j,n(ng)))
285#ifdef TIDE_GENERATING_FORCES
286 p(i,j,n(ng))=p(i,j,n(ng))-
g*eq_tide(i,j)
291 p(i,j,k)=p(i,j,k+1)+ &
292 & halfgrho*((rho(i,j,k+1)+rho(i,j,k))* &
293 & (z_r(i,j,k+1)-z_r(i,j,k))- &
295 & ((dr(i,k+1)-dr(i,k))* &
296 & (z_r(i,j,k+1)-z_r(i,j,k)- &
298 & (dz(i,k+1)+dz(i,k)))- &
299 & (dz(i,k+1)-dz(i,k))* &
300 & (rho(i,j,k+1)-rho(i,j,k)- &
302 & (dr(i,k+1)+dr(i,k)))))
314 aux(i,j)=z_r(i,j,k)-z_r(i-1,j,k)
316 aux(i,j)=aux(i,j)*umask(i,j)
318 fc(i,j)=rho(i,j,k)-rho(i-1,j,k)
320 fc(i,j)=fc(i,j)*umask(i,j)
327 cff=2.0_r8*aux(i,j)*aux(i+1,j)
329 cff1=1.0_r8/(aux(i,j)+aux(i+1,j))
334 cff1=2.0_r8*fc(i,j)*fc(i+1,j)
335 IF (cff1.gt.eps)
THEN
336 cff2=1.0_r8/(fc(i,j)+fc(i+1,j))
346 ru(i,j,k,nrhs)=on_u(i,j)*0.5_r8* &
347 & (hz(i,j,k)+hz(i-1,j,k))* &
348 & (p(i-1,j,k)-p(i,j,k)- &
350 & ((rho(i,j,k)+rho(i-1,j,k))* &
351 & (z_r(i,j,k)-z_r(i-1,j,k))- &
353 & ((drx(i,j)-drx(i-1,j))* &
354 & (z_r(i,j,k)-z_r(i-1,j,k)- &
356 & (dzx(i,j)+dzx(i-1,j)))- &
357 & (dzx(i,j)-dzx(i-1,j))* &
358 & (rho(i,j,k)-rho(i-1,j,k)- &
360 & (drx(i,j)+drx(i-1,j))))))
362 ru(i,j,k,nrhs)=ru(i,j,k,nrhs)*umask_wet(i,j)
365 diaru(i,j,k,nrhs,
m3pgrd)=ru(i,j,k,nrhs)
378 aux(i,j)=z_r(i,j,k)-z_r(i,j-1,k)
380 aux(i,j)=aux(i,j)*vmask(i,j)
382 fc(i,j)=rho(i,j,k)-rho(i,j-1,k)
384 fc(i,j)=fc(i,j)*vmask(i,j)
391 cff=2.0_r8*aux(i,j)*aux(i,j+1)
393 cff1=1.0_r8/(aux(i,j)+aux(i,j+1))
398 cff1=2.0_r8*fc(i,j)*fc(i,j+1)
399 IF (cff1.gt.eps)
THEN
400 cff2=1.0_r8/(fc(i,j)+fc(i,j+1))
410 rv(i,j,k,nrhs)=om_v(i,j)*0.5_r8* &
411 & (hz(i,j,k)+hz(i,j-1,k))* &
412 & (p(i,j-1,k)-p(i,j,k)- &
414 & ((rho(i,j,k)+rho(i,j-1,k))* &
415 & (z_r(i,j,k)-z_r(i,j-1,k))- &
417 & ((drx(i,j)-drx(i,j-1))* &
418 & (z_r(i,j,k)-z_r(i,j-1,k)- &
420 & (dzx(i,j)+dzx(i,j-1)))- &
421 & (dzx(i,j)-dzx(i,j-1))* &
422 & (rho(i,j,k)-rho(i,j-1,k)- &
424 & (drx(i,j)+drx(i,j-1))))))
426 rv(i,j,k,nrhs)=rv(i,j,k,nrhs)*vmask_wet(i,j)
429 diarv(i,j,k,nrhs,
m3pgrd)=rv(i,j,k,nrhs)