1818 & LBi, UBi, LBj, UBj, &
1819 & IminS, ImaxS, JminS, JmaxS)
1837 integer,
intent(in) :: ngc, ngf, model, tile
1838 integer,
intent(in) :: lbi, ubi, lbj, ubj
1839 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
1843 integer :: iedge, ibc, ibc_min, ibc_max, ibf, io
1844 integer :: jedge, jbc, jbc_min, jbc_max, jbf, jo
1845 integer :: istr, iend, jstr, jend
1846 integer :: istrm2, iendp2, jstrm2, jendp2
1847 integer :: tindex, i, ic, isum, itrc, j, jsum, k, half
1848 integer :: cr, dg, dgcr, rg, rgcr
1850 real(r8) :: tfc, tff, tvalue, cff
1851 real(r8) :: ad_tfc, ad_tff, ad_tvalue, ad_cff, adfac
1853 real(r8) :: dinv(imins:imaxs,jmins:jmaxs)
1854 real(r8) :: ad_dinv(imins:imaxs,jmins:jmaxs)
1879 & lbi, ubi, lbj, ubj, 1,
n(ngc), &
1883 &
ocean(ngc)%ad_t(:,:,:,tindex,:))
1896 IF ((ngc.eq.dg).and.(ngf.eq.rg))
THEN
1898 ELSE IF ((ngc.eq.rg).and.(ngf.eq.dg))
THEN
1905 istr =
bounds(ngc)%Istr (tile)
1906 iend =
bounds(ngc)%Iend (tile)
1907 jstr =
bounds(ngc)%Jstr (tile)
1908 jend =
bounds(ngc)%Jend (tile)
1910 istrm2=
bounds(ngc)%Istrm2(tile)
1911 iendp2=
bounds(ngc)%Iendp2(tile)
1912 jstrm2=
bounds(ngc)%Jstrm2(tile)
1913 jendp2=
bounds(ngc)%Jendp2(tile)
1920 cff=
grid(ngc)%Hz(i,j,1)
1922 cff=cff+
grid(ngc)%Hz(i,j,k)
1924 dinv(i,j)=1.0_r8/cff
1956 t_loop :
DO itrc=1,
nt(ngc)
1968 IF (((ibc_min.le.ibc).and.(ibc.le.ibc_max)).and. &
1969 & ((jstr.le.jbc).and.(jbc.le.jend)))
THEN
1995 tff=tff*
dt(ngc)/
dt(ngf)
1997 cff=
grid(ngc)%pm(ibc,jbc)* &
1998 &
grid(ngc)%pn(ibc,jbc)* &
2003 ad_tvalue=ad_tvalue+ &
2004 &
ocean(ngc)%ad_t(ibc,jbc,k,tindex,itrc)
2005 ocean(ngc)%ad_t(ibc,jbc,k,tindex,itrc)=0.0_r8
2009 ad_tvalue=ad_tvalue*
grid(ngc)%rmask(ibc,jbc)
2017 ad_tvalue=ad_tvalue* &
2018 & (1.0_r8-
dt(ngc)* &
2019 &
clima(ngc)%Tnudgcof(ibc,jbc,k,itrc))
2030 & -(
ocean(ngc)%t(ibc,jbc,k,tindex,itrc)- &
2031 & cff*(tff-tfc))))*ad_tvalue
2032 ocean(ngc)%ad_t(ibc,jbc,k,tindex,itrc)= &
2033 &
ocean(ngc)%ad_t(ibc,jbc,k,tindex,itrc)+adfac
2034 ad_cff=ad_cff-(tff-tfc)*adfac
2035 ad_tff=ad_tff-cff*adfac
2036 ad_tfc=ad_tfc+cff*adfac
2046 ad_dinv(ibc,jbc)=ad_dinv(ibc,jbc)+ &
2047 &
grid(ngc)%pm(ibc,jbc)* &
2048 &
grid(ngc)%pn(ibc,jbc)*ad_cff
2055 ad_tff=ad_tff*
dt(ngc)/
dt(ngf)
2104 IF (((ibc_min.le.ibc).and.(ibc.le.ibc_max)).and. &
2105 & ((jstr.le.jbc-1).and.(jbc-1.le.jend)))
THEN
2131 tff=tff*
dt(ngc)/
dt(ngf)
2133 cff=
grid(ngc)%pm(ibc,jbc-1)* &
2134 &
grid(ngc)%pn(ibc,jbc-1)* &
2140 ad_tvalue=ad_tvalue+ &
2141 &
ocean(ngc)%ad_t(ibc,jbc-1,k,tindex,itrc)
2142 ocean(ngc)%ad_t(ibc,jbc-1,k,tindex,itrc)=0.0_r8
2146 ad_tvalue=ad_tvalue*
grid(ngc)%rmask(ibc,jbc-1)
2154 ad_tvalue=ad_tvalue* &
2155 & (1.0_r8-
dt(ngc)* &
2156 &
clima(ngc)%Tnudgcof(ibc,jbc-1,k,itrc))
2167 & -(
ocean(ngc)%t(ibc,jbc-1,k,tindex,itrc)- &
2168 & cff*(tff-tfc))))*ad_tvalue
2169 ocean(ngc)%ad_t(ibc,jbc-1,k,tindex,itrc)= &
2170 &
ocean(ngc)%ad_t(ibc,jbc-1,k,tindex,itrc)+adfac
2171 ad_cff=ad_cff-(tff-tfc)*adfac
2172 ad_tff=ad_tff-cff*adfac
2173 ad_tfc=ad_tfc+cff*adfac
2183 ad_dinv(ibc,jbc-1)=ad_dinv(ibc,jbc-1)+ &
2184 &
grid(ngc)%pm(ibc,jbc-1)* &
2185 &
grid(ngc)%pn(ibc,jbc-1)*ad_cff
2192 ad_tff=ad_tff*
dt(ngc)/
dt(ngf)
2236 jbc_max=
j_top(ngf)-1
2239 IF (((istr.le.ibc).and.(ibc.le.iend)).and. &
2240 & ((jbc_min.le.jbc).and.(jbc.le.jbc_max)))
THEN
2266 tff=tff*
dt(ngc)/
dt(ngf)
2270 cff=
grid(ngc)%pm(ibc,jbc)* &
2271 &
grid(ngc)%pn(ibc,jbc)* &
2276 ad_tvalue=ad_tvalue+ &
2277 &
ocean(ngc)%ad_t(ibc,jbc,k,tindex,itrc)
2278 ocean(ngc)%ad_t(ibc,jbc,k,tindex,itrc)=0.0_r8
2282 ad_tvalue=ad_tvalue*
grid(ngc)%rmask(ibc,jbc)
2290 ad_tvalue=ad_tvalue* &
2291 & (1.0_r8-
dt(ngc)* &
2292 &
clima(ngc)%Tnudgcof(ibc,jbc,k,itrc))
2303 & -(
ocean(ngc)%t(ibc,jbc,k,tindex,itrc)- &
2304 & cff*(tff-tfc))))*ad_tvalue
2305 ocean(ngc)%ad_t(ibc,jbc,k,tindex,itrc)= &
2306 &
ocean(ngc)%ad_t(ibc,jbc,k,tindex,itrc)+adfac
2307 ad_cff=ad_cff-(tff-tfc)*adfac
2308 ad_tff=ad_tff-cff*adfac
2309 ad_tfc=ad_tfc+cff*adfac
2319 ad_dinv(ibc,jbc)=ad_dinv(ibc,jbc)+ &
2320 &
grid(ngc)%pm(ibc,jbc)* &
2321 &
grid(ngc)%pn(ibc,jbc)*ad_cff
2328 ad_tff=ad_tff*
dt(ngc)/
dt(ngf)
2372 jbc_max=
j_top(ngf)-1
2375 IF (((istr.le.ibc-1).and.(ibc-1.le.iend)).and. &
2376 & ((jbc_min.le.jbc).and.(jbc.le.jbc_max)))
THEN
2402 tff=tff*
dt(ngc)/
dt(ngf)
2406 cff=
grid(ngc)%pm(ibc-1,jbc)* &
2407 &
grid(ngc)%pn(ibc-1,jbc)* &
2412 ad_tvalue=ad_tvalue+ &
2413 &
ocean(ngc)%ad_t(ibc-1,jbc,k,tindex,itrc)
2414 ocean(ngc)%ad_t(ibc-1,jbc,k,tindex,itrc)=0.0_r8
2418 ad_tvalue=ad_tvalue*
grid(ngc)%rmask(ibc-1,jbc)
2426 ad_tvalue=ad_tvalue* &
2427 & (1.0_r8-
dt(ngc)* &
2428 &
clima(ngc)%Tnudgcof(ibc-1,jbc,k,itrc))
2439 & -(
ocean(ngc)%t(ibc-1,jbc,k,tindex,itrc)- &
2440 & cff*(tff-tfc))))*ad_tvalue
2441 ocean(ngc)%ad_t(ibc-1,jbc,k,tindex,itrc)= &
2442 &
ocean(ngc)%ad_t(ibc-1,jbc,k,tindex,itrc)+adfac
2443 ad_cff=ad_cff-(tff-tfc)*adfac
2444 ad_tff=ad_tff-cff*adfac
2445 ad_tfc=ad_tfc+cff*adfac
2455 ad_dinv(ibc-1,jbc)=ad_dinv(ibc-1,jbc)+ &
2456 &
grid(ngc)%pm(ibc-1,jbc)* &
2457 &
grid(ngc)%pn(ibc-1,jbc)*ad_cff
2464 ad_tff=ad_tff*
dt(ngc)/
dt(ngf)
2508 cff=
grid(ngc)%Hz(i,j,1)
2510 cff=cff+
grid(ngc)%Hz(i,j,k)
2512 dinv(i,j)=1.0_r8/cff
2515 ad_cff=ad_cff-ad_dinv(i,j)*dinv(i,j)/cff
2520 grid(ngc)%ad_Hz(i,j,k)=
grid(ngc)%ad_Hz(i,j,k)+ad_cff
2524 grid(ngc)%ad_Hz(i,j,1)=
grid(ngc)%ad_Hz(i,j,1)+ad_cff
2582 integer,
intent(in) :: ng, model, vtype, tile
2587 integer :: lbid, ubid, lbjd, ubjd
2588 integer :: lbir, ubir, lbjr, ubjr
2589 integer :: dindex2d, rindex2d
2591 integer :: dindex3d, rindex3d
2593 integer :: cr, dg, k, rg, nrec, rec
2598 character (len=*),
parameter :: myfile = &
2599 & __FILE__//
", ad_fine2coarse"
2619 IF ((ng.eq.dg).and.(
dxmax(dg).lt.
dxmax(rg)))
THEN
2623 lbid=
bounds(dg)%LBi(tile)
2624 ubid=
bounds(dg)%UBi(tile)
2625 lbjd=
bounds(dg)%LBj(tile)
2626 ubjd=
bounds(dg)%UBj(tile)
2628 lbir=
bounds(rg)%LBi(tile)
2629 ubir=
bounds(rg)%UBi(tile)
2630 lbjr=
bounds(rg)%LBj(tile)
2631 ubjr=
bounds(rg)%UBj(tile)
2635 IF (
domain(ng)%SouthWest_Test(tile))
THEN
2637 WRITE (
stdout,10) dg, rg, cr
2638 10
FORMAT (6x,
'AD_FINE2COARSE - exchanging data between ', &
2639 &
'grids: dg = ',i2.2,
' and rg = ',i2.2, &
2660 IF (vtype.eq.
r2dvar)
THEN
2667 & lbir, ubir, lbjr, ubjr, &
2675 & lbir, ubir, lbjr, ubjr, &
2676 &
ocean(rg)%ad_ubar(:,:,k))
2682 & lbir, ubir, lbjr, ubjr, &
2683 &
ocean(rg)%ad_vbar(:,:,k))
2691 & lbir, ubir, lbjr, ubjr, &
2692 &
ocean(rg)%ad_zeta(:,:, &
2699 & lbir, ubir, lbjr, ubjr, &
2700 &
ocean(rg)%ad_ubar(:,:, &
2707 & lbir, ubir, lbjr, ubjr, &
2708 &
ocean(rg)%ad_vbar(:,:, &
2712 ELSE IF (vtype.eq.
r3dvar)
THEN
2718 & lbir, ubir, lbjr, ubjr, &
2720 &
ocean(rg)%ad_u(:,:,:,rindex3d))
2726 & lbir, ubir, lbjr, ubjr, &
2728 &
ocean(rg)%ad_v(:,:,:,rindex3d))
2737 & lbir, ubir, lbjr, ubjr, &
2739 &
ocean(rg)%ad_t(:,:,:, &
2749 IF (vtype.eq.
r2dvar)
THEN
2758 & lbir, ubir, lbjr, ubjr, &
2772 & lbir, ubir, lbjr, ubjr, &
2775 &
ocean(rg)%ad_ubar(:,:,1), &
2776 &
ocean(rg)%ad_vbar(:,:,1), &
2777 &
ocean(rg)%ad_ubar(:,:,2), &
2778 &
ocean(rg)%ad_vbar(:,:,2))
2789 & lbir, ubir, lbjr, ubjr, &
2792 &
ocean(rg)%ad_zeta(:,:,rindex2d), &
2793 &
ocean(rg)%ad_ubar(:,:,rindex2d), &
2794 &
ocean(rg)%ad_vbar(:,:,rindex2d))
2797 ELSE IF (vtype.eq.
r3dvar)
THEN
2806 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
2809 &
ocean(rg)%ad_u(:,:,:,rindex3d), &
2810 &
ocean(rg)%ad_v(:,:,:,rindex3d))
2819 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
2823 &
ocean(rg)%ad_t(:,:,:,rindex3d,:))
2832 IF (vtype.eq.
r2dvar)
THEN
2859 & lbid, ubid, lbjd, ubjd, &
2860 & lbir, ubir, lbjr, ubjr, &
2866 &
grid(dg)%rmask_full, &
2893 & lbid, ubid, lbjd, ubjd, &
2894 & lbir, ubir, lbjr, ubjr, &
2903 &
ocean(dg)%ad_zeta(:,:,dindex2d), &
2904 &
ocean(rg)%ad_zeta(:,:,rindex2d))
2937 & lbid, ubid, lbjd, ubjd, &
2938 & lbir, ubir, lbjr, ubjr, &
2944 &
grid(dg)%umask_full, &
2945 &
grid(rg)%umask_full, &
2947 &
ocean(dg)%ad_ubar(:,:,dindex2d), &
2949 &
ocean(rg)%ad_ubar(:,:,1), &
2950 &
ocean(rg)%ad_ubar(:,:,2))
2952 &
ocean(rg)%ad_ubar(:,:,rindex2d))
2982 & lbid, ubid, lbjd, ubjd, &
2983 & lbir, ubir, lbjr, ubjr, &
2989 &
grid(dg)%vmask_full, &
2990 &
grid(rg)%vmask_full, &
2992 &
ocean(dg)%ad_vbar(:,:,dindex2d), &
2994 &
ocean(rg)%ad_vbar(:,:,1), &
2995 &
ocean(rg)%ad_vbar(:,:,2))
2997 &
ocean(rg)%ad_vbar(:,:,rindex2d))
3007 ELSE IF (vtype.eq.
r3dvar)
THEN
3034 & lbid, ubid, lbjd, ubjd, 1,
n(dg), &
3035 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
3044 &
ocean(dg)%ad_t(:,:,:,dindex3d, &
3046 &
ocean(rg)%ad_t(:,:,:,rindex3d, &
3049 & __line__, myfile))
RETURN
3076 & lbid, ubid, lbjd, ubjd, 1,
n(dg), &
3077 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
3083 &
grid(dg)%umask_full, &
3084 &
grid(rg)%umask_full, &
3086 &
ocean(dg)%ad_u(:,:,:,dindex3d), &
3087 &
ocean(rg)%ad_u(:,:,:,rindex3d))
3111 & lbid, ubid, lbjd, ubjd, 1,
n(dg), &
3112 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
3118 &
grid(dg)%vmask_full, &
3119 &
grid(rg)%vmask_full, &
3121 &
ocean(dg)%ad_v(:,:,:,dindex3d), &
3122 &
ocean(rg)%ad_v(:,:,:,rindex3d))
3134 & LBi, UBi, LBj, UBj)
3183 logical,
intent(in) :: lputfsur
3184 integer,
intent(in) :: ng, dg, cr, model, tile
3185 integer,
intent(in) :: lbi, ubi, lbj, ubj
3189 logical :: uboundary, vboundary
3192 integer :: ilb, iub, jlb, jub, nptssn, nptswe, my_tile
3194 integer :: nsub, i, irec, j, m, tnew, told, ii
3198 real(r8),
parameter :: spv = 0.0_r8
3200 real(dp) :: wnew, wold, secscale, fac
3201 real(r8) :: cff, cff1, my_value
3202 real(r8) :: ad_cff, adfac, adfac1, adfac2, ad_my_value
3204 character (len=*),
parameter :: myfile = &
3205 & __FILE__//
", ad_put_refine2d"
3207# include "set_bounds.h"
3226 IF (.not.lputfsur)
THEN
3228 ilb=
bounds(ng)%LBi(my_tile)
3229 iub=
bounds(ng)%UBi(my_tile)
3230 jlb=
bounds(ng)%LBj(my_tile)
3231 jub=
bounds(ng)%UBj(my_tile)
3235# ifdef NESTING_DEBUG
3262 fac=1.0_dp/(wold+wnew)
3267 IF (
domain(ng)%SouthWest_Test(tile))
THEN
3269 WRITE (
stdout,10) cr, dg, ng, &
3270 &
iic(dg), told, tnew, &
3271 &
iic(ng), wold, wnew, &
3312 & lbi, ubi, lbj, ubj, &
3318 &
ocean(ng)%ad_zeta(:,:,1), &
3319 &
ocean(ng)%ad_zeta(:,:,2), &
3320 &
ocean(ng)%ad_zeta(:,:,3))
3326# ifdef NESTING_DEBUG
3360 & lbi, ubi, lbj, ubj, &
3363 &
ocean(ng)%ad_vbar(:,:,1), &
3364 &
ocean(ng)%ad_vbar(:,:,2), &
3365 &
ocean(ng)%ad_vbar(:,:,3))
3376 & lbi, ubi, lbj, ubj, &
3379 &
ocean(ng)%ad_ubar(:,:,1), &
3380 &
ocean(ng)%ad_ubar(:,:,2), &
3381 &
ocean(ng)%ad_ubar(:,:,3))
3386 free_surface :
IF (lputfsur)
THEN
3390 IF (((istrt.le.i).and.(i.le.iendt)).and. &
3391 & ((jstrt.le.j).and.(j.le.jendt)))
THEN
3395 ad_my_value=ad_my_value+ &
3397 coupling(ng)%ad_Zt_avg1(i,j)=0.0_r8
3401 ad_my_value=ad_my_value+ &
3402 &
ocean(ng)%ad_zeta(i,j,1)
3403 ocean(ng)%ad_zeta(i,j,1)=0.0_r8
3406 ad_my_value=ad_my_value+ &
3407 &
ocean(ng)%ad_zeta(i,j,2)
3408 ocean(ng)%ad_zeta(i,j,2)=0.0_r8
3411 ad_my_value=ad_my_value+ &
3412 &
ocean(ng)%ad_zeta(i,j,3)
3413 ocean(ng)%ad_zeta(i,j,3)=0.0_r8
3415 IF (my_value.le.(
dcrit(ng)-
grid(ng)%h(i,j)))
THEN
3418 grid(ng)%ad_h(i,j)=
grid(ng)%ad_h(i,j)-ad_my_value
3425 ad_my_value=ad_my_value*
grid(ng)%rmask(i,j)
3447 adfac1=wold*
rcontact(cr)%Lweight(ii,m)*ad_my_value
3448 adfac2=wnew*
rcontact(cr)%Lweight(ii,m)*ad_my_value
3449 refined(cr)%ad_zeta(ii,m,told)= &
3450 &
refined(cr)%ad_zeta(ii,m,told)+adfac1
3451 refined(cr)%ad_zeta(ii,m,tnew)= &
3452 &
refined(cr)%ad_zeta(ii,m,tnew)+adfac2
3480 IF (
domain(ng)%Northern_Edge(tile))
THEN
3485 cff=0.5_r8*
grid(ng)%om_v(i,jend+1)* &
3486 & (
grid(ng)%h(i,jend+1)+ &
3488 &
grid(ng)%h(i,jend )+ &
3491# ifdef TIME_INTERP_FLUX
3492 my_value=cff1*(wold*
refined(cr)%DV_avg2(1,m,told)+ &
3493 & wnew*
refined(cr)%DV_avg2(1,m,tnew))/cff
3495 my_value=cff1*
refined(cr)%DV_avg2(1,m,tnew)/cff
3498 my_value=my_value*
grid(ng)%vmask(i,jend+1)
3501 my_value=my_value*
grid(ng)%vmask_wet(i,jend+1)
3505 ad_my_value=ad_my_value+ &
3508# ifdef NESTING_DEBUG
3514 ad_my_value=ad_my_value+ &
3521 ad_my_value=ad_my_value*
grid(ng)%vmask_wet(i,jend+1)
3526 ad_my_value=ad_my_value*
grid(ng)%vmask(i,jend+1)
3528# ifdef TIME_INTERP_FLUX
3529 my_value=cff1*(wold*
refined(cr)%DV_avg2(1,m,told)+ &
3530 & wnew*
refined(cr)%DV_avg2(1,m,tnew))/cff
3536 adfac=ad_my_value/cff
3538 refined(cr)%ad_DV_avg2(1,m,told)= &
3539 &
refined(cr)%ad_DV_avg2(1,m,told)+wold*adfac1
3540 refined(cr)%ad_DV_avg2(1,m,tnew)= &
3541 &
refined(cr)%ad_DV_avg2(1,m,tnew)+wnew*adfac1
3546 my_value=cff1*
refined(cr)%DV_avg2(1,m,tnew)/cff
3550 adfac=ad_my_value/cff
3551 refined(cr)%ad_DV_avg2(1,m,tnew)= &
3552 &
refined(cr)%ad_DV_avg2(1,m,tnew)+cff1*adfac
3563 adfac=0.5_r8*
grid(ng)%om_v(i,jend+1)*ad_cff
3564 grid(ng)%ad_h(i,jend )=
grid(ng)%ad_h(i,jend )+adfac
3565 grid(ng)%ad_h(i,jend+1)=
grid(ng)%ad_h(i,jend+1)+adfac
3569 &
ocean(ng)%ad_zeta(i,jend+1,
indx1(ng))+adfac
3576 IF (
domain(ng)%Southern_Edge(tile))
THEN
3581 cff=0.5_r8*
grid(ng)%om_v(i,jstr)* &
3582 & (
grid(ng)%h(i,jstr-1)+ &
3584 &
grid(ng)%h(i,jstr )+ &
3586# ifdef TIME_INTERP_FLUX
3587 my_value=cff1*(wold*
refined(cr)%DV_avg2(1,m,told)+ &
3588 & wnew*
refined(cr)%DV_avg2(1,m,tnew))/cff
3590 my_value=cff1*
refined(cr)%DV_avg2(1,m,tnew)/cff
3593 my_value=my_value*
grid(ng)%vmask(i,jstr)
3596 my_value=my_value*
grid(ng)%vmask_wet(i,jstr)
3600 ad_my_value=ad_my_value+ &
3603# ifdef NESTING_DEBUG
3607 ad_my_value=ad_my_value+ &
3616 ad_my_value=ad_my_value*
grid(ng)%vmask_wet(i,jstr)
3621 ad_my_value=ad_my_value*
grid(ng)%vmask(i,jstr)
3623# ifdef TIME_INTERP_FLUX
3624 my_value=cff1*(wold*
refined(cr)%DV_avg2(1,m,told)+ &
3625 & wnew*
refined(cr)%DV_avg2(1,m,tnew))/cff
3631 adfac=ad_my_value/cff
3633 refined(cr)%ad_DV_avg2(1,m,told)= &
3634 &
refined(cr)%ad_DV_avg2(1,m,told)+wold*adfac1
3635 refined(cr)%tl_DV_avg2(1,m,tnew)= &
3636 &
refined(cr)%ad_DV_avg2(1,m,tnew)+wnew*adfac1
3641 my_value=cff1*
refined(cr)%DV_avg2(1,m,tnew)/cff
3645 adfac=ad_my_value/cff
3646 refined(cr)%ad_DV_avg2(1,m,tnew)= &
3647 &
refined(cr)%ad_DV_avg2(1,m,tnew)+cff1*adfac
3658 adfac=0.5_r8*
grid(ng)%om_v(i,jstr)*ad_cff
3659 grid(ng)%ad_h(i,jstr-1)=
grid(ng)%ad_h(i,jstr-1)+adfac
3660 grid(ng)%ad_h(i,jstr )=
grid(ng)%ad_h(i,jstr )+adfac
3662 &
ocean(ng)%ad_zeta(i,jstr-1,
indx1(ng))+adfac
3671 IF (
domain(ng)%Eastern_Edge(tile))
THEN
3676 cff=0.5_r8*
grid(ng)%on_u(iend+1,j)* &
3677 & (
grid(ng)%h(iend+1,j)+ &
3679 &
grid(ng)%h(iend ,j)+ &
3682# ifdef TIME_INTERP_FLUX
3683 my_value=cff1*(wold*
refined(cr)%DU_avg2(1,m,told)+ &
3684 & wnew*
refined(cr)%DU_avg2(1,m,tnew))/cff
3686 my_value=cff1*
refined(cr)%DU_avg2(1,m,tnew)/cff
3689 my_value=my_value*
grid(ng)%umask(iend+1,j)
3692 my_value=my_value*
grid(ng)%umask_wet(iend+1,j)
3696 ad_my_value=ad_my_value+ &
3699# ifdef NESTING_DEBUG
3703 ad_my_value=ad_my_value+ &
3712 ad_my_value=ad_my_value*
grid(ng)%umask_wet(iend+1,j)
3717 ad_my_value=ad_my_value*
grid(ng)%umask(iend+1,j)
3719# ifdef TIME_INTERP_FLUX
3720 my_value=cff1*(wold*
refined(cr)%DU_avg2(1,m,told)+ &
3721 & wnew*
refined(cr)%DU_avg2(1,m,tnew))/cff
3727 adfac=ad_my_value/cff
3729 refined(cr)%ad_DU_avg2(1,m,told)= &
3730 &
refined(cr)%ad_DU_avg2(1,m,told)+wold*adfac1
3731 refined(cr)%ad_DU_avg2(1,m,tnew)= &
3732 &
refined(cr)%ad_DU_avg2(1,m,tnew)+wnew*adfac1
3737 my_value=cff1*
refined(cr)%DU_avg2(1,m,tnew)/cff
3741 adfac=ad_my_value/cff
3742 refined(cr)%ad_DU_avg2(1,m,tnew)= &
3743 &
refined(cr)%ad_DU_avg2(1,m,tnew)+cff1*adfac
3754 adfac=0.5_r8*
grid(ng)%on_u(iend+1,j)*ad_cff
3755 grid(ng)%ad_h(iend ,j)=
grid(ng)%ad_h(iend ,j)+adfac
3756 grid(ng)%ad_h(iend+1,j)=
grid(ng)%ad_h(iend+1,j)+adfac
3760 &
ocean(ng)%ad_zeta(iend+1,j,
indx1(ng))+adfac
3767 IF (
domain(ng)%Western_Edge(tile))
THEN
3772 cff=0.5_r8*
grid(ng)%on_u(istr,j)* &
3773 (
grid(ng)%h(istr-1,j)+ &
3775 &
grid(ng)%h(istr ,j)+ &
3778# ifdef TIME_INTERP_FLUX
3779 my_value=cff1*(wold*
refined(cr)%DU_avg2(1,m,told)+ &
3780 & wnew*
refined(cr)%DU_avg2(1,m,tnew))/cff
3782 my_value=cff1*
refined(cr)%DU_avg2(1,m,tnew)/cff
3785 my_value=my_value*
grid(ng)%umask(istr,j)
3788 my_value=my_value*
grid(ng)%umask_wet(istr,j)
3792 ad_my_value=ad_my_value+ &
3795# ifdef NESTING_DEBUG
3799 ad_my_value=ad_my_value+ &
3808 ad_my_value=ad_my_value*
grid(ng)%umask_wet(istr,j)
3813 ad_my_value=ad_my_value*
grid(ng)%umask(istr,j)
3815# ifdef TIME_INTERP_FLUX
3816 my_value=cff1*(wold*
refined(cr)%DU_avg2(1,m,told)+ &
3817 & wnew*
refined(cr)%DU_avg2(1,m,tnew))/cff
3823 adfac=ad_my_value/cff
3825 refined(cr)%ad_DU_avg2(1,m,told)= &
3826 &
refined(cr)%ad_DU_avg2(1,m,told)+wold*adfac1
3827 refined(cr)%ad_DU_avg2(1,m,tnew)= &
3828 &
refined(cr)%ad_DU_avg2(1,m,tnew)+wnew*adfac1
3829 ad_cff=ad_cff-my_value*adfac
3832 my_value=cff1*
refined(cr)%DU_avg2(1,m,tnew)/cff
3836 adfac=ad_my_value/cff
3837 refined(cr)%ad_DU_avg2(1,m,tnew)= &
3838 &
refined(cr)%ad_DU_avg2(1,m,tnew)+cff1*adfac
3849 adfac=0.5_r8*
grid(ng)%on_u(istr,j)*ad_cff
3850 grid(ng)%ad_h(istr-1,j)=
grid(ng)%ad_h(istr-1,j)+adfac
3851 grid(ng)%ad_h(istr ,j)=
grid(ng)%ad_h(istr ,j)+adfac
3853 &
ocean(ng)%ad_zeta(istr-1,j,
indx1(ng))+adfac
3873 IF (((istrt.le.i).and.(i.le.iendt)).and. &
3874 & ((jstrp.le.j).and.(j.le.jendt)))
THEN
3879 IF(.not.(vboundary.and.(irec.eq.
indx1(ng))))
THEN
3882 ad_my_value=ad_my_value+ &
3883 &
ocean(ng)%ad_vbar(i,j,irec)
3884 ocean(ng)%ad_vbar(i,j,irec)=0.0_r8
3891 ad_my_value=ad_my_value+ &
3892 &
ocean(ng)%ad_vbar(i,j,irec)
3893 ocean(ng)%ad_vbar(i,j,irec)=0.0_r8
3899 ad_my_value=ad_my_value*
grid(ng)%vmask_wet(i,j)
3904 ad_my_value=ad_my_value*
grid(ng)%vmask(i,j)
3926 adfac1=wold*
vcontact(cr)%Lweight(ii,m)*ad_my_value
3927 adfac2=wnew*
vcontact(cr)%Lweight(ii,m)*ad_my_value
3928 refined(cr)%ad_vbar(ii,m,told)= &
3929 &
refined(cr)%ad_vbar(ii,m,told)+adfac1
3930 refined(cr)%ad_vbar(ii,m,tnew)= &
3931 &
refined(cr)%ad_vbar(ii,m,tnew)+adfac2
3949 IF (((istrp.le.i).and.(i.le.iendt)).and. &
3950 & ((jstrt.le.j).and.(j.le.jendt)))
THEN
3955 IF(.not.(uboundary.and.(irec.eq.
indx1(ng))))
THEN
3958 ad_my_value=ad_my_value+ &
3959 &
ocean(ng)%ad_ubar(i,j,irec)
3960 ocean(ng)%ad_ubar(i,j,irec)=0.0_r8
3967 ad_my_value=ad_my_value+ &
3968 &
ocean(ng)%ad_ubar(i,j,irec)
3969 ocean(ng)%ad_ubar(i,j,irec)=0.0_r8
3975 ad_my_value=ad_my_value*
grid(ng)%umask_wet(i,j)
3980 ad_my_value=ad_my_value*
grid(ng)%umask(i,j)
4002 adfac1=wold*
ucontact(cr)%Lweight(ii,m)*ad_my_value
4003 adfac2=wnew*
ucontact(cr)%Lweight(ii,m)*ad_my_value
4004 refined(cr)%ad_ubar(ii,m,told)= &
4005 &
refined(cr)%ad_ubar(ii,m,told)+adfac1
4006 refined(cr)%ad_ubar(ii,m,tnew)= &
4007 &
refined(cr)%ad_ubar(ii,m,tnew)+adfac2
4015 10
FORMAT (/,
'AD_PUT_REFINE2D - unbounded contact points temporal: ',&
4016 &
' interpolation:', &
4017 & /,2x,
'cr = ',i2.2, &
4018 & 8x,
'dg = ',i2.2, &
4019 & 8x,
'ng = ',i2.2, &
4020 & /,2x,
'iic(dg) = ',i7.7, &
4021 & 3x,
'told = ',i1, &
4022 & 9x,
'tnew = ',i1, &
4023 & /,2x,
'iic(ng) = ',i7.7, &
4024 & 3x,
'Wold = ',f8.5, &
4025 & 2x,
'Wnew = ',f8.5, &
4026 & /,2x,
'time(ng) = ',i10, &
4027 & 3x,
'time(told) = ',i10, &
4028 & 3x,
'time(tnew) = ',i10)
4036 & LBi, UBi, LBj, UBj)
4079 integer,
intent(in) :: ng, dg, cr, model, tile
4080 integer,
intent(in) :: lbi, ubi, lbj, ubj
4084# ifdef NESTING_DEBUG
4085 logical,
save :: first = .true.
4087 integer :: i, itrc, j, k, m, tnew, told, ii
4089 real(dp) :: wnew, wold, secscale, fac
4090 real(r8) :: my_value, ad_my_value, adfac1, adfac2
4092 character (len=*),
parameter :: myfile = &
4093 & __FILE__//
", ad_put_refine3d"
4095# include "set_bounds.h"
4121 fac=1.0_dp/(wold+wnew)
4126 IF (
domain(ng)%SouthWest_Test(tile))
THEN
4128 WRITE (
stdout,10) cr, dg, ng, &
4129 &
iic(dg), told, tnew, &
4130 &
iic(ng), wold, wnew, &
4140# ifdef NESTING_DEBUG
4145 IF (
domain(ng)%SouthWest_Test(tile))
THEN
4151 WRITE (202,30) cr, dg, ng,
iic(dg),
iic(ng), told, tnew, &
4157 20
FORMAT (3x,
'cr',3x,
'dg',3x,
'ng',4x,
'iic',4x,
'iic',2x,
'told', &
4158 & 2x,
'tnew',7x,
'time',7x,
'time',7x,
'time',7x,
'time', &
4159 & 7x,
'Wold',7x,
'Wnew',/,18x,
'(dg)',3x,
'(ng)', &
4160 & 19x,
'(dg)',7x,
'told',7x,
'(ng)',7x,
'tnew',/)
4161 30
FORMAT (3i5,2i7,2i6,4(2x,i9),2f11.4)
4183 & lbi, ubi, lbj, ubj, 1,
n(ng), &
4186 &
ocean(ng)%ad_u(:,:,:,1), &
4187 &
ocean(ng)%ad_u(:,:,:,2), &
4188 &
ocean(ng)%ad_v(:,:,:,1), &
4189 &
ocean(ng)%ad_v(:,:,:,2))
4200 & lbi, ubi, lbj, ubj, 1,
n(ng), 1,
nt(ng), &
4203 &
ocean(ng)%ad_t(:,:,:,1,:), &
4204 &
ocean(ng)%ad_t(:,:,:,2,:), &
4205 &
ocean(ng)%ad_t(:,:,:,3,:))
4213 IF (((istrp.le.i).and.(i.le.iendt)).and. &
4214 & ((jstrt.le.j).and.(j.le.jendt)))
THEN
4218 ad_my_value=ad_my_value+
ocean(ng)%ad_u(i,j,k,1)
4219 ocean(ng)%ad_u(i,j,k,1)=0.0_r8
4222 ad_my_value=ad_my_value+
ocean(ng)%ad_u(i,j,k,2)
4223 ocean(ng)%ad_u(i,j,k,2)=0.0_r8
4227 ad_my_value=ad_my_value*
grid(ng)%umask(i,j)
4248 adfac1=wold*
ucontact(cr)%Lweight(ii,m)*ad_my_value
4249 adfac2=wnew*
ucontact(cr)%Lweight(ii,m)*ad_my_value
4250 refined(cr)%ad_u(ii,k,m,told)= &
4251 &
refined(cr)%ad_u(ii,k,m,told)+adfac1
4252 refined(cr)%ad_u(ii,k,m,tnew)= &
4253 &
refined(cr)%ad_u(ii,k,m,tnew)+adfac2
4265 IF (((istrt.le.i).and.(i.le.iendt)).and. &
4266 & ((jstrp.le.j).and.(j.le.jendt)))
THEN
4270 ad_my_value=ad_my_value+
ocean(ng)%ad_v(i,j,k,1)
4271 ocean(ng)%ad_v(i,j,k,1)=0.0_r8
4274 ad_my_value=ad_my_value+
ocean(ng)%ad_v(i,j,k,2)
4275 ocean(ng)%ad_v(i,j,k,2)=0.0_r8
4279 ad_my_value=ad_my_value*
grid(ng)%vmask(i,j)
4301 adfac1=wold*
vcontact(cr)%Lweight(ii,m)*ad_my_value
4302 adfac2=wnew*
vcontact(cr)%Lweight(ii,m)*ad_my_value
4303 refined(cr)%ad_v(ii,k,m,told)= &
4304 &
refined(cr)%ad_v(ii,k,m,told)+adfac1
4305 refined(cr)%ad_v(ii,k,m,tnew)= &
4306 &
refined(cr)%ad_v(ii,k,m,tnew)+adfac2
4318 IF (((istrt.le.i).and.(i.le.iendt)).and. &
4319 & ((jstrt.le.j).and.(j.le.jendt)))
THEN
4324 ad_my_value=ad_my_value+
ocean(ng)%ad_t(i,j,k,1,itrc)
4325 ocean(ng)%ad_t(i,j,k,1,itrc)=0.0_r8
4328 ad_my_value=ad_my_value+
ocean(ng)%ad_t(i,j,k,2,itrc)
4329 ocean(ng)%ad_t(i,j,k,2,itrc)=0.0_r8
4332 ad_my_value=ad_my_value+
ocean(ng)%ad_t(i,j,k,3,itrc)
4333 ocean(ng)%ad_t(i,j,k,3,itrc)=0.0_r8
4336 ad_my_value=ad_my_value*
grid(ng)%rmask(i,j)
4358 adfac1=wold*
rcontact(cr)%Lweight(ii,m)*ad_my_value
4359 adfac2=wnew*
rcontact(cr)%Lweight(ii,m)*ad_my_value
4360 refined(cr)%ad_t(ii,k,m,told,itrc)= &
4361 &
refined(cr)%ad_t(ii,k,m,told,itrc)+adfac1
4362 refined(cr)%ad_t(ii,k,m,tnew,itrc)= &
4363 &
refined(cr)%ad_t(ii,k,m,tnew,itrc)+adfac2
4371 10
FORMAT (/,
'AD_PUT_REFINE3D - unbounded contact points temporal: ',&
4372 &
' interpolation:', &
4373 & /,2x,
'cr = ',i2.2, &
4374 & 8x,
'dg = ',i2.2, &
4375 & 8x,
'ng = ',i2.2, &
4376 & /,2x,
'iic(dg) = ',i7.7, &
4377 & 3x,
'told = ',i1, &
4378 & 9x,
'tnew = ',i1, &
4379 & /,2x,
'iic(ng) = ',i7.7, &
4380 & 3x,
'Wold = ',f8.5, &
4381 & 2x,
'Wnew = ',f8.5, &
4382 & /,2x,
'time(ng) = ',i10, &
4383 & 3x,
'time(told) = ',i10, &
4384 & 3x,
'time(tnew) = ',i10)
4425 integer,
intent(in) :: ng, model, tile
4429 integer :: cr, dg, rg, i, j, k, m, ii
4430 integer :: idg, jdg, kdg, imind, imaxd, jmind, jmaxd
4431 integer :: irg, jrg, krg, iminr, imaxr, jminr, jmaxr
4432 integer :: idgm1, idgp1, jdgm1, jdgp1
4435 integer :: nkpts, nwpts, nzpts
4437 integer,
parameter :: ispv = 0
4439 real(r8),
parameter :: spv = 0.0_r8
4441 real(r8) :: zbot, zr, ztop, dz, r1, r2
4442 real(r8) :: ad_zbot, ad_zr, ad_ztop, ad_dz, ad_r1, ad_r2
4443 real(r8) :: adfac, adfac1
4445 real(r8),
allocatable :: zd(:,:,:)
4446 real(r8),
allocatable :: ad_zd(:,:,:)
4448 character (len=*),
parameter :: myfile = &
4449 & __FILE__//
", ad_z_weights"
4514 imind=
bounds(dg) % IstrT(tile)
4515 imaxd=
bounds(dg) % IendT(tile)
4516 jmind=
bounds(dg) % JstrP(tile)
4517 jmaxd=
bounds(dg) % JendT(tile)
4519 iminr=
bounds(rg) % IstrT(tile)
4520 imaxr=
bounds(rg) % IendT(tile)
4521 jminr=
bounds(rg) % JstrP(tile)
4522 jmaxr=
bounds(rg) % JendT(tile)
4534 vcontact(cr)%Kdg(1:
n(rg),1:npoints)=ispv
4535 vcontact(cr)%Vweight(1:2,1:
n(rg),1:npoints)=spv
4538 v_contact :
IF (.not.
vcontact(cr)%interpolate.and. &
4544 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
4545 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
4552 vcontact(cr)%ad_Vweight(1,krg,m)=0.0_r8
4555 vcontact(cr)%ad_Vweight(2,krg,m)=0.0_r8
4568 IF (.not.
allocated(zd))
THEN
4569 allocate (zd(4,
n(dg),npoints))
4572 IF (.not.
allocated(ad_zd))
THEN
4573 allocate (ad_zd(4,
n(dg),npoints))
4583 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
4585 jdgm1=max(jdg-1,
bounds(dg)%LBj(-1))
4586 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
4587 IF (((imind.le.idg).and.(idg.le.imaxd)).and. &
4588 & ((jmind.le.jdg).and.(jdg.le.jmaxd)))
THEN
4589 zd(1,kdg,m)=0.5_r8*(
grid(dg)%z_r(idg ,jdgm1,kdg)+ &
4590 &
grid(dg)%z_r(idg ,jdg ,kdg))
4591 zd(2,kdg,m)=0.5_r8*(
grid(dg)%z_r(idgp1,jdgm1,kdg)+ &
4592 &
grid(dg)%z_r(idgp1,jdg ,kdg))
4593 zd(3,kdg,m)=0.5_r8*(
grid(dg)%z_r(idgp1,jdg ,kdg)+ &
4594 &
grid(dg)%z_r(idgp1,jdgp1,kdg))
4595 zd(4,kdg,m)=0.5_r8*(
grid(dg)%z_r(idg ,jdg ,kdg)+ &
4596 &
grid(dg)%z_r(idg ,jdgp1,kdg))
4618 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
4619 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
4620 ztop=
vcontact(cr)%Lweight(1,m)*zd(1,
n(dg),m)+ &
4621 &
vcontact(cr)%Lweight(2,m)*zd(2,
n(dg),m)+ &
4622 &
vcontact(cr)%Lweight(3,m)*zd(3,
n(dg),m)+ &
4623 &
vcontact(cr)%Lweight(4,m)*zd(4,
n(dg),m)
4624 zbot=
vcontact(cr)%Lweight(1,m)*zd(1,1 ,m)+ &
4625 &
vcontact(cr)%Lweight(2,m)*zd(2,1 ,m)+ &
4626 &
vcontact(cr)%Lweight(3,m)*zd(3,1 ,m)+ &
4627 &
vcontact(cr)%Lweight(4,m)*zd(4,1 ,m)
4628 zr=0.5_r8*(
grid(rg)%z_r(irg,jrg ,krg)+ &
4629 &
grid(rg)%z_r(irg,jrg-1,krg))
4630 IF (zr.ge.ztop)
THEN
4637 vcontact(cr)%ad_Vweight(1,krg,m)=0.0_r8
4640 vcontact(cr)%ad_Vweight(2,krg,m)=0.0_r8
4641 ELSE IF (zbot.ge.zr)
THEN
4648 vcontact(cr)%ad_Vweight(1,krg,m)=0.0_r8
4651 vcontact(cr)%ad_Vweight(2,krg,m)=0.0_r8
4654 ztop=
vcontact(cr)%Lweight(1,m)*zd(1,kdg ,m)+ &
4655 &
vcontact(cr)%Lweight(2,m)*zd(2,kdg ,m)+ &
4656 &
vcontact(cr)%Lweight(3,m)*zd(3,kdg ,m)+ &
4657 &
vcontact(cr)%Lweight(4,m)*zd(4,kdg ,m)
4658 zbot=
vcontact(cr)%Lweight(1,m)*zd(1,kdg-1,m)+ &
4659 &
vcontact(cr)%Lweight(2,m)*zd(2,kdg-1,m)+ &
4660 &
vcontact(cr)%Lweight(3,m)*zd(3,kdg-1,m)+ &
4661 &
vcontact(cr)%Lweight(4,m)*zd(4,kdg-1,m)
4662 IF ((ztop.gt.zr).and.(zr.ge.zbot))
THEN
4672 ad_r1=ad_r1+
vcontact(cr)%ad_Vweight(1,krg,m)
4673 vcontact(cr)%ad_Vweight(1,krg,m)=0.0_r8
4676 ad_r2=ad_r2+
vcontact(cr)%ad_Vweight(2,krg,m)
4677 vcontact(cr)%ad_Vweight(2,krg,m)=0.0_r8
4686 ad_zbot=ad_zbot-adfac
4687 ad_dz=ad_dz-r2*adfac
4692 ad_ztop=ad_ztop+ad_dz
4693 ad_zbot=ad_zbot-ad_dz
4706 adfac=
vcontact(cr)%Lweight(ii,m)*ad_zbot
4707 ad_zd(ii,kdg-1,m)=ad_zd(ii,kdg-1,m)+adfac
4720 adfac=
vcontact(cr)%Lweight(ii,m)*ad_ztop
4721 ad_zd(ii,kdg ,m)=ad_zd(ii,kdg ,m)+adfac
4730 grid(rg)%ad_z_r(irg,jrg ,krg)= &
4731 &
grid(rg)%ad_z_r(irg,jrg ,krg)+0.5_r8*ad_zr
4732 grid(rg)%ad_z_r(irg,jrg-1,krg)= &
4733 &
grid(rg)%ad_z_r(irg,jrg-1,krg)+0.5_r8*ad_zr
4741 adfac=
vcontact(cr)%Lweight(ii,m)*ad_zbot
4742 ad_zd(ii,1 ,m)=ad_zd(ii,1 ,m)+adfac
4751 adfac=
vcontact(cr)%Lweight(ii,m)*ad_ztop
4752 ad_zd(ii,
n(dg),m)=ad_zd(ii,
n(dg),m)+adfac
4776 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
4778 jdgm1=max(jdg-1,
bounds(dg)%LBj(-1))
4779 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
4780 IF (((imind.le.idg).and.(idg.le.imaxd)).and. &
4781 & ((jmind.le.jdg).and.(jdg.le.jmaxd)))
THEN
4782 adfac=0.5_r8*ad_zd(1,kdg,m)
4787 grid(dg)%ad_z_r(idg ,jdgm1,kdg)= &
4788 &
grid(dg)%ad_z_r(idg ,jdgm1,kdg)+adfac
4789 grid(dg)%ad_z_r(idg ,jdg ,kdg)= &
4790 &
grid(dg)%ad_z_r(idg ,jdg ,kdg)+adfac
4796 adfac=0.5_r8*ad_zd(2,kdg,m)
4797 grid(dg)%ad_z_r(idgp1,jdgm1,kdg)= &
4798 &
grid(dg)%ad_z_r(idgp1,jdgm1,kdg)+adfac
4799 grid(dg)%ad_z_r(idgp1,jdg ,kdg)= &
4800 &
grid(dg)%ad_z_r(idgp1,jdg ,kdg)+adfac
4801 ad_zd(2,kdg,m)=0.0_r8
4806 adfac=0.5_r8*ad_zd(3,kdg,m)
4807 grid(dg)%ad_z_r(idgp1,jdg ,kdg)= &
4808 &
grid(dg)%ad_z_r(idgp1,jdg ,kdg)+adfac
4809 grid(dg)%ad_z_r(idgp1,jdgp1,kdg)= &
4810 &
grid(dg)%ad_z_r(idgp1,jdgp1,kdg)+adfac
4811 ad_zd(3,kdg,m)=0.0_r8
4816 adfac=0.5_r8*ad_zd(4,kdg,m)
4817 grid(dg)%ad_z_r(idg ,jdg ,kdg)= &
4818 &
grid(dg)%ad_z_r(idg ,jdg ,kdg)+adfac
4819 grid(dg)%ad_z_r(idg ,jdgp1,kdg)= &
4820 &
grid(dg)%ad_z_r(idg ,jdgp1,kdg)+adfac
4821 ad_zd(4,kdg,m)=0.0_r8
4835 vcontact(cr)%ad_Vweight(1:2,1:
n(rg),1:npoints)=0.0_r8
4840 IF (
allocated(zd))
THEN
4843 IF (
allocated(ad_zd))
THEN
4871 imind=
bounds(dg) % IstrP(tile)
4872 imaxd=
bounds(dg) % IendT(tile)
4873 jmind=
bounds(dg) % JstrT(tile)
4874 jmaxd=
bounds(dg) % JendT(tile)
4876 iminr=
bounds(rg) % IstrP(tile)
4877 imaxr=
bounds(rg) % IendT(tile)
4878 jminr=
bounds(rg) % JstrT(tile)
4879 jmaxr=
bounds(rg) % JendT(tile)
4891 ucontact(cr)%Kdg(1:
n(rg),1:npoints)=ispv
4892 ucontact(cr)%Vweight(1:2,1:
n(rg),1:npoints)=spv
4897 u_contact :
IF (.not.
ucontact(cr)%interpolate.and. &
4903 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
4904 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
4911 ucontact(cr)%ad_Vweight(1,krg,m)=0.0_r8
4914 ucontact(cr)%ad_Vweight(2,krg,m)=0.0_r8
4926 IF (.not.
allocated(zd))
THEN
4927 allocate (zd(4,
n(dg),npoints))
4930 IF (.not.
allocated(ad_zd))
THEN
4931 allocate (ad_zd(4,
n(dg),npoints))
4945 idgm1=max(idg-1,
bounds(dg)%LBi(-1))
4946 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
4948 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
4949 IF (((imind.le.idg).and.(idg.le.imaxd)).and. &
4950 & ((jmind.le.jdg).and.(jdg.le.jmaxd)))
THEN
4951 zd(1,kdg,m)=0.5_r8*(
grid(dg)%z_r(idgm1,jdg ,kdg)+ &
4952 &
grid(dg)%z_r(idg ,jdg ,kdg))
4953 zd(2,kdg,m)=0.5_r8*(
grid(dg)%z_r(idg ,jdg ,kdg)+ &
4954 &
grid(dg)%z_r(idgp1,jdg ,kdg))
4955 zd(3,kdg,m)=0.5_r8*(
grid(dg)%z_r(idg ,jdgp1,kdg)+ &
4956 &
grid(dg)%z_r(idgp1,jdgp1,kdg))
4957 zd(4,kdg,m)=0.5_r8*(
grid(dg)%z_r(idgm1,jdgp1,kdg)+ &
4958 &
grid(dg)%z_r(idg ,jdgp1,kdg))
4979 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
4980 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
4981 ztop=
ucontact(cr)%Lweight(1,m)*zd(1,
n(dg),m)+ &
4982 &
ucontact(cr)%Lweight(2,m)*zd(2,
n(dg),m)+ &
4983 &
ucontact(cr)%Lweight(3,m)*zd(3,
n(dg),m)+ &
4984 &
ucontact(cr)%Lweight(4,m)*zd(4,
n(dg),m)
4985 zbot=
ucontact(cr)%Lweight(1,m)*zd(1,1 ,m)+ &
4986 &
ucontact(cr)%Lweight(2,m)*zd(2,1 ,m)+ &
4987 &
ucontact(cr)%Lweight(3,m)*zd(3,1 ,m)+ &
4988 &
ucontact(cr)%Lweight(4,m)*zd(4,1 ,m)
4989 zr=0.5_r8*(
grid(rg)%z_r(irg ,jrg,krg)+ &
4990 &
grid(rg)%z_r(irg-1,jrg,krg))
4991 IF (zr.ge.ztop)
THEN
4998 ucontact(cr)%ad_Vweight(1,krg,m)=0.0_r8
5001 ucontact(cr)%ad_Vweight(2,krg,m)=0.0_r8
5002 ELSE IF (zbot.ge.zr)
THEN
5009 ucontact(cr)%ad_Vweight(1,krg,m)=0.0_r8
5012 ucontact(cr)%ad_Vweight(2,krg,m)=0.0_r8
5015 ztop=
ucontact(cr)%Lweight(1,m)*zd(1,kdg ,m)+ &
5016 &
ucontact(cr)%Lweight(2,m)*zd(2,kdg ,m)+ &
5017 &
ucontact(cr)%Lweight(3,m)*zd(3,kdg ,m)+ &
5018 &
ucontact(cr)%Lweight(4,m)*zd(4,kdg ,m)
5019 zbot=
ucontact(cr)%Lweight(1,m)*zd(1,kdg-1,m)+ &
5020 &
ucontact(cr)%Lweight(2,m)*zd(2,kdg-1,m)+ &
5021 &
ucontact(cr)%Lweight(3,m)*zd(3,kdg-1,m)+ &
5022 &
ucontact(cr)%Lweight(4,m)*zd(4,kdg-1,m)
5023 IF ((ztop.gt.zr).and.(zr.ge.zbot))
THEN
5033 ad_r1=ad_r1+
ucontact(cr)%ad_Vweight(1,krg,m)
5034 ucontact(cr)%ad_Vweight(1,krg,m)=0.0_r8
5037 ad_r2=ad_r2+
ucontact(cr)%ad_Vweight(2,krg,m)
5038 ucontact(cr)%ad_Vweight(2,krg,m)=0.0_r8
5047 ad_zbot=ad_zbot-adfac
5048 ad_dz=ad_dz-r2*adfac
5052 ad_ztop=ad_ztop+ad_dz
5053 ad_zbot=ad_zbot-ad_dz
5066 adfac=
ucontact(cr)%Lweight(ii,m)*ad_zbot
5067 ad_zd(ii,kdg-1,m)=ad_zd(ii,kdg-1,m)+adfac
5079 adfac=
ucontact(cr)%Lweight(ii,m)*ad_ztop
5080 ad_zd(ii,kdg ,m)=ad_zd(ii,kdg ,m)+adfac
5089 grid(rg)%ad_z_r(irg ,jrg,krg)= &
5090 &
grid(rg)%ad_z_r(irg ,jrg,krg)+adfac
5091 grid(rg)%ad_z_r(irg-1,jrg,krg)= &
5092 &
grid(rg)%ad_z_r(irg-1,jrg,krg)+adfac
5100 adfac=
ucontact(cr)%Lweight(ii,m)*ad_zbot
5101 ad_zd(ii,1 ,m)=ad_zd(ii,1 ,m)+adfac
5110 adfac=
ucontact(cr)%Lweight(ii,m)*ad_ztop
5111 ad_zd(ii,
n(dg),m)=ad_zd(ii,
n(dg),m)+adfac
5132 idgm1=max(idg-1,
bounds(dg)%LBi(-1))
5133 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
5135 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
5136 IF (((imind.le.idg).and.(idg.le.imaxd)).and. &
5137 & ((jmind.le.jdg).and.(jdg.le.jmaxd)))
THEN
5142 adfac=0.5_r8*ad_zd(1,kdg,m)
5143 grid(dg)%ad_z_r(idgm1,jdg ,kdg)= &
5144 &
grid(dg)%ad_z_r(idgm1,jdg ,kdg)+adfac
5145 grid(dg)%ad_z_r(idg ,jdg ,kdg)= &
5146 &
grid(dg)%ad_z_r(idg ,jdg ,kdg)+adfac
5147 ad_zd(1,kdg,m)=0.0_r8
5152 adfac=0.5_r8*ad_zd(2,kdg,m)
5153 grid(dg)%ad_z_r(idg ,jdg ,kdg)= &
5154 &
grid(dg)%ad_z_r(idg ,jdg ,kdg)+adfac
5155 grid(dg)%ad_z_r(idgp1,jdg ,kdg)= &
5156 &
grid(dg)%ad_z_r(idgp1,jdg ,kdg)+adfac
5157 ad_zd(2,kdg,m)=0.0_r8
5162 adfac=0.5_r8*ad_zd(3,kdg,m)
5163 grid(dg)%ad_z_r(idg ,jdgp1,kdg)= &
5164 &
grid(dg)%ad_z_r(idg ,jdgp1,kdg)+adfac
5165 grid(dg)%ad_z_r(idgp1,jdgp1,kdg)= &
5166 &
grid(dg)%ad_z_r(idgp1,jdgp1,kdg)+adfac
5167 ad_zd(3,kdg,m)=0.0_r8
5172 adfac=0.5_r8*ad_zd(4,kdg,m)
5173 grid(dg)%ad_z_r(idgm1,jdgp1,kdg)= &
5174 &
grid(dg)%ad_z_r(idgm1,jdgp1,kdg)+adfac
5175 grid(dg)%ad_z_r(idg ,jdgp1,kdg)= &
5176 &
grid(dg)%ad_z_r(idg ,jdgp1,kdg)+adfac
5177 ad_zd(4,kdg,m)=0.0_r8
5191 ucontact(cr)%ad_Vweight(1:2,1:
n(rg),1:npoints)=0.0_r8
5196 IF (
allocated(zd))
THEN
5199 IF (
allocated(ad_zd))
THEN
5232 imind=
bounds(dg) % IstrT(tile)
5233 imaxd=
bounds(dg) % IendT(tile)
5234 jmind=
bounds(dg) % JstrT(tile)
5235 jmaxd=
bounds(dg) % JendT(tile)
5237 iminr=
bounds(rg) % IstrT(tile)
5238 imaxr=
bounds(rg) % IendT(tile)
5239 jminr=
bounds(rg) % JstrT(tile)
5240 jmaxr=
bounds(rg) % JendT(tile)
5252 rcontact(cr)%Kdg(1:
n(rg),1:npoints)=ispv
5253 rcontact(cr)%Vweight(1:2,1:
n(rg),1:npoints)=spv
5258 r_contact :
IF (.not.
rcontact(cr)%interpolate.and. &
5264 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
5265 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
5272 rcontact(cr)%ad_Vweight(1,krg,m)=0.0_r8
5275 rcontact(cr)%ad_Vweight(2,krg,m)=0.0_r8
5287 IF (.not.
allocated(zd))
THEN
5288 allocate ( zd(4,
n(dg),npoints) )
5291 IF (.not.
allocated(ad_zd))
THEN
5292 allocate ( ad_zd(4,
n(dg),npoints) )
5306 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
5308 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
5309 IF (((imind.le.idg).and.(idg.le.imaxd)).and. &
5310 & ((jmind.le.jdg).and.(jdg.le.jmaxd)))
THEN
5311 zd(1,kdg,m)=
grid(dg)%z_r(idg ,jdg ,kdg)
5312 zd(2,kdg,m)=
grid(dg)%z_r(idgp1,jdg ,kdg)
5313 zd(3,kdg,m)=
grid(dg)%z_r(idgp1,jdgp1,kdg)
5314 zd(4,kdg,m)=
grid(dg)%z_r(idg ,jdgp1,kdg)
5335 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
5336 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
5337 ztop=
rcontact(cr)%Lweight(1,m)*zd(1,
n(dg),m)+ &
5338 &
rcontact(cr)%Lweight(2,m)*zd(2,
n(dg),m)+ &
5339 &
rcontact(cr)%Lweight(3,m)*zd(3,
n(dg),m)+ &
5340 &
rcontact(cr)%Lweight(4,m)*zd(4,
n(dg),m)
5341 zbot=
rcontact(cr)%Lweight(1,m)*zd(1,1 ,m)+ &
5342 &
rcontact(cr)%Lweight(2,m)*zd(2,1 ,m)+ &
5343 &
rcontact(cr)%Lweight(3,m)*zd(3,1 ,m)+ &
5344 &
rcontact(cr)%Lweight(4,m)*zd(4,1 ,m)
5345 zr=
grid(rg)%z_r(irg,jrg,krg)
5346 IF (zr.ge.ztop)
THEN
5353 rcontact(cr)%ad_Vweight(1,krg,m)=0.0_r8
5356 rcontact(cr)%ad_Vweight(2,krg,m)=0.0_r8
5357 ELSE IF (zbot.ge.zr)
THEN
5364 rcontact(cr)%ad_Vweight(1,krg,m)=0.0_r8
5367 rcontact(cr)%ad_Vweight(2,krg,m)=0.0_r8
5370 ztop=
rcontact(cr)%Lweight(1,m)*zd(1,kdg ,m)+ &
5371 &
rcontact(cr)%Lweight(2,m)*zd(2,kdg ,m)+ &
5372 &
rcontact(cr)%Lweight(3,m)*zd(3,kdg ,m)+ &
5373 &
rcontact(cr)%Lweight(4,m)*zd(4,kdg ,m)
5374 zbot=
rcontact(cr)%Lweight(1,m)*zd(1,kdg-1,m)+ &
5375 &
rcontact(cr)%Lweight(2,m)*zd(2,kdg-1,m)+ &
5376 &
rcontact(cr)%Lweight(3,m)*zd(3,kdg-1,m)+ &
5377 &
rcontact(cr)%Lweight(4,m)*zd(4,kdg-1,m)
5378 IF ((ztop.gt.zr).and.(zr.ge.zbot))
THEN
5388 ad_r1=ad_r1+
rcontact(cr)%ad_Vweight(1,krg,m)
5389 rcontact(cr)%ad_Vweight(1,krg,m)=0.0_r8
5392 ad_r2=ad_r2+
rcontact(cr)%ad_Vweight(2,krg,m)
5393 rcontact(cr)%ad_Vweight(2,krg,m)=0.0_r8
5402 ad_zbot=ad_zbot-adfac
5403 ad_dz=ad_dz-r2*adfac
5407 ad_ztop=ad_ztop+ad_dz
5408 ad_zbot=ad_zbot-ad_dz
5421 adfac=
rcontact(cr)%Lweight(ii,m)*ad_zbot
5422 ad_zd(ii,kdg-1,m)=ad_zd(ii,kdg-1,m)+adfac
5435 adfac=
rcontact(cr)%Lweight(ii,m)*ad_ztop
5436 ad_zd(ii,kdg ,m)=ad_zd(ii,kdg ,m)+adfac
5443 grid(rg)%ad_z_r(irg,jrg,krg)= &
5444 &
grid(rg)%ad_z_r(irg,jrg,krg)+ad_zr
5452 adfac=
rcontact(cr)%Lweight(ii,m)*ad_ztop
5453 ad_zd(ii,
n(dg),m)=ad_zd(ii,
n(dg),m)+adfac
5462 adfac=
rcontact(cr)%Lweight(ii,m)*ad_zbot
5463 ad_zd(ii,1 ,m)=ad_zd(ii,1 ,m)+adfac
5484 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
5486 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
5487 IF (((imind.le.idg).and.(idg.le.imaxd)).and. &
5488 & ((jmind.le.jdg).and.(jdg.le.jmaxd)))
THEN
5491 grid(dg)%ad_z_r(idg ,jdg ,kdg)= &
5492 &
grid(dg)%ad_z_r(idg ,jdg ,kdg)+ &
5494 ad_zd(1,kdg,m)=0.0_r8
5497 grid(dg)%ad_z_r(idgp1,jdg ,kdg)= &
5498 &
grid(dg)%ad_z_r(idgp1,jdg ,kdg)+ &
5500 ad_zd(2,kdg,m)=0.0_r8
5503 grid(dg)%ad_z_r(idgp1,jdgp1,kdg)= &
5504 &
grid(dg)%ad_z_r(idgp1,jdgp1,kdg)+ &
5506 ad_zd(3,kdg,m)=0.0_r8
5509 grid(dg)%ad_z_r(idg ,jdgp1,kdg)= &
5510 &
grid(dg)%ad_z_r(idg ,jdgp1,kdg)+ &
5512 ad_zd(4,kdg,m)=0.0_r8
5526 rcontact(cr)%ad_Vweight(1:2,1:
n(rg),1:npoints)=0.0_r8
5531 IF (
allocated(zd))
THEN
5534 IF (
allocated(ad_zd))
THEN
5551 & cr, Npoints, contact, &
5552 & LBi, UBi, LBj, UBj, LBk, UBk, &
5598 integer,
intent(in) :: rg, model, tile
5599 integer,
intent(in) :: gtype, cr, Npoints
5600 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
5602 character(len=*),
intent(in) :: svname
5604 TYPE (T_NGC),
intent(inout) :: contact(:)
5606# ifdef ASSUMED_SHAPE
5607 real(r8),
intent(in) :: Ac(:,:,:)
5608 real(r8),
intent(inout) :: ad_Ac(:,:,:)
5610 real(r8),
intent(in) :: Amask(LBi:,LBj:)
5612 real(r8),
intent(inout) :: ad_Ar(LBi:,LBj:,LBk:)
5614 real(r8),
intent(in) :: Ac(Npoints,LBk:UBk,4)
5615 real(r8),
intent(inout) :: ad_Ac(Npoints,LBk:UBk,4)
5617 real(r8),
intent(in) :: Amask(LBi:UBi,LBj:UBj)
5619 real(r8),
intent(inout) :: ad_Ar(LBi:UBi,LBj:UBj,LBk:UBk)
5624 integer :: i, j, k, kdg, kdgm1, m, ii
5625 integer :: Istr, Iend, Jstr, Jend, Kmin
5627 real(r8),
dimension(8) :: cff
5628 real(r8),
dimension(8) :: ad_cff
5645 istr=
bounds(rg) % IstrT(tile)
5646 iend=
bounds(rg) % IendT(tile)
5647 jstr=
bounds(rg) % JstrT(tile)
5648 jend=
bounds(rg) % JendT(tile)
5651 istr=
bounds(rg) % IstrP(tile)
5652 iend=
bounds(rg) % IendT(tile)
5653 jstr=
bounds(rg) % JstrT(tile)
5654 jend=
bounds(rg) % JendT(tile)
5657 istr=
bounds(rg) % IstrT(tile)
5658 iend=
bounds(rg) % IendT(tile)
5659 jstr=
bounds(rg) % JstrP(tile)
5660 jend=
bounds(rg) % JendT(tile)
5663 istr=
bounds(rg) % IstrT(tile)
5664 iend=
bounds(rg) % IendT(tile)
5665 jstr=
bounds(rg) % JstrT(tile)
5666 jend=
bounds(rg) % JendT(tile)
5674 i=contact(cr)%Irg(m)
5675 j=contact(cr)%Jrg(m)
5676 kdg=contact(cr)%Kdg(k,m)
5677 kdgm1=max(kdg-1,kmin)
5678 IF (((istr.le.i).and.(i.le.iend)).and. &
5679 & ((jstr.le.j).and.(j.le.jend)))
THEN
5680 cff(1)=contact(cr)%Lweight(1,m)*contact(cr)%Vweight(1,k,m)
5681 cff(2)=contact(cr)%Lweight(2,m)*contact(cr)%Vweight(1,k,m)
5682 cff(3)=contact(cr)%Lweight(3,m)*contact(cr)%Vweight(1,k,m)
5683 cff(4)=contact(cr)%Lweight(4,m)*contact(cr)%Vweight(1,k,m)
5684 cff(5)=contact(cr)%Lweight(1,m)*contact(cr)%Vweight(2,k,m)
5685 cff(6)=contact(cr)%Lweight(2,m)*contact(cr)%Vweight(2,k,m)
5686 cff(7)=contact(cr)%Lweight(3,m)*contact(cr)%Vweight(2,k,m)
5687 cff(8)=contact(cr)%Lweight(4,m)*contact(cr)%Vweight(2,k,m)
5692 ad_ar(i,j,k)=ad_ar(i,j,k)*amask(i,j)
5711 ad_cff(1)=ad_cff(1)+ac(1,kdgm1,m)*ad_ar(i,j,k)
5712 ad_cff(2)=ad_cff(2)+ac(2,kdgm1,m)*ad_ar(i,j,k)
5713 ad_cff(3)=ad_cff(3)+ac(3,kdgm1,m)*ad_ar(i,j,k)
5714 ad_cff(4)=ad_cff(4)+ac(4,kdgm1,m)*ad_ar(i,j,k)
5715 ad_cff(5)=ad_cff(5)+ac(1,kdg ,m)*ad_ar(i,j,k)
5716 ad_cff(6)=ad_cff(6)+ac(2,kdg ,m)*ad_ar(i,j,k)
5717 ad_cff(7)=ad_cff(7)+ac(3,kdg ,m)*ad_ar(i,j,k)
5718 ad_cff(8)=ad_cff(8)+ac(4,kdg ,m)*ad_ar(i,j,k)
5720 ad_ac(1,kdgm1,m)=ad_ac(1,kdgm1,m)+cff(1)*ad_ar(i,j,k)
5721 ad_ac(2,kdgm1,m)=ad_ac(2,kdgm1,m)+cff(2)*ad_ar(i,j,k)
5722 ad_ac(3,kdgm1,m)=ad_ac(3,kdgm1,m)+cff(3)*ad_ar(i,j,k)
5723 ad_ac(4,kdgm1,m)=ad_ac(4,kdgm1,m)+cff(4)*ad_ar(i,j,k)
5724 ad_ac(1,kdg ,m)=ad_ac(1,kdg ,m)+cff(5)*ad_ar(i,j,k)
5725 ad_ac(2,kdg ,m)=ad_ac(2,kdg ,m)+cff(6)*ad_ar(i,j,k)
5726 ad_ac(3,kdg ,m)=ad_ac(3,kdg ,m)+cff(7)*ad_ar(i,j,k)
5727 ad_ac(4,kdg ,m)=ad_ac(4,kdg ,m)+cff(8)*ad_ar(i,j,k)
5748 contact(cr)%ad_Vweight(1,k,m)= &
5749 & contact(cr)%ad_Vweight(1,k,m)+ &
5750 & contact(cr)%Lweight(1,m)*ad_cff(1)+ &
5751 & contact(cr)%Lweight(2,m)*ad_cff(2)+ &
5752 & contact(cr)%Lweight(3,m)*ad_cff(3)+ &
5753 & contact(cr)%Lweight(4,m)*ad_cff(4)
5759 contact(cr)%ad_Vweight(2,k,m)= &
5760 contact(cr)%ad_Vweight(2,k,m)+ &
5761 & contact(cr)%Lweight(1,m)*ad_cff(5)+ &
5762 & contact(cr)%Lweight(2,m)*ad_cff(6)+ &
5763 & contact(cr)%Lweight(3,m)*ad_cff(7)+ &
5764 & contact(cr)%Lweight(4,m)*ad_cff(8)
5902 & AreaAvg, Rscale, &
5903 & cr, Npoints, contact, &
5904 & LBiF, UBiF, LBjF, UBjF, &
5905 & LBiC, UBiC, LBjC, UBjC, &
5999 logical,
intent(in) :: areaavg
6000 integer,
intent(in) :: ng, dg, model, tile
6001 integer,
intent(in) :: gtype, cr, npoints, rscale
6002 integer,
intent(in) :: lbif, ubif, lbjf, ubjf
6003 integer,
intent(in) :: lbic, ubic, lbjc, ubjc
6005 character(len=*),
intent(in) :: svname
6007 TYPE (
t_ngc),
intent(in) :: contact(:)
6009# ifdef ASSUMED_SHAPE
6010 real(r8),
intent(in) :: pmc(lbic:,lbjc:)
6011 real(r8),
intent(in) :: pnc(lbic:,lbjc:)
6013 real(r8),
intent(in) :: cmsk(lbic:,lbjc:)
6015 real(r8),
intent(in) :: amsk(lbif:,lbjf:)
6017 real(r8),
intent(in) :: fmsk(lbif:,lbjf:)
6021 real(r8),
intent(inout) :: a(lbif:,lbjf:)
6022 real(r8),
intent(in) :: adx(lbif:,lbjf:)
6023 real(r8),
intent(in) :: ady(lbif:,lbjf:)
6025 real(r8),
intent(inout) :: f(lbif:,lbjf:)
6026 real(r8),
intent(in) :: dxf(lbif:,lbjf:)
6027 real(r8),
intent(in) :: dyf(lbif:,lbjf:)
6029 real(r8),
intent(inout) :: c1(lbic:,lbjc:)
6030 real(r8),
intent(inout),
optional :: c2(lbic:,lbjc:)
6032 real(r8),
intent(in) :: pmc(lbic:ubic,lbjc:ubjc)
6033 real(r8),
intent(in) :: pnc(lbic:ubic,lbjc:ubjc)
6035 real(r8),
intent(in) :: cmsk(lbic:ubic,lbjc:ubjc)
6037 real(r8),
intent(in) :: amsk(lbif:ubif,lbjf:ubjf)
6039 real(r8),
intent(in) :: fmsk(lbif:ubif,lbjf:ubjf)
6043 real(r8),
intent(inout) :: a(lbif:ubif,lbjf:ubjf)
6044 real(r8),
intent(in) :: adx(lbif:ubif,lbjf:ubjf)
6045 real(r8),
intent(in) :: adx(lbif:ubif,lbjf:ubjf)
6047 real(r8),
intent(inout) :: f(lbif:ubif,lbjf:ubjf)
6048 real(r8),
intent(in) :: dxf(lbif:ubif,lbjf:ubjf)
6049 real(r8),
intent(in) :: dyf(lbif:ubif,lbjf:ubjf)
6051 real(r8),
intent(inout) :: c1(lbic:ubic,lbjc:ubjc)
6052 real(r8),
intent(inout),
optional :: c2(lbic:ubic,lbjc:ubjc)
6057 integer :: iadd, ic, jadd, jc, half, i, j, m
6059 integer :: lbi, ubi, lbj, ubj
6062 real(r8) :: areac_inv, my_area, my_areasum, ratio
6063 real(r8) :: my_avg, my_count, my_sum
6066 real(r8),
allocatable :: f(:,:)
6067 real(r8),
allocatable :: dxf(:,:)
6068 real(r8),
allocatable :: dyf(:,:)
6070 real(r8),
allocatable :: fmsk(:,:)
6074 character (len=*),
parameter :: myfile = &
6075 & __FILE__//
", ad_fine2coarse2d"
6077# include "set_bounds.h"
6100 IF (.not.
allocated(f))
THEN
6101 allocate ( f(lbi:ubi,lbj:ubj) )
6104 IF (.not.
allocated(dxf))
THEN
6105 allocate ( dxf(lbi:ubi,lbj:ubj) )
6107 IF (.not.
allocated(dyf))
THEN
6108 allocate ( dyf(lbi:ubi,lbj:ubj) )
6112 IF (.not.
allocated(fmsk))
THEN
6113 allocate ( fmsk(lbi:ubi,lbj:ubj) )
6122 & lbif, ubif, lbjf, ubjf, &
6123 & lbi, ubi, lbj, ubj, &
6128 & lbif, ubif, lbjf, ubjf, &
6129 & lbi, ubi, lbj, ubj, &
6136 & lbif, ubif, lbjf, ubjf, &
6137 & lbi, ubi, lbj, ubj, &
6150 i=contact(cr)%Idg(m)
6151 j=contact(cr)%Jdg(m)
6152 ic=contact(cr)%Irg(m)
6153 jc=contact(cr)%Jrg(m)
6154 IF (((istr.le.ic).and.(ic.le.iend)).and. &
6155 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
6160 my_count=my_count+min(1.0_r8,fmsk(i+iadd,j+jadd))
6166 areac_inv=pmc(ic,jc)*pnc(ic,jc)
6168 areac_inv=0.25_r8*(pmc(ic-1,jc)+pmc(ic,jc))* &
6169 & (pnc(ic-1,jc)+pnc(ic,jc))
6171 areac_inv=0.25_r8*(pmc(ic,jc-1)+pmc(ic,jc))* &
6172 & (pnc(ic,jc-1)+pnc(ic,jc))
6174 areac_inv=pmc(ic,jc)*pnc(ic,jc)
6176 IF (
PRESENT(c2))
THEN
6178 my_avg=my_avg+c2(ic,jc)
6182 my_avg=my_avg+c1(ic,jc)
6185 my_avg=my_avg*cmsk(ic,jc)
6186 IF (my_count.gt.0.0_r8)
THEN
6187 my_avg=my_avg*rscale*rscale/my_count
6192 my_sum=my_sum+areac_inv*my_avg
6200 my_area=dxf(i+iadd,j+jadd)*dyf(i+iadd,j+jadd)
6201 my_areasum=my_areasum+my_area
6206 f(i+iadd,j+jadd)=f(i+iadd,j+jadd)+my_area* &
6207 & min(1.0_r8,fmsk(i+iadd,j+jadd))*my_sum
6211 f(i+iadd,j+jadd)=f(i+iadd,j+jadd)+my_area*my_sum
6221 i=contact(cr)%Idg(m)
6222 j=contact(cr)%Jdg(m)
6223 ic=contact(cr)%Irg(m)
6224 jc=contact(cr)%Jrg(m)
6225 IF (((istr.le.ic).and.(ic.le.iend)).and. &
6226 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
6234 my_count=my_count+min(1.0_r8,fmsk(i+iadd,j+jadd))
6236 my_count=my_count+1.0_r8
6240 IF (
PRESENT(c2))
THEN
6242 my_avg=my_avg+c2(ic,jc)
6245 my_avg=my_avg+c1(ic,jc)
6248 my_avg=my_avg*cmsk(ic,jc)
6250 IF (my_count.gt.0.0_r8)
THEN
6252 my_sum=my_sum+my_avg/my_count
6260 f(i+iadd,j+jadd)=f(i+iadd,j+jadd)+fmsk(i+iadd,j+jadd)* &
6265 f(i+iadd,j+jadd)=f(i+iadd,j+jadd)+my_sum
6282 a(i,j)=a(i,j)+f(i,j)
6293 IF (
allocated(f))
THEN
6297 IF (
allocated(dxf))
THEN
6300 IF (
allocated(dyf))
THEN
6305 IF (
allocated(fmsk))
THEN
6317 & AreaAvg, Rscale, &
6318 & cr, Npoints, contact, &
6319 & LBiF, UBiF, LBjF, UBjF, LBkF, UBkF, &
6320 & LBiC, UBiC, LBjC, UBjC, LBkC, UBkC, &
6416 logical,
intent(in) :: areaavg
6417 integer,
intent(in) :: ng, dg, model, tile
6418 integer,
intent(in) :: gtype, cr, npoints, rscale
6419 integer,
intent(in) :: lbif, ubif, lbjf, ubjf, lbkf, ubkf
6420 integer,
intent(in) :: lbic, ubic, lbjc, ubjc, lbkc, ubkc
6422 character(len=*),
intent(in) :: svname
6424 TYPE (
t_ngc),
intent(in) :: contact(:)
6426# ifdef ASSUMED_SHAPE
6427 real(r8),
intent(in) :: pmc(lbic:,lbjc:)
6428 real(r8),
intent(in) :: pnc(lbic:,lbjc:)
6430 real(r8),
intent(in) :: cmsk(lbic:,lbjc:)
6432 real(r8),
intent(in) :: amsk(lbif:,lbjf:)
6434 real(r8),
intent(in) :: fmsk(lbif:,lbjf:)
6438 real(r8),
intent(inout) :: a(lbif:,lbjf:,lbkf:)
6439 real(r8),
intent(in) :: adx(lbif:,lbjf:)
6440 real(r8),
intent(in) :: ady(lbif:,lbjf:)
6442 real(r8),
intent(inout) :: f(lbif:,lbjf:,lbkf:)
6443 real(r8),
intent(in) :: dxf(lbif:,lbjf:)
6444 real(r8),
intent(in) :: dyf(lbif:,lbjf:)
6446 real(r8),
intent(inout) :: c(lbic:,lbjc:,lbkc:)
6448 real(r8),
intent(in) :: pmc(lbic:ubic,lbjc:ubjc)
6449 real(r8),
intent(in) :: pnc(lbic:ubic,lbjc:ubjc)
6451 real(r8),
intent(in) :: cmsk(lbic:ubic,lbjc:ubjc)
6453 real(r8),
intent(in) :: amsk(lbif:ubif,lbjf:ubjf)
6455 real(r8),
intent(in) :: fmsk(lbif:ubif,lbjf:ubjf)
6459 real(r8),
intent(inout) :: a(lbif:ubif,lbjf:ubjf,lbkf:ubkf)
6460 real(r8),
intent(in) :: adx(lbif:ubif,lbjf:ubjf)
6461 real(r8),
intent(in) :: adx(lbif:ubif,lbjf:ubjf)
6463 real(r8),
intent(inout) :: f(lbif:ubif,lbjf:ubjf,lbkf:ubkf)
6464 real(r8),
intent(in) :: dxf(lbif:ubif,lbjf:ubjf)
6465 real(r8),
intent(in) :: dyf(lbif:ubif,lbjf:ubjf)
6467 real(r8),
intent(inout) :: c(lbic:ubic,lbjc:ubjc,lbkc:ubkc)
6472 integer :: iadd, ic, jadd, jc, half, i, j, k, m
6474 integer :: lbi, ubi, lbj, ubj
6477 real(r8) :: areac_inv, my_area, my_areasum, ratio
6478 real(r8) :: my_avg, my_count, my_sum
6481 real(r8),
allocatable :: f(:,:,:)
6482 real(r8),
allocatable :: dxf(:,:)
6483 real(r8),
allocatable :: dyf(:,:)
6485 real(r8),
allocatable :: fmsk(:,:)
6489 character (len=*),
parameter :: myfile = &
6490 & __FILE__//
", ad_fine2coarse3d"
6492# include "set_bounds.h"
6515 IF (.not.
allocated(f))
THEN
6516 allocate ( f(lbi:ubi,lbj:ubj,lbkf:ubkf) )
6519 IF (.not.
allocated(dxf))
THEN
6520 allocate ( dxf(lbi:ubi,lbj:ubj) )
6522 IF (.not.
allocated(dyf))
THEN
6523 allocate ( dyf(lbi:ubi,lbj:ubj) )
6527 IF (.not.
allocated(fmsk))
THEN
6528 allocate ( fmsk(lbi:ubi,lbj:ubj) )
6537 & lbif, ubif, lbjf, ubjf, &
6538 & lbi, ubi, lbj, ubj, &
6543 & lbif, ubif, lbjf, ubjf, &
6544 & lbi, ubi, lbj, ubj, &
6551 & lbif, ubif, lbjf, ubjf, &
6552 & lbi, ubi, lbj, ubj, &
6565 i=contact(cr)%Idg(m)
6566 j=contact(cr)%Jdg(m)
6567 ic=contact(cr)%Irg(m)
6568 jc=contact(cr)%Jrg(m)
6569 IF (((istr.le.ic).and.(ic.le.iend)).and. &
6570 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
6578 my_count=my_count+min(1.0_r8,fmsk(i+iadd,j+jadd))
6584 areac_inv=pmc(ic,jc)*pnc(ic,jc)
6586 areac_inv=0.25_r8*(pmc(ic-1,jc)+pmc(ic,jc))* &
6587 & (pnc(ic-1,jc)+pnc(ic,jc))
6589 areac_inv=0.25_r8*(pmc(ic,jc-1)+pmc(ic,jc))* &
6590 & (pnc(ic,jc-1)+pnc(ic,jc))
6592 areac_inv=pmc(ic,jc)*pnc(ic,jc)
6597 my_avg=my_avg+c(ic,jc,k)
6600 my_avg=my_avg*cmsk(ic,jc)
6601 IF (my_count.gt.0.0_r8)
THEN
6602 my_avg=my_avg*rscale*rscale/my_count
6607 my_sum=my_sum+areac_inv*my_avg
6614 my_area=dxf(i+iadd,j+jadd)*dyf(i+iadd,j+jadd)
6615 my_areasum=my_areasum+my_area
6621 f(i+iadd,j+jadd,k)=f(i+iadd,j+jadd,k)+ &
6623 & min(1.0_r8,fmsk(i+iadd,j+jadd))* &
6629 f(i+iadd,j+jadd,k)=f(i+iadd,j+jadd,k)+ &
6643 i=contact(cr)%Idg(m)
6644 j=contact(cr)%Jdg(m)
6645 ic=contact(cr)%Irg(m)
6646 jc=contact(cr)%Jrg(m)
6647 IF (((istr.le.ic).and.(ic.le.iend)).and. &
6648 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
6656 my_count=my_count+min(1.0_r8,fmsk(i+iadd,j+jadd))
6658 my_count=my_count+1.0_r8
6665 my_avg=my_avg+c(ic,jc,k)
6668 my_avg=my_avg*cmsk(ic,jc)
6670 IF (my_count.gt.0.0_r8)
THEN
6673 my_sum=my_sum+my_avg/my_count
6683 f(i+iadd,j+jadd,k)=f(i+iadd,j+jadd,k)+ &
6684 & fmsk(i+iadd,j+jadd)*my_sum
6689 f(i+iadd,j+jadd,k)=f(i+iadd,j+jadd,k)+my_sum
6708 a(i,j,k)=a(i,j,k)+f(i,j,k)
6716 IF (
allocated(f))
THEN
6720 IF (
allocated(dxf))
THEN
6723 IF (
allocated(dyf))
THEN
6728 IF (
allocated(fmsk))
THEN