1558 & LBi, UBi, LBj, UBj, &
1559 & IminS, ImaxS, JminS, JmaxS)
1577 integer,
intent(in) :: ngc, ngf, model, tile
1578 integer,
intent(in) :: lbi, ubi, lbj, ubj
1579 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
1583 integer :: iedge, ibc, ibc_min, ibc_max, ibf, io
1584 integer :: jedge, jbc, jbc_min, jbc_max, jbf, jo
1585 integer :: istr, iend, jstr, jend
1586 integer :: istrm2, iendp2, jstrm2, jendp2
1587 integer :: tindex, i, ic, isum, itrc, j, jsum, k, half
1588 integer :: cr, dg, dgcr, rg, rgcr
1590 real(r8) :: tfc, tff, tvalue, cff
1591 real(r8) :: tl_tfc, tl_tff, tl_tvalue, tl_cff
1593 real(r8) :: dinv(imins:imaxs,jmins:jmaxs)
1594 real(r8) :: tl_dinv(imins:imaxs,jmins:jmaxs)
1606 IF ((ngc.eq.dg).and.(ngf.eq.rg))
THEN
1608 ELSE IF ((ngc.eq.rg).and.(ngf.eq.dg))
THEN
1615 istr =
bounds(ngc)%Istr (tile)
1616 iend =
bounds(ngc)%Iend (tile)
1617 jstr =
bounds(ngc)%Jstr (tile)
1618 jend =
bounds(ngc)%Jend (tile)
1620 istrm2=
bounds(ngc)%Istrm2(tile)
1621 iendp2=
bounds(ngc)%Iendp2(tile)
1622 jstrm2=
bounds(ngc)%Jstrm2(tile)
1623 jendp2=
bounds(ngc)%Jendp2(tile)
1629 cff=
grid(ngc)%Hz(i,j,1)
1630 tl_cff=
grid(ngc)%tl_Hz(i,j,1)
1632 cff=cff+
grid(ngc)%Hz(i,j,k)
1633 tl_cff=tl_cff+
grid(ngc)%tl_Hz(i,j,k)
1635 dinv(i,j)=1.0_r8/cff
1636 tl_dinv(i,j)=-tl_cff*dinv(i,j)/cff
1666 t_loop :
DO itrc=1,
nt(ngc)
1675 jbc_max=
j_top(ngf)-1
1678 IF (((istr.le.ibc-1).and.(ibc-1.le.iend)).and. &
1679 & ((jbc_min.le.jbc).and.(jbc.le.jbc_max)))
THEN
1710 tff=tff*
dt(ngc)/
dt(ngf)
1711 tl_tff=tl_tff*
dt(ngc)/
dt(ngf)
1715 cff=
grid(ngc)%pm(ibc-1,jbc)* &
1716 &
grid(ngc)%pn(ibc-1,jbc)* &
1718 tl_cff=
grid(ngc)%pm(ibc-1,jbc)* &
1719 &
grid(ngc)%pn(ibc-1,jbc)* &
1720 & tl_dinv(ibc-1,jbc)
1722 tvalue=max(0.0_r8, &
1723 &
ocean(ngc)%t(ibc-1,jbc,k,tindex,itrc)- &
1725 tl_tvalue=(0.5_r8- &
1726 & sign(0.5_r8,-(
ocean(ngc)%t(ibc-1,jbc,k,tindex,itrc)- &
1727 & cff*(tff-tfc))))* &
1728 & (
ocean(ngc)%tl_t(ibc-1,jbc,k,tindex,itrc)- &
1729 & tl_cff*(tff-tfc)-cff*(tl_tff-tl_tfc))
1732 &
dt(ngc)*
clima(ngc)%Tnudgcof(ibc-1,jbc,k,itrc)* &
1733 & (
clima(ngc)%tclm(ibc-1,jbc,k,ic)-tvalue)
1734 tl_tvalue=tl_tvalue- &
1735 &
dt(ngc)*
clima(ngc)%Tnudgcof(ibc-1,jbc,k,itrc)* &
1739 tvalue=tvalue*
grid(ngc)%rmask(ibc-1,jbc)
1740 tl_tvalue=tl_tvalue*
grid(ngc)%rmask(ibc-1,jbc)
1744 ocean(ngc)%tl_t(ibc-1,jbc,k,tindex,itrc)=tl_tvalue
1755 jbc_max=
j_top(ngf)-1
1758 IF (((istr.le.ibc).and.(ibc.le.iend)).and. &
1759 & ((jbc_min.le.jbc).and.(jbc.le.jbc_max)))
THEN
1790 tff=tff*
dt(ngc)/
dt(ngf)
1791 tl_tff=tl_tff*
dt(ngc)/
dt(ngf)
1795 cff=
grid(ngc)%pm(ibc,jbc)* &
1796 &
grid(ngc)%pn(ibc,jbc)* &
1798 tl_cff=
grid(ngc)%pm(ibc,jbc)* &
1799 &
grid(ngc)%pn(ibc,jbc)* &
1802 tvalue=max(0.0_r8, &
1803 &
ocean(ngc)%t(ibc,jbc,k,tindex,itrc)- &
1805 tl_tvalue=(0.5_r8- &
1806 & sign(0.5_r8,-(
ocean(ngc)%t(ibc,jbc,k,tindex,itrc)- &
1807 & cff*(tff-tfc))))* &
1808 & (
ocean(ngc)%tl_t(ibc,jbc,k,tindex,itrc)- &
1809 & tl_cff*(tff-tfc)-cff*(tl_tff-tl_tfc))
1812 &
dt(ngc)*
clima(ngc)%Tnudgcof(ibc,jbc,k,itrc)* &
1813 & (
clima(ngc)%tclm(ibc,jbc,k,ic)-tvalue)
1814 tl_tvalue=tl_tvalue- &
1815 &
dt(ngc)*
clima(ngc)%Tnudgcof(ibc,jbc,k,itrc)* &
1819 tvalue=tvalue*
grid(ngc)%rmask(ibc,jbc)
1820 tl_tvalue=tl_tvalue*
grid(ngc)%rmask(ibc,jbc)
1824 ocean(ngc)%tl_t(ibc,jbc,k,tindex,itrc)=tl_tvalue
1838 IF (((ibc_min.le.ibc).and.(ibc.le.ibc_max)).and. &
1839 & ((jstr.le.jbc-1).and.(jbc-1.le.jend)))
THEN
1870 tff=tff*
dt(ngc)/
dt(ngf)
1871 tl_tff=tl_tff*
dt(ngc)/
dt(ngf)
1875 cff=
grid(ngc)%pm(ibc,jbc-1)* &
1876 &
grid(ngc)%pn(ibc,jbc-1)* &
1878 tl_cff=
grid(ngc)%pm(ibc,jbc-1)* &
1879 &
grid(ngc)%pn(ibc,jbc-1)* &
1880 & tl_dinv(ibc,jbc-1)
1882 tvalue=max(0.0_r8, &
1883 &
ocean(ngc)%t(ibc,jbc-1,k,tindex,itrc)- &
1885 tl_tvalue=(0.5_r8- &
1886 & sign(0.5_r8,-(
ocean(ngc)%t(ibc,jbc-1,k,tindex,itrc)- &
1887 & cff*(tff-tfc))))* &
1888 & (
ocean(ngc)%tl_t(ibc,jbc-1,k,tindex,itrc)- &
1889 & tl_cff*(tff-tfc)-cff*(tl_tff-tl_tfc))
1892 &
dt(ngc)*
clima(ngc)%Tnudgcof(ibc,jbc-1,k,itrc)* &
1893 & (
clima(ngc)%tclm(ibc,jbc-1,k,ic)-tvalue)
1894 tl_tvalue=tl_tvalue- &
1895 &
dt(ngc)*
clima(ngc)%Tnudgcof(ibc,jbc-1,k,itrc)* &
1899 tvalue=tvalue*
grid(ngc)%rmask(ibc,jbc-1)
1900 tl_tvalue=tl_tvalue*
grid(ngc)%rmask(ibc,jbc-1)
1904 ocean(ngc)%tl_t(ibc,jbc-1,k,tindex,itrc)=tl_tvalue
1918 IF (((ibc_min.le.ibc).and.(ibc.le.ibc_max)).and. &
1919 & ((jstr.le.jbc).and.(jbc.le.jend)))
THEN
1951 tff=tff*
dt(ngc)/
dt(ngf)
1952 tl_tff=tl_tff*
dt(ngc)/
dt(ngf)
1956 cff=
grid(ngc)%pm(ibc,jbc)* &
1957 &
grid(ngc)%pn(ibc,jbc)* &
1959 tl_cff=
grid(ngc)%pm(ibc,jbc)* &
1960 &
grid(ngc)%pn(ibc,jbc)* &
1963 tvalue=max(0.0_r8, &
1964 &
ocean(ngc)%t(ibc,jbc,k,tindex,itrc)- &
1966 tl_tvalue=(0.5_r8- &
1967 & sign(0.5_r8,-(
ocean(ngc)%t(ibc,jbc,k,tindex,itrc)- &
1968 & cff*(tff-tfc))))* &
1969 & (
ocean(ngc)%tl_t(ibc,jbc,k,tindex,itrc)- &
1970 & tl_cff*(tff-tfc)-cff*(tl_tff-tl_tfc))
1973 &
dt(ngc)*
clima(ngc)%Tnudgcof(ibc,jbc,k,itrc)* &
1974 & (
clima(ngc)%tclm(ibc,jbc,k,ic)-tvalue)
1975 tl_tvalue=tl_tvalue- &
1976 &
dt(ngc)*
clima(ngc)%Tnudgcof(ibc,jbc,k,itrc)* &
1980 tvalue=tvalue*
grid(ngc)%rmask(ibc,jbc)
1981 tl_tvalue=tl_tvalue*
grid(ngc)%rmask(ibc,jbc)
1985 ocean(ngc)%tl_t(ibc,jbc,k,tindex,itrc)=tl_tvalue
2005 & lbi, ubi, lbj, ubj, 1,
n(ngc), &
2009 &
ocean(ngc)%tl_t(:,:,:,tindex,:))
2070 integer,
intent(in) :: ng, model, vtype, tile
2076 integer :: lbid, ubid, lbjd, ubjd
2077 integer :: lbir, ubir, lbjr, ubjr
2078 integer :: dindex2d, rindex2d
2080 integer :: dindex3d, rindex3d
2082 integer :: cr, dg, k, rg, nrec, rec
2087 character (len=*),
parameter :: myfile = &
2088 & __FILE__//
", tl_fine2coarse"
2108 IF ((ng.eq.dg).and.(
dxmax(dg).lt.
dxmax(rg)))
THEN
2112 lbid=
bounds(dg)%LBi(tile)
2113 ubid=
bounds(dg)%UBi(tile)
2114 lbjd=
bounds(dg)%LBj(tile)
2115 ubjd=
bounds(dg)%UBj(tile)
2117 lbir=
bounds(rg)%LBi(tile)
2118 ubir=
bounds(rg)%UBi(tile)
2119 lbjr=
bounds(rg)%LBj(tile)
2120 ubjr=
bounds(rg)%UBj(tile)
2124 IF (
domain(ng)%SouthWest_Test(tile))
THEN
2126 WRITE (
stdout,10) dg, rg, cr
2127 10
FORMAT (6x,
'TL_FINE2COARSE - exchanging data between ', &
2128 &
'grids: dg = ',i2.2,
' and rg = ',i2.2, &
2148 IF (vtype.eq.
r2dvar)
THEN
2158 & lbid, ubid, lbjd, ubjd, &
2159 & lbir, ubir, lbjr, ubjr, &
2165 &
grid(dg)%rmask_full, &
2175 & lbid, ubid, lbjd, ubjd, &
2176 & lbir, ubir, lbjr, ubjr, &
2185 &
ocean(dg)%tl_zeta(:,:,dindex2d), &
2186 &
ocean(rg)%tl_zeta(:,:,rindex2d))
2197 & lbid, ubid, lbjd, ubjd, &
2198 & lbir, ubir, lbjr, ubjr, &
2204 &
grid(dg)%umask_full, &
2205 &
grid(rg)%umask_full, &
2207 &
ocean(dg)%tl_ubar(:,:,dindex2d), &
2209 &
ocean(rg)%tl_ubar(:,:,1), &
2210 &
ocean(rg)%tl_ubar(:,:,2))
2212 &
ocean(rg)%tl_ubar(:,:,rindex2d))
2220 & lbid, ubid, lbjd, ubjd, &
2221 & lbir, ubir, lbjr, ubjr, &
2227 &
grid(dg)%vmask_full, &
2228 &
grid(rg)%vmask_full, &
2230 &
ocean(dg)%tl_vbar(:,:,dindex2d), &
2232 &
ocean(rg)%tl_vbar(:,:,1), &
2233 &
ocean(rg)%tl_vbar(:,:,2))
2235 &
ocean(rg)%tl_vbar(:,:,rindex2d))
2245 ELSE IF (vtype.eq.
r3dvar)
THEN
2255 & lbid, ubid, lbjd, ubjd, 1,
n(dg), &
2256 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
2265 &
ocean(dg)%tl_t(:,:,:,dindex3d,itrc), &
2266 &
ocean(rg)%tl_t(:,:,:,rindex3d,itrc))
2268 & __line__, myfile))
RETURN
2278 & lbid, ubid, lbjd, ubjd, 1,
n(dg), &
2279 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
2285 &
grid(dg)%umask_full, &
2286 &
grid(rg)%umask_full, &
2288 &
ocean(dg)%tl_u(:,:,:,dindex3d), &
2289 &
ocean(rg)%tl_u(:,:,:,rindex3d))
2296 & lbid, ubid, lbjd, ubjd, 1,
n(dg), &
2297 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
2303 &
grid(dg)%vmask_full, &
2304 &
grid(rg)%vmask_full, &
2306 &
ocean(dg)%tl_v(:,:,:,dindex3d), &
2307 &
ocean(rg)%tl_v(:,:,:,rindex3d))
2317 IF (vtype.eq.
r2dvar)
THEN
2324 & lbir, ubir, lbjr, ubjr, &
2332 & lbir, ubir, lbjr, ubjr, &
2333 &
ocean(rg)%tl_ubar(:,:,k))
2339 & lbir, ubir, lbjr, ubjr, &
2340 &
ocean(rg)%tl_vbar(:,:,k))
2348 & lbir, ubir, lbjr, ubjr, &
2349 &
ocean(rg)%tl_zeta(:,:,rindex2d))
2355 & lbir, ubir, lbjr, ubjr, &
2356 &
ocean(rg)%tl_ubar(:,:,rindex2d))
2362 & lbir, ubir, lbjr, ubjr, &
2363 &
ocean(rg)%tl_vbar(:,:,rindex2d))
2367 ELSE IF (vtype.eq.
r3dvar)
THEN
2373 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
2374 &
ocean(rg)%tl_u(:,:,:,rindex3d))
2380 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
2381 &
ocean(rg)%tl_v(:,:,:,rindex3d))
2390 & lbir, ubir, lbjr, ubjr, &
2392 &
ocean(rg)%tl_t(:,:,:,rindex3d, &
2401 IF (vtype.eq.
r2dvar)
THEN
2410 & lbir, ubir, lbjr, ubjr, &
2424 & lbir, ubir, lbjr, ubjr, &
2427 &
ocean(rg)%tl_ubar(:,:,1), &
2428 &
ocean(rg)%tl_vbar(:,:,1), &
2429 &
ocean(rg)%tl_ubar(:,:,2), &
2430 &
ocean(rg)%tl_vbar(:,:,2))
2441 & lbir, ubir, lbjr, ubjr, &
2444 &
ocean(rg)%tl_zeta(:,:,rindex2d), &
2445 &
ocean(rg)%tl_ubar(:,:,rindex2d), &
2446 &
ocean(rg)%tl_vbar(:,:,rindex2d))
2449 ELSE IF (vtype.eq.
r3dvar)
THEN
2458 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
2461 &
ocean(rg)%tl_u(:,:,:,rindex3d), &
2462 &
ocean(rg)%tl_v(:,:,:,rindex3d))
2471 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
2475 &
ocean(rg)%tl_t(:,:,:,rindex3d,:))
2486 & LBi, UBi, LBj, UBj)
2535 logical,
intent(in) :: lputfsur
2536 integer,
intent(in) :: ng, dg, cr, model, tile
2537 integer,
intent(in) :: lbi, ubi, lbj, ubj
2541 logical :: uboundary, vboundary
2544 integer :: ilb, iub, jlb, jub, nptssn, nptswe, my_tile
2546 integer :: nsub, i, irec, j, m, tnew, told
2550 real(r8),
parameter :: spv = 0.0_r8
2552 real(dp) :: wnew, wold, secscale, fac
2553 real(r8) :: cff, cff1, tl_cff
2554 real(r8) :: my_value, tl_my_value
2556 character (len=*),
parameter :: myfile = &
2557 & __FILE__//
", tl_put_refined2d"
2559# include "set_bounds.h"
2570 IF (.not.lputfsur)
THEN
2572 ilb=
bounds(ng)%LBi(my_tile)
2573 iub=
bounds(ng)%UBi(my_tile)
2574 jlb=
bounds(ng)%LBj(my_tile)
2575 jub=
bounds(ng)%UBj(my_tile)
2579# ifdef NESTING_DEBUG
2606 fac=1.0_dp/(wold+wnew)
2610 IF (((wold*wnew).lt.0.0_dp).or.((wold+wnew).le.0.0_dp))
THEN
2611 IF (
domain(ng)%SouthWest_Test(tile))
THEN
2613 WRITE (
stdout,10) cr, dg, ng, &
2614 &
iic(dg), told, tnew, &
2615 &
iic(ng), wold, wnew, &
2629 free_surface :
IF (lputfsur)
THEN
2633 IF (((istrt.le.i).and.(i.le.iendt)).and. &
2634 & ((jstrt.le.j).and.(j.le.jendt)))
THEN
2656 &
refined(cr)%tl_zeta(1,m,told)+ &
2658 &
refined(cr)%tl_zeta(2,m,told)+ &
2660 &
refined(cr)%tl_zeta(3,m,told)+ &
2662 &
refined(cr)%tl_zeta(4,m,told))+ &
2665 &
refined(cr)%tl_zeta(1,m,tnew)+ &
2667 &
refined(cr)%tl_zeta(2,m,tnew)+ &
2669 &
refined(cr)%tl_zeta(3,m,tnew)+ &
2671 &
refined(cr)%tl_zeta(4,m,tnew))
2675 tl_my_value=tl_my_value*
grid(ng)%rmask(i,j)
2678 IF (my_value.le.(
dcrit(ng)-
grid(ng)%h(i,j)))
THEN
2681 tl_my_value=-
grid(ng)%tl_h(i,j)
2686 ocean(ng)%tl_zeta(i,j,1)=tl_my_value
2689 ocean(ng)%tl_zeta(i,j,2)=tl_my_value
2692 ocean(ng)%tl_zeta(i,j,3)=tl_my_value
2696 coupling(ng)%tl_Zt_avg1(i,j)=tl_my_value
2719 IF (((istrp.le.i).and.(i.le.iendt)).and. &
2720 & ((jstrt.le.j).and.(j.le.jendt)))
THEN
2742 &
refined(cr)%tl_ubar(1,m,told)+ &
2744 &
refined(cr)%tl_ubar(2,m,told)+ &
2746 &
refined(cr)%tl_ubar(3,m,told)+ &
2748 &
refined(cr)%tl_ubar(4,m,told))+ &
2751 &
refined(cr)%tl_ubar(1,m,tnew)+ &
2753 &
refined(cr)%tl_ubar(2,m,tnew)+ &
2755 &
refined(cr)%tl_ubar(3,m,tnew)+ &
2757 &
refined(cr)%tl_ubar(4,m,tnew))
2761 tl_my_value=tl_my_value*
grid(ng)%umask(i,j)
2766 tl_my_value=tl_my_value*
grid(ng)%umask_wet(i,j)
2772 IF(.not.(uboundary.and.(irec.eq.
indx1(ng))))
THEN
2775 ocean(ng)%tl_ubar(i,j,irec)=tl_my_value
2782 ocean(ng)%tl_ubar(i,j,irec)=tl_my_value
2800 IF (((istrt.le.i).and.(i.le.iendt)).and. &
2801 & ((jstrp.le.j).and.(j.le.jendt)))
THEN
2823 &
refined(cr)%tl_vbar(1,m,told)+ &
2825 &
refined(cr)%tl_vbar(2,m,told)+ &
2827 &
refined(cr)%tl_vbar(3,m,told)+ &
2829 &
refined(cr)%tl_vbar(4,m,told))+ &
2832 &
refined(cr)%tl_vbar(1,m,tnew)+ &
2834 &
refined(cr)%tl_vbar(2,m,tnew)+ &
2836 &
refined(cr)%tl_vbar(3,m,tnew)+ &
2838 &
refined(cr)%tl_vbar(4,m,tnew))
2842 tl_my_value=tl_my_value*
grid(ng)%vmask(i,j)
2846 tl_my_value=tl_my_value*
grid(ng)%vmask_wet(i,j)
2852 IF(.not.(vboundary.and.(irec.eq.
indx1(ng))))
THEN
2855 ocean(ng)%tl_vbar(i,j,irec)=tl_my_value
2862 ocean(ng)%tl_vbar(i,j,irec)=tl_my_value
2889 IF (
domain(ng)%Western_Edge(tile))
THEN
2894 cff=0.5_r8*
grid(ng)%on_u(istr,j)* &
2895 (
grid(ng)%h(istr-1,j)+ &
2897 &
grid(ng)%h(istr ,j)+ &
2899 tl_cff=0.5_r8*
grid(ng)%on_u(istr,j)* &
2900 (
grid(ng)%tl_h(istr-1,j)+ &
2902 &
grid(ng)%tl_h(istr ,j)+ &
2905# ifdef TIME_INTERP_FLUX
2906 my_value=cff1*(wold*
refined(cr)%DU_avg2(1,m,told)+ &
2907 & wnew*
refined(cr)%DU_avg2(1,m,tnew))/cff
2908 tl_my_value=cff1*(wold*
refined(cr)%tl_DU_avg2(1,m,told)+ &
2909 & wnew*
refined(cr)%tl_DU_avg2(1,m,tnew))/cff- &
2910 & tl_cff*my_value/cff
2912 my_value=cff1*
refined(cr)%DU_avg2(1,m,tnew)/cff
2913 tl_my_value=cff1*
refined(cr)%tl_DU_avg2(1,m,tnew)/cff- &
2914 & tl_cff*my_value/cff
2917 my_value=my_value*
grid(ng)%umask(istr,j)
2918 tl_my_value=tl_my_value*
grid(ng)%umask(istr,j)
2921 my_value=my_value*
grid(ng)%umask_wet(istr,j)
2922 tl_my_value=tl_my_value*
grid(ng)%umask_wet(istr,j)
2924# ifdef NESTING_DEBUG
2932 ocean(ng)%tl_ubar(istr,j,
indx1(ng))=tl_my_value
2938 IF (
domain(ng)%Eastern_Edge(tile))
THEN
2943 cff=0.5_r8*
grid(ng)%on_u(iend+1,j)* &
2944 & (
grid(ng)%h(iend+1,j)+ &
2946 &
grid(ng)%h(iend ,j)+ &
2948 tl_cff=0.5_r8*
grid(ng)%on_u(iend+1,j)* &
2949 & (
grid(ng)%tl_h(iend+1,j)+ &
2951 &
grid(ng)%tl_h(iend ,j)+ &
2954# ifdef TIME_INTERP_FLUX
2955 my_value=cff1*(wold*
refined(cr)%DU_avg2(1,m,told)+ &
2956 & wnew*
refined(cr)%DU_avg2(1,m,tnew))/cff
2957 tl_my_value=cff1*(wold*
refined(cr)%tl_DU_avg2(1,m,told)+ &
2958 & wnew*
refined(cr)%tl_DU_avg2(1,m,tnew))/cff- &
2959 & tl_cff*my_value/cff
2961 my_value=cff1*
refined(cr)%DU_avg2(1,m,tnew)/cff
2962 tl_my_value=cff1*
refined(cr)%tl_DU_avg2(1,m,tnew)/cff- &
2963 & tl_cff*my_value/cff
2966 my_value=my_value*
grid(ng)%umask(iend+1,j)
2967 tl_my_value=tl_my_value*
grid(ng)%umask(iend+1,j)
2970 my_value=my_value*
grid(ng)%umask_wet(iend+1,j)
2971 tl_my_value=tl_my_value*
grid(ng)%umask_wet(iend+1,j)
2973# ifdef NESTING_DEBUG
2981 ocean(ng)%tl_ubar(iend+1,j,
indx1(ng))=tl_my_value
2987 IF (
domain(ng)%Southern_Edge(tile))
THEN
2992 cff=0.5_r8*
grid(ng)%om_v(i,jstr)* &
2993 & (
grid(ng)%h(i,jstr-1)+ &
2995 &
grid(ng)%h(i,jstr )+ &
2997 tl_cff=0.5_r8*
grid(ng)%om_v(i,jstr)* &
2998 & (
grid(ng)%tl_h(i,jstr-1)+ &
3000 &
grid(ng)%tl_h(i,jstr )+ &
3003# ifdef TIME_INTERP_FLUX
3004 my_value=cff1*(wold*
refined(cr)%DV_avg2(1,m,told)+ &
3005 & wnew*
refined(cr)%DV_avg2(1,m,tnew))/cff
3006 tl_my_value=cff1*(wold*
refined(cr)%tl_DV_avg2(1,m,told)+ &
3007 & wnew*
refined(cr)%tl_DV_avg2(1,m,tnew))/cff- &
3008 & tl_cff*my_value/cff
3010 my_value=cff1*
refined(cr)%DV_avg2(1,m,tnew)/cff
3011 tl_my_value=cff1*
refined(cr)%tl_DV_avg2(1,m,tnew)/cff- &
3012 & tl_cff*my_value/cff
3015 my_value=my_value*
grid(ng)%vmask(i,jstr)
3016 tl_my_value=tl_my_value*
grid(ng)%vmask(i,jstr)
3019 my_value=my_value*
grid(ng)%vmask_wet(i,jstr)
3020 tl_my_value=tl_my_value*
grid(ng)%vmask_wet(i,jstr)
3022# ifdef NESTING_DEBUG
3030 ocean(ng)%tl_vbar(i,jstr,
indx1(ng))=tl_my_value
3036 IF (
domain(ng)%Northern_Edge(tile))
THEN
3041 cff=0.5_r8*
grid(ng)%om_v(i,jend+1)* &
3042 & (
grid(ng)%h(i,jend+1)+ &
3044 &
grid(ng)%h(i,jend )+ &
3046 tl_cff=0.5_r8*
grid(ng)%om_v(i,jend+1)* &
3047 & (
grid(ng)%tl_h(i,jend+1)+ &
3049 &
grid(ng)%tl_h(i,jend )+ &
3052# ifdef TIME_INTERP_FLUX
3053 my_value=cff1*(wold*
refined(cr)%DV_avg2(1,m,told)+ &
3054 & wnew*
refined(cr)%DV_avg2(1,m,tnew))/cff
3055 tl_my_value=cff1*(wold*
refined(cr)%tl_DV_avg2(1,m,told)+ &
3056 & wnew*
refined(cr)%tl_DV_avg2(1,m,tnew))/cff- &
3057 & tl_cff*my_value/cff
3059 my_value=cff1*
refined(cr)%DV_avg2(1,m,tnew)/cff
3060 tl_my_value=cff1*
refined(cr)%tl_DV_avg2(1,m,tnew)/cff- &
3061 & tl_cff*my_value/cff
3064 my_value=my_value*
grid(ng)%vmask(i,jend+1)
3065 tl_my_value=tl_my_value*
grid(ng)%vmask(i,jend+1)
3068 my_value=my_value*
grid(ng)%vmask_wet(i,jend+1)
3069 tl_my_value=tl_my_value*
grid(ng)%vmask_wet(i,jend+1)
3071# ifdef NESTING_DEBUG
3079 ocean(ng)%tl_vbar(i,jend+1,
indx1(ng))=tl_my_value
3116 & lbi, ubi, lbj, ubj, &
3122 &
ocean(ng)%tl_zeta(:,:,1), &
3123 &
ocean(ng)%tl_zeta(:,:,2), &
3124 &
ocean(ng)%tl_zeta(:,:,3))
3138 & lbi, ubi, lbj, ubj, &
3141 &
ocean(ng)%tl_ubar(:,:,1), &
3142 &
ocean(ng)%tl_ubar(:,:,2), &
3143 &
ocean(ng)%tl_ubar(:,:,3))
3154 & lbi, ubi, lbj, ubj, &
3157 &
ocean(ng)%tl_vbar(:,:,1), &
3158 &
ocean(ng)%tl_vbar(:,:,2), &
3159 &
ocean(ng)%tl_vbar(:,:,3))
3161# ifdef NESTING_DEBUG
3187 10
FORMAT (/,
' PUT_REFINE2D - unbounded contact points temporal: ', &
3188 &
' interpolation:', &
3189 & /,2x,
'cr = ',i2.2, &
3190 & 8x,
'dg = ',i2.2, &
3191 & 8x,
'ng = ',i2.2, &
3192 & /,2x,
'iic(dg) = ',i7.7, &
3193 & 3x,
'told = ',i1, &
3194 & 9x,
'tnew = ',i1, &
3195 & /,2x,
'iic(ng) = ',i7.7, &
3196 & 3x,
'Wold = ',f8.5, &
3197 & 2x,
'Wnew = ',f8.5, &
3198 & /,2x,
'time(ng) = ',i7.7, &
3199 & 3x,
'time(told) = ',i7.7, &
3200 & 3x,
'time(tnew) = ',i7.7)
3613 integer,
intent(in) :: ng, model, tile
3617 integer :: cr, dg, rg, i, j, k, m
3618 integer :: idg, jdg, kdg, imind, imaxd, jmind, jmaxd
3619 integer :: irg, jrg, krg, iminr, imaxr, jminr, jmaxr
3620 integer :: idgm1, idgp1, jdgm1, jdgp1
3623 integer :: nkpts, nwpts, nzpts
3625 integer,
parameter :: ispv = 0
3628 real(r8),
parameter :: spv = 0.0_r8
3630 real(r8) :: zbot, zr, ztop, dz, r1, r2
3631 real(r8) :: tl_zbot, tl_zr, tl_ztop, tl_dz, tl_r1, tl_r2
3633 real(r8),
allocatable :: zd(:,:,:)
3634 real(r8),
allocatable :: tl_zd(:,:,:)
3636 character (len=*),
parameter :: myfile = &
3637 & __FILE__//
", tl_z_weights"
3665 imind=
bounds(dg) % IstrT(tile)
3666 imaxd=
bounds(dg) % IendT(tile)
3667 jmind=
bounds(dg) % JstrT(tile)
3668 jmaxd=
bounds(dg) % JendT(tile)
3670 iminr=
bounds(rg) % IstrT(tile)
3671 imaxr=
bounds(rg) % IendT(tile)
3672 jminr=
bounds(rg) % JstrT(tile)
3673 jmaxr=
bounds(rg) % JendT(tile)
3685 rcontact(cr)%Kdg(1:
n(rg),1:npoints)=ispv
3686 rcontact(cr)%Vweight(1:2,1:
n(rg),1:npoints)=spv
3687 rcontact(cr)%tl_Vweight(1:2,1:
n(rg),1:npoints)=0.0_r8
3692 r_contact :
IF (.not.
rcontact(cr)%interpolate.and. &
3698 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
3699 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
3701 rcontact(cr)%Vweight(1,krg,m)=1.0_r8
3702 rcontact(cr)%tl_Vweight(1,krg,m)=0.0_r8
3703 rcontact(cr)%Vweight(2,krg,m)=0.0_r8
3704 rcontact(cr)%tl_Vweight(2,krg,m)=0.0_r8
3716 IF (.not.
allocated(zd))
THEN
3717 allocate ( zd(4,
n(dg),npoints) )
3720 IF (.not.
allocated(tl_zd))
THEN
3721 allocate ( tl_zd(4,
n(dg),npoints) )
3735 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
3737 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
3738 IF (((imind.le.idg).and.(idg.le.imaxd)).and. &
3739 & ((jmind.le.jdg).and.(jdg.le.jmaxd)))
THEN
3740 zd(1,kdg,m)=
grid(dg)%z_r(idg ,jdg ,kdg)
3741 tl_zd(1,kdg,m)=
grid(dg)%tl_z_r(idg ,jdg ,kdg)
3742 zd(2,kdg,m)=
grid(dg)%z_r(idgp1,jdg ,kdg)
3743 tl_zd(2,kdg,m)=
grid(dg)%tl_z_r(idgp1,jdg ,kdg)
3744 zd(3,kdg,m)=
grid(dg)%z_r(idgp1,jdgp1,kdg)
3745 tl_zd(3,kdg,m)=
grid(dg)%tl_z_r(idgp1,jdgp1,kdg)
3746 zd(4,kdg,m)=
grid(dg)%z_r(idg ,jdgp1,kdg)
3747 tl_zd(4,kdg,m)=
grid(dg)%tl_z_r(idg ,jdgp1,kdg)
3771 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
3772 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
3773 ztop=
rcontact(cr)%Lweight(1,m)*zd(1,
n(dg),m)+ &
3774 &
rcontact(cr)%Lweight(2,m)*zd(2,
n(dg),m)+ &
3775 &
rcontact(cr)%Lweight(3,m)*zd(3,
n(dg),m)+ &
3776 &
rcontact(cr)%Lweight(4,m)*zd(4,
n(dg),m)
3777 tl_ztop=
rcontact(cr)%Lweight(1,m)*tl_zd(1,
n(dg),m)+ &
3778 &
rcontact(cr)%Lweight(2,m)*tl_zd(2,
n(dg),m)+ &
3779 &
rcontact(cr)%Lweight(3,m)*tl_zd(3,
n(dg),m)+ &
3780 &
rcontact(cr)%Lweight(4,m)*tl_zd(4,
n(dg),m)
3781 zbot=
rcontact(cr)%Lweight(1,m)*zd(1,1 ,m)+ &
3782 &
rcontact(cr)%Lweight(2,m)*zd(2,1 ,m)+ &
3783 &
rcontact(cr)%Lweight(3,m)*zd(3,1 ,m)+ &
3784 &
rcontact(cr)%Lweight(4,m)*zd(4,1 ,m)
3785 tl_zbot=
rcontact(cr)%Lweight(1,m)*tl_zd(1,1 ,m)+ &
3786 &
rcontact(cr)%Lweight(2,m)*tl_zd(2,1 ,m)+ &
3787 &
rcontact(cr)%Lweight(3,m)*tl_zd(3,1 ,m)+ &
3788 &
rcontact(cr)%Lweight(4,m)*tl_zd(4,1 ,m)
3789 zr=
grid(rg)%z_r(irg,jrg,krg)
3790 tl_zr=
grid(rg)%tl_z_r(irg,jrg,krg)
3791 IF (zr.ge.ztop)
THEN
3793 rcontact(cr)%Vweight(1,krg,m)=0.0_r8
3794 rcontact(cr)%tl_Vweight(1,krg,m)=0.0_r8
3795 rcontact(cr)%Vweight(2,krg,m)=1.0_r8
3796 rcontact(cr)%tl_Vweight(2,krg,m)=0.0_r8
3797 ELSE IF (zbot.ge.zr)
THEN
3799 rcontact(cr)%Vweight(1,krg,m)=0.0_r8
3800 rcontact(cr)%tl_Vweight(1,krg,m)=0.0_r8
3801 rcontact(cr)%Vweight(2,krg,m)=1.0_r8
3802 rcontact(cr)%tl_Vweight(2,krg,m)=0.0_r8
3805 ztop=
rcontact(cr)%Lweight(1,m)*zd(1,kdg ,m)+ &
3806 &
rcontact(cr)%Lweight(2,m)*zd(2,kdg ,m)+ &
3807 &
rcontact(cr)%Lweight(3,m)*zd(3,kdg ,m)+ &
3808 &
rcontact(cr)%Lweight(4,m)*zd(4,kdg ,m)
3809 tl_ztop=
rcontact(cr)%Lweight(1,m)* &
3810 & tl_zd(1,kdg ,m)+ &
3814 & tl_zd(3,kdg ,m)+ &
3815 &
rcontact(cr)%Lweight(4,m)*tl_zd(4,kdg ,m)
3816 zbot=
rcontact(cr)%Lweight(1,m)*zd(1,kdg-1,m)+ &
3817 &
rcontact(cr)%Lweight(2,m)*zd(2,kdg-1,m)+ &
3818 &
rcontact(cr)%Lweight(3,m)*zd(3,kdg-1,m)+ &
3819 &
rcontact(cr)%Lweight(4,m)*zd(4,kdg-1,m)
3820 tl_zbot=
rcontact(cr)%Lweight(1,m)* &
3821 & tl_zd(1,kdg-1,m)+ &
3823 & tl_zd(2,kdg-1,m)+ &
3825 & tl_zd(3,kdg-1,m)+ &
3826 &
rcontact(cr)%Lweight(4,m)*tl_zd(4,kdg-1,m)
3827 IF ((ztop.gt.zr).and.(zr.ge.zbot))
THEN
3829 tl_dz=tl_ztop-tl_zbot
3831 tl_r2=(tl_zr-tl_zbot)/dz-tl_dz*r2/dz
3836 rcontact(cr)%tl_Vweight(1,krg,m)=tl_r1
3838 rcontact(cr)%tl_Vweight(2,krg,m)=tl_r2
3864 IF (
allocated(zd))
THEN
3867 IF (
allocated(tl_zd))
THEN
3882 imind=
bounds(dg) % IstrP(tile)
3883 imaxd=
bounds(dg) % IendT(tile)
3884 jmind=
bounds(dg) % JstrT(tile)
3885 jmaxd=
bounds(dg) % JendT(tile)
3887 iminr=
bounds(rg) % IstrP(tile)
3888 imaxr=
bounds(rg) % IendT(tile)
3889 jminr=
bounds(rg) % JstrT(tile)
3890 jmaxr=
bounds(rg) % JendT(tile)
3902 ucontact(cr)%Kdg(1:
n(rg),1:npoints)=ispv
3903 ucontact(cr)%Vweight(1:2,1:
n(rg),1:npoints)=spv
3904 ucontact(cr)%tl_Vweight(1:2,1:
n(rg),1:npoints)=0.0_r8
3909 u_contact :
IF (.not.
ucontact(cr)%interpolate.and. &
3915 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
3916 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
3918 ucontact(cr)%Vweight(1,krg,m)=1.0_r8
3919 ucontact(cr)%tl_Vweight(1,krg,m)=0.0_r8
3920 ucontact(cr)%Vweight(2,krg,m)=0.0_r8
3921 ucontact(cr)%tl_Vweight(2,krg,m)=0.0_r8
3933 IF (.not.
allocated(zd))
THEN
3934 allocate (zd(4,
n(dg),npoints))
3937 IF (.not.
allocated(tl_zd))
THEN
3938 allocate (tl_zd(4,
n(dg),npoints))
3952 idgm1=max(idg-1,
bounds(dg)%LBi(-1))
3953 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
3955 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
3956 IF (((imind.le.idg).and.(idg.le.imaxd)).and. &
3957 & ((jmind.le.jdg).and.(jdg.le.jmaxd)))
THEN
3958 zd(1,kdg,m)=0.5_r8*(
grid(dg)%z_r(idgm1,jdg ,kdg)+ &
3959 &
grid(dg)%z_r(idg ,jdg ,kdg))
3960 tl_zd(1,kdg,m)=0.5_r8* &
3961 & (
grid(dg)%tl_z_r(idgm1,jdg ,kdg)+ &
3962 &
grid(dg)%tl_z_r(idg ,jdg ,kdg))
3963 zd(2,kdg,m)=0.5_r8*(
grid(dg)%z_r(idg ,jdg ,kdg)+ &
3964 &
grid(dg)%z_r(idgp1,jdg ,kdg))
3965 tl_zd(2,kdg,m)=0.5_r8* &
3966 & (
grid(dg)%tl_z_r(idg ,jdg ,kdg)+ &
3967 &
grid(dg)%tl_z_r(idgp1,jdg ,kdg))
3968 zd(3,kdg,m)=0.5_r8*(
grid(dg)%z_r(idg ,jdgp1,kdg)+ &
3969 &
grid(dg)%z_r(idgp1,jdgp1,kdg))
3970 tl_zd(3,kdg,m)=0.5_r8* &
3971 & (
grid(dg)%tl_z_r(idg ,jdgp1,kdg)+ &
3972 &
grid(dg)%tl_z_r(idgp1,jdgp1,kdg))
3973 zd(4,kdg,m)=0.5_r8*(
grid(dg)%z_r(idgm1,jdgp1,kdg)+ &
3974 &
grid(dg)%z_r(idg ,jdgp1,kdg))
3975 tl_zd(4,kdg,m)=0.5_r8* &
3976 & (
grid(dg)%tl_z_r(idgm1,jdgp1,kdg)+ &
3977 &
grid(dg)%tl_z_r(idg ,jdgp1,kdg))
4001 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
4002 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
4003 ztop=
ucontact(cr)%Lweight(1,m)*zd(1,
n(dg),m)+ &
4004 &
ucontact(cr)%Lweight(2,m)*zd(2,
n(dg),m)+ &
4005 &
ucontact(cr)%Lweight(3,m)*zd(3,
n(dg),m)+ &
4006 &
ucontact(cr)%Lweight(4,m)*zd(4,
n(dg),m)
4007 tl_ztop=
ucontact(cr)%Lweight(1,m)*tl_zd(1,
n(dg),m)+ &
4008 &
ucontact(cr)%Lweight(2,m)*tl_zd(2,
n(dg),m)+ &
4009 &
ucontact(cr)%Lweight(3,m)*tl_zd(3,
n(dg),m)+ &
4010 &
ucontact(cr)%Lweight(4,m)*tl_zd(4,
n(dg),m)
4011 zbot=
ucontact(cr)%Lweight(1,m)*zd(1,1 ,m)+ &
4012 &
ucontact(cr)%Lweight(2,m)*zd(2,1 ,m)+ &
4013 &
ucontact(cr)%Lweight(3,m)*zd(3,1 ,m)+ &
4014 &
ucontact(cr)%Lweight(4,m)*zd(4,1 ,m)
4015 tl_zbot=
ucontact(cr)%Lweight(1,m)*tl_zd(1,1 ,m)+ &
4016 &
ucontact(cr)%Lweight(2,m)*tl_zd(2,1 ,m)+ &
4017 &
ucontact(cr)%Lweight(3,m)*tl_zd(3,1 ,m)+ &
4018 &
ucontact(cr)%Lweight(4,m)*tl_zd(4,1 ,m)
4019 zr=0.5_r8*(
grid(rg)%z_r(irg ,jrg,krg)+ &
4020 &
grid(rg)%z_r(irg-1,jrg,krg))
4021 tl_zr=0.5_r8*(
grid(rg)%tl_z_r(irg ,jrg,krg)+ &
4022 &
grid(rg)%tl_z_r(irg-1,jrg,krg))
4023 IF (zr.ge.ztop)
THEN
4025 ucontact(cr)%Vweight(1,krg,m)=0.0_r8
4026 ucontact(cr)%tl_Vweight(1,krg,m)=0.0_r8
4027 ucontact(cr)%Vweight(2,krg,m)=1.0_r8
4028 ucontact(cr)%tl_Vweight(2,krg,m)=0.0_r8
4029 ELSE IF (zbot.ge.zr)
THEN
4031 ucontact(cr)%Vweight(1,krg,m)=0.0_r8
4032 ucontact(cr)%tl_Vweight(1,krg,m)=0.0_r8
4033 ucontact(cr)%Vweight(2,krg,m)=1.0_r8
4034 ucontact(cr)%tl_Vweight(2,krg,m)=0.0_r8
4037 ztop=
ucontact(cr)%Lweight(1,m)*zd(1,kdg ,m)+ &
4038 &
ucontact(cr)%Lweight(2,m)*zd(2,kdg ,m)+ &
4039 &
ucontact(cr)%Lweight(3,m)*zd(3,kdg ,m)+ &
4040 &
ucontact(cr)%Lweight(4,m)*zd(4,kdg ,m)
4041 tl_ztop=
ucontact(cr)%Lweight(1,m)* &
4042 & tl_zd(1,kdg ,m)+ &
4044 & tl_zd(2,kdg ,m)+ &
4046 & tl_zd(3,kdg ,m)+ &
4047 &
ucontact(cr)%Lweight(4,m)*tl_zd(4,kdg ,m)
4048 zbot=
ucontact(cr)%Lweight(1,m)*zd(1,kdg-1,m)+ &
4049 &
ucontact(cr)%Lweight(2,m)*zd(2,kdg-1,m)+ &
4050 &
ucontact(cr)%Lweight(3,m)*zd(3,kdg-1,m)+ &
4051 &
ucontact(cr)%Lweight(4,m)*zd(4,kdg-1,m)
4052 tl_zbot=
ucontact(cr)%Lweight(1,m)* &
4053 & tl_zd(1,kdg-1,m)+ &
4055 & tl_zd(2,kdg-1,m)+ &
4057 & tl_zd(3,kdg-1,m)+ &
4058 &
ucontact(cr)%Lweight(4,m)*tl_zd(4,kdg-1,m)
4059 IF ((ztop.gt.zr).and.(zr.ge.zbot))
THEN
4061 tl_dz=tl_ztop-tl_zbot
4063 tl_r2=(tl_zr-tl_zbot)/dz-tl_dz*r2/dz
4068 ucontact(cr)%tl_Vweight(1,krg,m)=tl_r1
4070 ucontact(cr)%tl_Vweight(2,krg,m)=tl_r2
4096 IF (
allocated(zd))
THEN
4099 IF (
allocated(tl_zd))
THEN
4114 imind=
bounds(dg) % IstrT(tile)
4115 imaxd=
bounds(dg) % IendT(tile)
4116 jmind=
bounds(dg) % JstrP(tile)
4117 jmaxd=
bounds(dg) % JendT(tile)
4119 iminr=
bounds(rg) % IstrT(tile)
4120 imaxr=
bounds(rg) % IendT(tile)
4121 jminr=
bounds(rg) % JstrP(tile)
4122 jmaxr=
bounds(rg) % JendT(tile)
4134 vcontact(cr)%Kdg(1:
n(rg),1:npoints)=ispv
4135 vcontact(cr)%Vweight(1:2,1:
n(rg),1:npoints)=spv
4136 vcontact(cr)%tl_Vweight(1:2,1:
n(rg),1:npoints)=0.0_r8
4141 v_contact :
IF (.not.
vcontact(cr)%interpolate.and. &
4147 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
4148 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
4150 vcontact(cr)%Vweight(1,krg,m)=1.0_r8
4151 vcontact(cr)%tl_Vweight(1,krg,m)=0.0_r8
4152 vcontact(cr)%Vweight(2,krg,m)=0.0_r8
4153 vcontact(cr)%tl_Vweight(2,krg,m)=0.0_r8
4165 IF (.not.
allocated(zd))
THEN
4166 allocate (zd(4,
n(dg),npoints))
4169 IF (.not.
allocated(tl_zd))
THEN
4170 allocate (tl_zd(4,
n(dg),npoints))
4180 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
4182 jdgm1=max(jdg-1,
bounds(dg)%LBj(-1))
4183 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
4184 IF (((imind.le.idg).and.(idg.le.imaxd)).and. &
4185 & ((jmind.le.jdg).and.(jdg.le.jmaxd)))
THEN
4186 zd(1,kdg,m)=0.5_r8*(
grid(dg)%z_r(idg ,jdgm1,kdg)+ &
4187 &
grid(dg)%z_r(idg ,jdg ,kdg))
4188 tl_zd(1,kdg,m)=0.5_r8* &
4189 & (
grid(dg)%tl_z_r(idg ,jdgm1,kdg)+ &
4190 &
grid(dg)%tl_z_r(idg ,jdg ,kdg))
4191 zd(2,kdg,m)=0.5_r8*(
grid(dg)%z_r(idgp1,jdgm1,kdg)+ &
4192 &
grid(dg)%z_r(idgp1,jdg ,kdg))
4193 tl_zd(2,kdg,m)=0.5_r8* &
4194 & (
grid(dg)%tl_z_r(idgp1,jdgm1,kdg)+ &
4195 &
grid(dg)%tl_z_r(idgp1,jdg ,kdg))
4196 zd(3,kdg,m)=0.5_r8*(
grid(dg)%z_r(idgp1,jdg ,kdg)+ &
4197 &
grid(dg)%z_r(idgp1,jdgp1,kdg))
4198 tl_zd(3,kdg,m)=0.5_r8* &
4199 & (
grid(dg)%tl_z_r(idgp1,jdg ,kdg)+ &
4200 &
grid(dg)%tl_z_r(idgp1,jdgp1,kdg))
4201 zd(4,kdg,m)=0.5_r8*(
grid(dg)%z_r(idg ,jdg ,kdg)+ &
4202 &
grid(dg)%z_r(idg ,jdgp1,kdg))
4203 tl_zd(4,kdg,m)=0.5_r8* &
4204 & (
grid(dg)%tl_z_r(idg ,jdg ,kdg)+ &
4205 &
grid(dg)%tl_z_r(idg ,jdgp1,kdg))
4229 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
4230 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
4231 ztop=
vcontact(cr)%Lweight(1,m)*zd(1,
n(dg),m)+ &
4232 &
vcontact(cr)%Lweight(2,m)*zd(2,
n(dg),m)+ &
4233 &
vcontact(cr)%Lweight(3,m)*zd(3,
n(dg),m)+ &
4234 &
vcontact(cr)%Lweight(4,m)*zd(4,
n(dg),m)
4235 tl_ztop=
vcontact(cr)%Lweight(1,m)*tl_zd(1,
n(dg),m)+ &
4236 &
vcontact(cr)%Lweight(2,m)*tl_zd(2,
n(dg),m)+ &
4237 &
vcontact(cr)%Lweight(3,m)*tl_zd(3,
n(dg),m)+ &
4238 &
vcontact(cr)%Lweight(4,m)*tl_zd(4,
n(dg),m)
4239 zbot=
vcontact(cr)%Lweight(1,m)*zd(1,1 ,m)+ &
4240 &
vcontact(cr)%Lweight(2,m)*zd(2,1 ,m)+ &
4241 &
vcontact(cr)%Lweight(3,m)*zd(3,1 ,m)+ &
4242 &
vcontact(cr)%Lweight(4,m)*zd(4,1 ,m)
4243 tl_zbot=
vcontact(cr)%Lweight(1,m)*tl_zd(1,1 ,m)+ &
4244 &
vcontact(cr)%Lweight(2,m)*tl_zd(2,1 ,m)+ &
4245 &
vcontact(cr)%Lweight(3,m)*tl_zd(3,1 ,m)+ &
4246 &
vcontact(cr)%Lweight(4,m)*tl_zd(4,1 ,m)
4247 zr=0.5_r8*(
grid(rg)%z_r(irg,jrg ,krg)+ &
4248 &
grid(rg)%z_r(irg,jrg-1,krg))
4249 tl_zr=0.5_r8*(
grid(rg)%tl_z_r(irg,jrg ,krg)+ &
4250 &
grid(rg)%tl_z_r(irg,jrg-1,krg))
4251 IF (zr.ge.ztop)
THEN
4253 vcontact(cr)%Vweight(1,krg,m)=0.0_r8
4254 vcontact(cr)%tl_Vweight(1,krg,m)=0.0_r8
4255 vcontact(cr)%Vweight(2,krg,m)=1.0_r8
4256 vcontact(cr)%tl_Vweight(2,krg,m)=0.0_r8
4257 ELSE IF (zbot.ge.zr)
THEN
4259 vcontact(cr)%Vweight(1,krg,m)=0.0_r8
4260 vcontact(cr)%tl_Vweight(1,krg,m)=0.0_r8
4261 vcontact(cr)%Vweight(2,krg,m)=1.0_r8
4262 vcontact(cr)%tl_Vweight(2,krg,m)=0.0_r8
4265 ztop=
vcontact(cr)%Lweight(1,m)*zd(1,kdg ,m)+ &
4266 &
vcontact(cr)%Lweight(2,m)*zd(2,kdg ,m)+ &
4267 &
vcontact(cr)%Lweight(3,m)*zd(3,kdg ,m)+ &
4268 &
vcontact(cr)%Lweight(4,m)*zd(4,kdg ,m)
4269 tl_ztop=
vcontact(cr)%Lweight(1,m)* &
4270 & tl_zd(1,kdg ,m)+ &
4272 & tl_zd(2,kdg ,m)+ &
4274 & tl_zd(3,kdg ,m)+ &
4275 &
vcontact(cr)%Lweight(4,m)*tl_zd(4,kdg ,m)
4276 zbot=
vcontact(cr)%Lweight(1,m)*zd(1,kdg-1,m)+ &
4277 &
vcontact(cr)%Lweight(2,m)*zd(2,kdg-1,m)+ &
4278 &
vcontact(cr)%Lweight(3,m)*zd(3,kdg-1,m)+ &
4279 &
vcontact(cr)%Lweight(4,m)*zd(4,kdg-1,m)
4280 tl_zbot=
vcontact(cr)%Lweight(1,m)* &
4281 & tl_zd(1,kdg-1,m)+ &
4283 & tl_zd(2,kdg-1,m)+ &
4285 & tl_zd(3,kdg-1,m)+ &
4286 &
vcontact(cr)%Lweight(4,m)*tl_zd(4,kdg-1,m)
4287 IF ((ztop.gt.zr).and.(zr.ge.zbot))
THEN
4289 tl_dz=tl_ztop-tl_zbot
4291 tl_r2=(tl_zr-tl_zbot)/dz-tl_dz*r2/dz
4296 vcontact(cr)%tl_Vweight(1,krg,m)=tl_r1
4298 vcontact(cr)%tl_Vweight(2,krg,m)=tl_r2
4324 IF (
allocated(zd))
THEN
4327 IF (
allocated(tl_zd))
THEN
4342 & cr, Npoints, contact, &
4343 & LBi, UBi, LBj, UBj, LBk, UBk, &
4389 integer,
intent(in) :: rg, model, tile
4390 integer,
intent(in) :: gtype, cr, Npoints
4391 integer,
intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
4393 character(len=*),
intent(in) :: svname
4395 TYPE (T_NGC),
intent(in) :: contact(:)
4397# ifdef ASSUMED_SHAPE
4398 real(r8),
intent(in) :: Ac(:,:,:)
4399 real(r8),
intent(in) :: tl_Ac(:,:,:)
4401 real(r8),
intent(in) :: Amask(LBi:,LBj:)
4403 real(r8),
intent(inout) :: tl_Ar(LBi:,LBj:,LBk:)
4405 real(r8),
intent(in) :: Ac(Npoints,LBk:UBk,4)
4406 real(r8),
intent(in) :: tl_Ac(Npoints,LBk:UBk,4)
4408 real(r8),
intent(in) :: Amask(LBi:UBi,LBj:UBj)
4410 real(r8),
intent(inout) :: tl_Ar(LBi:UBi,LBj:UBj,LBk:UBk)
4415 integer :: i, j, k, kdg, kdgm1, m
4416 integer :: Istr, Iend, Jstr, Jend, Kmin
4418 real(r8),
dimension(8) :: cff
4419 real(r8),
dimension(8) :: tl_cff
4429 istr=
bounds(rg) % IstrT(tile)
4430 iend=
bounds(rg) % IendT(tile)
4431 jstr=
bounds(rg) % JstrT(tile)
4432 jend=
bounds(rg) % JendT(tile)
4435 istr=
bounds(rg) % IstrP(tile)
4436 iend=
bounds(rg) % IendT(tile)
4437 jstr=
bounds(rg) % JstrT(tile)
4438 jend=
bounds(rg) % JendT(tile)
4441 istr=
bounds(rg) % IstrT(tile)
4442 iend=
bounds(rg) % IendT(tile)
4443 jstr=
bounds(rg) % JstrP(tile)
4444 jend=
bounds(rg) % JendT(tile)
4447 istr=
bounds(rg) % IstrT(tile)
4448 iend=
bounds(rg) % IendT(tile)
4449 jstr=
bounds(rg) % JstrT(tile)
4450 jend=
bounds(rg) % JendT(tile)
4458 i=contact(cr)%Irg(m)
4459 j=contact(cr)%Jrg(m)
4460 kdg=contact(cr)%Kdg(k,m)
4461 kdgm1=max(kdg-1,kmin)
4462 IF (((istr.le.i).and.(i.le.iend)).and. &
4463 & ((jstr.le.j).and.(j.le.jend)))
THEN
4464 cff(1)=contact(cr)%Lweight(1,m)*contact(cr)%Vweight(1,k,m)
4465 tl_cff(1)=contact(cr)%Lweight(1,m)* &
4466 & contact(cr)%tl_Vweight(1,k,m)
4467 cff(2)=contact(cr)%Lweight(2,m)*contact(cr)%Vweight(1,k,m)
4468 tl_cff(2)=contact(cr)%Lweight(2,m)* &
4469 & contact(cr)%tl_Vweight(1,k,m)
4470 cff(3)=contact(cr)%Lweight(3,m)*contact(cr)%Vweight(1,k,m)
4471 tl_cff(3)=contact(cr)%Lweight(3,m)* &
4472 & contact(cr)%tl_Vweight(1,k,m)
4473 cff(4)=contact(cr)%Lweight(4,m)*contact(cr)%Vweight(1,k,m)
4474 tl_cff(4)=contact(cr)%Lweight(4,m)* &
4475 & contact(cr)%tl_Vweight(1,k,m)
4476 cff(5)=contact(cr)%Lweight(1,m)*contact(cr)%Vweight(2,k,m)
4477 tl_cff(5)=contact(cr)%Lweight(1,m)* &
4478 & contact(cr)%tl_Vweight(2,k,m)
4479 cff(6)=contact(cr)%Lweight(2,m)*contact(cr)%Vweight(2,k,m)
4480 tl_cff(6)=contact(cr)%Lweight(2,m)* &
4481 & contact(cr)%tl_Vweight(2,k,m)
4482 cff(7)=contact(cr)%Lweight(3,m)*contact(cr)%Vweight(2,k,m)
4483 tl_cff(7)=contact(cr)%Lweight(3,m)* &
4484 & contact(cr)%tl_Vweight(2,k,m)
4485 cff(8)=contact(cr)%Lweight(4,m)*contact(cr)%Vweight(2,k,m)
4486 tl_cff(8)=contact(cr)%Lweight(4,m)* &
4487 & contact(cr)%tl_Vweight(2,k,m)
4496 tl_ar(i,j,k)=tl_cff(1)*ac(1,kdgm1,m)+ &
4497 & cff(1)*tl_ac(1,kdgm1,m)+ &
4498 & tl_cff(2)*ac(2,kdgm1,m)+ &
4499 & cff(2)*tl_ac(2,kdgm1,m)+ &
4500 & tl_cff(3)*ac(3,kdgm1,m)+ &
4501 & cff(3)*tl_ac(3,kdgm1,m)+ &
4502 & tl_cff(4)*ac(4,kdgm1,m)+ &
4503 & cff(4)*tl_ac(4,kdgm1,m)+ &
4504 & tl_cff(5)*ac(1,kdg ,m)+ &
4505 & cff(5)*tl_ac(1,kdg ,m)+ &
4506 & tl_cff(6)*ac(2,kdg ,m)+ &
4507 & cff(6)*tl_ac(2,kdg ,m)+ &
4508 & tl_cff(7)*ac(3,kdg ,m)+ &
4509 & cff(7)*tl_ac(3,kdg ,m)+ &
4510 & tl_cff(8)*ac(4,kdg ,m)+ &
4511 & cff(8)*tl_ac(4,kdg ,m)
4514 tl_ar(i,j,k)=tl_ar(i,j,k)*amask(i,j)
4555 integer,
intent(in) :: ngf, model, tile
4560 integer :: ilb, iub, jlb, jub, nptssn, nptswe, my_tile
4562 integer :: iedge, ibc, ibc_min, ibc_max, ibf, io
4563 integer :: jedge, jbc, jbc_min, jbc_max, jbf, jo
4564 integer :: istr, iend, jstr, jend
4565 integer :: cjcr, cr, dg, half, icr, isum, jsum, m, rg
4566 integer :: tnew, told
4569 real(r8),
parameter :: spv = 0.0_r8
4571 real(r8) :: eastsum, northsum, southsum, westsum
4572 real(r8) :: tl_eastsum, tl_northsum, tl_southsum, tl_westsum
4573# ifdef NESTING_DEBUG
4592 IF ((rg.eq.ngf).and.(
dxmax(dg).gt.
dxmax(rg)))
THEN
4596 istr=
bounds(dg)%Istr(tile)
4597 iend=
bounds(dg)%Iend(tile)
4598 jstr=
bounds(dg)%Jstr(tile)
4599 jend=
bounds(dg)%Jend(tile)
4607 IF ((rg.eq.
rcontact(icr)%donor_grid).and. &
4608 & (dg.eq.
rcontact(icr)%receiver_grid))
THEN
4619 ilb=
bounds(dg)%LBi(my_tile)
4620 iub=
bounds(dg)%UBi(my_tile)
4621 jlb=
bounds(dg)%LBj(my_tile)
4622 jub=
bounds(dg)%UBj(my_tile)
4654 jbc_max=
j_top(ngf)-1
4656# ifdef NESTING_DEBUG
4657 IF (
domain(ngf)%SouthWest_Test(tile))
THEN
4659 WRITE (301,10)
'Western Boundary Mass Fluxes: ', &
4660 & cr, dg, rg,
iif(rg),
iic(rg), int(
time(rg))
4667 IF (((istr.le.ibc).and.(ibc.le.iend)).and. &
4668 & ((jbc_min.le.jbc).and.(jbc.le.jbc_max)))
THEN
4678 tl_westsum=tl_westsum+ &
4691# ifdef NESTING_DEBUG
4692 IF (westsum.ne.0)
THEN
4693 mfratio=
refined(cr)%DU_avg2(1,m,tnew)/westsum
4697 WRITE (301,30) jbc,
refined(cr)%DU_avg2(1,m,tnew), &
4711 jbc_max=
j_top(ngf)-1
4713# ifdef NESTING_DEBUG
4714 IF (
domain(ngf)%SouthWest_Test(tile))
THEN
4716 WRITE (301,10)
'Eastern Boundary Mass Fluxes: ', &
4717 & cr, dg, rg,
iif(rg),
iic(rg), int(
time(rg))
4724 IF (((istr.le.ibc).and.(ibc.le.iend)).and. &
4725 & ((jbc_min.le.jbc).and.(jbc.le.jbc_max)))
THEN
4735 tl_eastsum=tl_eastsum+ &
4748# ifdef NESTING_DEBUG
4749 IF (eastsum.ne.0)
THEN
4750 mfratio=
refined(cr)%DU_avg2(1,m,tnew)/eastsum
4754 WRITE (301,30) jbc,
refined(cr)%DU_avg2(1,m,tnew), &
4770# ifdef NESTING_DEBUG
4771 IF (
domain(ngf)%SouthWest_Test(tile))
THEN
4773 WRITE (301,20)
'Southern Boundary Mass Fluxes: ', &
4774 & cr, dg, rg,
iif(rg),
iic(rg), int(
time(rg))
4781 IF (((ibc_min.le.ibc).and.(ibc.le.ibc_max)).and. &
4782 & ((jstr.le.jbc).and.(jbc.le.jend)))
THEN
4793 tl_southsum=tl_southsum+ &
4806# ifdef NESTING_DEBUG
4807 IF (southsum.ne.0)
THEN
4808 mfratio=
refined(cr)%DV_avg2(1,m,tnew)/southsum
4812 WRITE (301,30) ibc,
refined(cr)%DV_avg2(1,m,tnew), &
4828# ifdef NESTING_DEBUG
4829 IF (
domain(ngf)%SouthWest_Test(tile))
THEN
4831 WRITE (301,20)
'Northern Boundary Mass Fluxes: ', &
4832 & cr, dg, rg,
iif(rg),
iic(rg), int(
time(rg))
4839 IF (((ibc_min.le.ibc).and.(ibc.le.ibc_max)).and. &
4840 & ((jstr.le.jbc).and.(jbc.le.jend)))
THEN
4851 tl_northsum=tl_northsum+ &
4864# ifdef NESTING_DEBUG
4865 IF (northsum.ne.0)
THEN
4866 mfratio=
refined(cr)%DV_avg2(1,m,tnew)/northsum
4870 WRITE (301,30) ibc,
refined(cr)%DV_avg2(1,m,tnew), &
4900# ifdef NESTING_DEBUG
4904 10
FORMAT (/,1x,a,/,/,4x,
'cr = ',i2.2,4x,
'dg = ',i2.2,4x,
'rg = ', &
4905 & i2.2,4x,
'iif(rg) = ',i3.3,4x,
'iic(rg) = ',i10.10,4x, &
4906 &
'time(rg) = ',i10.10,/,/,2x,
'Coarse',6x,
'Coarse Grid',8x, &
4907 &
'Fine Grid',11x,
'Ratio',/,4x,
'Jb',9x,
'DU_avg2',9x, &
4909 20
FORMAT (/,1x,a,/,/,4x,
'cr = ',i2.2,4x,
'dg = ',i2.2,4x,
'rg = ', &
4910 & i2.2,4x,
'iif(rg) = ',i3.3,4x,
'iic(rg) = ',i10.10,4x, &
4911 &
'time(rg) = ',i10.10,/,/,2x,
'Coarse',6x,
'Coarse Grid',8x, &
4912 &
'Fine Grid',11x,
'Ratio',/,4x,
'Ib',9x,
'DV_avg2',9x, &
4914 30
FORMAT (4x,i4.4,3(3x,1p,e15.8))