69 & LBi, UBi, LBj, UBj, &
70 & IminS, ImaxS, JminS, JmaxS, &
89 integer,
intent(in) :: ng, tile
90 integer,
intent(in) :: LBi, UBi, LBj, UBj
91 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
92 integer,
intent(in) :: nstp
97 integer :: i, it, j, k
101 real(r8) :: pfac(IminS:ImaxS,JminS:JmaxS)
102 real(r8) :: rfac(IminS:ImaxS,JminS:JmaxS)
103 real(r8) :: ufac(IminS:ImaxS,JminS:JmaxS)
104 real(r8) :: vfac(IminS:ImaxS,JminS:JmaxS)
106# include "set_bounds.h"
112 IF (
navg(ng).eq.0)
RETURN
121 & (mod(
iic(ng),
navg(ng)).eq.0)).or. &
133 grid(ng)%pmask_avg(i,j)=max(0.0_r8, &
134 & min(
grid(ng)%pmask_full(i,j), &
140 grid(ng)%rmask_avg(i,j)=max(0.0_r8, &
141 & min(
grid(ng)%rmask_full(i,j), &
147 grid(ng)%umask_avg(i,j)=max(0.0_r8, &
148 & min(
grid(ng)%umask_full(i,j), &
154 grid(ng)%vmask_avg(i,j)=max(0.0_r8, &
155 & min(
grid(ng)%vmask_full(i,j), &
169 &
grid(ng)%rmask_full(i,j)
180 &
grid(ng)%umask_full(i,j)
191 &
grid(ng)%vmask_full(i,j)
205 &
grid(ng)%umask_full(i,j)
218 &
grid(ng)%vmask_full(i,j)
229 &
grid(ng)%pm(i,j)* &
233 &
grid(ng)%rmask_full(i,j)
247 &
grid(ng)%rmask_full(i,j)
262 &
grid(ng)%rmask_full(i,j)
270# if defined LMD_MIXING || defined MY25_MIXING || defined GLS_MIXING
278 &
grid(ng)%rmask_full(i,j)
291 &
grid(ng)%rmask_full(i,j)
306 &
grid(ng)%rmask_full(i,j)
325 &
grid(ng)%umask_full(i,j)
336 &
grid(ng)%vmask_full(i,j)
348 &
grid(ng)%umask_full(i,j)
359 &
grid(ng)%vmask_full(i,j)
372 &
grid(ng)%rmask_full(i,j)
385 &
grid(ng)%rmask_full(i,j)
399 &
grid(ng)%rmask_full(i,j)
406# if defined BULK_FLUXES || defined FRC_COUPLING
413 &
grid(ng)%rmask_full(i,j)
425 &
grid(ng)%rmask_full(i,j)
437 &
grid(ng)%rmask_full(i,j)
444# if defined BULK_FLUXES && defined EMINUSP
451 &
grid(ng)%rmask_full(i,j)
465 &
ocean(ng)%ad_zeta_sol(i,j)
468 &
grid(ng)%rmask_full(i,j)
477 &
ocean(ng)%ad_ubar_sol(i,j)
480 &
grid(ng)%umask_full(i,j)
489 &
ocean(ng)%ad_vbar_sol(i,j)
492 &
grid(ng)%vmask_full(i,j)
504 &
ocean(ng)%ad_u(i,j,k,nstp)
507 &
grid(ng)%umask_full(i,j)
518 &
ocean(ng)%ad_v(i,j,k,nstp)
521 &
grid(ng)%vmask_full(i,j)
531 average(ng)%avgUV(i,j,k)=0.25_r8* &
532 & (
ocean(ng)%ad_u(i ,j,k,nstp)+ &
533 &
ocean(ng)%ad_u(i+1,j,k,nstp))*&
534 & (
ocean(ng)%ad_v(i,j ,k,nstp)+ &
535 &
ocean(ng)%ad_v(i,j+1,k,nstp))
538 &
grid(ng)%rmask_full(i,j)
552 &
ocean(ng)%ad_t(i,j,k, &
557 &
grid(ng)%rmask_full(i,j)
567 average(ng)%avgUT(i,j,k,it)=0.5_r8* &
568 &
ocean(ng)%ad_u(i,j,k, &
570 & (
ocean(ng)%ad_t(i-1,j,k, &
572 &
ocean(ng)%ad_t(i ,j,k, &
577 &
grid(ng)%umask_full(i,j)
587 average(ng)%avgVT(i,j,k,it)=0.5_r8* &
588 &
ocean(ng)%ad_v(i,j,k, &
590 & (
ocean(ng)%ad_t(i,j-1,k, &
592 &
ocean(ng)%ad_t(i,j ,k, &
597 &
grid(ng)%vmask_full(i,j)
620 grid(ng)%pmask_avg(i,j)=
grid(ng)%pmask_avg(i,j)+ &
622 & min(
grid(ng)%pmask_full(i,j), &
628 grid(ng)%rmask_avg(i,j)=
grid(ng)%rmask_avg(i,j)+ &
630 & min(
grid(ng)%rmask_full(i,j), &
636 grid(ng)%umask_avg(i,j)=
grid(ng)%umask_avg(i,j)+ &
638 & min(
grid(ng)%umask_full(i,j), &
644 grid(ng)%vmask_avg(i,j)=
grid(ng)%vmask_avg(i,j)+ &
646 & min(
grid(ng)%vmask_full(i,j), &
659 &
grid(ng)%rmask_full(i,j)* &
661 &
ocean(ng)%ad_zeta_sol(i,j)
670 &
grid(ng)%umask_full(i,j)* &
672 &
ocean(ng)%ad_ubar_sol(i,j)
681 &
grid(ng)%vmask_full(i,j)* &
683 &
ocean(ng)%ad_vbar_sol(i,j)
695 &
grid(ng)%umask_full(i,j)* &
697 &
ocean(ng)%ad_u(i,j,k,nstp)
708 &
grid(ng)%vmask_full(i,j)* &
710 &
ocean(ng)%ad_v(i,j,k,nstp)
721 &
grid(ng)%rmask_full(i,j)* &
723 &
ocean(ng)%ad_W_sol(i,j,k)* &
724 &
grid(ng)%pm(i,j)* &
737 &
grid(ng)%rmask_full(i,j)* &
739 &
ocean(ng)%ad_rho(i,j,k)
751 &
grid(ng)%rmask_full(i,j)* &
753 &
ocean(ng)%ad_t(i,j,k, &
761# if defined LMD_MIXING || defined MY25_MIXING || defined GLS_MIXING
768 &
grid(ng)%rmask_full(i,j)* &
770 &
mixing(ng)%ad_Akv(i,j,k)
781 &
grid(ng)%rmask_full(i,j)* &
796 &
grid(ng)%rmask_full(i,j)* &
815 &
grid(ng)%umask_full(i,j)* &
817 &
forces(ng)%ad_sustr(i,j)
826 &
grid(ng)%vmask_full(i,j)* &
828 &
forces(ng)%ad_svstr(i,j)
838 &
grid(ng)%umask_full(i,j)* &
840 &
forces(ng)%ad_bustr(i,j)
849 &
grid(ng)%vmask_full(i,j)* &
851 &
forces(ng)%ad_bvstr(i,j)
862 &
grid(ng)%rmask_full(i,j)* &
875 &
grid(ng)%rmask_full(i,j)* &
889 &
grid(ng)%rmask_full(i,j)* &
891 &
forces(ng)%ad_srflx(i,j)
897# if defined BULK_FLUXES || defined FRC_COUPLING
903 &
grid(ng)%rmask_full(i,j)* &
905 &
forces(ng)%ad_lhflx(i,j)
915 &
grid(ng)%rmask_full(i,j)* &
917 &
forces(ng)%ad_lrflx(i,j)
927 &
grid(ng)%rmask_full(i,j)* &
929 &
forces(ng)%ad_shflx(i,j)
935# if defined BULK_FLUXES && defined EMINUSP
941 &
grid(ng)%rmask_full(i,j)* &
957 &
grid(ng)%rmask_full(i,j)* &
959 &
ocean(ng)%ad_zeta_sol(i,j)* &
960 &
ocean(ng)%ad_zeta_sol(i,j)
969 &
grid(ng)%umask_full(i,j)* &
971 &
ocean(ng)%ad_ubar_sol(i,j)* &
972 &
ocean(ng)%ad_ubar_sol(i,j)
981 &
grid(ng)%vmask_full(i,j)* &
983 &
ocean(ng)%ad_vbar_sol(i,j)* &
984 &
ocean(ng)%ad_vbar_sol(i,j)
996 &
grid(ng)%umask_full(i,j)* &
998 &
ocean(ng)%ad_u(i,j,k,nstp)* &
999 &
ocean(ng)%ad_u(i,j,k,nstp)
1010 &
grid(ng)%vmask_full(i,j)* &
1012 &
ocean(ng)%ad_v(i,j,k,nstp)* &
1013 &
ocean(ng)%ad_v(i,j,k,nstp)
1024 &
grid(ng)%rmask_full(i,j)* &
1027 & (
ocean(ng)%ad_u(i ,j,k,nstp)+ &
1028 &
ocean(ng)%ad_u(i+1,j,k,nstp))*&
1029 & (
ocean(ng)%ad_v(i,j ,k,nstp)+ &
1030 &
ocean(ng)%ad_v(i,j+1,k,nstp))
1044 &
grid(ng)%rmask_full(i,j)* &
1046 &
ocean(ng)%ad_t(i,j,k, &
1048 &
ocean(ng)%ad_t(i,j,k, &
1061 &
grid(ng)%umask_full(i,j)* &
1064 &
ocean(ng)%ad_u(i,j,k, &
1066 & (
ocean(ng)%ad_t(i-1,j,k, &
1068 &
ocean(ng)%ad_t(i ,j,k, &
1081 &
grid(ng)%vmask_full(i,j)* &
1084 &
ocean(ng)%ad_v(i,j,k, &
1086 & (
ocean(ng)%ad_t(i,j-1,k, &
1088 &
ocean(ng)%ad_t(i,j ,k, &
1103 & (mod(
iic(ng)-1,
navg(ng)).eq.0).and. &
1106 IF (
domain(ng)%SouthWest_Test(tile))
THEN
1107 IF (
navg(ng).eq.1)
THEN
1124 pfac(i,j)=1.0_r8/max(1.0_r8,
grid(ng)%pmask_avg(i,j))
1125 rfac(i,j)=1.0_r8/max(1.0_r8,
grid(ng)%rmask_avg(i,j))
1126 ufac(i,j)=1.0_r8/max(1.0_r8,
grid(ng)%umask_avg(i,j))
1127 vfac(i,j)=1.0_r8/max(1.0_r8,
grid(ng)%vmask_avg(i,j))
1131# if defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
1132 defined opt_observations || defined sensitivity_4dvar || \
1136 fac=1.0_r8/real(
navg(ng),r8)
1153 average(ng)%avgzeta(i,j)=rfac(i,j)* &
1161 average(ng)%avgu2d(i,j)=ufac(i,j)* &
1169 average(ng)%avgv2d(i,j)=vfac(i,j)* &
1180 average(ng)%avgu3d(i,j,k)=ufac(i,j)* &
1190 average(ng)%avgv3d(i,j,k)=vfac(i,j)* &
1201 average(ng)%avgw3d(i,j,k)=rfac(i,j)* &
1212 average(ng)%avgrho(i,j,k)=rfac(i,j)* &
1223 average(ng)%avgt(i,j,k,it)=rfac(i,j)* &
1231# if defined LMD_MIXING || defined MY25_MIXING || defined GLS_MIXING
1236 average(ng)%avgAKv(i,j,k)=rfac(i,j)* &
1246 average(ng)%avgAKt(i,j,k)=rfac(i,j)* &
1256 average(ng)%avgAKs(i,j,k)=rfac(i,j)* &
1270 average(ng)%avgsus(i,j)=ufac(i,j)* &
1278 average(ng)%avgsvs(i,j)=vfac(i,j)* &
1287 average(ng)%avgbus(i,j)=ufac(i,j)* &
1295 average(ng)%avgbvs(i,j)=vfac(i,j)* &
1305 average(ng)%avgstf(i,j)=rfac(i,j)* &
1315 average(ng)%avgswf(i,j)=rfac(i,j)* &
1326 average(ng)%avgsrf(i,j)=rfac(i,j)* &
1333# if defined BULK_FLUXES || defined FRC_COUPLING
1337 average(ng)%avglhf(i,j)=rfac(i,j)* &
1346 average(ng)%avgshf(i,j)=rfac(i,j)* &
1355 average(ng)%avglrf(i,j)=rfac(i,j)* &
1362# if defined BULK_FLUXES && defined EMINUSP
1366 average(ng)%avgevap(i,j)=rfac(i,j)* &
1379 average(ng)%avgZZ(i,j)=rfac(i,j)* &
1387 average(ng)%avgU2(i,j)=ufac(i,j)* &
1395 average(ng)%avgV2(i,j)=vfac(i,j)* &
1406 average(ng)%avgUU(i,j,k)=ufac(i,j)* &
1416 average(ng)%avgVV(i,j,k)=vfac(i,j)* &
1426 average(ng)%avgUV(i,j,k)=rfac(i,j)* &
1438 average(ng)%avgTT(i,j,k,it)=rfac(i,j)* &
1449 average(ng)%avgUT(i,j,k,it)=ufac(i,j)* &
1460 average(ng)%avgVT(i,j,k,it)=vfac(i,j)* &