4#if defined FORCING_SV || \
5 defined hessian_fsv || \
6 defined hessian_so || \
7 defined hessian_sv || \
8 defined opt_perturbation || \
9 defined stochastic_opt || \
10 defined tlm_check || \
28# if defined ADJOINT && \
30# if defined I4DVAR || \
32 defined rbl4dvar_ana_sensitivity || \
38# if defined TANGENT && defined ADJOINT
45# if defined ARRAY_MODES || \
48 defined r4dvar_ana_sensitivity || \
55# if defined FORCING_SV || \
56 defined hessian_fsv || \
57 defined hessian_so || \
58 defined hessian_sv || \
59 defined opt_perturbation || \
60 defined stochastic_opt
66# if defined ADJOINT && defined TANGENT
67# if defined I4DVAR || defined SP4DVAR
92 integer,
intent(in) :: ng, tile, linp, lout
96 character (len=*),
parameter :: myfile = &
105 & lbi, ubi, lbj, ubj, &
106 & imins, imaxs, jmins, jmaxs, &
109 &
grid(ng) % rmask, &
110 &
grid(ng) % umask, &
111 &
grid(ng) % vmask, &
114 &
ocean(ng) % tl_t, &
115 &
ocean(ng) % tl_u, &
116 &
ocean(ng) % tl_v, &
118 &
ocean(ng) % tl_ubar, &
119 &
ocean(ng) % tl_vbar, &
120 &
ocean(ng) % tl_zeta, &
126 &
ocean(ng) % ubar, &
127 &
ocean(ng) % vbar, &
138 & LBi, UBi, LBj, UBj, &
139 & IminS, ImaxS, JminS, JmaxS, &
142 & rmask, umask, vmask, &
145 & tl_t, tl_u, tl_v, &
147 & tl_ubar, tl_vbar, tl_zeta, &
158 integer,
intent(in) :: ng, tile
159 integer,
intent(in) :: LBi, UBi, LBj, UBj
160 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
161 integer,
intent(in) :: Linp, Lout
165 real(r8),
intent(in) :: rmask(LBi:,LBj:)
166 real(r8),
intent(in) :: umask(LBi:,LBj:)
167 real(r8),
intent(in) :: vmask(LBi:,LBj:)
170 real(r8),
intent(in) :: tl_t(LBi:,LBj:,:,:,:)
171 real(r8),
intent(in) :: tl_u(LBi:,LBj:,:,:)
172 real(r8),
intent(in) :: tl_v(LBi:,LBj:,:,:)
174 real(r8),
intent(in) :: tl_ubar(LBi:,LBj:,:)
175 real(r8),
intent(in) :: tl_vbar(LBi:,LBj:,:)
176 real(r8),
intent(in) :: tl_zeta(LBi:,LBj:,:)
178 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
179 real(r8),
intent(inout) :: u(LBi:,LBj:,:,:)
180 real(r8),
intent(inout) :: v(LBi:,LBj:,:,:)
182 real(r8),
intent(inout) :: ubar(LBi:,LBj:,:)
183 real(r8),
intent(inout) :: vbar(LBi:,LBj:,:)
184 real(r8),
intent(inout) :: zeta(LBi:,LBj:,:)
187 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
188 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
189 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
192 real(r8),
intent(in) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
193 real(r8),
intent(in) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
194 real(r8),
intent(in) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
196 real(r8),
intent(in) :: tl_ubar(LBi:UBi,LBj:UBj,:)
197 real(r8),
intent(in) :: tl_vbar(LBi:UBi,LBj:UBj,:)
198 real(r8),
intent(in) :: tl_zeta(LBi:UBi,LBj:UBj,:)
200 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
201 real(r8),
intent(inout) :: u(LBi:UBi,LBj:UBj,N(ng),2)
202 real(r8),
intent(inout) :: v(LBi:UBi,LBj:UBj,N(ng),2)
204 real(r8),
intent(inout) :: ubar(LBi:UBi,LBj:UBj,:)
205 real(r8),
intent(inout) :: vbar(LBi:UBi,LBj:UBj,:)
206 real(r8),
intent(inout) :: zeta(LBi:UBi,LBj:UBj,:)
216# include "set_bounds.h"
226 ubar(i,j,lout)=ubar(i,j,lout)+tl_ubar(i,j,linp)
228 ubar(i,j,lout)=ubar(i,j,lout)*umask(i,j)
235 vbar(i,j,lout)=vbar(i,j,lout)+tl_vbar(i,j,linp)
237 vbar(i,j,lout)=vbar(i,j,lout)*vmask(i,j)
245 zeta(i,j,lout)=zeta(i,j,lout)+tl_zeta(i,j,linp)
247 zeta(i,j,lout)=zeta(i,j,lout)*rmask(i,j)
262 u(i,j,k,lout)=u(i,j,k,lout)+tl_u(i,j,k,linp)
264 u(i,j,k,lout)=u(i,j,k,lout)*umask(i,j)
271 v(i,j,k,lout)=v(i,j,k,lout)+tl_v(i,j,k,linp)
273 v(i,j,k,lout)=v(i,j,k,lout)*vmask(i,j)
283 t(i,j,k,lout,itrc)=t(i,j,k,lout,itrc)+ &
284 & tl_t(i,j,k,linp,itrc)
286 t(i,j,k,lout,itrc)=t(i,j,k,lout,itrc)*rmask(i,j)
298# if defined RBL4DVAR || defined RBL4DVAR_ANA_SENSITIVITY || \
325 integer,
intent(in) :: ng, tile, Linp, Lout
329 character (len=*),
parameter :: MyFile = &
338 & lbi, ubi, lbj, ubj, &
339 & imins, imaxs, jmins, jmaxs, &
342 &
grid(ng) % rmask, &
343 &
grid(ng) % umask, &
344 &
grid(ng) % vmask, &
347 &
ocean(ng) % ad_t, &
348 &
ocean(ng) % ad_u, &
349 &
ocean(ng) % ad_v, &
351 &
ocean(ng) % ad_ubar, &
352 &
ocean(ng) % ad_vbar, &
353 &
ocean(ng) % ad_zeta, &
359 &
ocean(ng) % ubar, &
360 &
ocean(ng) % vbar, &
371 & LBi, UBi, LBj, UBj, &
372 & IminS, ImaxS, JminS, JmaxS, &
375 & rmask, umask, vmask, &
378 & ad_t, ad_u, ad_v, &
380 & ad_ubar, ad_vbar, ad_zeta, &
391 integer,
intent(in) :: ng, tile
392 integer,
intent(in) :: LBi, UBi, LBj, UBj
393 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
394 integer,
intent(in) :: Linp, Lout
398 real(r8),
intent(in) :: rmask(LBi:,LBj:)
399 real(r8),
intent(in) :: umask(LBi:,LBj:)
400 real(r8),
intent(in) :: vmask(LBi:,LBj:)
403 real(r8),
intent(in) :: ad_t(LBi:,LBj:,:,:,:)
404 real(r8),
intent(in) :: ad_u(LBi:,LBj:,:,:)
405 real(r8),
intent(in) :: ad_v(LBi:,LBj:,:,:)
407 real(r8),
intent(in) :: ad_ubar(LBi:,LBj:,:)
408 real(r8),
intent(in) :: ad_vbar(LBi:,LBj:,:)
409 real(r8),
intent(in) :: ad_zeta(LBi:,LBj:,:)
411 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
412 real(r8),
intent(inout) :: u(LBi:,LBj:,:,:)
413 real(r8),
intent(inout) :: v(LBi:,LBj:,:,:)
415 real(r8),
intent(inout) :: ubar(LBi:,LBj:,:)
416 real(r8),
intent(inout) :: vbar(LBi:,LBj:,:)
417 real(r8),
intent(inout) :: zeta(LBi:,LBj:,:)
420 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
421 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
422 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
425 real(r8),
intent(in) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
426 real(r8),
intent(in) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
427 real(r8),
intent(in) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
429 real(r8),
intent(in) :: ad_ubar(LBi:UBi,LBj:UBj,:)
430 real(r8),
intent(in) :: ad_vbar(LBi:UBi,LBj:UBj,:)
431 real(r8),
intent(in) :: ad_zeta(LBi:UBi,LBj:UBj,:)
433 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
434 real(r8),
intent(inout) :: u(LBi:UBi,LBj:UBj,N(ng),2)
435 real(r8),
intent(inout) :: v(LBi:UBi,LBj:UBj,N(ng),2)
437 real(r8),
intent(inout) :: ubar(LBi:UBi,LBj:UBj,:)
438 real(r8),
intent(inout) :: vbar(LBi:UBi,LBj:UBj,:)
439 real(r8),
intent(inout) :: zeta(LBi:UBi,LBj:UBj,:)
449# include "set_bounds.h"
459 ubar(i,j,lout)=ubar(i,j,lout)+ad_ubar(i,j,linp)
461 ubar(i,j,lout)=ubar(i,j,lout)*umask(i,j)
468 vbar(i,j,lout)=vbar(i,j,lout)+ad_vbar(i,j,linp)
470 vbar(i,j,lout)=vbar(i,j,lout)*vmask(i,j)
478 zeta(i,j,lout)=zeta(i,j,lout)+ad_zeta(i,j,linp)
480 zeta(i,j,lout)=zeta(i,j,lout)*rmask(i,j)
495 u(i,j,k,lout)=u(i,j,k,lout)+ad_u(i,j,k,linp)
497 u(i,j,k,lout)=u(i,j,k,lout)*umask(i,j)
504 v(i,j,k,lout)=v(i,j,k,lout)+ad_v(i,j,k,linp)
506 v(i,j,k,lout)=v(i,j,k,lout)*vmask(i,j)
516 t(i,j,k,lout,itrc)=t(i,j,k,lout,itrc)+ &
517 & ad_t(i,j,k,linp,itrc)
519 t(i,j,k,lout,itrc)=t(i,j,k,lout,itrc)*rmask(i,j)
531# if defined ARRAY_MODES || \
532 defined clipping || \
534 defined r4dvar_ana_sensitivity || \
561 integer,
intent(in) :: ng, tile, linp, lout
565 character (len=*),
parameter :: myfile = &
566 & __FILE__//
", rp_ini_adjust"
574 & lbi, ubi, lbj, ubj, &
575 & imins, imaxs, jmins, jmaxs, &
578 &
grid(ng) % rmask, &
579 &
grid(ng) % umask, &
580 &
grid(ng) % vmask, &
583 &
ocean(ng) % ad_t, &
584 &
ocean(ng) % ad_u, &
585 &
ocean(ng) % ad_v, &
587 &
ocean(ng) % ad_ubar, &
588 &
ocean(ng) % ad_vbar, &
590 &
ocean(ng) % ad_zeta, &
596 &
ocean(ng) % ubar, &
597 &
ocean(ng) % vbar, &
599 &
ocean(ng) % zeta, &
601 &
ocean(ng) % tl_t, &
602 &
ocean(ng) % tl_u, &
603 &
ocean(ng) % tl_v, &
605 &
ocean(ng) % tl_ubar, &
606 &
ocean(ng) % tl_vbar, &
608 &
ocean(ng) % tl_zeta)
618 & LBi, UBi, LBj, UBj, &
619 & IminS, ImaxS, JminS, JmaxS, &
622 & rmask, umask, vmask, &
625 & ad_t, ad_u, ad_v, &
627 & ad_ubar, ad_vbar, &
637 & tl_t, tl_u, tl_v, &
639 & tl_ubar, tl_vbar, &
648 integer,
intent(in) :: ng, tile
649 integer,
intent(in) :: LBi, UBi, LBj, UBj
650 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
651 integer,
intent(in) :: Linp, Lout
655 real(r8),
intent(in) :: rmask(LBi:,LBj:)
656 real(r8),
intent(in) :: umask(LBi:,LBj:)
657 real(r8),
intent(in) :: vmask(LBi:,LBj:)
660 real(r8),
intent(in) :: ad_t(LBi:,LBj:,:,:,:)
661 real(r8),
intent(in) :: ad_u(LBi:,LBj:,:,:)
662 real(r8),
intent(in) :: ad_v(LBi:,LBj:,:,:)
664 real(r8),
intent(in) :: ad_ubar(LBi:,LBj:,:)
665 real(r8),
intent(in) :: ad_vbar(LBi:,LBj:,:)
667 real(r8),
intent(in) :: ad_zeta(LBi:,LBj:,:)
669 real(r8),
intent(in) :: t(LBi:,LBj:,:,:,:)
670 real(r8),
intent(in) :: u(LBi:,LBj:,:,:)
671 real(r8),
intent(in) :: v(LBi:,LBj:,:,:)
673 real(r8),
intent(in) :: ubar(LBi:,LBj:,:)
674 real(r8),
intent(in) :: vbar(LBi:,LBj:,:)
676 real(r8),
intent(in) :: zeta(LBi:,LBj:,:)
678 real(r8),
intent(out) :: tl_t(LBi:,LBj:,:,:,:)
679 real(r8),
intent(out) :: tl_u(LBi:,LBj:,:,:)
680 real(r8),
intent(out) :: tl_v(LBi:,LBj:,:,:)
682 real(r8),
intent(out) :: tl_ubar(LBi:,LBj:,:)
683 real(r8),
intent(out) :: tl_vbar(LBi:,LBj:,:)
685 real(r8),
intent(out) :: tl_zeta(LBi:,LBj:,:)
688 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
689 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
690 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
693 real(r8),
intent(in) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
694 real(r8),
intent(in) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
695 real(r8),
intent(in) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
697 real(r8),
intent(in) :: ad_ubar(LBi:UBi,LBj:UBj,:)
698 real(r8),
intent(in) :: ad_vbar(LBi:UBi,LBj:UBj,:)
700 real(r8),
intent(in) :: ad_zeta(LBi:UBi,LBj:UBj,:)
702 real(r8),
intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
703 real(r8),
intent(in) :: u(LBi:UBi,LBj:UBj,N(ng),2)
704 real(r8),
intent(in) :: v(LBi:UBi,LBj:UBj,N(ng),2)
706 real(r8),
intent(in) :: ubar(LBi:UBi,LBj:UBj,:)
707 real(r8),
intent(in) :: vbar(LBi:UBi,LBj:UBj,:)
709 real(r8),
intent(in) :: zeta(LBi:UBi,LBj:UBj,:)
711 real(r8),
intent(out) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
712 real(r8),
intent(out) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
713 real(r8),
intent(out) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
715 real(r8),
intent(out) :: tl_ubar(LBi:UBi,LBj:UBj,:)
716 real(r8),
intent(out) :: tl_vbar(LBi:UBi,LBj:UBj,:)
718 real(r8),
intent(out) :: tl_zeta(LBi:UBi,LBj:UBj,:)
728# include "set_bounds.h"
738 tl_ubar(i,j,lout)=ubar(i,j,linp)+ad_ubar(i,j,lout)
740 tl_ubar(i,j,lout)=tl_ubar(i,j,lout)*umask(i,j)
747 tl_vbar(i,j,lout)=vbar(i,j,linp)+ad_vbar(i,j,lout)
749 tl_vbar(i,j,lout)=tl_vbar(i,j,lout)*vmask(i,j)
757 tl_zeta(i,j,lout)=zeta(i,j,linp)+ad_zeta(i,j,lout)
759 tl_zeta(i,j,lout)=tl_zeta(i,j,lout)*rmask(i,j)
774 tl_u(i,j,k,lout)=u(i,j,k,linp)+ad_u(i,j,k,lout)
776 tl_u(i,j,k,lout)=tl_u(i,j,k,lout)*umask(i,j)
783 tl_v(i,j,k,lout)=v(i,j,k,linp)+ad_v(i,j,k,lout)
785 tl_v(i,j,k,lout)=tl_v(i,j,k,lout)*vmask(i,j)
795 tl_t(i,j,k,lout,itrc)=t(i,j,k,linp,itrc)+ &
796 & ad_t(i,j,k,lout,itrc)
798 tl_t(i,j,k,lout,itrc)=tl_t(i,j,k,lout,itrc)*rmask(i,j)
811# if defined TANGENT && defined ADJOINT
831# ifdef ADJUST_BOUNDARY
834# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
842 logical,
intent(in) :: add
843 integer,
intent(in) :: ng, tile, linp, lout
847 character (len=*),
parameter :: myfile = &
848 & __FILE__//
", load_ADtoTL"
856 & lbi, ubi, lbj, ubj, lbij, ubij, &
857 & imins, imaxs, jmins, jmaxs, &
860 &
grid(ng) % rmask, &
861 &
grid(ng) % umask, &
862 &
grid(ng) % vmask, &
864# ifdef ADJUST_BOUNDARY
874# ifdef ADJUST_WSTRESS
880 &
forces(ng) % ad_tflux, &
882 &
ocean(ng) % ad_t, &
883 &
ocean(ng) % ad_u, &
884 &
ocean(ng) % ad_v, &
885# if defined WEAK_CONSTRAINT && defined TIME_CONV
886 &
ocean(ng) % ad_ubar, &
887 &
ocean(ng) % ad_vbar, &
890 &
ocean(ng) % ad_ubar, &
891 &
ocean(ng) % ad_vbar, &
893 &
ocean(ng) % ad_zeta, &
894# ifdef ADJUST_BOUNDARY
904# ifdef ADJUST_WSTRESS
910 &
forces(ng) % tl_tflux, &
912 &
ocean(ng) % tl_t, &
913 &
ocean(ng) % tl_u, &
914 &
ocean(ng) % tl_v, &
915# if defined WEAK_CONSTRAINT && defined TIME_CONV
916 &
ocean(ng) % tl_ubar, &
917 &
ocean(ng) % tl_vbar, &
920 &
ocean(ng) % tl_ubar, &
921 &
ocean(ng) % tl_vbar, &
923 &
ocean(ng) % tl_zeta)
933 & LBi, UBi, LBj, UBj, LBij, UBij, &
934 & IminS, ImaxS, JminS, JmaxS, &
937 & rmask, umask, vmask, &
939# ifdef ADJUST_BOUNDARY
941 & ad_t_obc, ad_u_obc, ad_v_obc, &
943 & ad_ubar_obc, ad_vbar_obc, &
946# ifdef ADJUST_WSTRESS
947 & ad_ustr, ad_vstr, &
953 & ad_t, ad_u, ad_v, &
954# if defined WEAK_CONSTRAINT && defined TIME_CONV
955 & ad_ubar, ad_vbar, &
958 & ad_ubar, ad_vbar, &
961# ifdef ADJUST_BOUNDARY
963 & tl_t_obc, tl_u_obc, tl_v_obc, &
965 & tl_ubar_obc, tl_vbar_obc, &
968# ifdef ADJUST_WSTRESS
969 & tl_ustr, tl_vstr, &
975 & tl_t, tl_u, tl_v, &
976# if defined WEAK_CONSTRAINT && defined TIME_CONV
977 & tl_ubar, tl_vbar, &
980 & tl_ubar, tl_vbar, &
987# if defined ADJUST_BOUNDARY || defined ADJUST_STFLUX || \
988 defined adjust_wstress
997 logical,
intent(in) :: add
998 integer,
intent(in) :: ng, tile
999 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
1000 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
1001 integer,
intent(in) :: Linp, Lout
1003# ifdef ASSUMED_SHAPE
1005 real(r8),
intent(in) :: rmask(LBi:,LBj:)
1006 real(r8),
intent(in) :: umask(LBi:,LBj:)
1007 real(r8),
intent(in) :: vmask(LBi:,LBj:)
1009# ifdef ADJUST_BOUNDARY
1011 real(r8),
intent(inout) :: ad_t_obc(LBij:,:,:,:,:,:)
1012 real(r8),
intent(inout) :: ad_u_obc(LBij:,:,:,:,:)
1013 real(r8),
intent(inout) :: ad_v_obc(LBij:,:,:,:,:)
1015 real(r8),
intent(inout) :: ad_ubar_obc(LBij:,:,:,:)
1016 real(r8),
intent(inout) :: ad_vbar_obc(LBij:,:,:,:)
1017 real(r8),
intent(inout) :: ad_zeta_obc(LBij:,:,:,:)
1019# ifdef ADJUST_WSTRESS
1020 real(r8),
intent(inout) :: ad_ustr(LBi:,LBj:,:,:)
1021 real(r8),
intent(inout) :: ad_vstr(LBi:,LBj:,:,:)
1024# ifdef ADJUST_STFLUX
1025 real(r8),
intent(inout) :: ad_tflux(LBi:,LBj:,:,:,:)
1027 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
1028 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
1029 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
1030# if defined WEAK_CONSTRAINT && defined TIME_CONV
1031 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
1032 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
1035 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
1036 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
1038 real(r8),
intent(inout) :: ad_zeta(LBi:,LBj:,:)
1039# ifdef ADJUST_BOUNDARY
1041 real(r8),
intent(inout) :: tl_t_obc(LBij:,:,:,:,:,:)
1042 real(r8),
intent(inout) :: tl_u_obc(LBij:,:,:,:,:)
1043 real(r8),
intent(inout) :: tl_v_obc(LBij:,:,:,:,:)
1045 real(r8),
intent(inout) :: tl_ubar_obc(LBij:,:,:,:)
1046 real(r8),
intent(inout) :: tl_vbar_obc(LBij:,:,:,:)
1047 real(r8),
intent(inout) :: tl_zeta_obc(LBij:,:,:,:)
1049# ifdef ADJUST_WSTRESS
1050 real(r8),
intent(inout) :: tl_ustr(LBi:,LBj:,:,:)
1051 real(r8),
intent(inout) :: tl_vstr(LBi:,LBj:,:,:)
1054# ifdef ADJUST_STFLUX
1055 real(r8),
intent(inout) :: tl_tflux(LBi:,LBj:,:,:,:)
1057 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
1058 real(r8),
intent(inout) :: tl_u(LBi:,LBj:,:,:)
1059 real(r8),
intent(inout) :: tl_v(LBi:,LBj:,:,:)
1060# if defined WEAK_CONSTRAINT && defined TIME_CONV
1061 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
1062 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
1065 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
1066 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
1068 real(r8),
intent(inout) :: tl_zeta(LBi:,LBj:,:)
1071 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
1072 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
1073 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
1075# ifdef ADJUST_BOUNDARY
1077 real(r8),
intent(inout) :: ad_t_obc(LBij:UBij,N(ng),4, &
1078 & Nbrec(ng),2,NT(ng))
1079 real(r8),
intent(inout) :: ad_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
1080 real(r8),
intent(inout) :: ad_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
1082 real(r8),
intent(inout) :: ad_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
1083 real(r8),
intent(inout) :: ad_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
1084 real(r8), intent(input) :: ad_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
1086# ifdef ADJUST_WSTRESS
1087 real(r8),
intent(inout) :: ad_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
1088 real(r8),
intent(inout) :: ad_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
1091# ifdef ADJUST_STFLUX
1092 real(r8),
intent(inout) :: ad_tflux(LBi:UBi,LBj:UBj, &
1093 & Nfrec(ng),2,NT(ng))
1095 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
1096 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
1097 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
1098# if defined WEAK_CONSTRAINT && defined TIME_CONV
1099 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
1100 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
1103 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
1104 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
1106 real(r8),
intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
1107# ifdef ADJUST_BOUNDARY
1109 real(r8),
intent(inout) :: tl_t_obc(LBij:UBij,N(ng),4, &
1110 & Nbrec(ng),2,NT(ng))
1111 real(r8),
intent(inout) :: tl_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
1112 real(r8),
intent(inout) :: tl_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
1114 real(r8),
intent(inout) :: tl_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
1115 real(r8),
intent(inout) :: tl_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
1116 real(r8),
intent(inout) :: tl_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
1118# ifdef ADJUST_WSTRESS
1119 real(r8),
intent(inout) :: tl_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
1120 real(r8),
intent(inout) :: tl_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
1123# ifdef ADJUST_STFLUX
1124 real(r8),
intent(inout) :: tl_tflux(LBi:UBi,LBj:UBj, &
1125 & Nfrec(ng),2,NT(ng))
1127 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
1128 real(r8),
intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
1129 real(r8),
intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
1130# if defined WEAK_CONSTRAINT && defined TIME_CONV
1131 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
1132 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
1135 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
1136 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
1138 real(r8),
intent(inout) :: tl_zeta(LBi:UBi,LBj:UBj,:)
1145 integer :: ib, ir, it
1147 real(r8) :: fac1, fac2
1150# include "set_bounds.h"
1162 ad_zeta(i,j,linp)=ad_zeta(i,j,linp)*rmask(i,j)
1166# ifdef ADJUST_BOUNDARY
1173 &
domain(ng)%Western_Edge(tile))
THEN
1176 ad_zeta_obc(j,ib,ir,linp)=ad_zeta_obc(j,ib,ir,linp)* &
1181 &
domain(ng)%Eastern_Edge(tile))
THEN
1184 ad_zeta_obc(j,ib,ir,linp)=ad_zeta_obc(j,ib,ir,linp)* &
1189 &
domain(ng)%Southern_Edge(tile))
THEN
1192 ad_zeta_obc(i,ib,ir,linp)=ad_zeta_obc(i,ib,ir,linp)* &
1197 &
domain(ng)%Northern_Edge(tile))
THEN
1200 ad_zeta_obc(i,ib,ir,linp)=ad_zeta_obc(i,ib,ir,linp)* &
1208# if !defined SOLVE3D || \
1209 (defined weak_constraint && defined time_conv)
1215 ad_ubar(i,j,linp)=ad_ubar(i,j,linp)*umask(i,j)
1223 ad_vbar(i,j,linp)=ad_vbar(i,j,linp)*vmask(i,j)
1228# ifdef ADJUST_BOUNDARY
1235 &
domain(ng)%Western_Edge(tile))
THEN
1238 ad_ubar_obc(j,ib,ir,linp)=ad_ubar_obc(j,ib,ir,linp)* &
1243 &
domain(ng)%Eastern_Edge(tile))
THEN
1246 ad_ubar_obc(j,ib,ir,linp)=ad_ubar_obc(j,ib,ir,linp)* &
1251 &
domain(ng)%Southern_Edge(tile))
THEN
1254 ad_ubar_obc(i,ib,ir,linp)=ad_ubar_obc(i,ib,ir,linp)* &
1259 &
domain(ng)%Northern_Edge(tile))
THEN
1262 ad_ubar_obc(i,ib,ir,linp)=ad_ubar_obc(i,ib,ir,linp)* &
1274 &
domain(ng)%Western_Edge(tile))
THEN
1277 ad_vbar_obc(j,ib,ir,linp)=ad_vbar_obc(j,ib,ir,linp)* &
1282 &
domain(ng)%Eastern_Edge(tile))
THEN
1285 ad_vbar_obc(j,ib,ir,linp)=ad_vbar_obc(j,ib,ir,linp)* &
1290 &
domain(ng)%Southern_Edge(tile))
THEN
1293 ad_vbar_obc(i,ib,ir,linp)=ad_vbar_obc(i,ib,ir,linp)* &
1298 &
domain(ng)%Northern_Edge(tile))
THEN
1301 ad_vbar_obc(i,ib,ir,linp)=ad_vbar_obc(i,ib,ir,linp)* &
1309# ifdef ADJUST_WSTRESS
1316 ad_ustr(i,j,ir,linp)=ad_ustr(i,j,ir,linp)*umask(i,j)
1321 ad_vstr(i,j,ir,linp)=ad_vstr(i,j,ir,linp)*vmask(i,j)
1334 ad_u(i,j,k,linp)=ad_u(i,j,k,linp)*umask(i,j)
1339# ifdef ADJUST_BOUNDARY
1346 &
domain(ng)%Western_Edge(tile))
THEN
1350 ad_u_obc(j,k,ib,ir,linp)=ad_u_obc(j,k,ib,ir,linp)* &
1356 &
domain(ng)%Eastern_Edge(tile))
THEN
1360 ad_u_obc(j,k,ib,ir,linp)=ad_u_obc(j,k,ib,ir,linp)* &
1366 &
domain(ng)%Southern_Edge(tile))
THEN
1370 ad_u_obc(i,k,ib,ir,linp)=ad_u_obc(i,k,ib,ir,linp)* &
1376 &
domain(ng)%Northern_Edge(tile))
THEN
1380 ad_u_obc(i,k,ib,ir,linp)=ad_u_obc(i,k,ib,ir,linp)* &
1394 ad_v(i,j,k,linp)=ad_v(i,j,k,linp)*vmask(i,j)
1399# ifdef ADJUST_BOUNDARY
1406 &
domain(ng)%Western_Edge(tile))
THEN
1410 ad_v_obc(j,k,ib,ir,linp)=ad_v_obc(j,k,ib,ir,linp)* &
1416 &
domain(ng)%Eastern_Edge(tile))
THEN
1420 ad_v_obc(j,k,ib,ir,linp)=ad_v_obc(j,k,ib,ir,linp)* &
1426 &
domain(ng)%Southern_Edge(tile))
THEN
1430 ad_v_obc(i,k,ib,ir,linp)=ad_v_obc(i,k,ib,ir,linp)* &
1436 &
domain(ng)%Northern_Edge(tile))
THEN
1440 ad_v_obc(i,k,ib,ir,linp)=ad_v_obc(i,k,ib,ir,linp)* &
1455 ad_t(i,j,k,linp,it)=ad_t(i,j,k,linp,it)*rmask(i,j)
1461# ifdef ADJUST_BOUNDARY
1469 &
domain(ng)%Western_Edge(tile))
THEN
1473 ad_t_obc(j,k,ib,ir,linp,it)= &
1474 & ad_t_obc(j,k,ib,ir,linp,it)*rmask(istr-1,j)
1479 &
domain(ng)%Eastern_Edge(tile))
THEN
1483 ad_t_obc(j,k,ib,ir,linp,it)= &
1484 & ad_t_obc(j,k,ib,ir,linp,it)*rmask(iend+1,j)
1489 &
domain(ng)%Southern_Edge(tile))
THEN
1493 ad_t_obc(i,k,ib,ir,linp,it)= &
1494 & ad_t_obc(i,k,ib,ir,linp,it)*rmask(i,jstr-1)
1499 &
domain(ng)%Northern_Edge(tile))
THEN
1503 ad_t_obc(i,k,ib,ir,linp,it)= &
1504 & ad_t_obc(i,k,ib,ir,linp,it)*rmask(i,jend+1)
1513# ifdef ADJUST_STFLUX
1522 ad_tflux(i,j,ir,linp,it)=ad_tflux(i,j,ir,linp,it)* &
1549 & lbi, ubi, lbj, ubj, lbij, ubij, &
1550 & lout, linp, lout, fac1, fac2, &
1552 & rmask, umask, vmask, &
1554# ifdef ADJUST_BOUNDARY
1556 & tl_t_obc, ad_t_obc, &
1557 & tl_u_obc, ad_u_obc, &
1558 & tl_v_obc, ad_v_obc, &
1560 & tl_ubar_obc, ad_ubar_obc, &
1561 & tl_vbar_obc, ad_vbar_obc, &
1562 & tl_zeta_obc, ad_zeta_obc, &
1564# ifdef ADJUST_WSTRESS
1565 & tl_ustr, ad_ustr, &
1566 & tl_vstr, ad_vstr, &
1569# ifdef ADJUST_STFLUX
1570 & tl_tflux, ad_tflux, &
1575# if defined WEAK_CONSTRAINT && defined TIME_CONV
1576 & tl_ubar, ad_ubar, &
1577 & tl_vbar, ad_vbar, &
1580 & tl_ubar, ad_ubar, &
1581 & tl_vbar, ad_vbar, &
1592 & lbi, ubi, lbj, ubj, lbij, ubij, &
1594# ifdef ADJUST_BOUNDARY
1596 & tl_t_obc, ad_t_obc, &
1597 & tl_u_obc, ad_u_obc, &
1598 & tl_v_obc, ad_v_obc, &
1600 & tl_ubar_obc, ad_ubar_obc, &
1601 & tl_vbar_obc, ad_vbar_obc, &
1602 & tl_zeta_obc, ad_zeta_obc, &
1604# ifdef ADJUST_WSTRESS
1605 & tl_ustr, ad_ustr, &
1606 & tl_vstr, ad_vstr, &
1609# ifdef ADJUST_STFLUX
1610 & tl_tflux, ad_tflux, &
1615# if defined WEAK_CONSTRAINT && defined TIME_CONV
1616 & tl_ubar, ad_ubar, &
1617 & tl_vbar, ad_vbar, &
1620 & tl_ubar, ad_ubar, &
1621 & tl_vbar, ad_vbar, &
1647# ifdef ADJUST_BOUNDARY
1650# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
1658 logical,
intent(in) :: add
1659 integer,
intent(in) :: ng, tile, linp, lout
1663 character (len=*),
parameter :: myfile = &
1664 & __FILE__//
", load_TLtoAD"
1672 & lbi, ubi, lbj, ubj, lbij, ubij, &
1673 & imins, imaxs, jmins, jmaxs, &
1674 & linp, lout, add, &
1676 &
grid(ng) % rmask, &
1677 &
grid(ng) % umask, &
1678 &
grid(ng) % vmask, &
1680# ifdef ADJUST_BOUNDARY
1690# ifdef ADJUST_WSTRESS
1691 &
forces(ng) % tl_ustr, &
1692 &
forces(ng) % tl_vstr, &
1695# ifdef ADJUST_STFLUX
1696 &
forces(ng) % tl_tflux, &
1698 &
ocean(ng) % tl_t, &
1699 &
ocean(ng) % tl_u, &
1700 &
ocean(ng) % tl_v, &
1701# if defined WEAK_CONSTRAINT && defined TIME_CONV
1702 &
ocean(ng) % tl_ubar, &
1703 &
ocean(ng) % tl_vbar, &
1706 &
ocean(ng) % tl_ubar, &
1707 &
ocean(ng) % tl_vbar, &
1709 &
ocean(ng) % tl_zeta, &
1710# ifdef ADJUST_BOUNDARY
1720# ifdef ADJUST_WSTRESS
1721 &
forces(ng) % ad_ustr, &
1722 &
forces(ng) % ad_vstr, &
1725# ifdef ADJUST_STFLUX
1726 &
forces(ng) % ad_tflux, &
1728 &
ocean(ng) % ad_t, &
1729 &
ocean(ng) % ad_u, &
1730 &
ocean(ng) % ad_v, &
1731# if defined WEAK_CONSTRAINT && defined TIME_CONV
1732 &
ocean(ng) % ad_ubar, &
1733 &
ocean(ng) % ad_vbar, &
1736 &
ocean(ng) % ad_ubar, &
1737 &
ocean(ng) % ad_vbar, &
1739 &
ocean(ng) % ad_zeta)
1749 & LBi, UBi, LBj, UBj, LBij, UBij, &
1750 & IminS, ImaxS, JminS, JmaxS, &
1751 & Linp, Lout, add, &
1753 & rmask, umask, vmask, &
1755# ifdef ADJUST_BOUNDARY
1757 & tl_t_obc, tl_u_obc, tl_v_obc, &
1759 & tl_ubar_obc, tl_vbar_obc, &
1762# ifdef ADJUST_WSTRESS
1763 & tl_ustr, tl_vstr, &
1766# ifdef ADJUST_STFLUX
1769 & tl_t, tl_u, tl_v, &
1770# if defined WEAK_CONSTRAINT && defined TIME_CONV
1771 & tl_ubar, tl_vbar, &
1774 & tl_ubar, tl_vbar, &
1777# ifdef ADJUST_BOUNDARY
1779 & ad_t_obc, ad_u_obc, ad_v_obc, &
1781 & ad_ubar_obc, ad_vbar_obc, &
1784# ifdef ADJUST_WSTRESS
1785 & ad_ustr, ad_vstr, &
1788# ifdef ADJUST_STFLUX
1791 & ad_t, ad_u, ad_v, &
1792# if defined WEAK_CONSTRAINT && defined TIME_CONV
1793 & ad_ubar, ad_vbar, &
1796 & ad_ubar, ad_vbar, &
1803# if defined ADJUST_BOUNDARY || defined ADJUST_STFLUX || \
1804 defined adjust_wstress
1813 logical,
intent(in) :: add
1814 integer,
intent(in) :: ng, tile
1815 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
1816 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
1817 integer,
intent(in) :: Linp, Lout
1819# ifdef ASSUMED_SHAPE
1821 real(r8),
intent(in) :: rmask(LBi:,LBj:)
1822 real(r8),
intent(in) :: umask(LBi:,LBj:)
1823 real(r8),
intent(in) :: vmask(LBi:,LBj:)
1825# ifdef ADJUST_BOUNDARY
1827 real(r8),
intent(inout) :: tl_t_obc(LBij:,:,:,:,:,:)
1828 real(r8),
intent(inout) :: tl_u_obc(LBij:,:,:,:,:)
1829 real(r8),
intent(inout) :: tl_v_obc(LBij:,:,:,:,:)
1831 real(r8),
intent(inout) :: tl_ubar_obc(LBij:,:,:,:)
1832 real(r8),
intent(inout) :: tl_vbar_obc(LBij:,:,:,:)
1833 real(r8),
intent(inout) :: tl_zeta_obc(LBij:,:,:,:)
1835# ifdef ADJUST_WSTRESS
1836 real(r8),
intent(inout) :: tl_ustr(LBi:,LBj:,:,:)
1837 real(r8),
intent(inout) :: tl_vstr(LBi:,LBj:,:,:)
1840# ifdef ADJUST_STFLUX
1841 real(r8),
intent(inout) :: tl_tflux(LBi:,LBj:,:,:,:)
1843 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
1844 real(r8),
intent(inout) :: tl_u(LBi:,LBj:,:,:)
1845 real(r8),
intent(inout) :: tl_v(LBi:,LBj:,:,:)
1846# if defined WEAK_CONSTRAINT && defined TIME_CONV
1847 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
1848 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
1851 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
1852 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
1854 real(r8),
intent(inout) :: tl_zeta(LBi:,LBj:,:)
1855# ifdef ADJUST_BOUNDARY
1857 real(r8),
intent(inout) :: ad_t_obc(LBij:,:,:,:,:,:)
1858 real(r8),
intent(inout) :: ad_u_obc(LBij:,:,:,:,:)
1859 real(r8),
intent(inout) :: ad_v_obc(LBij:,:,:,:,:)
1861 real(r8),
intent(inout) :: ad_ubar_obc(LBij:,:,:,:)
1862 real(r8),
intent(inout) :: ad_vbar_obc(LBij:,:,:,:)
1863 real(r8),
intent(inout) :: ad_zeta_obc(LBij:,:,:,:)
1865# ifdef ADJUST_WSTRESS
1866 real(r8),
intent(inout) :: ad_ustr(LBi:,LBj:,:,:)
1867 real(r8),
intent(inout) :: ad_vstr(LBi:,LBj:,:,:)
1870# ifdef ADJUST_STFLUX
1871 real(r8),
intent(inout) :: ad_tflux(LBi:,LBj:,:,:,:)
1873 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
1874 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
1875 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
1876# if defined WEAK_CONSTRAINT && defined TIME_CONV
1877 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
1878 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
1881 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
1882 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
1884 real(r8),
intent(inout) :: ad_zeta(LBi:,LBj:,:)
1887 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
1888 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
1889 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
1891# ifdef ADJUST_BOUNDARY
1893 real(r8),
intent(inout) :: tl_t_obc(LBij:UBij,N(ng),4, &
1894 & Nbrec(ng),2,NT(ng))
1895 real(r8),
intent(inout) :: tl_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
1896 real(r8),
intent(inout) :: tl_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
1898 real(r8),
intent(inout) :: tl_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
1899 real(r8),
intent(inout) :: tl_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
1900 real(r8),
intent(inout) :: tl_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
1902# ifdef ADJUST_WSTRESS
1903 real(r8),
intent(inout) :: tl_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
1904 real(r8),
intent(inout) :: tl_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
1907# ifdef ADJUST_STFLUX
1908 real(r8),
intent(inout) :: tl_tflux(LBi:UBi,LBj:UBj, &
1909 & Nfrec(ng),2,NT(ng))
1911 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
1912 real(r8),
intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
1913 real(r8),
intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
1914# if defined WEAK_CONSTRAINT && defined TIME_CONV
1915 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
1916 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
1919 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
1920 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
1922 real(r8),
intent(inout) :: tl_zeta(LBi:UBi,LBj:UBj,:)
1923# ifdef ADJUST_BOUNDARY
1925 real(r8),
intent(inout) :: ad_t_obc(LBij:UBij,N(ng),4, &
1926 & Nbrec(ng),2,NT(ng))
1927 real(r8),
intent(inout) :: ad_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
1928 real(r8),
intent(inout) :: ad_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
1930 real(r8),
intent(inout) :: ad_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
1931 real(r8),
intent(inout) :: ad_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
1932 real(r8),
intent(inout) :: ad_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
1934# ifdef ADJUST_WSTRESS
1935 real(r8),
intent(inout) :: ad_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
1936 real(r8),
intent(inout) :: ad_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
1939# ifdef ADJUST_STFLUX
1940 real(r8),
intent(inout) :: ad_tflux(LBi:UBi,LBj:UBj, &
1941 & Nfrec(ng),2,NT(ng))
1943 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
1944 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
1945 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
1946# if defined WEAK_CONSTRAINT && defined TIME_CONV
1947 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
1948 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
1951 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
1952 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
1954 real(r8),
intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
1961 integer :: ib, ir, it
1963 real(r8) :: fac1, fac2
1965# include "set_bounds.h"
1980 tl_zeta(i,j,linp)=tl_zeta(i,j,linp)*rmask(i,j)
1984# ifdef ADJUST_BOUNDARY
1991 &
domain(ng)%Western_Edge(tile))
THEN
1994 tl_zeta_obc(j,ib,ir,linp)=tl_zeta_obc(j,ib,ir,linp)* &
1999 &
domain(ng)%Eastern_Edge(tile))
THEN
2002 tl_zeta_obc(j,ib,ir,linp)=tl_zeta_obc(j,ib,ir,linp)* &
2007 &
domain(ng)%Southern_Edge(tile))
THEN
2010 tl_zeta_obc(i,ib,ir,linp)=tl_zeta_obc(i,ib,ir,linp)* &
2015 &
domain(ng)%Northern_Edge(tile))
THEN
2018 tl_zeta_obc(i,ib,ir,linp)=tl_zeta_obc(i,ib,ir,linp)* &
2026# if !defined SOLVE3D || \
2027 (defined weak_constraint && defined time_conv)
2033 tl_ubar(i,j,linp)=tl_ubar(i,j,linp)*umask(i,j)
2041 tl_vbar(i,j,linp)=tl_vbar(i,j,linp)*vmask(i,j)
2046# ifdef ADJUST_BOUNDARY
2053 &
domain(ng)%Western_Edge(tile))
THEN
2056 tl_ubar_obc(j,ib,ir,linp)=tl_ubar_obc(j,ib,ir,linp)* &
2061 &
domain(ng)%Eastern_Edge(tile))
THEN
2064 tl_ubar_obc(j,ib,ir,linp)=tl_ubar_obc(j,ib,ir,linp)* &
2069 &
domain(ng)%Southern_Edge(tile))
THEN
2072 tl_ubar_obc(i,ib,ir,linp)=tl_ubar_obc(i,ib,ir,linp)* &
2077 &
domain(ng)%Northern_Edge(tile))
THEN
2080 tl_ubar_obc(i,ib,ir,linp)=tl_ubar_obc(i,ib,ir,linp)* &
2092 &
domain(ng)%Western_Edge(tile))
THEN
2095 tl_vbar_obc(j,ib,ir,linp)=tl_vbar_obc(j,ib,ir,linp)* &
2100 &
domain(ng)%Eastern_Edge(tile))
THEN
2103 tl_vbar_obc(j,ib,ir,linp)=tl_vbar_obc(j,ib,ir,linp)* &
2108 &
domain(ng)%Southern_Edge(tile))
THEN
2111 tl_vbar_obc(i,ib,ir,linp)=tl_vbar_obc(i,ib,ir,linp)* &
2116 &
domain(ng)%Northern_Edge(tile))
THEN
2119 tl_vbar_obc(i,ib,ir,linp)=tl_vbar_obc(i,ib,ir,linp)* &
2127# ifdef ADJUST_WSTRESS
2134 tl_ustr(i,j,ir,linp)=tl_ustr(i,j,ir,linp)*umask(i,j)
2139 tl_vstr(i,j,ir,linp)=tl_vstr(i,j,ir,linp)*vmask(i,j)
2152 tl_u(i,j,k,linp)=tl_u(i,j,k,linp)*umask(i,j)
2157# ifdef ADJUST_BOUNDARY
2164 &
domain(ng)%Western_Edge(tile))
THEN
2168 tl_u_obc(j,k,ib,ir,linp)=tl_u_obc(j,k,ib,ir,linp)* &
2174 &
domain(ng)%Eastern_Edge(tile))
THEN
2178 tl_u_obc(j,k,ib,ir,linp)=tl_u_obc(j,k,ib,ir,linp)* &
2184 &
domain(ng)%Southern_Edge(tile))
THEN
2188 tl_u_obc(i,k,ib,ir,linp)=tl_u_obc(i,k,ib,ir,linp)* &
2194 &
domain(ng)%Northern_Edge(tile))
THEN
2198 tl_u_obc(i,k,ib,ir,linp)=tl_u_obc(i,k,ib,ir,linp)* &
2212 tl_v(i,j,k,linp)=tl_v(i,j,k,linp)*vmask(i,j)
2217# ifdef ADJUST_BOUNDARY
2224 &
domain(ng)%Western_Edge(tile))
THEN
2228 tl_v_obc(j,k,ib,ir,linp)=tl_v_obc(j,k,ib,ir,linp)* &
2234 &
domain(ng)%Eastern_Edge(tile))
THEN
2238 tl_v_obc(j,k,ib,ir,linp)=tl_v_obc(j,k,ib,ir,linp)* &
2244 &
domain(ng)%Southern_Edge(tile))
THEN
2248 tl_v_obc(i,k,ib,ir,linp)=tl_v_obc(i,k,ib,ir,linp)* &
2254 &
domain(ng)%Northern_Edge(tile))
THEN
2258 tl_v_obc(i,k,ib,ir,linp)=tl_v_obc(i,k,ib,ir,linp)* &
2273 tl_t(i,j,k,linp,it)=tl_t(i,j,k,linp,it)*rmask(i,j)
2279# ifdef ADJUST_BOUNDARY
2287 &
domain(ng)%Western_Edge(tile))
THEN
2291 tl_t_obc(j,k,ib,ir,linp,it)= &
2292 & tl_t_obc(j,k,ib,ir,linp,it)*rmask(istr-1,j)
2297 &
domain(ng)%Eastern_Edge(tile))
THEN
2301 tl_t_obc(j,k,ib,ir,linp,it)= &
2302 & tl_t_obc(j,k,ib,ir,linp,it)*rmask(iend+1,j)
2307 &
domain(ng)%Southern_Edge(tile))
THEN
2311 tl_t_obc(i,k,ib,ir,linp,it)= &
2312 & tl_t_obc(i,k,ib,ir,linp,it)*rmask(i,jstr-1)
2317 &
domain(ng)%Northern_Edge(tile))
THEN
2321 tl_t_obc(i,k,ib,ir,linp,it)= &
2322 & tl_t_obc(i,k,ib,ir,linp,it)*rmask(i,jend+1)
2331# ifdef ADJUST_STFLUX
2340 tl_tflux(i,j,ir,linp,it)=tl_tflux(i,j,ir,linp,it)* &
2367 & lbi, ubi, lbj, ubj, lbij, ubij, &
2368 & lout, linp, lout, fac1, fac2, &
2370 & rmask, umask, vmask, &
2372# ifdef ADJUST_BOUNDARY
2374 & ad_t_obc, tl_t_obc, &
2375 & ad_u_obc, tl_u_obc, &
2376 & ad_v_obc, tl_v_obc, &
2378 & ad_ubar_obc, tl_ubar_obc, &
2379 & ad_vbar_obc, tl_vbar_obc, &
2380 & ad_zeta_obc, tl_zeta_obc, &
2382# ifdef ADJUST_WSTRESS
2383 & ad_ustr, tl_ustr, &
2384 & ad_vstr, tl_vstr, &
2387# ifdef ADJUST_STFLUX
2388 & ad_tflux, tl_tflux, &
2393# if defined WEAK_CONSTRAINT && defined TIME_CONV
2394 & ad_ubar, tl_ubar, &
2395 & ad_vbar, tl_vbar, &
2398 & ad_ubar, tl_ubar, &
2399 & ad_vbar, tl_vbar, &
2410 & lbi, ubi, lbj, ubj, lbij, ubij, &
2412# ifdef ADJUST_BOUNDARY
2414 & ad_t_obc, tl_t_obc, &
2415 & ad_u_obc, tl_u_obc, &
2416 & ad_v_obc, tl_v_obc, &
2418 & ad_ubar_obc, tl_ubar_obc, &
2419 & ad_vbar_obc, tl_vbar_obc, &
2420 & ad_zeta_obc, tl_zeta_obc, &
2422# ifdef ADJUST_WSTRESS
2423 & ad_ustr, tl_ustr, &
2424 & ad_vstr, tl_vstr, &
2427# ifdef ADJUST_STFLUX
2428 & ad_tflux, tl_tflux, &
2433# if defined WEAK_CONSTRAINT && defined TIME_CONV
2434 & ad_ubar, tl_ubar, &
2435 & ad_vbar, tl_vbar, &
2438 & ad_ubar, tl_ubar, &
2439 & ad_vbar, tl_vbar, &
2448# if defined TLM_CHECK
2467# if defined SEDIMENT && defined SED_MORPH && defined SOLVE3D
2474 integer,
intent(in) :: ng, linp, lout, tile
2478 character (len=*),
parameter :: myfile = &
2479 & __FILE__//
", ini_perturb"
2487 & lbi, ubi, lbj, ubj, &
2488 & imins, imaxs, jmins, jmaxs, &
2489 &
nstp(ng),
nnew(ng), linp, lout, &
2491 &
grid(ng) % rmask, &
2492 &
grid(ng) % umask, &
2493 &
grid(ng) % vmask, &
2496# if defined SEDIMENT && defined SED_MORPH
2497 &
sedbed(ng) % bed_thick, &
2501 &
grid(ng) % om_v, &
2502 &
grid(ng) % on_u, &
2504 &
grid(ng) % zice, &
2509 &
ocean(ng) % ad_t, &
2510 &
ocean(ng) % ad_u, &
2511 &
ocean(ng) % ad_v, &
2516 &
ocean(ng) % ad_ubar, &
2517 &
ocean(ng) % ad_vbar, &
2518 &
ocean(ng) % ad_zeta, &
2519 &
ocean(ng) % ubar, &
2520 &
ocean(ng) % vbar, &
2531 & LBi, UBi, LBj, UBj, &
2532 & IminS, ImaxS, JminS, JmaxS, &
2533 & nstp, nnew, Linp, Lout, &
2535 & rmask, umask, vmask, &
2538# if defined SEDIMENT && defined SED_MORPH
2541 & Hz, h, om_v, on_u, &
2545 & z_r, z_w, Zt_avg1, &
2546 & ad_t, ad_u, ad_v, &
2549 & ad_ubar, ad_vbar, ad_zeta, &
2584 integer,
intent(in) :: ng, tile
2585 integer,
intent(in) :: LBi, UBi, LBj, UBj
2586 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
2587 integer,
intent(in) :: nstp, nnew, Linp, Lout
2589# ifdef ASSUMED_SHAPE
2591 real(r8),
intent(in) :: rmask(LBi:,LBj:)
2592 real(r8),
intent(in) :: umask(LBi:,LBj:)
2593 real(r8),
intent(in) :: vmask(LBi:,LBj:)
2596# if defined SEDIMENT && defined SED_MORPH
2597 real(r8),
intent(in) :: bed_thick(LBi:,LBj:,:)
2599 real(r8),
intent(in) :: om_v(LBi:,LBj:)
2600 real(r8),
intent(in) :: on_u(LBi:,LBj:)
2602 real(r8),
intent(in) :: zice(LBi:,LBj:)
2604 real(r8),
intent(in) :: ad_t(LBi:,LBj:,:,:,:)
2605 real(r8),
intent(in) :: ad_u(LBi:,LBj:,:,:)
2606 real(r8),
intent(in) :: ad_v(LBi:,LBj:,:,:)
2608 real(r8),
intent(in) :: ad_ubar(LBi:,LBj:,:)
2609 real(r8),
intent(in) :: ad_vbar(LBi:,LBj:,:)
2610 real(r8),
intent(in) :: ad_zeta(LBi:,LBj:,:)
2612 real(r8),
intent(inout) :: h(LBi:,LBj:)
2613 real(r8),
intent(inout) :: Hz(LBi:,LBj:,:)
2614 real(r8),
intent(inout) :: Zt_avg1(LBi:,LBj:)
2615 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
2616 real(r8),
intent(inout) :: u(LBi:,LBj:,:,:)
2617 real(r8),
intent(inout) :: v(LBi:,LBj:,:,:)
2619 real(r8),
intent(inout) :: ubar(LBi:,LBj:,:)
2620 real(r8),
intent(inout) :: vbar(LBi:,LBj:,:)
2621 real(r8),
intent(inout) :: zeta(LBi:,LBj:,:)
2623 real(r8),
intent(out) :: z_r(LBi:,LBj:,:)
2624 real(r8),
intent(out) :: z_w(LBi:,LBj:,0:)
2628 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
2629 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
2630 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
2633# if defined SEDIMENT && defined SED_MORPH
2634 real(r8),
intent(in) :: bed_thick(LBi:UBi,LBj:UBj,3)
2636 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
2637 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
2639 real(r8),
intent(in) :: zice(LBi:,LBj:)
2641 real(r8),
intent(in) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
2642 real(r8),
intent(in) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
2643 real(r8),
intent(in) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
2645 real(r8),
intent(in) :: ad_ubar(LBi:UBi,LBj:UBj,:)
2646 real(r8),
intent(in) :: ad_vbar(LBi:UBi,LBj:UBj,:)
2647 real(r8),
intent(in) :: ad_zeta(LBi:UBi,LBj:UBj,:)
2649 real(r8),
intent(inout) :: h(LBi:UBi,LBj:UBj)
2650 real(r8),
intent(inout) :: Hz(LBi:UBi,LBj:UBj,N(ng))
2651 real(r8),
intent(inout) :: Zt_avg1(LBi:UBi,LBj:UBj)
2652 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
2653 real(r8),
intent(inout) :: u(LBi:UBi,LBj:UBj,N(ng),2)
2654 real(r8),
intent(inout) :: v(LBi:UBi,LBj:UBj,N(ng),2)
2656 real(r8),
intent(inout) :: ubar(LBi:UBi,LBj:UBj,:)
2657 real(r8),
intent(inout) :: vbar(LBi:UBi,LBj:UBj,:)
2658 real(r8),
intent(inout) :: zeta(LBi:UBi,LBj:UBj,:)
2660 real(r8),
intent(out) :: z_r(LBi:UBi,LBj:UBj,N(ng))
2661 real(r8),
intent(out) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
2671 integer,
dimension(NstateVar(ng)+1) :: StateVar
2673 real(r8) :: p, scale
2675# include "set_bounds.h"
2703 p=10.0_r8**real(-
inner,r8)
2705 IF (
domain(ng)%SouthWest_Corner(tile))
THEN
2714 zeta(i,j,lout)=zeta(i,j,lout)+p*ad_zeta(i,j,linp)*scale
2716 zeta(i,j,lout)=zeta(i,j,lout)*rmask(i,j)
2720 IF (
domain(ng)%SouthWest_Test(tile))
THEN
2733 ubar(i,j,lout)=ubar(i,j,lout)+p*ad_ubar(i,j,linp)*scale
2735 ubar(i,j,lout)=ubar(i,j,lout)*umask(i,j)
2739 IF (
domain(ng)%SouthWest_Test(tile))
THEN
2752 vbar(i,j,lout)=vbar(i,j,lout)+p*ad_vbar(i,j,linp)*scale
2754 vbar(i,j,lout)=vbar(i,j,lout)*vmask(i,j)
2758 IF (
domain(ng)%SouthWest_Test(tile))
THEN
2773 u(i,j,k,lout)=u(i,j,k,lout)+p*ad_u(i,j,k,linp)*scale
2775 u(i,j,k,lout)=u(i,j,k,lout)*umask(i,j)
2780 IF (
domain(ng)%SouthWest_Test(tile))
THEN
2794 v(i,j,k,lout)=v(i,j,k,lout)+p*ad_v(i,j,k,linp)*scale
2796 v(i,j,k,lout)=v(i,j,k,lout)*vmask(i,j)
2801 IF (
domain(ng)%SouthWest_Test(tile))
THEN
2812 IF ((statevar(
outer).eq.0).or. &
2817 t(i,j,k,lout,itrc)=t(i,j,k,lout,itrc)+ &
2818 & p*ad_t(i,j,k,linp,itrc)*scale
2820 t(i,j,k,lout,itrc)=t(i,j,k,lout,itrc)*rmask(i,j)
2825 IF (
domain(ng)%SouthWest_Test(tile))
THEN
2841 & lbi, ubi, lbj, ubj, &
2842 & imins, imaxs, jmins, jmaxs, &
2843 & lout, lout, lout, &
2847 & lbi, ubi, lbj, ubj, &
2848 & imins, imaxs, jmins, jmaxs, &
2849 & lout, lout, lout, &
2852 & lbi, ubi, lbj, ubj, &
2853 & imins, imaxs, jmins, jmaxs, &
2854 & lout, lout, lout, &
2860 & lbi, ubi, lbj, ubj, &
2864 & lbi, ubi, lbj, ubj, &
2867 & lbi, ubi, lbj, ubj, &
2875 & lbi, ubi, lbj, ubj, &
2881 & lbi, ubi, lbj, ubj, &
2895 & lbi, ubi, lbj, ubj, &
2896 & imins, imaxs, jmins, jmaxs, &
2902# if defined SEDIMENT && defined SED_MORPH
2913 & lbi, ubi, lbj, ubj, n(ng), &
2914 & imins, imaxs, jmins, jmaxs, &
2917 & lbi, ubi, lbj, ubj, n(ng), &
2918 & imins, imaxs, jmins, jmaxs, &
2927 & lbi, ubi, lbj, ubj, n(ng), nt(ng), &
2928 & imins, imaxs, jmins, jmaxs, &
2934 & lbi, ubi, lbj, ubj, 1, n(ng), &
2937 & lbi, ubi, lbj, ubj, 1, n(ng), &
2941 & lbi, ubi, lbj, ubj, 1, n(ng), &
2942 & t(:,:,:,lout,itrc))
2949 & lbi, ubi, lbj, ubj, 1, n(ng), &
2955 & lbi, ubi, lbj, ubj, 1, n(ng), 1, nt(ng), &
2962 10
FORMAT (/,
' Perturbing Nonlinear model Initial Conditions:',/)
2963 20
FORMAT (
' (Outer,Inner) = ',
'(',i4.4,
',',i4.4,
')',3x, &
2964 &
'Perturbing State Variable: ',a)
2970# if defined OPT_PERTURBATION || defined FORCING_SV || \
2971 defined stochastic_opt || defined hessian_sv || \
2972 defined hessian_so || defined hessian_fsv
2993 integer,
intent(in) :: ng, tile, kinp, kout, ninp, nout
2997 character (len=*),
parameter :: myfile = &
2998 & __FILE__//
", ad_ini_perturb"
3006 & lbi, ubi, lbj, ubj, &
3007 & imins, imaxs, jmins, jmaxs, &
3008 & kinp, kout, ninp, nout, &
3010 &
grid(ng) % rmask, &
3011 &
grid(ng) % umask, &
3012 &
grid(ng) % vmask, &
3016 &
ocean(ng) % e_t, &
3017 &
ocean(ng) % e_u, &
3018 &
ocean(ng) % e_v, &
3020 &
ocean(ng) % e_ubar, &
3021 &
ocean(ng) % e_vbar, &
3023 &
ocean(ng) % e_zeta, &
3029 &
ocean(ng) % tl_ubar, &
3030 &
ocean(ng) % tl_vbar, &
3032 &
ocean(ng) % tl_zeta, &
3034 &
ocean(ng) % tl_t, &
3035 &
ocean(ng) % tl_u, &
3036 &
ocean(ng) % tl_v, &
3037 &
ocean(ng) % ad_t, &
3038 &
ocean(ng) % ad_u, &
3039 &
ocean(ng) % ad_v, &
3041 &
ocean(ng) % ad_ubar, &
3042 &
ocean(ng) % ad_vbar, &
3044 &
ocean(ng) % ad_zeta)
3054 & LBi, UBi, LBj, UBj, &
3055 & IminS, ImaxS, JminS, JmaxS, &
3056 & Kinp, Kout, Ninp, Nout, &
3058 & rmask, umask, vmask, &
3072 & tl_ubar, tl_vbar, &
3076 & tl_t, tl_u, tl_v, &
3077 & ad_t, ad_u, ad_v, &
3079 & ad_ubar, ad_vbar, &
3089 integer,
intent(in) :: ng, tile
3090 integer,
intent(in) :: LBi, UBi, LBj, UBj
3091 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
3092 integer,
intent(in) :: Kinp, Kout, Ninp, Nout
3094# ifdef ASSUMED_SHAPE
3096 real(r8),
intent(in) :: rmask(LBi:,LBj:)
3097 real(r8),
intent(in) :: umask(LBi:,LBj:)
3098 real(r8),
intent(in) :: vmask(LBi:,LBj:)
3101 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
3103 real(r8),
intent(in) :: h(LBi:,LBj:)
3104 real(r8),
intent(in) :: tl_ubar(LBi:,LBj:,:)
3105 real(r8),
intent(in) :: tl_vbar(LBi:,LBj:,:)
3107 real(r8),
intent(in) :: tl_zeta(LBi:,LBj:,:)
3109 real(r8),
intent(in) :: tl_t(LBi:,LBj:,:,:,:)
3110 real(r8),
intent(in) :: tl_u(LBi:,LBj:,:,:)
3111 real(r8),
intent(in) :: tl_v(LBi:,LBj:,:,:)
3113 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
3114 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
3116 real(r8),
intent(inout) :: ad_zeta(LBi:,LBj:,:)
3118 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
3119 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
3120 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
3123 real(r8),
intent(in) :: e_zeta(LBi:,LBj:,:)
3125 real(r8),
intent(in) :: e_t(LBi:,LBj:,:,:,:)
3126 real(r8),
intent(in) :: e_u(LBi:,LBj:,:,:)
3127 real(r8),
intent(in) :: e_v(LBi:,LBj:,:,:)
3129 real(r8),
intent(in) :: e_ubar(LBi:,LBj:,:)
3130 real(r8),
intent(in) :: e_vbar(LBi:,LBj:,:)
3135 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
3136 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
3137 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
3140 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
3142 real(r8),
intent(in) :: h(LBi:UBi,LBj:UBj)
3143 real(r8),
intent(in) :: tl_ubar(LBi:UBi,LBj:UBj,:)
3144 real(r8),
intent(in) :: tl_vbar(LBi:UBi,LBj:UBj,:)
3146 real(r8),
intent(in) :: tl_zeta(LBi:UBi,LBj:UBj,:)
3148 real(r8),
intent(in) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
3149 real(r8),
intent(in) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
3150 real(r8),
intent(in) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
3152 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
3153 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
3155 real(r8),
intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
3157 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
3158 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
3159 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
3162 real(r8),
intent(in) :: e_zeta(LBi:UBi,LBj:UBj,NSA)
3164 real(r8),
intent(in) :: e_t(LBi:UBi,LBj:UBj,N(ng),NSA,NT(ng))
3165 real(r8),
intent(in) :: e_u(LBi:UBi,LBj:UBj,N(ng),NSA)
3166 real(r8),
intent(in) :: e_v(LBi:UBi,LBj:UBj,N(ng),NSA)
3168 real(r8),
intent(in) :: e_ubar(LBi:UBi,LBj:UBj,NSA)
3169 real(r8),
intent(in) :: e_vbar(LBi:UBi,LBj:UBj,NSA)
3180 real(r8) :: cff, scale
3182# include "set_bounds.h"
3190# define I_R_RANGE IstrT,IendT
3191# define I_U_RANGE IstrP,IendT
3192# define J_R_RANGE JstrT,JendT
3193# define J_V_RANGE JstrP,JendT
3195# define I_R_RANGE Istr,Iend
3196# define I_U_RANGE IstrU,Iend
3197# define J_R_RANGE Jstr,Jend
3198# define J_V_RANGE JstrV,Jend
3209 IF (e_zeta(i,j,1).gt.0.0_r8)
THEN
3210 scale=1.0_r8/(e_zeta(i,j,1)*e_zeta(i,j,1))
3215 ad_zeta(i,j,kout)=scale*tl_zeta(i,j,kinp)
3217 ad_zeta(i,j,kout)=ad_zeta(i,j,kout)*rmask(i,j)
3230 IF (e_ubar(i,j,1).gt.0.0_r8)
THEN
3231 scale=1.0_r8/(e_ubar(i,j,1)*e_ubar(i,j,1))
3236 scale=cff*(h(i-1,j)+h(i,j))
3238 ad_ubar(i,j,kout)=scale*tl_ubar(i,j,kinp)
3240 ad_ubar(i,j,kout)=ad_ubar(i,j,kout)*umask(i,j)
3251 IF (e_vbar(i,j,1).gt.0.0_r8)
THEN
3252 scale=1.0_r8/(e_vbar(i,j,1)*e_vbar(i,j,1))
3257 scale=cff*(h(i,j-1)+h(i,j))
3259 ad_vbar(i,j,kout)=scale*tl_vbar(i,j,kinp)
3261 ad_vbar(i,j,kout)=ad_vbar(i,j,kout)*vmask(i,j)
3274 IF (e_u(i,j,k,1).gt.0.0_r8)
THEN
3275 scale=1.0_r8/(e_u(i,j,k,1)*e_u(i,j,k,1))
3280 scale=cff*(hz(i-1,j,k)+hz(i,j,k))
3282 ad_u(i,j,k,nout)=scale*tl_u(i,j,k,ninp)
3284 ad_u(i,j,k,nout)=ad_u(i,j,k,nout)*umask(i,j)
3297 IF (e_v(i,j,k,1).gt.0.0_r8)
THEN
3298 scale=1.0_r8/(e_v(i,j,k,1)*e_v(i,j,k,1))
3303 scale=cff*(hz(i,j-1,k)+hz(i,j,k))
3305 ad_v(i,j,k,nout)=scale*tl_v(i,j,k,ninp)
3307 ad_v(i,j,k,nout)=ad_v(i,j,k,nout)*vmask(i,j)
3316 IF (itrc.eq.
itemp)
THEN
3318 ELSE IF (itrc.eq.
isalt)
THEN
3327 IF (e_t(i,j,k,1,itrc).gt.0.0_r8)
THEN
3328 scale=1.0_r8/(e_t(i,j,k,1,itrc)*e_t(i,j,k,1,itrc))
3335 ad_t(i,j,k,nout,itrc)=scale*tl_t(i,j,k,ninp,itrc)
3337 ad_t(i,j,k,nout,itrc)=ad_t(i,j,k,nout,itrc)*rmask(i,j)
3354# if defined TLM_CHECK
3373# if defined SEDIMENT && defined SED_MORPH && defined SOLVE3D
3380 integer,
intent(in) :: ng, tile, linp, lout
3384 character (len=*),
parameter :: myfile = &
3385 & __FILE__//
", tl_ini_perturb"
3393 & lbi, ubi, lbj, ubj, &
3394 & imins, imaxs, jmins, jmaxs, &
3395 &
nstp(ng),
nnew(ng), linp, lout, &
3397 &
grid(ng) % rmask, &
3398 &
grid(ng) % umask, &
3399 &
grid(ng) % vmask, &
3402# if defined SEDIMENT && defined SED_MORPH
3403 &
sedbed(ng) % tl_bed_thick, &
3405 &
grid(ng) % tl_Hz, &
3407 &
grid(ng) % tl_h, &
3408 &
grid(ng) % om_v, &
3409 &
grid(ng) % on_u, &
3411 &
grid(ng) % zice, &
3413 &
grid(ng) % tl_z_r, &
3414 &
grid(ng) % tl_z_w, &
3418 &
ocean(ng) % ubar, &
3419 &
ocean(ng) % vbar, &
3420 &
ocean(ng) % zeta, &
3422 &
ocean(ng) % ad_t, &
3423 &
ocean(ng) % ad_u, &
3424 &
ocean(ng) % ad_v, &
3425 &
ocean(ng) % tl_t, &
3426 &
ocean(ng) % tl_u, &
3427 &
ocean(ng) % tl_v, &
3429 &
ocean(ng) % ad_ubar, &
3430 &
ocean(ng) % ad_vbar, &
3431 &
ocean(ng) % ad_zeta, &
3432 &
ocean(ng) % tl_ubar, &
3433 &
ocean(ng) % tl_vbar, &
3434 &
ocean(ng) % tl_zeta)
3444 & LBi, UBi, LBj, UBj, &
3445 & IminS, ImaxS, JminS, JmaxS, &
3446 & nstp, nnew, Linp, Lout, &
3448 & rmask, umask, vmask, &
3451# if defined SEDIMENT && defined SED_MORPH
3460 & Zt_avg1, tl_Zt_avg1, &
3462 & ubar, vbar, zeta, &
3464 & ad_t, ad_u, ad_v, &
3465 & tl_t, tl_u, tl_v, &
3467 & ad_ubar, ad_vbar, ad_zeta, &
3468 & tl_ubar, tl_vbar, tl_zeta)
3502 integer,
intent(in) :: ng, tile
3503 integer,
intent(in) :: LBi, UBi, LBj, UBj
3504 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
3505 integer,
intent(in) :: nstp, nnew, Linp, Lout
3507# ifdef ASSUMED_SHAPE
3509 real(r8),
intent(in) :: rmask(LBi:,LBj:)
3510 real(r8),
intent(in) :: umask(LBi:,LBj:)
3511 real(r8),
intent(in) :: vmask(LBi:,LBj:)
3514# if defined SEDIMENT && defined SED_MORPH
3515 real(r8),
intent(in) :: tl_bed_thick(LBi:,LBj:,:)
3517 real(r8),
intent(in) :: om_v(LBi:,LBj:)
3518 real(r8),
intent(in) :: on_u(LBi:,LBj:)
3520 real(r8),
intent(in) :: zice(LBi:,LBj:)
3522 real(r8),
intent(in) :: h(LBi:,LBj:)
3523 real(r8),
intent(in) :: Zt_avg1(LBi:,LBj:)
3525 real(r8),
intent(in) :: ubar(LBi:,LBj:,:)
3526 real(r8),
intent(in) :: vbar(LBi:,LBj:,:)
3527 real(r8),
intent(in) :: zeta(LBi:,LBj:,:)
3529 real(r8),
intent(in) :: ad_t(LBi:,LBj:,:,:,:)
3530 real(r8),
intent(in) :: ad_u(LBi:,LBj:,:,:)
3531 real(r8),
intent(in) :: ad_v(LBi:,LBj:,:,:)
3533 real(r8),
intent(in) :: ad_ubar(LBi:,LBj:,:)
3534 real(r8),
intent(in) :: ad_vbar(LBi:,LBj:,:)
3535 real(r8),
intent(in) :: ad_zeta(LBi:,LBj:,:)
3537 real(r8),
intent(inout) :: tl_h(LBi:,LBj:)
3538 real(r8),
intent(inout) :: tl_Zt_avg1(LBi:,LBj:)
3541 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
3542 real(r8),
intent(inout) :: tl_u(LBi:,LBj:,:,:)
3543 real(r8),
intent(inout) :: tl_v(LBi:,LBj:,:,:)
3545 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
3546 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
3547 real(r8),
intent(inout) :: tl_zeta(LBi:,LBj:,:)
3549 real(r8),
intent(out) :: tl_Hz(LBi:,LBj:,:)
3550 real(r8),
intent(out) :: tl_z_r(LBi:,LBj:,:)
3551 real(r8),
intent(out) :: tl_z_w(LBi:,LBj:,0:)
3555 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
3556 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
3557 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
3560# if defined SEDIMENT && defined SED_MORPH
3561 real(r8),
intent(in) :: tl_bed_thick(LBi:UBi,LBj:UBj,3)
3563 real(r8),
intent(in) :: om_v(LBi:UBi,LBj:UBj)
3564 real(r8),
intent(in) :: on_u(LBi:UBi,LBj:UBj)
3566 real(r8),
intent(in) :: zice(LBi:,LBj:)
3568 real(r8),
intent(in) :: Zt_avg1(LBi:UBi,LBj:UBj)
3570 real(r8),
intent(in) :: ubar(LBi:UBi,LBj:UBj,:)
3571 real(r8),
intent(in) :: vbar(LBi:UBi,LBj:UBj,:)
3572 real(r8),
intent(in) :: zeta(LBi:UBi,LBj:UBj,:)
3574 real(r8),
intent(in) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
3575 real(r8),
intent(in) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
3576 real(r8),
intent(in) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
3578 real(r8),
intent(in) :: ad_ubar(LBi:UBi,LBj:UBj,:)
3579 real(r8),
intent(in) :: ad_vbar(LBi:UBi,LBj:UBj,:)
3580 real(r8),
intent(in) :: ad_zeta(LBi:UBi,LBj:UBj,:)
3582 real(r8),
intent(inout) :: tl_Zt_avg1(LBi:UBi,LBj:UBj)
3585 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
3586 real(r8),
intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
3587 real(r8),
intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
3589 real(r8),
intent(inout) :: h(LBi:UBi,LBj:UBj)
3590 real(r8),
intent(inout) :: tl_h(LBi:UBi,LBj:UBj)
3591 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
3592 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
3593 real(r8),
intent(inout) :: tl_zeta(LBi:UBi,LBj:UBj,:)
3595 real(r8),
intent(out) :: tl_Hz(LBi:UBi,LBj:UBj,N(ng))
3596 real(r8),
intent(out) :: tl_z_r(LBi:UBi,LBj:UBj,N(ng))
3597 real(r8),
intent(out) :: tl_z_w(LBi:UBi,LBj:UBj,0:N(ng))
3607 integer,
dimension(NstateVar(ng)+1) :: StateVar
3609 real(r8) :: p, scale
3611# include "set_bounds.h"
3639 p=10.0_r8**real(-
inner,r8)
3641 IF (
domain(ng)%SouthWest_Test(tile))
THEN
3650 tl_zeta(i,j,lout)=p*ad_zeta(i,j,linp)*scale
3652 tl_zeta(i,j,lout)=tl_zeta(i,j,lout)*rmask(i,j)
3656 IF (
domain(ng)%SouthWest_Test(tile))
THEN
3669 tl_ubar(i,j,lout)=p*ad_ubar(i,j,linp)*scale
3671 tl_ubar(i,j,lout)=tl_ubar(i,j,lout)*umask(i,j)
3675 IF (
domain(ng)%SouthWest_Test(tile))
THEN
3688 tl_vbar(i,j,lout)=p*ad_vbar(i,j,linp)*scale
3690 tl_vbar(i,j,lout)=tl_vbar(i,j,lout)*vmask(i,j)
3694 IF (
domain(ng)%SouthWest_Test(tile))
THEN
3709 tl_u(i,j,k,lout)=p*ad_u(i,j,k,linp)*scale
3711 tl_u(i,j,k,lout)=tl_u(i,j,k,lout)*umask(i,j)
3716 IF (
domain(ng)%SouthWest_Test(tile))
THEN
3730 tl_v(i,j,k,lout)=p*ad_v(i,j,k,linp)*scale
3732 tl_v(i,j,k,lout)=tl_v(i,j,k,lout)*vmask(i,j)
3737 IF (
domain(ng)%SouthWest_Test(tile))
THEN
3748 IF ((statevar(
outer).eq.0).or. &
3753 tl_t(i,j,k,lout,itrc)=p*ad_t(i,j,k,linp,itrc)*scale
3755 tl_t(i,j,k,lout,itrc)=tl_t(i,j,k,lout,itrc)*rmask(i,j)
3760 IF (
domain(ng)%SouthWest_Test(tile))
THEN
3776 & lbi, ubi, lbj, ubj, &
3777 & imins, imaxs, jmins, jmaxs, &
3778 & lout, lout, lout, &
3782 & lbi, ubi, lbj, ubj, &
3783 & imins, imaxs, jmins, jmaxs, &
3784 & lout, lout, lout, &
3785 & ubar, vbar, zeta, &
3786 & tl_ubar, tl_vbar, tl_zeta)
3788 & lbi, ubi, lbj, ubj, &
3789 & imins, imaxs, jmins, jmaxs, &
3790 & lout, lout, lout, &
3791 & ubar, vbar, zeta, &
3792 & tl_ubar, tl_vbar, tl_zeta)
3797 & lbi, ubi, lbj, ubj, &
3798 & tl_zeta(:,:,lout))
3801 & lbi, ubi, lbj, ubj, &
3802 & tl_ubar(:,:,lout))
3804 & lbi, ubi, lbj, ubj, &
3805 & tl_vbar(:,:,lout))
3812 & lbi, ubi, lbj, ubj, &
3815 & tl_zeta(:,:,lout))
3818 & lbi, ubi, lbj, ubj, &
3821 & tl_ubar(:,:,lout), &
3822 & tl_vbar(:,:,lout))
3832 & lbi, ubi, lbj, ubj, &
3833 & imins, imaxs, jmins, jmaxs, &
3839# if defined SEDIMENT && defined SED_MORPH
3842 & zt_avg1, tl_zt_avg1, &
3843 & tl_hz, tl_z_r, tl_z_w)
3850 & lbi, ubi, lbj, ubj, n(ng), &
3851 & imins, imaxs, jmins, jmaxs, &
3854 & lbi, ubi, lbj, ubj, n(ng), &
3855 & imins, imaxs, jmins, jmaxs, &
3864 & lbi, ubi, lbj, ubj, n(ng), nt(ng), &
3865 & imins, imaxs, jmins, jmaxs, &
3871 & lbi, ubi, lbj, ubj, 1, n(ng), &
3874 & lbi, ubi, lbj, ubj, 1, n(ng), &
3878 & lbi, ubi, lbj, ubj, 1, n(ng), &
3879 & tl_t(:,:,:,lout,itrc))
3886 & lbi, ubi, lbj, ubj, 1, n(ng), &
3889 & tl_u(:,:,:,lout), &
3892 & lbi, ubi, lbj, ubj, 1, n(ng), 1, nt(ng), &
3895 & tl_t(:,:,:,lout,:))
3899 10
FORMAT (/,
' Perturbing Tangent Linear Initial Conditions:',/)
3900 20
FORMAT (
' (Outer,Inner) = ',
'(',i4.4,
',',i4.4,
')',3x, &
3901 &
'Perturbing State Variable: ',a)
subroutine exchange_r2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
subroutine exchange_u2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
subroutine exchange_v2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
subroutine exchange_u3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine exchange_r3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine exchange_v3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine rp_ini_adjust_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, linp, lout, rmask, umask, vmask, ad_t, ad_u, ad_v, ad_zeta, t, u, v, zeta, tl_t, tl_u, tl_v, tl_zeta)
subroutine, public load_adtotl(ng, tile, linp, lout, add)
subroutine ad_ini_perturb_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, kinp, kout, ninp, nout, rmask, umask, vmask, e_t, e_u, e_v, e_zeta, hz, tl_zeta, tl_t, tl_u, tl_v, ad_t, ad_u, ad_v, ad_zeta)
subroutine, public ad_ini_perturb(ng, tile, kinp, kout, ninp, nout)
subroutine load_adtotl_tile(ng, tile, lbi, ubi, lbj, ubj, lbij, ubij, imins, imaxs, jmins, jmaxs, linp, lout, add, rmask, umask, vmask, ad_t_obc, ad_u_obc, ad_v_obc, ad_ubar_obc, ad_vbar_obc, ad_zeta_obc, ad_ustr, ad_vstr, ad_tflux, ad_t, ad_u, ad_v, ad_ubar, ad_vbar, ad_zeta, tl_t_obc, tl_u_obc, tl_v_obc, tl_ubar_obc, tl_vbar_obc, tl_zeta_obc, tl_ustr, tl_vstr, tl_tflux, tl_t, tl_u, tl_v, tl_ubar, tl_vbar, tl_zeta)
subroutine, public ini_perturb(ng, tile, linp, lout)
subroutine, public load_tltoad(ng, tile, linp, lout, add)
subroutine, public tl_ini_perturb(ng, tile, linp, lout)
subroutine tl_ini_perturb_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nstp, nnew, linp, lout, rmask, umask, vmask, tl_bed_thick, tl_hz, h, tl_h, om_v, on_u, zice, tl_z_r, tl_z_w, zt_avg1, tl_zt_avg1, ubar, vbar, zeta, ad_t, ad_u, ad_v, tl_t, tl_u, tl_v, ad_ubar, ad_vbar, ad_zeta, tl_ubar, tl_vbar, tl_zeta)
subroutine ini_perturb_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nstp, nnew, linp, lout, rmask, umask, vmask, bed_thick, hz, h, om_v, on_u, zice, z_r, z_w, zt_avg1, ad_t, ad_u, ad_v, t, u, v, ad_ubar, ad_vbar, ad_zeta, ubar, vbar, zeta)
subroutine, public rp_ini_adjust(ng, tile, linp, lout)
subroutine, public ini_adjust(ng, tile, linp, lout)
subroutine ini_adjust_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, linp, lout, rmask, umask, vmask, tl_t, tl_u, tl_v, tl_ubar, tl_vbar, tl_zeta, t, u, v, ubar, vbar, zeta)
subroutine load_tltoad_tile(ng, tile, lbi, ubi, lbj, ubj, lbij, ubij, imins, imaxs, jmins, jmaxs, linp, lout, add, rmask, umask, vmask, tl_t_obc, tl_u_obc, tl_v_obc, tl_ubar_obc, tl_vbar_obc, tl_zeta_obc, tl_ustr, tl_vstr, tl_tflux, tl_t, tl_u, tl_v, tl_ubar, tl_vbar, tl_zeta, ad_t_obc, ad_u_obc, ad_v_obc, ad_ubar_obc, ad_vbar_obc, ad_zeta_obc, ad_ustr, ad_vstr, ad_tflux, ad_t, ad_u, ad_v, ad_ubar, ad_vbar, ad_zeta)
type(t_boundary), dimension(:), allocatable boundary
type(t_coupling), dimension(:), allocatable coupling
type(t_forces), dimension(:), allocatable forces
type(t_grid), dimension(:), allocatable grid
integer, dimension(:), allocatable istvar
character(len=maxlen), dimension(6, 0:nv) vname
integer, dimension(:), allocatable idsvar
type(t_ocean), dimension(:), allocatable ocean
type(t_domain), dimension(:), allocatable domain
logical, dimension(:,:,:), allocatable lobc
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
logical, dimension(:,:), allocatable lstflux
real(r8), dimension(:), allocatable tcoef
integer, parameter isouth
logical, dimension(:,:), allocatable ltracerclm
integer, parameter inorth
logical, dimension(:,:), allocatable lnudgetclm
real(r8), dimension(:), allocatable scoef
type(t_sedbed), dimension(:), allocatable sedbed
integer, dimension(:), allocatable nnew
integer, dimension(:), allocatable nstp
subroutine mp_exchange4d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, lbt, ubt, nghost, ew_periodic, ns_periodic, a, b, c)
subroutine mp_exchange2d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, nghost, ew_periodic, ns_periodic, a, b, c, d)
subroutine mp_exchange3d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, nghost, ew_periodic, ns_periodic, a, b, c, d)
subroutine, public set_depth_tile(ng, tile, model, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nstp, nnew, h, zice, zt_avg1, hz, z_r, z_w)
subroutine, public state_addition(ng, tile, lbi, ubi, lbj, ubj, lbij, ubij, lin1, lin2, lout, fac1, fac2, rmask, umask, vmask, s1_t_obc, s2_t_obc, s1_u_obc, s2_u_obc, s1_v_obc, s2_v_obc, s1_ubar_obc, s2_ubar_obc, s1_vbar_obc, s2_vbar_obc, s1_zeta_obc, s2_zeta_obc, s1_sustr, s2_sustr, s1_svstr, s2_svstr, s1_tflux, s2_tflux, s1_t, s2_t, s1_u, s2_u, s1_v, s2_v, s1_ubar, s2_ubar, s1_vbar, s2_vbar, s1_zeta, s2_zeta)
subroutine, public state_copy(ng, tile, lbi, ubi, lbj, ubj, lbij, ubij, linp, lout, s1_t_obc, s2_t_obc, s1_u_obc, s2_u_obc, s1_v_obc, s2_v_obc, s1_ubar_obc, s2_ubar_obc, s1_vbar_obc, s2_vbar_obc, s1_zeta_obc, s2_zeta_obc, s1_sustr, s2_sustr, s1_svstr, s2_svstr, s1_tflux, s2_tflux, s1_t, s2_t, s1_u, s2_u, s1_v, s2_v, s1_ubar, s2_ubar, s1_vbar, s2_vbar, s1_zeta, s2_zeta)
subroutine, public t3dbc_tile(ng, tile, itrc, ic, lbi, ubi, lbj, ubj, ubk, ubt, imins, imaxs, jmins, jmaxs, nstp, nout, t)
subroutine, public tl_set_depth_tile(ng, tile, model, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, nstp, nnew, h, tl_h, zice, zt_avg1, tl_zt_avg1, tl_hz, tl_z_r, tl_z_w)
subroutine, public tl_t3dbc_tile(ng, tile, itrc, ic, lbi, ubi, lbj, ubj, ubk, ubt, imins, imaxs, jmins, jmaxs, nstp, nout, tl_t)
subroutine, public tl_u2dbc_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, krhs, kstp, kout, ubar, vbar, zeta, tl_ubar, tl_vbar, tl_zeta)
subroutine, public tl_u3dbc_tile(ng, tile, lbi, ubi, lbj, ubj, ubk, imins, imaxs, jmins, jmaxs, nstp, nout, tl_u)
subroutine, public tl_v2dbc_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, krhs, kstp, kout, ubar, vbar, zeta, tl_ubar, tl_vbar, tl_zeta)
subroutine, public tl_v3dbc_tile(ng, tile, lbi, ubi, lbj, ubj, ubk, imins, imaxs, jmins, jmaxs, nstp, nout, tl_v)
subroutine, public tl_zetabc_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, krhs, kstp, kout, zeta, tl_zeta)
subroutine, public u2dbc_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, krhs, kstp, kout, ubar, vbar, zeta)
subroutine, public u3dbc_tile(ng, tile, lbi, ubi, lbj, ubj, ubk, imins, imaxs, jmins, jmaxs, nstp, nout, u)
subroutine, public v2dbc_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, krhs, kstp, kout, ubar, vbar, zeta)
subroutine, public v3dbc_tile(ng, tile, lbi, ubi, lbj, ubj, ubk, imins, imaxs, jmins, jmaxs, nstp, nout, v)
subroutine, public zetabc_tile(ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, krhs, kstp, kout, zeta)
recursive subroutine wclock_off(ng, model, region, line, routine)
recursive subroutine wclock_on(ng, model, region, line, routine)