148 & LBi, UBi, LBj, UBj, LBij, UBij, &
149 & IminS, ImaxS, JminS, JmaxS, &
151# ifdef ADJUST_BOUNDARY
153 & t_obc_std, u_obc_std, v_obc_std, &
155 & ubar_obc_std, vbar_obc_std, &
158# ifdef ADJUST_WSTRESS
159 & sustr_std, svstr_std, &
161# if defined ADJUST_STFLUX && defined SOLVE3D
165 & t_std, u_std, v_std, &
166# if defined WEAK_CONSTRAINT && defined TIME_CONV
167 & ubar_std, vbar_std, &
170 & ubar_std, vbar_std, &
173# ifdef ADJUST_BOUNDARY
175 & tl_t_obc, tl_u_obc, tl_v_obc, &
177 & tl_ubar_obc, tl_vbar_obc, &
180# ifdef ADJUST_WSTRESS
181 & tl_ustr, tl_vstr, &
183# if defined ADJUST_STFLUX && defined SOLVE3D
187 & tl_t, tl_u, tl_v, &
188# if defined WEAK_CONSTRAINT && defined TIME_CONV
189 & tl_ubar, tl_vbar, &
192 & tl_ubar, tl_vbar, &
208 logical,
intent(in) :: Lweak
210 integer,
intent(in) :: ng, tile
211 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
212 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
213 integer,
intent(in) :: Linp
216# ifdef ADJUST_BOUNDARY
218 real(r8),
intent(in) :: t_obc_std(LBij:,:,:,:)
219 real(r8),
intent(in) :: u_obc_std(LBij:,:,:)
220 real(r8),
intent(in) :: v_obc_std(LBij:,:,:)
222 real(r8),
intent(in) :: ubar_obc_std(LBij:,:)
223 real(r8),
intent(in) :: vbar_obc_std(LBij:,:)
224 real(r8),
intent(in) :: zeta_obc_std(LBij:,:)
226# ifdef ADJUST_WSTRESS
227 real(r8),
intent(in) :: sustr_std(LBi:,LBj:)
228 real(r8),
intent(in) :: svstr_std(LBi:,LBj:)
230# if defined ADJUST_STFLUX && defined SOLVE3D
231 real(r8),
intent(in) :: stflx_std(LBi:,LBj:,:)
234 real(r8),
intent(in) :: t_std(LBi:,LBj:,:,:,:)
235 real(r8),
intent(in) :: u_std(LBi:,LBj:,:,:)
236 real(r8),
intent(in) :: v_std(LBi:,LBj:,:,:)
237# if defined WEAK_CONSTRAINT && defined TIME_CONV
238 real(r8),
intent(in) :: ubar_std(LBi:,LBj:,:)
239 real(r8),
intent(in) :: vbar_std(LBi:,LBj:,:)
242 real(r8),
intent(in) :: ubar_std(LBi:,LBj:,:)
243 real(r8),
intent(in) :: vbar_std(LBi:,LBj:,:)
245 real(r8),
intent(in) :: zeta_std(LBi:,LBj:,:)
246# ifdef ADJUST_BOUNDARY
248 real(r8),
intent(inout) :: tl_t_obc(LBij:,:,:,:,:,:)
249 real(r8),
intent(inout) :: tl_u_obc(LBij:,:,:,:,:)
250 real(r8),
intent(inout) :: tl_v_obc(LBij:,:,:,:,:)
252 real(r8),
intent(inout) :: tl_ubar_obc(LBij:,:,:,:)
253 real(r8),
intent(inout) :: tl_vbar_obc(LBij:,:,:,:)
254 real(r8),
intent(inout) :: tl_zeta_obc(LBij:,:,:,:)
256# ifdef ADJUST_WSTRESS
257 real(r8),
intent(inout) :: tl_ustr(LBi:,LBj:,:,:)
258 real(r8),
intent(inout) :: tl_vstr(LBi:,LBj:,:,:)
260# if defined ADJUST_STFLUX && defined SOLVE3D
261 real(r8),
intent(inout) :: tl_tflux(LBi:,LBj:,:,:,:)
264 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
265 real(r8),
intent(inout) :: tl_u(LBi:,LBj:,:,:)
266 real(r8),
intent(inout) :: tl_v(LBi:,LBj:,:,:)
267# if defined WEAK_CONSTRAINT && defined TIME_CONV
268 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
269 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
272 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
273 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
275 real(r8),
intent(inout) :: tl_zeta(LBi:,LBj:,:)
279# ifdef ADJUST_BOUNDARY
281 real(r8),
intent(in) :: t_obc_std(LBij:UBij,N(ng),4,NT(ng))
282 real(r8),
intent(in) :: u_obc_std(LBij:UBij,N(ng),4)
283 real(r8),
intent(in) :: v_obc_std(LBij:UBij,N(ng),4)
285 real(r8),
intent(in) :: ubar_obc_std(LBij:UBij,4)
286 real(r8),
intent(in) :: vbar_obc_std(LBij:UBij,4)
287 real(r8),
intent(in) :: zeta_obc_std(LBij:UBij,4)
289# ifdef ADJUST_WSTRESS
290 real(r8),
intent(in) :: sustr_std(LBi:,LBj:)
291 real(r8),
intent(in) :: svstr_std(LBi:,LBj:)
293# if defined ADJUST_STFLUX && defined SOLVE3D
294 real(r8),
intent(in) :: stflx_std(LBi:UBi,LBj:UBj,NT(ng))
297 real(r8),
intent(in) :: t_std(LBi:UBi,LBj:UBj,N(ng),NSA,NT(ng))
298 real(r8),
intent(in) :: u_std(LBi:UBi,LBj:UBj,N(ng),NSA)
299 real(r8),
intent(in) :: v_std(LBi:UBi,LBj:UBj,N(ng),NSA)
300# if defined WEAK_CONSTRAINT && defined TIME_CONV
301 real(r8),
intent(in) :: ubar_std(LBi:UBi,LBj:UBj,NSA)
302 real(r8),
intent(in) :: vbar_std(LBi:UBi,LBj:UBj,NSA)
305 real(r8),
intent(in) :: ubar_std(LBi:UBi,LBj:UBj,NSA)
306 real(r8),
intent(in) :: vbar_std(LBi:UBi,LBj:UBj,NSA)
308 real(r8),
intent(in) :: zeta_std(LBi:UBi,LBj:UBj,NSA)
309# ifdef ADJUST_BOUNDARY
311 real(r8),
intent(inout) :: tl_t_obc(LBij:UBij,N(ng),4, &
312 & Nbrec(ng),2,NT(ng))
313 real(r8),
intent(inout) :: tl_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
314 real(r8),
intent(inout) :: tl_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
316 real(r8),
intent(inout) :: tl_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
317 real(r8),
intent(inout) :: tl_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
318 real(r8),
intent(inout) :: tl_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
320# ifdef ADJUST_WSTRESS
321 real(r8),
intent(inout) :: tl_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
322 real(r8),
intent(inout) :: tl_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
324# if defined ADJUST_STFLUX && defined SOLVE3D
325 real(r8),
intent(inout) :: tl_tflux(LBi:UBi,LBj:UBj, &
326 & Nfrec(ng),2,NT(ng))
329 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
330 real(r8),
intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
331 real(r8),
intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
332# if defined WEAK_CONSTRAINT && defined TIME_CONV
333 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
334 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
337 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
338 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
340 real(r8),
intent(inout) :: tl_zeta(LBi:UBi,LBj:UBj,:)
345 integer :: i, ib, ir, j, rec
350# include "set_bounds.h"
371 tl_zeta(i,j,linp)=tl_zeta(i,j,linp)*zeta_std(i,j,rec)
376 & lbi, ubi, lbj, ubj, &
381# if !defined SOLVE3D || (defined WEAK_CONSTRAINT && defined TIME_CONV)
387 tl_ubar(i,j,linp)=tl_ubar(i,j,linp)*ubar_std(i,j,rec)
392 tl_vbar(i,j,linp)=tl_vbar(i,j,linp)*vbar_std(i,j,rec)
397 & lbi, ubi, lbj, ubj, &
400 & tl_ubar(:,:,linp), &
411 tl_u(i,j,k,linp)=tl_u(i,j,k,linp)*u_std(i,j,k,rec)
416 tl_v(i,j,k,linp)=tl_v(i,j,k,linp)*v_std(i,j,k,rec)
422 & lbi, ubi, lbj, ubj, 1, n(ng), &
425 & tl_u(:,:,:,linp), &
435 tl_t(i,j,k,linp,it)=tl_t(i,j,k,linp,it)* &
436 & t_std(i,j,k,rec,it)
443 & lbi, ubi, lbj, ubj, 1, n(ng), 1, nt(ng), &
446 & tl_t(:,:,:,linp,:))
450# ifdef ADJUST_BOUNDARY
459 IF (.not.lweak.and.(any(
lobc(:,
isfsur,ng))))
THEN
462 &
domain(ng)%Western_Edge(tile))
THEN
465 tl_zeta_obc(j,ib,ir,linp)=tl_zeta_obc(j,ib,ir,linp)* &
470 &
domain(ng)%Eastern_Edge(tile))
THEN
473 tl_zeta_obc(j,ib,ir,linp)=tl_zeta_obc(j,ib,ir,linp)* &
478 &
domain(ng)%Southern_Edge(tile))
THEN
481 tl_zeta_obc(i,ib,ir,linp)=tl_zeta_obc(i,ib,ir,linp)* &
486 &
domain(ng)%Northern_Edge(tile))
THEN
489 tl_zeta_obc(i,ib,ir,linp)=tl_zeta_obc(i,ib,ir,linp)* &
500 & tl_zeta_obc(:,ib,ir,linp))
509 IF (.not.lweak.and.(any(
lobc(:,
isubar,ng))))
THEN
512 &
domain(ng)%Western_Edge(tile))
THEN
515 tl_ubar_obc(j,ib,ir,linp)=tl_ubar_obc(j,ib,ir,linp)* &
520 &
domain(ng)%Eastern_Edge(tile))
THEN
523 tl_ubar_obc(j,ib,ir,linp)=tl_ubar_obc(j,ib,ir,linp)* &
528 &
domain(ng)%Southern_Edge(tile))
THEN
531 tl_ubar_obc(i,ib,ir,linp)=tl_ubar_obc(i,ib,ir,linp)* &
536 &
domain(ng)%Northern_Edge(tile))
THEN
539 tl_ubar_obc(i,ib,ir,linp)=tl_ubar_obc(i,ib,ir,linp)* &
550 & tl_ubar_obc(:,ib,ir,linp))
559 IF (.not.lweak.and.(any(
lobc(:,
isvbar,ng))))
THEN
562 &
domain(ng)%Western_Edge(tile))
THEN
565 tl_vbar_obc(j,ib,ir,linp)=tl_vbar_obc(j,ib,ir,linp)* &
570 &
domain(ng)%Eastern_Edge(tile))
THEN
573 tl_vbar_obc(j,ib,ir,linp)=tl_vbar_obc(j,ib,ir,linp)* &
578 &
domain(ng)%Southern_Edge(tile))
THEN
581 tl_vbar_obc(i,ib,ir,linp)=tl_vbar_obc(i,ib,ir,linp)* &
586 &
domain(ng)%Northern_Edge(tile))
THEN
589 tl_vbar_obc(i,ib,ir,linp)=tl_vbar_obc(i,ib,ir,linp)* &
600 & tl_vbar_obc(:,ib,ir,linp))
611 IF (.not.lweak.and.(any(
lobc(:,
isuvel,ng))))
THEN
614 &
domain(ng)%Western_Edge(tile))
THEN
618 tl_u_obc(j,k,ib,ir,linp)=tl_u_obc(j,k,ib,ir,linp)* &
624 &
domain(ng)%Eastern_Edge(tile))
THEN
628 tl_u_obc(j,k,ib,ir,linp)=tl_u_obc(j,k,ib,ir,linp)* &
634 &
domain(ng)%Southern_Edge(tile))
THEN
638 tl_u_obc(i,k,ib,ir,linp)=tl_u_obc(i,k,ib,ir,linp)* &
644 &
domain(ng)%Northern_Edge(tile))
THEN
648 tl_u_obc(i,k,ib,ir,linp)=tl_u_obc(i,k,ib,ir,linp)* &
657 & lbij, ubij, 1, n(ng), &
660 & tl_u_obc(:,:,ib,ir,linp))
669 IF (.not.lweak.and.(any(
lobc(:,
isvvel,ng))))
THEN
672 &
domain(ng)%Western_Edge(tile))
THEN
676 tl_v_obc(j,k,ib,ir,linp)=tl_v_obc(j,k,ib,ir,linp)* &
682 &
domain(ng)%Eastern_Edge(tile))
THEN
686 tl_v_obc(j,k,ib,ir,linp)=tl_v_obc(j,k,ib,ir,linp)* &
692 &
domain(ng)%Southern_Edge(tile))
THEN
696 tl_v_obc(i,k,ib,ir,linp)=tl_v_obc(i,k,ib,ir,linp)* &
702 &
domain(ng)%Northern_Edge(tile))
THEN
706 tl_v_obc(i,k,ib,ir,linp)=tl_v_obc(i,k,ib,ir,linp)* &
715 & lbij, ubij, 1, n(ng), &
718 & tl_v_obc(:,:,ib,ir,linp))
728 IF (.not.lweak.and.(any(
lobc(:,
istvar(it),ng))))
THEN
731 &
domain(ng)%Western_Edge(tile))
THEN
735 tl_t_obc(j,k,ib,ir,linp,it)= &
736 & tl_t_obc(j,k,ib,ir,linp,it)* &
737 & t_obc_std(j,k,ib,it)
742 &
domain(ng)%Eastern_Edge(tile))
THEN
746 tl_t_obc(j,k,ib,ir,linp,it)= &
747 & tl_t_obc(j,k,ib,ir,linp,it)* &
748 & t_obc_std(j,k,ib,it)
753 &
domain(ng)%Southern_Edge(tile))
THEN
757 tl_t_obc(i,k,ib,ir,linp,it)= &
758 & tl_t_obc(i,k,ib,ir,linp,it)* &
759 & t_obc_std(i,k,ib,it)
764 &
domain(ng)%Northern_Edge(tile))
THEN
768 tl_t_obc(i,k,ib,ir,linp,it)= &
769 & tl_t_obc(i,k,ib,ir,linp,it)* &
770 & t_obc_std(i,k,ib,it)
778 & lbij, ubij, 1, n(ng), &
781 & tl_t_obc(:,:,ib,ir,linp,it))
791# if defined ADJUST_WSTRESS || defined ADJUST_STFLUX
798# ifdef ADJUST_WSTRESS
806 tl_ustr(i,j,ir,linp)=tl_ustr(i,j,ir,linp)*sustr_std(i,j)
811 tl_vstr(i,j,ir,linp)=tl_vstr(i,j,ir,linp)*svstr_std(i,j)
817 & lbi, ubi, lbj, ubj, 1, nfrec(ng), &
820 & tl_ustr(:,:,:,linp), &
821 & tl_vstr(:,:,:,linp))
825# if defined ADJUST_STFLUX && defined SOLVE3D
835 tl_tflux(i,j,ir,linp,it)=tl_tflux(i,j,ir,linp,it)* &
842 & lbi, ubi, lbj, ubj, 1, nfrec(ng), &
845 & tl_tflux(:,:,:,linp,it))