117 & LBi, UBi, LBj, UBj, &
118 & IminS, ImaxS, JminS, JmaxS, &
122 & rmask, umask, vmask, &
125 & SSH_Tamp, SSH_Tphase, &
128 & UV_Tangle, UV_Tphase, &
129 & UV_Tmajor, UV_Tminor, &
131# if defined AVERAGES && defined AVERAGES_DETIDE && \
132 (defined SSH_TIDES || defined UV_TIDES)
133 & sinomega, cosomega, &
154 integer,
intent(in) :: ng, tile
155 integer,
intent(in) :: LBi, UBi, LBj, UBj
156 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
157 integer,
intent(in) :: NTC
160 real(r8),
intent(in) :: angler(LBi:,LBj:)
162 real(r8),
intent(in) :: rmask(LBi:,LBj:)
163 real(r8),
intent(in) :: umask(LBi:,LBj:)
164 real(r8),
intent(in) :: vmask(LBi:,LBj:)
166 real(r8),
intent(in) :: Tperiod(MTC)
168 real(r8),
intent(in) :: SSH_Tamp(LBi:,LBj:,:)
169 real(r8),
intent(in) :: SSH_Tphase(LBi:,LBj:,:)
172 real(r8),
intent(in) :: UV_Tangle(LBi:,LBj:,:)
173 real(r8),
intent(in) :: UV_Tmajor(LBi:,LBj:,:)
174 real(r8),
intent(in) :: UV_Tminor(LBi:,LBj:,:)
175 real(r8),
intent(in) :: UV_Tphase(LBi:,LBj:,:)
177# if defined AVERAGES && defined AVERAGES_DETIDE && \
178 (defined ssh_tides || defined uv_tides)
179 real(r8),
intent(inout) :: SinOmega(:)
180 real(r8),
intent(inout) :: CosOmega(:)
183 real(r8),
intent(in) :: angler(LBi:UBi,LBj:UBj)
185 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
186 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
187 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
189 real(r8),
intent(in) :: Tperiod(MTC)
191 real(r8),
intent(in) :: SSH_Tamp(LBi:UBi,LBj:UBj,MTC)
192 real(r8),
intent(in) :: SSH_Tphase(LBi:UBi,LBj:UBj,MTC)
195 real(r8),
intent(in) :: UV_Tangle(LBi:UBi,LBj:UBj,MTC)
196 real(r8),
intent(in) :: UV_Tmajor(LBi:UBi,LBj:UBj,MTC)
197 real(r8),
intent(in) :: UV_Tminor(LBi:UBi,LBj:UBj,MTC)
198 real(r8),
intent(in) :: UV_Tphase(LBi:UBi,LBj:UBj,MTC)
200# if defined AVERAGES && defined AVERAGES_DETIDE && \
201 (defined ssh_tides || defined uv_tides)
202 real(r8),
intent(inout) :: SinOmega(MTC)
203 real(r8),
intent(inout) :: CosOmega(MTC)
212 integer :: ILB, IUB, JLB, JUB
214 integer :: i, itide, j
216 real(r8) :: Cangle, Cphase, Sangle, Sphase
217 real(r8) :: angle, cff, phase, omega, ramp
218 real(r8) :: bry_cor, bry_pgr, bry_str, bry_val
220 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Etide
221 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Utide
222 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Uwrk
223 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Vtide
224 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: Vwrk
226# include "set_bounds.h"
254# if defined AVERAGES && defined AVERAGES_DETIDE && \
255 (defined ssh_tides || defined uv_tides)
263 IF (tperiod(itide).gt.0.0_r8)
THEN
264 omega=cff/tperiod(itide)
265 sinomega(itide)=sin(omega)
266 cosomega(itide)=cos(omega)
268 sinomega(itide)=0.0_r8
269 cosomega(itide)=0.0_r8
282 IF (tperiod(itide).gt.0.0_r8)
THEN
283 omega=cff/tperiod(itide)
286 etide(i,j)=etide(i,j)+ &
287 & ramp*ssh_tamp(i,j,itide)* &
288 & cos(omega-ssh_tphase(i,j,itide))
290 etide(i,j)=etide(i,j)*rmask(i,j)
304 clima(ng)%ssh(i,j)=
clima(ng)%ssh(i,j)+etide(i,j)
309 & lbi, ubi, lbj, ubj, &
314 & lbi, ubi, lbj, ubj, &
336 IF (
domain(ng)%Western_Edge(tile))
THEN
340 & 0.5_r8*(etide(istr-1,j)+ &
343 boundary(ng)%zeta_west(j)=0.5_r8*(etide(istr-1,j)+ &
351 & jlb, jub, 1, 1, update, &
360 IF (
domain(ng)%Eastern_Edge(tile))
THEN
364 & 0.5_r8*(etide(iend ,j)+ &
367 boundary(ng)%zeta_east(j)=0.5_r8*(etide(iend ,j)+ &
375 & jlb, jub, 1, 1, update, &
384 IF (
domain(ng)%Southern_Edge(tile))
THEN
388 & 0.5_r8*(etide(i,jstr-1)+ &
391 boundary(ng)%zeta_south(i)=0.5_r8*(etide(i,jstr-1)+ &
399 & ilb, iub, 1, 1, update, &
408 IF (
domain(ng)%Northern_Edge(tile))
THEN
412 & 0.5_r8*(etide(i,jend )+ &
415 boundary(ng)%zeta_north(i)=0.5_r8*(etide(i,jend )+ &
423 & ilb, iub, 1, 1, update, &
439 IF (tperiod(itide).gt.0.0_r8)
THEN
440 omega=cff/tperiod(itide)
441 DO j=min(jstrr,jstr-1),jendr
442 DO i=min(istrr,istr-1),iendr
443 angle=uv_tangle(i,j,itide)-angler(i,j)
446 phase=omega-uv_tphase(i,j,itide)
449 uwrk(i,j)=uv_tmajor(i,j,itide)*cangle*cphase- &
450 & uv_tminor(i,j,itide)*sangle*sphase
451 vwrk(i,j)=uv_tmajor(i,j,itide)*sangle*cphase+ &
452 & uv_tminor(i,j,itide)*cangle*sphase
457 utide(i,j)=utide(i,j)+ &
458 & ramp*0.5_r8*(uwrk(i-1,j)+uwrk(i,j))
460 utide(i,j)=utide(i,j)*umask(i,j)
466 vtide(i,j)=(vtide(i,j)+ &
467 & ramp*0.5_r8*(vwrk(i,j-1)+vwrk(i,j)))
469 vtide(i,j)=vtide(i,j)*vmask(i,j)
483 clima(ng)%ubarclm(i,j)=
clima(ng)%ubarclm(i,j)+utide(i,j)
488 clima(ng)%vbarclm(i,j)=
clima(ng)%vbarclm(i,j)+vtide(i,j)
493 & lbi, ubi, lbj, ubj, &
496 & lbi, ubi, lbj, ubj, &
501 & lbi, ubi, lbj, ubj, &
504 &
clima(ng)%ubarclm, &
515 IF (
domain(ng)%Western_Edge(tile))
THEN
521 boundary(ng)%ubar_west(j)=utide(istr,j)
529 boundary(ng)%vbar_west(j)=vtide(istr-1,j)
536 & jlb, jub, 1, 1, update, &
539 & jlb, jub, 1, 1, update, &
547 IF (
domain(ng)%Eastern_Edge(tile))
THEN
553 boundary(ng)%ubar_east(j)=utide(iend+1,j)
561 boundary(ng)%vbar_east(j)=vtide(iend+1,j)
568 & jlb, jub, 1, 1, update, &
571 & jlb, jub, 1, 1, update, &
579 IF (
domain(ng)%Southern_Edge(tile))
THEN
585 boundary(ng)%ubar_south(i)=utide(i,jstr-1)
593 boundary(ng)%vbar_south(i)=vtide(i,jstr)
600 & ilb, iub, 1, 1, update, &
603 & ilb, iub, 1, 1, update, &
611 IF (
domain(ng)%Northern_Edge(tile))
THEN
617 boundary(ng)%ubar_north(i)=utide(i,jend+1)
625 boundary(ng)%vbar_north(i)=vtide(i,jend+1)
632 & ilb, iub, 1, 1, update, &
635 & ilb, iub, 1, 1, update, &