147 & LBi, UBi, LBj, UBj, LBij, UBij, &
148 & IminS, ImaxS, JminS, JmaxS, &
150# ifdef ADJUST_BOUNDARY
152 & t_obc_std, u_obc_std, v_obc_std, &
154 & ubar_obc_std, vbar_obc_std, &
157# ifdef ADJUST_WSTRESS
158 & sustr_std, svstr_std, &
160# if defined ADJUST_STFLUX && defined SOLVE3D
164 & t_std, u_std, v_std, &
165# if defined WEAK_CONSTRAINT && defined TIME_CONV
166 & ubar_std, vbar_std, &
169 & ubar_std, vbar_std, &
172# ifdef ADJUST_BOUNDARY
174 & ad_t_obc, ad_u_obc, ad_v_obc, &
176 & ad_ubar_obc, ad_vbar_obc, &
179# ifdef ADJUST_WSTRESS
180 & ad_ustr, ad_vstr, &
182# if defined ADJUST_STFLUX && defined SOLVE3D
186 & ad_t, ad_u, ad_v, &
187# if defined WEAK_CONSTRAINT && defined TIME_CONV
188 & ad_ubar, ad_vbar, &
191 & ad_ubar, ad_vbar, &
206 logical,
intent(in) :: Lweak
208 integer,
intent(in) :: ng, tile
209 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
210 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
211 integer,
intent(in) :: Linp
214# ifdef ADJUST_BOUNDARY
216 real(r8),
intent(in) :: t_obc_std(LBij:,:,:,:)
217 real(r8),
intent(in) :: u_obc_std(LBij:,:,:)
218 real(r8),
intent(in) :: v_obc_std(LBij:,:,:)
220 real(r8),
intent(in) :: ubar_obc_std(LBij:,:)
221 real(r8),
intent(in) :: vbar_obc_std(LBij:,:)
222 real(r8),
intent(in) :: zeta_obc_std(LBij:,:)
224# ifdef ADJUST_WSTRESS
225 real(r8),
intent(in) :: sustr_std(LBi:,LBj:)
226 real(r8),
intent(in) :: svstr_std(LBi:,LBj:)
228# if defined ADJUST_STFLUX && defined SOLVE3D
229 real(r8),
intent(in) :: stflx_std(LBi:,LBj:,:)
232 real(r8),
intent(in) :: t_std(LBi:,LBj:,:,:,:)
233 real(r8),
intent(in) :: u_std(LBi:,LBj:,:,:)
234 real(r8),
intent(in) :: v_std(LBi:,LBj:,:,:)
235# if defined WEAK_CONSTRAINT && defined TIME_CONV
236 real(r8),
intent(in) :: ubar_std(LBi:,LBj:,:)
237 real(r8),
intent(in) :: vbar_std(LBi:,LBj:,:)
240 real(r8),
intent(in) :: ubar_std(LBi:,LBj:,:)
241 real(r8),
intent(in) :: vbar_std(LBi:,LBj:,:)
243 real(r8),
intent(in) :: zeta_std(LBi:,LBj:,:)
244# ifdef ADJUST_BOUNDARY
246 real(r8),
intent(inout) :: ad_t_obc(LBij:,:,:,:,:,:)
247 real(r8),
intent(inout) :: ad_u_obc(LBij:,:,:,:,:)
248 real(r8),
intent(inout) :: ad_v_obc(LBij:,:,:,:,:)
250 real(r8),
intent(inout) :: ad_ubar_obc(LBij:,:,:,:)
251 real(r8),
intent(inout) :: ad_vbar_obc(LBij:,:,:,:)
252 real(r8),
intent(inout) :: ad_zeta_obc(LBij:,:,:,:)
254# ifdef ADJUST_WSTRESS
255 real(r8),
intent(inout) :: ad_ustr(LBi:,LBj:,:,:)
256 real(r8),
intent(inout) :: ad_vstr(LBi:,LBj:,:,:)
258# if defined ADJUST_STFLUX && defined SOLVE3D
259 real(r8),
intent(inout) :: ad_tflux(LBi:,LBj:,:,:,:)
262 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
263 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
264 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
265# if defined WEAK_CONSTRAINT && defined TIME_CONV
266 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
267 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
270 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
271 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
273 real(r8),
intent(inout) :: ad_zeta(LBi:,LBj:,:)
277# ifdef ADJUST_BOUNDARY
279 real(r8),
intent(in) :: t_obc_std(LBij:UBij,N(ng),4,NT(ng))
280 real(r8),
intent(in) :: u_obc_std(LBij:UBij,N(ng),4)
281 real(r8),
intent(in) :: v_obc_std(LBij:UBij,N(ng),4)
283 real(r8),
intent(in) :: ubar_obc_std(LBij:UBij,4)
284 real(r8),
intent(in) :: vbar_obc_std(LBij:UBij,4)
285 real(r8),
intent(in) :: zeta_obc_std(LBij:UBij,4)
287# ifdef ADJUST_WSTRESS
288 real(r8),
intent(in) :: sustr_std(LBi:,LBj:)
289 real(r8),
intent(in) :: svstr_std(LBi:,LBj:)
291# if defined ADJUST_STFLUX && defined SOLVE3D
292 real(r8),
intent(in) :: stflx_std(LBi:UBi,LBj:UBj,NT(ng))
295 real(r8),
intent(in) :: t_std(LBi:UBi,LBj:UBj,N(ng),NSA,NT(ng))
296 real(r8),
intent(in) :: u_std(LBi:UBi,LBj:UBj,N(ng),NSA)
297 real(r8),
intent(in) :: v_std(LBi:UBi,LBj:UBj,N(ng),NSA)
298# if defined WEAK_CONSTRAINT && defined TIME_CONV
299 real(r8),
intent(in) :: ubar_std(LBi:UBi,LBj:UBj,NSA)
300 real(r8),
intent(in) :: vbar_std(LBi:UBi,LBj:UBj,NSA)
303 real(r8),
intent(in) :: ubar_std(LBi:UBi,LBj:UBj,NSA)
304 real(r8),
intent(in) :: vbar_std(LBi:UBi,LBj:UBj,NSA)
306 real(r8),
intent(in) :: zeta_std(LBi:UBi,LBj:UBj,NSA)
307# ifdef ADJUST_BOUNDARY
309 real(r8),
intent(inout) :: ad_t_obc(LBij:UBij,N(ng),4, &
310 & Nbrec(ng),2,NT(ng))
311 real(r8),
intent(inout) :: ad_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
312 real(r8),
intent(inout) :: ad_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
314 real(r8),
intent(inout) :: ad_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
315 real(r8),
intent(inout) :: ad_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
316 real(r8),
intent(inout) :: ad_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
318# ifdef ADJUST_WSTRESS
319 real(r8),
intent(inout) :: ad_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
320 real(r8),
intent(inout) :: ad_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
322# if defined ADJUST_STFLUX && defined SOLVE3D
323 real(r8),
intent(inout) :: ad_tflux(LBi:UBi,LBj:UBj, &
324 & Nfrec(ng),2,NT(ng))
327 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
328 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
329 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
330# if defined WEAK_CONSTRAINT && defined TIME_CONV
331 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
332 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
335 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
336 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
338 real(r8),
intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
343 integer :: i, ib, ir, j, rec
348# include "set_bounds.h"
369 & lbi, ubi, lbj, ubj, &
376 ad_zeta(i,j,linp)=ad_zeta(i,j,linp)*zeta_std(i,j,rec)
379# if !defined SOLVE3D || (defined WEAK_CONSTRAINT && defined TIME_CONV)
385 & lbi, ubi, lbj, ubj, &
388 & ad_ubar(:,:,linp), &
393 ad_ubar(i,j,linp)=ad_ubar(i,j,linp)*ubar_std(i,j,rec)
398 ad_vbar(i,j,linp)=ad_vbar(i,j,linp)*vbar_std(i,j,rec)
408 & lbi, ubi, lbj, ubj, 1, n(ng), &
411 & ad_u(:,:,:,linp), &
417 ad_u(i,j,k,linp)=ad_u(i,j,k,linp)*u_std(i,j,k,rec)
422 ad_v(i,j,k,linp)=ad_v(i,j,k,linp)*v_std(i,j,k,rec)
431 & lbi, ubi, lbj, ubj, 1, n(ng), 1, nt(ng), &
434 & ad_t(:,:,:,linp,:))
440 ad_t(i,j,k,linp,it)=ad_t(i,j,k,linp,it)* &
441 & t_std(i,j,k,rec,it)
448# ifdef ADJUST_BOUNDARY
457 IF (.not.lweak.and.(any(
lobc(:,
isfsur,ng))))
THEN
466 & ad_zeta_obc(:,ib,ir,linp))
471 &
domain(ng)%Western_Edge(tile))
THEN
474 ad_zeta_obc(j,ib,ir,linp)=ad_zeta_obc(j,ib,ir,linp)* &
479 &
domain(ng)%Eastern_Edge(tile))
THEN
482 ad_zeta_obc(j,ib,ir,linp)=ad_zeta_obc(j,ib,ir,linp)* &
487 &
domain(ng)%Southern_Edge(tile))
THEN
490 ad_zeta_obc(i,ib,ir,linp)=ad_zeta_obc(i,ib,ir,linp)* &
495 &
domain(ng)%Northern_Edge(tile))
THEN
498 ad_zeta_obc(i,ib,ir,linp)=ad_zeta_obc(i,ib,ir,linp)* &
507 IF (.not.lweak.and.(any(
lobc(:,
isubar,ng))))
THEN
516 & ad_ubar_obc(:,ib,ir,linp))
521 &
domain(ng)%Western_Edge(tile))
THEN
524 ad_ubar_obc(j,ib,ir,linp)=ad_ubar_obc(j,ib,ir,linp)* &
529 &
domain(ng)%Eastern_Edge(tile))
THEN
532 ad_ubar_obc(j,ib,ir,linp)=ad_ubar_obc(j,ib,ir,linp)* &
537 &
domain(ng)%Southern_Edge(tile))
THEN
540 ad_ubar_obc(i,ib,ir,linp)=ad_ubar_obc(i,ib,ir,linp)* &
545 &
domain(ng)%Northern_Edge(tile))
THEN
548 ad_ubar_obc(i,ib,ir,linp)=ad_ubar_obc(i,ib,ir,linp)* &
557 IF (.not.lweak.and.(any(
lobc(:,
isvbar,ng))))
THEN
566 & ad_vbar_obc(:,ib,ir,linp))
571 &
domain(ng)%Western_Edge(tile))
THEN
574 ad_vbar_obc(j,ib,ir,linp)=ad_vbar_obc(j,ib,ir,linp)* &
579 &
domain(ng)%Eastern_Edge(tile))
THEN
582 ad_vbar_obc(j,ib,ir,linp)=ad_vbar_obc(j,ib,ir,linp)* &
587 &
domain(ng)%Southern_Edge(tile))
THEN
590 ad_vbar_obc(i,ib,ir,linp)=ad_vbar_obc(i,ib,ir,linp)* &
595 &
domain(ng)%Northern_Edge(tile))
THEN
598 ad_vbar_obc(i,ib,ir,linp)=ad_vbar_obc(i,ib,ir,linp)* &
609 IF (.not.lweak.and.(any(
lobc(:,
isuvel,ng))))
THEN
615 & lbij, ubij, 1, n(ng), &
618 & ad_u_obc(:,:,ib,ir,linp))
623 &
domain(ng)%Western_Edge(tile))
THEN
627 ad_u_obc(j,k,ib,ir,linp)=ad_u_obc(j,k,ib,ir,linp)* &
633 &
domain(ng)%Eastern_Edge(tile))
THEN
637 ad_u_obc(j,k,ib,ir,linp)=ad_u_obc(j,k,ib,ir,linp)* &
643 &
domain(ng)%Southern_Edge(tile))
THEN
647 ad_u_obc(i,k,ib,ir,linp)=ad_u_obc(i,k,ib,ir,linp)* &
653 &
domain(ng)%Northern_Edge(tile))
THEN
657 ad_u_obc(i,k,ib,ir,linp)=ad_u_obc(i,k,ib,ir,linp)* &
667 IF (.not.lweak.and.(any(
lobc(:,
isvvel,ng))))
THEN
673 & lbij, ubij, 1, n(ng), &
676 & ad_v_obc(:,:,ib,ir,linp))
681 &
domain(ng)%Western_Edge(tile))
THEN
685 ad_v_obc(j,k,ib,ir,linp)=ad_v_obc(j,k,ib,ir,linp)* &
691 &
domain(ng)%Eastern_Edge(tile))
THEN
695 ad_v_obc(j,k,ib,ir,linp)=ad_v_obc(j,k,ib,ir,linp)* &
701 &
domain(ng)%Southern_Edge(tile))
THEN
705 ad_v_obc(i,k,ib,ir,linp)=ad_v_obc(i,k,ib,ir,linp)* &
711 &
domain(ng)%Northern_Edge(tile))
THEN
715 ad_v_obc(i,k,ib,ir,linp)=ad_v_obc(i,k,ib,ir,linp)* &
726 IF (.not.lweak.and.(any(
lobc(:,
istvar(it),ng))))
THEN
732 & lbij, ubij, 1, n(ng), &
736 & ad_t_obc(:,:,ib,ir,linp,it))
741 &
domain(ng)%Western_Edge(tile))
THEN
745 ad_t_obc(j,k,ib,ir,linp,it)= &
746 & ad_t_obc(j,k,ib,ir,linp,it)* &
747 & t_obc_std(j,k,ib,it)
752 &
domain(ng)%Eastern_Edge(tile))
THEN
756 ad_t_obc(j,k,ib,ir,linp,it)= &
757 & ad_t_obc(j,k,ib,ir,linp,it)* &
758 & t_obc_std(j,k,ib,it)
763 &
domain(ng)%Southern_Edge(tile))
THEN
767 ad_t_obc(i,k,ib,ir,linp,it)= &
768 & ad_t_obc(i,k,ib,ir,linp,it)* &
769 & t_obc_std(i,k,ib,it)
774 &
domain(ng)%Northern_Edge(tile))
THEN
778 ad_t_obc(i,k,ib,ir,linp,it)= &
779 & ad_t_obc(i,k,ib,ir,linp,it)* &
780 & t_obc_std(i,k,ib,it)
790# if defined ADJUST_WSTRESS || defined ADJUST_STFLUX
797# ifdef ADJUST_WSTRESS
804 & lbi, ubi, lbj, ubj, 1, nfrec(ng), &
807 & ad_ustr(:,:,:,linp), &
808 & ad_vstr(:,:,:,linp))
813 ad_ustr(i,j,ir,linp)=ad_ustr(i,j,ir,linp)*sustr_std(i,j)
818 ad_vstr(i,j,ir,linp)=ad_vstr(i,j,ir,linp)*svstr_std(i,j)
824# if defined ADJUST_STFLUX && defined SOLVE3D
833 & lbi, ubi, lbj, ubj, 1,nfrec(ng), &
836 & ad_tflux(:,:,:,linp,it))
841 ad_tflux(i,j,ir,linp,it)=ad_tflux(i,j,ir,linp,it)* &