177 & LBi, UBi, LBj, UBj, LBij, UBij, &
178 & IminS, ImaxS, JminS, JmaxS, &
181 & rmask, umask, vmask, &
183# ifdef ADJUST_BOUNDARY
185 & tl_t_obc, tl_u_obc, tl_v_obc, &
187 & ad_t_obc, ad_u_obc, ad_v_obc, &
190 & tl_ubar_obc, tl_vbar_obc, &
193 & ad_ubar_obc, ad_vbar_obc, &
197# ifdef ADJUST_WSTRESS
198 & tl_ustr, tl_vstr, &
200 & ad_ustr, ad_vstr, &
203# if defined ADJUST_STFLUX && defined SOLVE3D
210 & tl_t, tl_u, tl_v, &
211# if defined WEAK_CONSTRAINT && defined TIME_CONV
212 & tl_ubar, tl_vbar, &
215 & ad_t, ad_u, ad_v, &
216# if defined WEAK_CONSTRAINT && defined TIME_CONV
217 & ad_ubar, ad_vbar, &
221 & tl_ubar, tl_vbar, &
223 & ad_ubar, ad_vbar, &
232 & , Hz, f_t, f_u, f_v, &
244 integer,
intent(in) :: ng, tile
245 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
246 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
247 integer,
intent(in) :: Lini
249 real(r8),
intent(in) :: state(Ninner)
253 real(r8),
intent(in) :: rmask(LBi:,LBj:)
254 real(r8),
intent(in) :: umask(LBi:,LBj:)
255 real(r8),
intent(in) :: vmask(LBi:,LBj:)
257# ifdef ADJUST_BOUNDARY
259 real(r8),
intent(inout) :: tl_t_obc(LBij:,:,:,:,:,:)
260 real(r8),
intent(inout) :: tl_u_obc(LBij:,:,:,:,:)
261 real(r8),
intent(inout) :: tl_v_obc(LBij:,:,:,:,:)
263 real(r8),
intent(inout) :: ad_t_obc(LBij:,:,:,:,:,:)
264 real(r8),
intent(inout) :: ad_u_obc(LBij:,:,:,:,:)
265 real(r8),
intent(inout) :: ad_v_obc(LBij:,:,:,:,:)
268 real(r8),
intent(inout) :: tl_ubar_obc(LBij:,:,:,:)
269 real(r8),
intent(inout) :: tl_vbar_obc(LBij:,:,:,:)
270 real(r8),
intent(inout) :: tl_zeta_obc(LBij:,:,:,:)
272 real(r8),
intent(inout) :: ad_ubar_obc(LBij:,:,:,:)
273 real(r8),
intent(inout) :: ad_vbar_obc(LBij:,:,:,:)
274 real(r8),
intent(inout) :: ad_zeta_obc(LBij:,:,:,:)
277# ifdef ADJUST_WSTRESS
278 real(r8),
intent(inout) :: tl_ustr(LBi:,LBj:,:,:)
279 real(r8),
intent(inout) :: tl_vstr(LBi:,LBj:,:,:)
281 real(r8),
intent(inout) :: ad_ustr(LBi:,LBj:,:,:)
282 real(r8),
intent(inout) :: ad_vstr(LBi:,LBj:,:,:)
285# if defined ADJUST_STFLUX && defined SOLVE3D
286 real(r8),
intent(inout) :: tl_tflux(LBi:,LBj:,:,:,:)
288 real(r8),
intent(inout) :: ad_tflux(LBi:,LBj:,:,:,:)
292 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
293 real(r8),
intent(inout) :: tl_u(LBi:,LBj:,:,:)
294 real(r8),
intent(inout) :: tl_v(LBi:,LBj:,:,:)
295# if defined WEAK_CONSTRAINT && defined TIME_CONV
296 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
297 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
300 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
301 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
302 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
303# if defined WEAK_CONSTRAINT && defined TIME_CONV
304 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
305 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
309 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
310 real(r8),
intent(inout) :: f_t(LBi:,LBj:,:,:)
311 real(r8),
intent(inout) :: f_u(LBi:,LBj:,:)
312 real(r8),
intent(inout) :: f_v(LBi:,LBj:,:)
313 real(r8),
intent(inout) :: f_ubar(LBi:,LBj:)
314 real(r8),
intent(inout) :: f_vbar(LBi:,LBj:)
317 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
318 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
320 real(r8),
intent(inout) :: f_ubar(LBi:,LBj:)
321 real(r8),
intent(inout) :: f_vbar(LBi:,LBj:)
324 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
325 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
328 real(r8),
intent(inout) :: tl_zeta(LBi:,LBj:,:)
330 real(r8),
intent(inout) :: f_zeta(LBi:,LBj:)
333 real(r8),
intent(inout) :: ad_zeta(LBi:,LBj:,:)
337 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
338 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
339 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
341# ifdef ADJUST_BOUNDARY
343 real(r8),
intent(inout) :: tl_t_obc(LBij:UBij,N(ng),4, &
344 & Nbrec(ng),2,NT(ng))
345 real(r8),
intent(inout) :: tl_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
346 real(r8),
intent(inout) :: tl_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
348 real(r8),
intent(inout) :: ad_t_obc(LBij:UBij,N(ng),4, &
349 & Nbrec(ng),2,NT(ng))
350 real(r8),
intent(inout) :: ad_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
351 real(r8),
intent(inout) :: ad_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
354 real(r8),
intent(inout) :: tl_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
355 real(r8),
intent(inout) :: tl_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
356 real(r8),
intent(inout) :: tl_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
358 real(r8),
intent(inout) :: ad_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
359 real(r8),
intent(inout) :: ad_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
360 real(r8),
intent(inout) :: ad_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
363# ifdef ADJUST_WSTRESS
364 real(r8),
intent(inout) :: tl_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
365 real(r8),
intent(inout) :: tl_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
367 real(r8),
intent(inout) :: ad_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
368 real(r8),
intent(inout) :: ad_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
371# if defined ADJUST_STFLUX && defined SOLVE3D
372 real(r8),
intent(inout) :: tl_tflux(LBi:UBi,LBj:UBj, &
373 & Nfrec(ng),2,NT(ng))
375 real(r8),
intent(inout) :: ad_tflux(LBi:UBi,LBj:UBj, &
376 & Nfrec(ng),2,NT(ng))
380 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
381 real(r8),
intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
382 real(r8),
intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
383# if defined WEAK_CONSTRAINT && defined TIME_CONV
384 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
385 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
388 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
389 real(r8),
intent(inout) :: f_t(LBi:UBi,LBj:UBj,N(ng),NT(ng))
390 real(r8),
intent(inout) :: f_u(LBi:UBi,LBj:UBj,N(ng))
391 real(r8),
intent(inout) :: f_v(LBi:UBi,LBj:UBj,N(ng))
392 real(r8),
intent(inout) :: f_ubar(LBi:UBi,LBj:UBj)
393 real(r8),
intent(inout) :: f_vbar(LBi:UBi,LBj:UBj)
396 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
397 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
398 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
399# if defined WEAK_CONSTRAINT && defined TIME_CONV
400 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
401 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
405 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
406 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
408 real(r8),
intent(inout) :: f_ubar(LBi:UBi,LBj:UBj)
409 real(r8),
intent(inout) :: f_vbar(LBi:UBi,LBj:UBj)
412 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
413 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
416 real(r8),
intent(inout) :: tl_zeta(LBi:UBi,LBj:UBj,:)
418 real(r8),
intent(inout) :: f_zeta(LBi:UBi,LBj:UBj)
421 real(r8),
intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
427 integer :: Lwrk, i, j, lstr, outLoop, rec, info
429 integer :: ndefLCZ = 1
431 integer :: ndefLZE = 1
437 real(r8) :: cff1, cff2
438 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: CF
439 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: DC
442 real(r8) :: fac, fac1, fac2
445 real(r8),
dimension(0:NstateVar(ng)) :: dot
446 real(r8),
dimension(Ninner) :: DotProd
447 real(r8),
dimension(Ninner) :: bvector
448 real(r8),
dimension(Ninner) :: work
450 real(r8),
dimension(Ninner,Ninner) :: GStemp
451 real(r8),
dimension(Ninner,Ninner) :: GSsub
452 real(r8),
dimension(Ninner) :: work1
457 logical,
save :: first = .true.
458 logical,
save :: first1 = .true.
461 character (len=256) :: ncname
463 character (len=*),
parameter :: MyFile = &
464 & __FILE__//
", tl_inner2state_tile"
466# include "set_bounds.h"
499 IF (
master)
WRITE (
stdout,*)
' Error in DPTTRF: info = ', info
525 SELECT CASE (
lcz(ng)%IOtype)
528 &
'ndefADJ', ndeflcz)
530# if defined PIO_LIB && defined DISTRIBUTE
533 &
'ndefADJ', ndeflcz)
548 IF (ndeflcz.gt.0)
THEN
549 lstr=len_trim(
lcz(ng)%name)
550 WRITE (ncname,10)
lcz(ng)%name(1:lstr-8),
nouter
582 & lbi, ubi, lbj, ubj, lbij, ubij, &
584 & ndeflcz,
lcz(ng)%ncid, &
585# if defined PIO_LIB && defined DISTRIBUTE
590 & rmask, umask, vmask, &
592# ifdef ADJUST_BOUNDARY
594 & tl_t_obc, tl_u_obc, tl_v_obc, &
596 & tl_ubar_obc, tl_vbar_obc, &
599# ifdef ADJUST_WSTRESS
600 & tl_ustr, tl_vstr, &
602# if defined ADJUST_STFLUX && defined SOLVE3D
606 & tl_t, tl_u, tl_v, &
608 & tl_ubar, tl_vbar, &
620 & lbi, ubi, lbj, ubj, lbij, ubij, &
622# ifdef ADJUST_BOUNDARY
624 & tl_t_obc, tl_t_obc, &
625 & tl_u_obc, tl_u_obc, &
626 & tl_v_obc, tl_v_obc, &
628 & tl_ubar_obc, tl_ubar_obc, &
629 & tl_vbar_obc, tl_vbar_obc, &
630 & tl_zeta_obc, tl_zeta_obc, &
632# ifdef ADJUST_WSTRESS
633 & tl_ustr, tl_ustr, &
634 & tl_vstr, tl_vstr, &
638 & tl_tflux, tl_tflux, &
643# if defined WEAK_CONSTRAINT && defined TIME_CONV
644 & tl_ubar, tl_ubar, &
645 & tl_vbar, tl_vbar, &
648 & tl_ubar, tl_ubar, &
649 & tl_vbar, tl_vbar, &
662 & lbi, ubi, lbj, ubj, lbij, ubij, &
664 & ndeflze,
lze(ng)%ncid, &
665# if defined PIO_LIB && defined DISTRIBUTE
670 & rmask, umask, vmask, &
672# ifdef ADJUST_BOUNDARY
674 & ad_t_obc, ad_u_obc, ad_v_obc, &
676 & ad_ubar_obc, ad_vbar_obc, &
679# ifdef ADJUST_WSTRESS
680 & ad_ustr, ad_vstr, &
682# if defined ADJUST_STFLUX && defined SOLVE3D
686 & ad_t, ad_u, ad_v, &
688 & ad_ubar, ad_vbar, &
696 & lbi, ubi, lbj, ubj, lbij, ubij, &
699 & rmask, umask, vmask, &
701# ifdef ADJUST_BOUNDARY
703 & tl_t_obc(:,:,:,:,lini,:), &
704 & ad_t_obc(:,:,:,:,lwrk,:), &
705 & tl_u_obc(:,:,:,:,lini), &
706 & ad_u_obc(:,:,:,:,lwrk), &
707 & tl_v_obc(:,:,:,:,lini), &
708 & ad_v_obc(:,:,:,:,lwrk), &
710 & tl_ubar_obc(:,:,:,lini), &
711 & ad_ubar_obc(:,:,:,lwrk), &
712 & tl_vbar_obc(:,:,:,lini), &
713 & ad_vbar_obc(:,:,:,lwrk), &
714 & tl_zeta_obc(:,:,:,lini), &
715 & ad_zeta_obc(:,:,:,lwrk), &
717# ifdef ADJUST_WSTRESS
718 & tl_ustr(:,:,:,lini), ad_ustr(:,:,:,lwrk), &
719 & tl_vstr(:,:,:,lini), ad_vstr(:,:,:,lwrk), &
723 & tl_tflux(:,:,:,lini,:), &
724 & ad_tflux(:,:,:,lwrk,:), &
726 & tl_t(:,:,:,lini,:), ad_t(:,:,:,lwrk,:), &
727 & tl_u(:,:,:,lini), ad_u(:,:,:,lwrk), &
728 & tl_v(:,:,:,lini), ad_v(:,:,:,lwrk), &
730 & tl_ubar(:,:,lini), ad_ubar(:,:,lwrk), &
731 & tl_vbar(:,:,lini), ad_vbar(:,:,lwrk), &
733 & tl_zeta(:,:,lini), ad_zeta(:,:,lwrk))
735 gstemp(rec,
inner)=-dot(0)
748 & lbi, ubi, lbj, ubj, lbij, ubij, &
749 & lini, lwrk, lini, fac1, fac2, &
751 & rmask, umask, vmask, &
753# ifdef ADJUST_BOUNDARY
755 & tl_t_obc, ad_t_obc, &
756 & tl_u_obc, ad_u_obc, &
757 & tl_v_obc, ad_v_obc, &
759 & tl_ubar_obc, ad_ubar_obc, &
760 & tl_vbar_obc, ad_vbar_obc, &
761 & tl_zeta_obc, ad_zeta_obc, &
763# ifdef ADJUST_WSTRESS
764 & tl_ustr, ad_ustr, &
765 & tl_vstr, ad_vstr, &
769 & tl_tflux, ad_tflux, &
774# if defined WEAK_CONSTRAINT && defined TIME_CONV
775 & tl_ubar, ad_ubar, &
776 & tl_vbar, ad_vbar, &
779 & tl_ubar, ad_ubar, &
780 & tl_vbar, ad_vbar, &
788 & lbi, ubi, lbj, ubj, lbij, ubij, &
791 & rmask, umask, vmask, &
793# ifdef ADJUST_BOUNDARY
795 & tl_t_obc(:,:,:,:,lini,:), &
796 & tl_t_obc(:,:,:,:,lini,:), &
797 & tl_u_obc(:,:,:,:,lini), &
798 & tl_u_obc(:,:,:,:,lini), &
799 & tl_v_obc(:,:,:,:,lini), &
800 & tl_v_obc(:,:,:,:,lini), &
802 & tl_ubar_obc(:,:,:,lini), &
803 & tl_ubar_obc(:,:,:,lini), &
804 & tl_vbar_obc(:,:,:,lini), &
805 & tl_vbar_obc(:,:,:,lini), &
806 & tl_zeta_obc(:,:,:,lini), &
807 & tl_zeta_obc(:,:,:,lini), &
809# ifdef ADJUST_WSTRESS
810 & tl_ustr(:,:,:,lini), tl_ustr(:,:,:,lini), &
811 & tl_vstr(:,:,:,lini), tl_vstr(:,:,:,lini), &
815 & tl_tflux(:,:,:,lini,:), &
816 & tl_tflux(:,:,:,lini,:), &
818 & tl_t(:,:,:,lini,:), tl_t(:,:,:,lini,:), &
819 & tl_u(:,:,:,lini), tl_u(:,:,:,lini), &
820 & tl_v(:,:,:,lini), tl_v(:,:,:,lini), &
822 & tl_ubar(:,:,lini), tl_ubar(:,:,lini), &
823 & tl_vbar(:,:,lini), tl_vbar(:,:,lini), &
825 & tl_zeta(:,:,lini), tl_zeta(:,:,lini))
835 fac=1.0_r8/sqrt(dot(0))
838 & lbi, ubi, lbj, ubj, lbij, ubij, &
841 & rmask, umask, vmask, &
843# ifdef ADJUST_BOUNDARY
845 & tl_t_obc, tl_u_obc, tl_v_obc, &
847 & tl_ubar_obc, tl_vbar_obc, &
850# ifdef ADJUST_WSTRESS
851 & tl_ustr, tl_vstr, &
857 & tl_t, tl_u, tl_v, &
859 & tl_ubar, tl_vbar, &
872 & lbi, ubi, lbj, ubj, lbij, ubij, &
874# ifdef ADJUST_BOUNDARY
876 & ad_t_obc, tl_t_obc, &
877 & ad_u_obc, tl_u_obc, &
878 & ad_v_obc, tl_v_obc, &
880 & ad_ubar_obc, tl_ubar_obc, &
881 & ad_vbar_obc, tl_vbar_obc, &
882 & ad_zeta_obc, tl_zeta_obc, &
884# ifdef ADJUST_WSTRESS
885 & ad_ustr, tl_ustr, &
886 & ad_vstr, tl_vstr, &
890 & ad_tflux, tl_tflux, &
895# if defined WEAK_CONSTRAINT && defined TIME_CONV
896 & ad_ubar, tl_ubar, &
897 & ad_vbar, tl_vbar, &
900 & ad_ubar, tl_ubar, &
901 & ad_vbar, tl_vbar, &
914 CALL wrt_evolved (ng, lini, lini)
941 WRITE (
stdout,*)
' Test of orthonormalization'
948 & lbi, ubi, lbj, ubj, lbij, ubij, &
950 & ndeflze,
lze(ng)%ncid, &
951# if defined PIO_LIB && defined DISTRIBUTE
956 & rmask, umask, vmask, &
958# ifdef ADJUST_BOUNDARY
960 & tl_t_obc, tl_u_obc, tl_v_obc, &
962 & tl_ubar_obc, tl_vbar_obc, &
965# ifdef ADJUST_WSTRESS
966 & tl_ustr, tl_vstr, &
968# if defined ADJUST_STFLUX && defined SOLVE3D
972 & tl_t, tl_u, tl_v, &
974 & tl_ubar, tl_vbar, &
981 & lbi, ubi, lbj, ubj, lbij, ubij, &
983 & ndeflze,
lze(ng)%ncid, &
984# if defined PIO_LIB && defined DISTRIBUTE
989 & rmask, umask, vmask, &
991# ifdef ADJUST_BOUNDARY
993 & ad_t_obc, ad_u_obc, ad_v_obc, &
995 & ad_ubar_obc, ad_vbar_obc, &
998# ifdef ADJUST_WSTRESS
999 & ad_ustr, ad_vstr, &
1001# if defined ADJUST_STFLUX && defined SOLVE3D
1005 & ad_t, ad_u, ad_v, &
1007 & ad_ubar, ad_vbar, &
1015 & lbi, ubi, lbj, ubj, lbij, ubij, &
1018 & rmask, umask, vmask, &
1020# ifdef ADJUST_BOUNDARY
1022 & tl_t_obc(:,:,:,:,lwrk,:), &
1023 & ad_t_obc(:,:,:,:,lwrk,:), &
1024 & tl_u_obc(:,:,:,:,lwrk), &
1025 & ad_u_obc(:,:,:,:,lwrk), &
1026 & tl_v_obc(:,:,:,:,lwrk), &
1027 & ad_v_obc(:,:,:,:,lwrk), &
1029 & tl_ubar_obc(:,:,:,lwrk), &
1030 & ad_ubar_obc(:,:,:,lwrk), &
1031 & tl_vbar_obc(:,:,:,lwrk), &
1032 & ad_vbar_obc(:,:,:,lwrk), &
1033 & tl_zeta_obc(:,:,:,lwrk), &
1034 & ad_zeta_obc(:,:,:,lwrk), &
1036# ifdef ADJUST_WSTRESS
1037 & tl_ustr(:,:,:,lwrk), ad_ustr(:,:,:,lwrk), &
1038 & tl_vstr(:,:,:,lwrk), ad_vstr(:,:,:,lwrk), &
1041# ifdef ADJUST_STFLUX
1042 & tl_tflux(:,:,:,lwrk,:), &
1043 & ad_tflux(:,:,:,lwrk,:), &
1045 & tl_t(:,:,:,lwrk,:), ad_t(:,:,:,lwrk,:), &
1046 & tl_u(:,:,:,lwrk), ad_u(:,:,:,lwrk), &
1047 & tl_v(:,:,:,lwrk), ad_v(:,:,:,lwrk), &
1049 & tl_ubar(:,:,lwrk), ad_ubar(:,:,lwrk), &
1050 & tl_vbar(:,:,lwrk), ad_vbar(:,:,lwrk), &
1052 & tl_zeta(:,:,lwrk), ad_zeta(:,:,lwrk))
1055 WRITE (
stdout,*)
'inner = ',
inner,
' rec = ', rec, &
1056 &
' dot-product = ', dot(0)
1078 IF (
master)
WRITE (
stdout,*)
' Error in DPTTRF: info = ', info
1108 SELECT CASE (
lze(ng)%IOtype)
1111 &
'ndefADJ', ndeflze)
1113# if defined PIO_LIB && defined DISTRIBUTE
1116 &
'ndefADJ', ndeflze)
1123 SELECT CASE (
lcz(ng)%IOtype)
1126 &
'ndefADJ', ndeflcz)
1128# if defined PIO_LIB && defined DISTRIBUTE
1131 &
'ndefADJ', ndeflcz)
1141 IF (ndeflze.gt.0)
THEN
1142 lstr=len_trim(
lze(ng)%name)
1143 WRITE (ncname,10)
lze(ng)%name(1:lstr-8),
nouter
1144 10
FORMAT (a,
'_',i4.4,
'.nc')
1156 IF (ndeflcz.gt.0)
THEN
1157 lstr=len_trim(
lcz(ng)%name)
1158 WRITE (ncname,10)
lcz(ng)%name(1:lstr-8),
nouter
1159 10
FORMAT (a,
'_',i4.4,
'.nc')
1173 lze(ng)%ncid=ncidsav
1189 & lbi, ubi, lbj, ubj, lbij, ubij, &
1192 & ndeflze,
lze(ng)%ncid, &
1193# if defined PIO_LIB && defined DISTRIBUTE
1194 &
lze(ng)%pioFile, &
1197 & ndeflcz,
lcz(ng)%ncid, &
1198# if defined PIO_LIB && defined DISTRIBUTE
1199 &
lcz(ng)%pioFile, &
1204 & rmask, umask, vmask, &
1206# ifdef ADJUST_BOUNDARY
1208 & tl_t_obc, tl_u_obc, tl_v_obc, &
1210 & tl_ubar_obc, tl_vbar_obc, &
1213# ifdef ADJUST_WSTRESS
1214 & tl_ustr, tl_vstr, &
1216# if defined ADJUST_STFLUX && defined SOLVE3D
1220 & tl_t, tl_u, tl_v, &
1222 & tl_ubar, tl_vbar, &
1227 IF (
inner.eq.1)
THEN
1230 & lbi, ubi, lbj, ubj, lbij, ubij, &
1233 & rmask, umask, vmask, &
1235# ifdef ADJUST_BOUNDARY
1237 & tl_t_obc, tl_u_obc, tl_v_obc, &
1239 & tl_ubar_obc, tl_vbar_obc, &
1242# ifdef ADJUST_WSTRESS
1243 & tl_ustr, tl_vstr, &
1245# if defined ADJUST_STFLUX && defined SOLVE3D
1249 & tl_t, tl_u, tl_v, &
1251 & tl_ubar, tl_vbar, &
1264 & lbi, ubi, lbj, ubj, lbij, ubij, &
1265 & lini, lwrk, lini, &
1268 & rmask, umask, vmask, &
1270# ifdef ADJUST_BOUNDARY
1272 & tl_t_obc, tl_t_obc, &
1273 & tl_u_obc, tl_u_obc, &
1274 & tl_v_obc, tl_v_obc, &
1276 & tl_ubar_obc, tl_ubar_obc, &
1277 & tl_vbar_obc, tl_vbar_obc, &
1278 & tl_zeta_obc, tl_zeta_obc, &
1280# ifdef ADJUST_WSTRESS
1281 & tl_ustr, tl_ustr, &
1282 & tl_vstr, tl_vstr, &
1284# if defined ADJUST_STFLUX && defined SOLVE3D
1285 & tl_tflux, tl_tflux, &
1291# if defined WEAK_CONSTRAINT && defined TIME_CONV
1292 & tl_ubar, tl_ubar, &
1293 & tl_vbar, tl_vbar, &
1296 & tl_ubar, tl_ubar, &
1297 & tl_vbar, tl_vbar, &
1310 f_zeta(i,j)=tl_zeta(i,j,lini)
1319 f_ubar(i,j)=tl_ubar(i,j,lini)
1325 f_vbar(i,j)=tl_vbar(i,j,lini)
1336 f_u(i,j,k)=tl_u(i,j,k,lini)
1341 f_v(i,j,k)=tl_v(i,j,k,lini)
1355 dc(i,k)=0.5_r8*(hz(i,j,k)+hz(i-1,j,k))
1356 dc(i,0)=dc(i,0)+dc(i,k)
1357 cf(i,0)=cf(i,0)+dc(i,k)*f_u(i,j,k)
1364 cff2=cff2*umask(i,j)
1373 IF (j.ge.jstrm)
THEN
1380 dc(i,k)=0.5_r8*(hz(i,j,k)+hz(i,j-1,k))
1381 dc(i,0)=dc(i,0)+dc(i,k)
1382 cf(i,0)=cf(i,0)+dc(i,k)*f_v(i,j,k)
1389 cff2=cff2*vmask(i,j)
1402 f_t(i,j,k,itrc)=tl_t(i,j,k,lini,itrc)
1410 & lbi, ubi, lbj, ubj, lbij, ubij, &
1413 & rmask, umask, vmask, &
1415# ifdef ADJUST_BOUNDARY
1417 & tl_t_obc, tl_u_obc, tl_v_obc, &
1419 & tl_ubar_obc, tl_vbar_obc, &
1422# ifdef ADJUST_WSTRESS
1423 & tl_ustr, tl_vstr, &
1425# if defined ADJUST_STFLUX && defined SOLVE3D
1429 & tl_t, tl_u, tl_v, &
1431 & tl_ubar, tl_vbar, &
1553 & LBi, UBi, LBj, UBj, LBij, UBij, &
1554 & IminS, ImaxS, JminS, JmaxS, &
1557 & rmask, umask, vmask, &
1559# ifdef ADJUST_BOUNDARY
1561 & ad_t_obc, ad_u_obc, ad_v_obc, &
1563 & ad_ubar_obc, ad_vbar_obc, &
1566# ifdef ADJUST_WSTRESS
1567 & ad_ustr, ad_vstr, &
1569# if defined ADJUST_STFLUX && defined SOLVE3D
1573 & ad_t, ad_u, ad_v, &
1574# if defined WEAK_CONSTRAINT && defined TIME_CONV
1575 & ad_ubar, ad_vbar, &
1578 & ad_ubar, ad_vbar, &
1581# ifdef ADJUST_BOUNDARY
1583 & tl_t_obc, tl_u_obc, tl_v_obc, &
1585 & tl_ubar_obc, tl_vbar_obc, &
1588# ifdef ADJUST_WSTRESS
1589 & tl_ustr, tl_vstr, &
1591# if defined ADJUST_STFLUX && defined SOLVE3D
1595 & tl_t, tl_u, tl_v, &
1596# if defined WEAK_CONSTRAINT && defined TIME_CONV
1597 & tl_ubar, tl_vbar, &
1600 & tl_ubar, tl_vbar, &
1605 & ,Hz, f_t, f_u, f_v, &
1606 & f_ubar, f_vbar , &
1608 & f_ubar, f_vbar , &
1617 integer,
intent(in) :: ng, tile
1618 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
1619 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
1620 integer,
intent(in) :: Lini
1622 real(r8),
intent(inout) :: ad_state(Ninner)
1624# ifdef ASSUMED_SHAPE
1626 real(r8),
intent(in) :: rmask(LBi:,LBj:)
1627 real(r8),
intent(in) :: umask(LBi:,LBj:)
1628 real(r8),
intent(in) :: vmask(LBi:,LBj:)
1630# ifdef ADJUST_BOUNDARY
1632 real(r8),
intent(inout) :: ad_t_obc(LBij:,:,:,:,:,:)
1633 real(r8),
intent(inout) :: ad_u_obc(LBij:,:,:,:,:)
1634 real(r8),
intent(inout) :: ad_v_obc(LBij:,:,:,:,:)
1636 real(r8),
intent(inout) :: ad_ubar_obc(LBij:,:,:,:)
1637 real(r8),
intent(inout) :: ad_vbar_obc(LBij:,:,:,:)
1638 real(r8),
intent(inout) :: ad_zeta_obc(LBij:,:,:,:)
1640# ifdef ADJUST_WSTRESS
1641 real(r8),
intent(inout) :: ad_ustr(LBi:,LBj:,:,:)
1642 real(r8),
intent(inout) :: ad_vstr(LBi:,LBj:,:,:)
1644# if defined ADJUST_STFLUX && defined SOLVE3D
1645 real(r8),
intent(inout) :: ad_tflux(LBi:,LBj:,:,:,:)
1648 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
1649 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
1650 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
1651# if defined WEAK_CONSTRAINT && defined TIME_CONV
1652 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
1653 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
1656 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
1657 real(r8),
intent(inout) :: f_t(LBi:,LBj:,:,:)
1658 real(r8),
intent(inout) :: f_u(LBi:,LBj:,:)
1659 real(r8),
intent(inout) :: f_v(LBi:,LBj:,:)
1660 real(r8),
intent(inout) :: f_ubar(LBi:,LBj:)
1661 real(r8),
intent(inout) :: f_vbar(LBi:,LBj:)
1664 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
1665 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
1667 real(r8),
intent(inout) :: f_ubar(LBi:,LBj:)
1668 real(r8),
intent(inout) :: f_vbar(LBi:,LBj:)
1671 real(r8),
intent(inout) :: ad_zeta(LBi:,LBj:,:)
1673 real(r8),
intent(inout) :: f_zeta(LBi:,LBj:)
1675# ifdef ADJUST_BOUNDARY
1677 real(r8),
intent(inout) :: tl_t_obc(LBij:,:,:,:,:,:)
1678 real(r8),
intent(inout) :: tl_u_obc(LBij:,:,:,:,:)
1679 real(r8),
intent(inout) :: tl_v_obc(LBij:,:,:,:,:)
1681 real(r8),
intent(inout) :: tl_ubar_obc(LBij:,:,:,:)
1682 real(r8),
intent(inout) :: tl_vbar_obc(LBij:,:,:,:)
1683 real(r8),
intent(inout) :: tl_zeta_obc(LBij:,:,:,:)
1685# ifdef ADJUST_WSTRESS
1686 real(r8),
intent(inout) :: tl_ustr(LBi:,LBj:,:,:)
1687 real(r8),
intent(inout) :: tl_vstr(LBi:,LBj:,:,:)
1689# if defined ADJUST_STFLUX && defined SOLVE3D
1690 real(r8),
intent(inout) :: tl_tflux(LBi:,LBj:,:,:,:)
1693 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
1694 real(r8),
intent(inout) :: tl_u(LBi:,LBj:,:,:)
1695 real(r8),
intent(inout) :: tl_v(LBi:,LBj:,:,:)
1696# if defined WEAK_CONSTRAINT && defined TIME_CONV
1697 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
1698 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
1701 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
1702 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
1704 real(r8),
intent(inout) :: tl_zeta(LBi:,LBj:,:)
1707 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
1708 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
1709 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
1711# ifdef ADJUST_BOUNDARY
1713 real(r8),
intent(inout) :: ad_t_obc(LBij:UBij,N(ng),4, &
1714 & Nbrec(ng),2,NT(ng))
1715 real(r8),
intent(inout) :: ad_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
1716 real(r8),
intent(inout) :: ad_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
1718 real(r8),
intent(inout) :: ad_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
1719 real(r8),
intent(inout) :: ad_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
1720 real(r8),
intent(inout) :: ad_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
1722# ifdef ADJUST_WSTRESS
1723 real(r8),
intent(inout) :: ad_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
1724 real(r8),
intent(inout) :: ad_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
1726# if defined ADJUST_STFLUX && defined SOLVE3D
1727 real(r8),
intent(inout) :: ad_tflux(LBi:UBi,LBj:UBj, &
1728 & Nfrec(ng),2,NT(ng))
1731 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
1732 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
1733 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
1734# if defined WEAK_CONSTRAINT && defined TIME_CONV
1735 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
1736 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
1739 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
1740 real(r8),
intent(inout) :: f_t(LBi:UBi,LBj:UBj,N(ng),NT(ng))
1741 real(r8),
intent(inout) :: f_u(LBi:UBi,LBj:UBj,N(ng))
1742 real(r8),
intent(inout) :: f_v(LBi:UBi,LBj:UBj,N(ng))
1743 real(r8),
intent(inout) :: f_ubar(LBi:UBi,LBj:UBj)
1744 real(r8),
intent(inout) :: f_vbar(LBi:UBi,LBj:UBj)
1747 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
1748 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
1750 real(r8),
intent(inout) :: f_ubar(LBi:UBi,LBj:UBj)
1751 real(r8),
intent(inout) :: f_vbar(LBi:UBi,LBj:UBj)
1754 real(r8),
intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
1756 real(r8),
intent(inout) :: f_zeta(LBi:UBi,LBj:UBj)
1758# ifdef ADJUST_BOUNDARY
1760 real(r8),
intent(inout) :: tl_t_obc(LBij:,:,:,:,:,:)
1761 real(r8),
intent(inout) :: tl_u_obc(LBij:,:,:,:,:)
1762 real(r8),
intent(inout) :: tl_v_obc(LBij:,:,:,:,:)
1764 real(r8),
intent(inout) :: tl_ubar_obc(LBij:,:,:,:)
1765 real(r8),
intent(inout) :: tl_vbar_obc(LBij:,:,:,:)
1766 real(r8),
intent(inout) :: tl_zeta_obc(LBij:,:,:,:)
1768# ifdef ADJUST_WSTRESS
1769 real(r8),
intent(inout) :: tl_ustr(LBi:,LBj:,:,:)
1770 real(r8),
intent(inout) :: tl_vstr(LBi:,LBj:,:,:)
1772# if defined ADJUST_STFLUX && defined SOLVE3D
1773 real(r8),
intent(inout) :: tl_tflux(LBi:,LBj:,:,:,:)
1776 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
1777 real(r8),
intent(inout) :: tl_u(LBi:,LBj:,:,:)
1778 real(r8),
intent(inout) :: tl_v(LBi:,LBj:,:,:)
1779# if defined WEAK_CONSTRAINT && defined TIME_CONV
1780 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
1781 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
1784 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
1785 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
1787 real(r8),
intent(inout) :: tl_zeta(LBi:,LBj:,:)
1790 real(r8) :: work(Ninner)
1791 real(r8) :: dot_sav(Ninner)
1793 real(r8) :: work1(Ninner)
1799 integer :: Lwrk, i, j, lstr, outLoop, rec, info
1801 integer :: ndefLCZ = 1
1803 integer :: ndefLZE = 1
1807 integer :: itrc, k, nin
1809 real(r8) :: cff1, cff2
1810 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: CF
1811 real(r8),
dimension(IminS:ImaxS,0:N(ng)) :: DC
1814 real(r8) :: fac, fac1, fac2
1817 real(r8),
dimension(0:NstateVar(ng)) :: dot
1818 real(r8),
dimension(Ninner) :: DotProd
1819 real(r8),
dimension(Ninner) :: bvector
1821 character (len=256) :: ncname
1823 character (len=*),
parameter :: MyFile = &
1824 & __FILE__//
", ad_inner2state_tile"
1826# include "set_bounds.h"
1851 ad_zeta(i,j,kin)=f_zeta(i,j)
1861 ad_ubar(i,j,kin)=f_ubar(i,j)
1868 ad_vbar(i,j,kin)=f_vbar(i,j)
1884 dc(i,k)=0.5_r8*(hz(i,j,k)+hz(i-1,j,k))
1885 dc(i,0)=dc(i,0)+dc(i,k)
1892 cff2=cff2*umask(i,j)
1900 f_u(i,j,k)=f_u(i,j,k)+dc(i,k)*cf(i,0)
1911 IF (j.ge.jstrm)
THEN
1918 dc(i,k)=0.5_r8*(hz(i,j,k)+hz(i,j-1,k))
1919 dc(i,0)=dc(i,0)+dc(i,k)
1926 cff2=cff2*vmask(i,j)
1934 f_v(i,j,k)=f_v(i,j,k)+dc(i,k)*cf(i,0)
1948 ad_u(i,j,k,nin)=f_u(i,j,k)
1954 ad_v(i,j,k,nin)=f_v(i,j,k)
1966 ad_t(i,j,k,nin,itrc)=f_t(i,j,k,itrc)
1967 f_t(i,j,k,itrc)=0.0_r8
1983 SELECT CASE (lze(ng)%IOtype)
1985 CALL netcdf_get_ivar (ng, iadm, trim(lze(ng)%name), &
1986 &
'ndefADJ', ndeflze)
1988# if defined PIO_LIB && defined DISTRIBUTE
1990 CALL pio_netcdf_get_ivar (ng, iadm, trim(lze(ng)%name), &
1991 &
'ndefADJ', ndeflze)
1994 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1997 SELECT CASE (lcz(ng)%IOtype)
1999 CALL netcdf_get_ivar (ng, iadm, trim(lcz(ng)%name), &
2000 &
'ndefADJ', ndeflcz)
2002# if defined PIO_LIB && defined DISTRIBUTE
2004 CALL pio_netcdf_get_ivar (ng, iadm, trim(lcz(ng)%name), &
2005 &
'ndefADJ', ndeflcz)
2008 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
2018 IF (ndeflze.gt.0)
THEN
2019 lstr=len_trim(lze(ng)%name)
2020 WRITE (ncname,10) lze(ng)%name(1:lstr-8), inner
2021 10
FORMAT (a,
'_',i4.4,
'.nc')
2034 IF (ndeflcz.gt.0)
THEN
2035 lstr=len_trim(lcz(ng)%name)
2036 WRITE (ncname,10) lcz(ng)%name(1:lstr-8), inner
2037 10
FORMAT (a,
'_',i4.4,
'.nc')
2047 CALL state_read (ng, tile, iadm, &
2053 & lbi, ubi, lbj, ubj, lbij, ubij, &
2056 & ndeflze, lze(ng)%ncid, &
2057# if defined PIO_LIB && defined DISTRIBUTE
2058 & lze(ng)%pioFile, &
2061 & ndeflcz, lcz(ng)%ncid, &
2062# if defined PIO_LIB && defined DISTRIBUTE
2063 & lcz(ng)%pioFile, &
2068 & rmask, umask, vmask, &
2070# ifdef ADJUST_BOUNDARY
2072 & tl_t_obc, tl_u_obc, tl_v_obc, &
2074 & tl_ubar_obc, tl_vbar_obc, &
2077# ifdef ADJUST_WSTRESS
2078 & tl_ustr, tl_vstr, &
2080# if defined ADJUST_STFLUX && defined SOLVE3D
2084 & tl_t, tl_u, tl_v, &
2086 & tl_ubar, tl_vbar, &
2089 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
2091 CALL state_dotprod (ng, tile, iadm, &
2092 & lbi, ubi, lbj, ubj, lbij, ubij, &
2093 & nstatevar(ng), dot(0:), &
2095 & rmask, umask, vmask, &
2097# ifdef ADJUST_BOUNDARY
2099 & ad_t_obc(:,:,:,:,lnew,:), &
2100 & tl_t_obc(:,:,:,:,lwrk,:), &
2101 & ad_u_obc(:,:,:,:,lnew), &
2102 & tl_u_obc(:,:,:,:,lwrk), &
2103 & ad_v_obc(:,:,:,:,lnew), &
2104 & tl_v_obc(:,:,:,:,lwrk), &
2106 & ad_ubar_obc(:,:,:,lnew), &
2107 & tl_ubar_obc(:,:,:,lwrk), &
2108 & ad_vbar_obc(:,:,:,lnew), &
2109 & tl_vbar_obc(:,:,:,lwrk), &
2110 & ad_zeta_obc(:,:,:,lnew), &
2111 & tl_zeta_obc(:,:,:,lwrk), &
2113# ifdef ADJUST_WSTRESS
2114 & ad_ustr(:,:,:,lnew), tl_ustr(:,:,:,lwrk), &
2115 & ad_vstr(:,:,:,lnew), tl_vstr(:,:,:,lwrk), &
2118# ifdef ADJUST_STFLUX
2119 & ad_tflux(:,:,:,lnew,:), &
2120 & tl_tflux(:,:,:,lwrk,:), &
2122 & ad_t(:,:,:,nin,:), tl_t(:,:,:,lwrk,:), &
2123 & ad_u(:,:,:,nin), tl_u(:,:,:,lwrk), &
2124 & ad_v(:,:,:,nin), tl_v(:,:,:,lwrk), &
2126 & ad_ubar(:,:,kin), tl_ubar(:,:,lwrk), &
2127 & ad_vbar(:,:,kin), tl_vbar(:,:,lwrk), &
2129 & ad_zeta(:,:,kin), tl_zeta(:,:,lwrk))
2131 dot_sav(inner)=dot(0)
2143 sum=sum+gsmatinv(j,i)*work(j)
2155 work(i+1)=work(i+1)-zlanczos_offdiag(i)*work(i)
2158 ad_state(i)=work(i)/zlanczos_diag(i)
2282 & LBi, UBi, LBj, UBj, LBij, UBij, &
2283 & IminS, ImaxS, JminS, JmaxS, &
2287 & rmask, umask, vmask, &
2289# ifdef ADJUST_BOUNDARY
2291 & ad_t_obc, ad_u_obc, ad_v_obc, &
2293 & ad_ubar_obc, ad_vbar_obc, &
2296# ifdef ADJUST_WSTRESS
2297 & ad_ustr, ad_vstr, &
2299# if defined ADJUST_STFLUX && defined SOLVE3D
2303 & ad_t, ad_u, ad_v, &
2305 & ad_ubar, ad_vbar, &
2308# ifdef ADJUST_BOUNDARY
2310 & tl_t_obc, tl_u_obc, tl_v_obc, &
2312 & tl_ubar_obc, tl_vbar_obc, &
2315# ifdef ADJUST_WSTRESS
2316 & tl_ustr, tl_vstr, &
2318# if defined ADJUST_STFLUX && defined SOLVE3D
2322 & tl_t, tl_u, tl_v, &
2324 & tl_ubar, tl_vbar, &
2327# ifdef ADJUST_BOUNDARY
2329 & t_obc, u_obc, v_obc, &
2331 & ubar_obc,_vbar_obc, &
2334# ifdef ADJUST_WSTRESS
2337# if defined ADJUST_STFLUX && defined SOLVE3D
2350 integer,
intent(in) :: ng, tile
2351 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBij, UBij
2352 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
2353 integer,
intent(in) :: Kinp, Ninp
2355 real(r8),
intent(out) :: StateNorm
2357# ifdef ASSUMED_SHAPE
2359 real(r8),
intent(in) :: rmask(LBi:,LBj:)
2360 real(r8),
intent(in) :: umask(LBi:,LBj:)
2361 real(r8),
intent(in) :: vmask(LBi:,LBj:)
2363# ifdef ADJUST_BOUNDARY
2365 real(r8),
intent(inout) :: ad_t_obc(LBij:,:,:,:,:,:)
2366 real(r8),
intent(inout) :: ad_u_obc(LBij:,:,:,:,:)
2367 real(r8),
intent(inout) :: ad_v_obc(LBij:,:,:,:,:)
2369 real(r8),
intent(inout) :: ad_ubar_obc(LBij:,:,:,:)
2370 real(r8),
intent(inout) :: ad_vbar_obc(LBij:,:,:,:)
2371 real(r8),
intent(inout) :: ad_zeta_obc(LBij:,:,:,:)
2373# ifdef ADJUST_WSTRESS
2374 real(r8),
intent(inout) :: ad_ustr(LBi:,LBj:,:,:)
2375 real(r8),
intent(inout) :: ad_vstr(LBi:,LBj:,:,:)
2377# if defined ADJUST_STFLUX && defined SOLVE3D
2378 real(r8),
intent(inout) :: ad_tflux(LBi:,LBj:,:,:,:)
2381 real(r8),
intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
2382 real(r8),
intent(inout) :: ad_u(LBi:,LBj:,:,:)
2383 real(r8),
intent(inout) :: ad_v(LBi:,LBj:,:,:)
2385 real(r8),
intent(inout) :: ad_ubar(LBi:,LBj:,:)
2386 real(r8),
intent(inout) :: ad_vbar(LBi:,LBj:,:)
2388 real(r8),
intent(inout) :: ad_zeta(LBi:,LBj:,:)
2389# ifdef ADJUST_BOUNDARY
2391 real(r8),
intent(inout) :: tl_t_obc(LBij:,:,:,:,:,:)
2392 real(r8),
intent(inout) :: tl_u_obc(LBij:,:,:,:,:)
2393 real(r8),
intent(inout) :: tl_v_obc(LBij:,:,:,:,:)
2395 real(r8),
intent(inout) :: tl_ubar_obc(LBij:,:,:,:)
2396 real(r8),
intent(inout) :: tl_vbar_obc(LBij:,:,:,:)
2397 real(r8),
intent(inout) :: tl_zeta_obc(LBij:,:,:,:)
2399# ifdef ADJUST_WSTRESS
2400 real(r8),
intent(inout) :: tl_ustr(LBi:,LBj:,:,:)
2401 real(r8),
intent(inout) :: tl_vstr(LBi:,LBj:,:,:)
2403# if defined ADJUST_STFLUX && defined SOLVE3D
2404 real(r8),
intent(inout) :: tl_tflux(LBi:,LBj:,:,:,:)
2407 real(r8),
intent(inout) :: tl_t(LBi:,LBj:,:,:,:)
2408 real(r8),
intent(inout) :: tl_u(LBi:,LBj:,:,:)
2409 real(r8),
intent(inout) :: tl_v(LBi:,LBj:,:,:)
2411 real(r8),
intent(inout) :: tl_ubar(LBi:,LBj:,:)
2412 real(r8),
intent(inout) :: tl_vbar(LBi:,LBj:,:)
2414 real(r8),
intent(inout) :: tl_zeta(LBi:,LBj:,:)
2415# ifdef ADJUST_BOUNDARY
2417 real(r8),
intent(inout) :: t_obc(LBij:,:,:,:,:,:)
2418 real(r8),
intent(inout) :: u_obc(LBij:,:,:,:,:)
2419 real(r8),
intent(inout) :: v_obc(LBij:,:,:,:,:)
2421 real(r8),
intent(inout) :: ubar_obc(LBij:,:,:,:)
2422 real(r8),
intent(inout) :: vbar_obc(LBij:,:,:,:)
2423 real(r8),
intent(inout) :: zeta_obc(LBij:,:,:,:)
2425# ifdef ADJUST_WSTRESS
2426 real(r8),
intent(inout) :: ustr(LBi:,LBj:,:,:)
2427 real(r8),
intent(inout) :: vstr(LBi:,LBj:,:,:)
2429# if defined ADJUST_STFLUX && defined SOLVE3D
2430 real(r8),
intent(inout) :: tflux(LBi:,LBj:,:,:,:)
2433 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
2434 real(r8),
intent(inout) :: u(LBi:,LBj:,:,:)
2435 real(r8),
intent(inout) :: v(LBi:,LBj:,:,:)
2437 real(r8),
intent(inout) :: ubar(LBi:,LBj:,:)
2438 real(r8),
intent(inout) :: vbar(LBi:,LBj:,:)
2440 real(r8),
intent(inout) :: zeta(LBi:,LBj:,:)
2443 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
2444 real(r8),
intent(in) :: umask(LBi:UBi,LBj:UBj)
2445 real(r8),
intent(in) :: vmask(LBi:UBi,LBj:UBj)
2447# ifdef ADJUST_BOUNDARY
2449 real(r8),
intent(inout) :: ad_t_obc(LBij:UBij,N(ng),4, &
2450 & Nbrec(ng),2,NT(ng))
2451 real(r8),
intent(inout) :: ad_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
2452 real(r8),
intent(inout) :: ad_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
2454 real(r8),
intent(inout) :: ad_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
2455 real(r8),
intent(inout) :: ad_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
2456 real(r8),
intent(inout) :: ad_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
2458# ifdef ADJUST_WSTRESS
2459 real(r8),
intent(inout) :: ad_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
2460 real(r8),
intent(inout) :: ad_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
2462# if defined ADJUST_STFLUX && defined SOLVE3D
2463 real(r8),
intent(inout) :: ad_tflux(LBi:UBi,LBj:UBj, &
2464 & Nfrec(ng),2,NT(ng))
2467 real(r8),
intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
2468 real(r8),
intent(inout) :: ad_u(LBi:UBi,LBj:UBj,N(ng),2)
2469 real(r8),
intent(inout) :: ad_v(LBi:UBi,LBj:UBj,N(ng),2)
2471 real(r8),
intent(inout) :: ad_ubar(LBi:UBi,LBj:UBj,:)
2472 real(r8),
intent(inout) :: ad_vbar(LBi:UBi,LBj:UBj,:)
2474 real(r8),
intent(inout) :: ad_zeta(LBi:UBi,LBj:UBj,:)
2475# ifdef ADJUST_BOUNDARY
2477 real(r8),
intent(inout) :: tl_t_obc(LBij:UBij,N(ng),4, &
2478 & Nbrec(ng),2,NT(ng))
2479 real(r8),
intent(inout) :: tl_u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
2480 real(r8),
intent(inout) :: tl_v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
2482 real(r8),
intent(inout) :: tl_ubar_obc(LBij:UBij,4,Nbrec(ng),2)
2483 real(r8),
intent(inout) :: tl_vbar_obc(LBij:UBij,4,Nbrec(ng),2)
2484 real(r8),
intent(inout) :: tl_zeta_obc(LBij:UBij,4,Nbrec(ng),2)
2486# ifdef ADJUST_WSTRESS
2487 real(r8),
intent(inout) :: tl_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
2488 real(r8),
intent(inout) :: tl_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
2490# if defined ADJUST_STFLUX && defined SOLVE3D
2491 real(r8),
intent(inout) :: tl_tflux(LBi:UBi,LBj:UBj, &
2492 & Nfrec(ng),2,NT(ng))
2495 real(r8),
intent(inout) :: tl_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
2496 real(r8),
intent(inout) :: tl_u(LBi:UBi,LBj:UBj,N(ng),2)
2497 real(r8),
intent(inout) :: tl_v(LBi:UBi,LBj:UBj,N(ng),2)
2499 real(r8),
intent(inout) :: tl_ubar(LBi:UBi,LBj:UBj,:)
2500 real(r8),
intent(inout) :: tl_vbar(LBi:UBi,LBj:UBj,:)
2502 real(r8),
intent(inout) :: tl_zeta(LBi:UBi,LBj:UBj,:)
2503# ifdef ADJUST_BOUNDARY
2505 real(r8),
intent(inout) :: t_obc(LBij:UBij,N(ng),4, &
2506 & Nbrec(ng),2,NT(ng))
2507 real(r8),
intent(inout) :: u_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
2508 real(r8),
intent(inout) :: v_obc(LBij:UBij,N(ng),4,Nbrec(ng),2)
2510 real(r8),
intent(inout) :: ubar_obc(LBij:UBij,4,Nbrec(ng),2)
2511 real(r8),
intent(inout) :: vbar_obc(LBij:UBij,4,Nbrec(ng),2)
2512 real(r8),
intent(inout) :: zeta_obc(LBij:UBij,4,Nbrec(ng),2)
2514# ifdef ADJUST_WSTRESS
2515 real(r8),
intent(inout) :: ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
2516 real(r8),
intent(inout) :: vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
2518# if defined ADJUST_STFLUX && defined SOLVE3D
2519 real(r8),
intent(inout) :: tflux(LBi:UBi,LBj:UBj, &
2520 & Nfrec(ng),2,NT(ng))
2523 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
2524 real(r8),
intent(inout) :: u(LBi:UBi,LBj:UBj,N(ng),2)
2525 real(r8),
intent(inout) :: v(LBi:UBi,LBj:UBj,N(ng),2)
2527 real(r8),
intent(inout) :: ubar(LBi:UBi,LBj:UBj,:)
2528 real(r8),
intent(inout) :: vbar(LBi:UBi,LBj:UBj,:)
2530 real(r8),
intent(inout) :: zeta(LBi:UBi,LBj:UBj,:)
2535 integer :: Lwrk1, Lwrk2, i, j, lstr, outLoop, rec
2537 integer :: ndefLCZ = 1
2539 integer :: ndefLZE = 1
2545 real(r8) :: fac, fac1, fac2
2548 real(r8),
dimension(0:NstateVar(ng)) :: dot
2549 real(r8),
dimension(Ninner) :: DotProd
2550 real(r8),
dimension(Ninner) :: bvector
2553 real(r8),
dimension(Ninner) :: work1
2556 character (len=256) :: ncname
2558 character (len=*),
parameter :: MyFile = &
2559 & __FILE__//
", ini_C_norm_tile"
2561# include "set_bounds.h"
2574 SELECT CASE (lze(ng)%IOtype)
2576 CALL netcdf_get_ivar (ng, iadm, trim(lze(ng)%name), &
2577 &
'ndefADJ', ndeflze)
2579# if defined PIO_LIB && defined DISTRIBUTE
2581 CALL pio_netcdf_get_ivar (ng, iadm, trim(lze(ng)%name), &
2582 &
'ndefADJ', ndeflze)
2585 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
2587 SELECT CASE (lcz(ng)%IOtype)
2589 CALL netcdf_get_ivar (ng, iadm, trim(lcz(ng)%name), &
2590 &
'ndefADJ', ndeflcz)
2592# if defined PIO_LIB && defined DISTRIBUTE
2594 CALL pio_netcdf_get_ivar (ng, iadm, trim(lcz(ng)%name), &
2595 &
'ndefADJ', ndeflcz)
2598 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
2610 IF (ndeflze.gt.0)
THEN
2611 lstr=len_trim(lze(ng)%name)
2612 WRITE (ncname,10) lze(ng)%name(1:lstr-8), outloop
2613 10
FORMAT (a,
'_',i4.4,
'.nc')
2626 IF (ndeflcz.gt.0)
THEN
2627 lstr=len_trim(lcz(ng)%name)
2628 WRITE (ncname,10) lcz(ng)%name(1:lstr-8), outloop
2629 10
FORMAT (a,
'_',i4.4,
'.nc')
2639 CALL state_read (ng, tile, itlm, &
2645 & lbi, ubi, lbj, ubj, lbij, ubij, &
2648 & ndeflze, lze(ng)%ncid, &
2649# if defined PIO_LIB && defined DISTRIBUTE
2650 & lze(ng)%pioFile, &
2653 & ndeflcz, lcz(ng)%ncid, &
2654# if defined PIO_LIB && defined DISTRIBUTE
2655 & lcz(ng)%pioFile, &
2660 & rmask, umask, vmask, &
2662# ifdef ADJUST_BOUNDARY
2664 & ad_t_obc, ad_u_obc, ad_v_obc, &
2666 & ad_ubar_obc, ad_vbar_obc, &
2669# ifdef ADJUST_WSTRESS
2670 & ad_ustr, ad_vstr, &
2672# if defined ADJUST_STFLUX && defined SOLVE3D
2676 & ad_t, ad_u, ad_v, &
2678 & ad_ubar, ad_vbar, &
2681 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
2688 CALL state_dotprod (ng, tile, itlm, &
2689 & lbi, ubi, lbj, ubj, lbij, ubij, &
2690 & nstatevar(ng), dot(0:), &
2692 & rmask, umask, vmask, &
2694# ifdef ADJUST_BOUNDARY
2696 & tl_t_obc(:,:,:,:,ladj,:), &
2697 & ad_t_obc(:,:,:,:,lwrk1,:), &
2698 & tl_u_obc(:,:,:,:,ladj), &
2699 & ad_u_obc(:,:,:,:,lwrk1), &
2700 & tl_v_obc(:,:,:,:,ladj), &
2701 & ad_v_obc(:,:,:,:,lwrk1), &
2703 & tl_ubar_obc(:,:,:,ladj), &
2704 & ad_ubar_obc(:,:,:,lwrk1), &
2705 & tl_vbar_obc(:,:,:,ladj), &
2706 & ad_vbar_obc(:,:,:,lwrk1), &
2707 & tl_zeta_obc(:,:,:,ladj), &
2708 & ad_zeta_obc(:,:,:,lwrk1), &
2710# ifdef ADJUST_WSTRESS
2711 & tl_ustr(:,:,:,ladj), ad_ustr(:,:,:,lwrk1), &
2712 & tl_vstr(:,:,:,ladj), ad_vstr(:,:,:,lwrk1), &
2714# if defined ADJUST_STFLUX && defined SOLVE3D
2715 & tl_tflux(:,:,:,ladj,:), &
2716 & ad_tflux(:,:,:,lwrk1,:), &
2719 & tl_t(:,:,:,ninp,:), ad_t(:,:,:,lwrk1,:), &
2720 & tl_u(:,:,:,ninp), ad_u(:,:,:,lwrk1), &
2721 & tl_v(:,:,:,ninp), ad_v(:,:,:,lwrk1), &
2723 & tl_ubar(:,:,kinp), ad_ubar(:,:,lwrk1), &
2724 & tl_vbar(:,:,kinp), ad_vbar(:,:,lwrk1), &
2726 & tl_zeta(:,:,kinp), ad_zeta(:,:,lwrk1))
2730 dotprod(inner)=dot(0)
2739 sum=sum+gsmatrix(i,j)*dotprod(j)
2756 bvector(1)=cg_delta(1,outloop)*dotprod(1)+ &
2757 & cg_beta(2,outloop)*dotprod(2)
2759 bvector(i)=cg_delta(i,outloop)*dotprod(i)+ &
2760 & cg_beta(i+1,outloop)*dotprod(i+1)+ &
2761 & cg_beta(i,outloop)*dotprod(i-1)
2763 bvector(ninner)=cg_delta(ninner,outloop)*dotprod(ninner)+ &
2764 & cg_beta(ninner,outloop)*dotprod(ninner-1)
2772 sum=sum+gsmatrix(j,i)*bvector(j)
2789 CALL state_initialize (ng, tile, &
2790 & lbi, ubi, lbj, ubj, lbij, ubij, &
2793 & rmask, umask, vmask, &
2795# ifdef ADJUST_BOUNDARY
2797 & t_obc, u_obc, v_obc, &
2799 & ubar_obc, vbar_obc, &
2802# ifdef ADJUST_WSTRESS
2805# if defined ADJUST_STFLUX && defined SOLVE3D
2821 IF (ndeflze.gt.0)
THEN
2822 lstr=len_trim(lze(ng)%name)
2823 WRITE (ncname,10) lze(ng)%name(1:lstr-8), inner
2828 IF (ndeflcz.gt.0)
THEN
2829 lstr=len_trim(lcz(ng)%name)
2830 WRITE (ncname,10) lcz(ng)%name(1:lstr-8), inner
2835 CALL state_read (ng, tile, itlm, &
2841 & lbi, ubi, lbj, ubj, lbij, ubij, &
2844 & ndeflze, lze(ng)%ncid, &
2845# if defined PIO_LIB && defined DISTRIBUTE
2846 & lze(ng)%pioFile, &
2849 & ndeflcz, lcz(ng)%ncid, &
2850# if defined PIO_LIB && defined DISTRIBUTE
2851 & lcz(ng)%pioFile, &
2856 & rmask, umask, vmask, &
2858# ifdef ADJUST_BOUNDARY
2860 & ad_t_obc, ad_u_obc, ad_v_obc, &
2862 & ad_ubar_obc, ad_vbar_obc, &
2865# ifdef ADJUST_WSTRESS
2866 & ad_ustr, ad_vstr, &
2868# if defined ADJUST_STFLUX && defined SOLVE3D
2872 & ad_t, ad_u, ad_v, &
2874 & ad_ubar, ad_vbar, &
2877 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
2894 CALL state_addition (ng, tile, &
2895 & lbi, ubi, lbj, ubj, lbij, ubij, &
2896 & lwrk2, lwrk1, lwrk2, fac1, fac2, &
2898 & rmask, umask, vmask, &
2900# ifdef ADJUST_BOUNDARY
2902 & t_obc, ad_t_obc, &
2903 & u_obc, ad_u_obc, &
2904 & v_obc, ad_v_obc, &
2906 & ubar_obc, ad_ubar_obc, &
2907 & vbar_obc, ad_vbar_obc, &
2908 & zeta_obc, ad_zeta_obc, &
2910# ifdef ADJUST_WSTRESS
2914# if defined ADJUST_STFLUX && defined SOLVE3D
2915 & tflux, ad_tflux, &
2921# if defined WEAK_CONSTRAINT && defined TIME_CONV
2934 CALL state_dotprod (ng, tile, itlm, &
2935 & lbi, ubi, lbj, ubj, lbij, ubij, &
2936 & nstatevar(ng), dot(0:), &
2938 & rmask, umask, vmask, &
2940# ifdef ADJUST_BOUNDARY
2942 & tl_t_obc(:,:,:,:,ladj,:), &
2943 & t_obc(:,:,:,:,lwrk2,:), &
2944 & tl_u_obc(:,:,:,:,ladj), &
2945 & u_obc(:,:,:,:,lwrk2), &
2946 & tl_v_obc(:,:,:,:,ladj), &
2947 & v_obc(:,:,:,:,lwrk2), &
2949 & tl_ubar_obc(:,:,:,ladj), &
2950 & ubar_obc(:,:,:,lwrk2), &
2951 & tl_vbar_obc(:,:,:,ladj), &
2952 & vbar_obc(:,:,:,lwrk2), &
2953 & tl_zeta_obc(:,:,:,ladj), &
2954 & zeta_obc(:,:,:,lwrk2), &
2956# ifdef ADJUST_WSTRESS
2957 & tl_ustr(:,:,:,ladj), ustr(:,:,:,lwrk2), &
2958 & tl_vstr(:,:,:,ladj), vstr(:,:,:,lwrk2), &
2960# if defined ADJUST_STFLUX && defined SOLVE3D
2961 & tl_tflux(:,:,:,ladj,:), &
2962 & tflux(:,:,:,lwrk2,:), &
2965 & tl_t(:,:,:,ninp,:), t(:,:,:,lwrk2,:), &
2966 & tl_u(:,:,:,ninp), u(:,:,:,lwrk2), &
2967 & tl_v(:,:,:,ninp), v(:,:,:,lwrk2), &
2969 & tl_ubar(:,:,kinp), ubar(:,:,lwrk2), &
2970 & tl_vbar(:,:,kinp), vbar(:,:,lwrk2), &
2972 & tl_zeta(:,:,kinp), zeta(:,:,lwrk2))