1217# ifdef QUADRATIC_WEIGHTS
1235 integer,
intent(in) :: ng, model, tile
1239 integer :: cr, dg, m, rg
1240 integer :: istr, iend, jstr, jend
1241 integer :: idg, idgp1, jdg, jdgp1
1242 integer :: npointsr, npointsu, npointsv
1244 integer :: lpoints, qpoints
1248 real(r8) :: lwsum, lwsum_check, masklwsum
1249# ifdef QUADRATIC_WEIGHTS
1250 real(r8) :: qwsum, qwsum_check, maskqwsum
1253 real(r8),
parameter :: spv = 0.0_r8
1255 real(r8),
dimension(4) :: lweight
1256# ifdef QUADRATIC_WEIGHTS
1257 real(r8),
dimension(9) :: qweight
1260 real(r8),
allocatable :: lw(:,:)
1261# ifdef QUADRATIC_WEIGHTS
1262 real(r8),
allocatable :: qw(:,:)
1266 character (len=*),
parameter :: myfile = &
1267 & __FILE__//
", mask_hweights"
1282 & (dg.eq.ng).and.(dg.lt.rg))
THEN
1286 istr=
bounds(dg) % Istr(tile)
1287 iend=
bounds(dg) % Iend(tile)
1288 jstr=
bounds(dg) % Jstr(tile)
1289 jend=
bounds(dg) % Jend(tile)
1304 IF (.not.
allocated(lw))
THEN
1305 allocate ( lw(4,npointsr) )
1309# ifdef QUADRATIC_WEIGHTS
1311 IF (.not.
allocated(qw))
THEN
1312 allocate ( qw(9,npointsr) )
1322 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
1324 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
1325 IF (((istr.le.idg).and.(idg.le.iend)).and. &
1326 & ((jstr.le.jdg).and.(jdg.le.jend)))
THEN
1330 masklwsum=
grid(dg)%rmask(idg ,jdg )+ &
1331 &
grid(dg)%rmask(idgp1,jdg )+ &
1332 &
grid(dg)%rmask(idgp1,jdgp1)+ &
1333 &
grid(dg)%rmask(idg ,jdgp1)
1334 IF (masklwsum.lt.4)
THEN
1336 lweight(1)=
rcontact(cr)%LweightUnmasked(1,m)* &
1337 &
grid(dg)%rmask_full(idg ,jdg )
1338 lweight(2)=
rcontact(cr)%LweightUnmasked(2,m)* &
1339 &
grid(dg)%rmask_full(idgp1,jdg )
1340 lweight(3)=
rcontact(cr)%LweightUnmasked(3,m)* &
1341 &
grid(dg)%rmask_full(idgp1,jdgp1)
1342 lweight(4)=
rcontact(cr)%LweightUnmasked(4,m)* &
1343 &
grid(dg)%rmask_full(idg ,jdgp1)
1345 lweight(1)=
rcontact(cr)%Lweight(1,m)* &
1346 &
grid(dg)%rmask_full(idg ,jdg )
1347 lweight(2)=
rcontact(cr)%Lweight(2,m)* &
1348 &
grid(dg)%rmask_full(idgp1,jdg )
1349 lweight(3)=
rcontact(cr)%Lweight(3,m)* &
1350 &
grid(dg)%rmask_full(idgp1,jdgp1)
1351 lweight(4)=
rcontact(cr)%Lweight(4,m)* &
1352 &
grid(dg)%rmask_full(idg ,jdgp1)
1355 IF (lwsum.gt.0)
THEN
1357 lweight(1)=cff*lweight(1)
1358 lweight(2)=cff*lweight(2)
1359 lweight(3)=cff*lweight(3)
1360 lweight(4)=cff*lweight(4)
1364 lwsum_check=sum(lweight)
1376 rcontact(cr)%Lweight(1,m)=lweight(1)
1377 rcontact(cr)%Lweight(2,m)=lweight(2)
1378 rcontact(cr)%Lweight(3,m)=lweight(3)
1379 rcontact(cr)%Lweight(4,m)=lweight(4)
1383# ifdef QUADRATIC_WEIGHTS
1387 maskqwsum=
grid(dg)%rmask(idg-1, jdg-1)+ &
1388 &
grid(dg)%rmask(idg , jdg-1)+ &
1389 &
grid(dg)%rmask(idgp1, jdg-1)+ &
1390 &
grid(dg)%rmask(idg-1, jdg )+ &
1391 &
grid(dg)%rmask(idg , jdg )+ &
1392 &
grid(dg)%rmask(idgp1, jdg )+ &
1393 &
grid(dg)%rmask(idg-1, jdgp1)+ &
1394 &
grid(dg)%rmask(idg , jdgp1)+ &
1395 &
grid(dg)%rmask(idgp1, jdgp1)
1396 IF (maskqwsum.lt.9)
THEN
1398 qweight(1)=
rcontact(cr)%QweightUnmasked(1,m)* &
1399 &
grid(dg)%rmask_full(idg-1,jdg-1)
1400 qweight(2)=
rcontact(cr)%QweightUnmasked(2,m)* &
1401 &
grid(dg)%rmask_full(idg ,jdg-1)
1402 qweight(3)=
rcontact(cr)%QweightUnmasked(3,m)* &
1403 &
grid(dg)%rmask_full(idgp1,jdg-1)
1404 qweight(4)=
rcontact(cr)%QweightUnmasked(4,m)* &
1405 &
grid(dg)%rmask_full(idg-1,jdg )
1406 qweight(5)=
rcontact(cr)%QweightUnmasked(5,m)* &
1407 &
grid(dg)%rmask_full(idg ,jdg )
1408 qweight(6)=
rcontact(cr)%QweightUnmasked(6,m)* &
1409 &
grid(dg)%rmask_full(idgp1,jdg )
1410 qweight(7)=
rcontact(cr)%QweightUnmasked(7,m)* &
1411 &
grid(dg)%rmask_full(idg-1,jdgp1)
1412 qweight(8)=
rcontact(cr)%QweightUnmasked(8,m)* &
1413 &
grid(dg)%rmask_full(idg ,jdgp1)
1414 qweight(9)=
rcontact(cr)%QweightUnmasked(9,m)* &
1415 &
grid(dg)%rmask_full(idgp1,jdgp1)
1417 qweight(1)=
rcontact(cr)%Qweight(1,m)* &
1418 &
grid(dg)%rmask_full(idg-1,jdg-1)
1419 qweight(2)=
rcontact(cr)%Qweight(2,m)* &
1420 &
grid(dg)%rmask_full(idg ,jdg-1)
1421 qweight(3)=
rcontact(cr)%Qweight(3,m)* &
1422 &
grid(dg)%rmask_full(idgp1,jdg-1)
1423 qweight(4)=
rcontact(cr)%Qweight(4,m)* &
1424 &
grid(dg)%rmask_full(idg-1,jdg )
1425 qweight(5)=
rcontact(cr)%Qweight(5,m)* &
1426 &
grid(dg)%rmask_full(idg ,jdg )
1427 qweight(6)=
rcontact(cr)%Qweight(6,m)* &
1428 &
grid(dg)%rmask_full(idgp1,jdg )
1429 qweight(7)=
rcontact(cr)%Qweight(7,m)* &
1430 &
grid(dg)%rmask_full(idg-1,jdgp1)
1431 qweight(8)=
rcontact(cr)%Qweight(8,m)* &
1432 &
grid(dg)%rmask_full(idg ,jdgp1)
1433 qweight(9)=
rcontact(cr)%Qweight(9,m)* &
1434 &
grid(dg)%rmask_full(idgp1,jdgp1)
1437 IF (qwsum.gt.0)
THEN
1439 qweight(1)=cff*qweight(1)
1440 qweight(2)=cff*qweight(2)
1441 qweight(3)=cff*qweight(3)
1442 qweight(4)=cff*qweight(4)
1443 qweight(5)=cff*qweight(5)
1444 qweight(6)=cff*qweight(6)
1445 qweight(7)=cff*qweight(7)
1446 qweight(8)=cff*qweight(8)
1447 qweight(9)=cff*qweight(9)
1451 qwsum_check=sum(qweight)
1473 rcontact(cr)%Qweight(1,m)=qweight(1)
1474 rcontact(cr)%Qweight(2,m)=qweight(2)
1475 rcontact(cr)%Qweight(3,m)=qweight(3)
1476 rcontact(cr)%Qweight(4,m)=qweight(4)
1477 rcontact(cr)%Qweight(5,m)=qweight(5)
1478 rcontact(cr)%Qweight(6,m)=qweight(6)
1479 rcontact(cr)%Qweight(7,m)=qweight(7)
1480 rcontact(cr)%Qweight(8,m)=qweight(8)
1481 rcontact(cr)%Qweight(9,m)=qweight(9)
1495# ifdef QUADRATIC_WEIGHTS
1502 rcontact(cr)%Lweight(1:4,1:npointsr)=lw(1:4,1:npointsr)
1503# ifdef QUADRATIC_WEIGHTS
1504 rcontact(cr)%Qweight(1:9,1:npointsr)=qw(1:9,1:npointsr)
1509 IF (
allocated(lw))
THEN
1513# ifdef QUADRATIC_WEIGHTS
1514 IF (
allocated(qw))
THEN
1533 IF (.not.
allocated(lw))
THEN
1534 allocate ( lw(4,npointsu) )
1538# ifdef QUADRATIC_WEIGHTS
1540 IF (.not.
allocated(qw))
THEN
1541 allocate ( qw(9,npointsu) )
1551 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
1553 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
1554 IF (((istr.le.idg).and.(idg.le.iend)).and. &
1555 & ((jstr.le.jdg).and.(jdg.le.jend)))
THEN
1559 masklwsum=
grid(dg)%umask_full(idg ,jdg )+ &
1560 &
grid(dg)%umask_full(idgp1,jdg )+ &
1561 &
grid(dg)%umask_full(idgp1,jdgp1)+ &
1562 &
grid(dg)%umask_full(idg ,jdgp1)
1563 IF (masklwsum.lt.4)
THEN
1565 lweight(1)=
ucontact(cr)%LweightUnmasked(1,m)* &
1566 &
grid(dg)%umask_full(idg ,jdg )
1567 lweight(2)=
ucontact(cr)%LweightUnmasked(2,m)* &
1568 &
grid(dg)%umask_full(idgp1,jdg )
1569 lweight(3)=
ucontact(cr)%LweightUnmasked(3,m)* &
1570 &
grid(dg)%umask_full(idgp1,jdgp1)
1571 lweight(4)=
ucontact(cr)%LweightUnmasked(4,m)* &
1572 &
grid(dg)%umask_full(idg ,jdgp1)
1574 lweight(1)=
ucontact(cr)%Lweight(1,m)* &
1575 &
grid(dg)%umask_full(idg ,jdg )
1576 lweight(2)=
ucontact(cr)%Lweight(2,m)* &
1577 &
grid(dg)%umask_full(idgp1,jdg )
1578 lweight(3)=
ucontact(cr)%Lweight(3,m)* &
1579 &
grid(dg)%umask_full(idgp1,jdgp1)
1580 lweight(4)=
ucontact(cr)%Lweight(4,m)* &
1581 &
grid(dg)%umask_full(idg ,jdgp1)
1584 IF (lwsum.gt.0)
THEN
1586 lweight(1)=cff*lweight(1)
1587 lweight(2)=cff*lweight(2)
1588 lweight(3)=cff*lweight(3)
1589 lweight(4)=cff*lweight(4)
1593 lwsum_check=sum(lweight)
1605 ucontact(cr)%Lweight(1,m)=lweight(1)
1606 ucontact(cr)%Lweight(2,m)=lweight(2)
1607 ucontact(cr)%Lweight(3,m)=lweight(3)
1608 ucontact(cr)%Lweight(4,m)=lweight(4)
1612# ifdef QUADRATIC_WEIGHTS
1616 maskqwsum=
grid(dg)%umask_full(idg-1, jdg-1)+ &
1617 &
grid(dg)%umask_full(idg , jdg-1)+ &
1618 &
grid(dg)%umask_full(idgp1, jdg-1)+ &
1619 &
grid(dg)%umask_full(idg-1, jdg )+ &
1620 &
grid(dg)%umask_full(idg , jdg )+ &
1621 &
grid(dg)%umask_full(idgp1, jdg )+ &
1622 &
grid(dg)%umask_full(idg-1, jdgp1)+ &
1623 &
grid(dg)%umask_full(idg , jdgp1)+ &
1624 &
grid(dg)%umask_full(idgp1, jdgp1)
1625 IF (maskqwsum.lt.9)
THEN
1627 qweight(1)=
ucontact(cr)%QweightUnmasked(1,m)* &
1628 &
grid(dg)%umask_full(idg-1,jdg-1)
1629 qweight(2)=
ucontact(cr)%QweightUnmasked(2,m)* &
1630 &
grid(dg)%umask_full(idg ,jdg-1)
1631 qweight(3)=
ucontact(cr)%QweightUnmasked(3,m)* &
1632 &
grid(dg)%umask_full(idgp1,jdg-1)
1633 qweight(4)=
ucontact(cr)%QweightUnmasked(4,m)* &
1634 &
grid(dg)%umask_full(idg-1,jdg )
1635 qweight(5)=
ucontact(cr)%QweightUnmasked(5,m)* &
1636 &
grid(dg)%umask_full(idg ,jdg )
1637 qweight(6)=
ucontact(cr)%QweightUnmasked(6,m)* &
1638 &
grid(dg)%umask_full(idgp1,jdg )
1639 qweight(7)=
ucontact(cr)%QweightUnmasked(7,m)* &
1640 &
grid(dg)%umask_full(idg-1,jdgp1)
1641 qweight(8)=
ucontact(cr)%QweightUnmasked(8,m)* &
1642 &
grid(dg)%umask_full(idg ,jdgp1)
1643 qweight(9)=
ucontact(cr)%QweightUnmasked(9,m)* &
1644 &
grid(dg)%umask_full(idgp1,jdgp1)
1646 qweight(1)=
ucontact(cr)%Qweight(1,m)* &
1647 &
grid(dg)%umask_full(idg-1,jdg-1)
1648 qweight(2)=
ucontact(cr)%Qweight(2,m)* &
1649 &
grid(dg)%umask_full(idg ,jdg-1)
1650 qweight(3)=
ucontact(cr)%Qweight(3,m)* &
1651 &
grid(dg)%umask_full(idgp1,jdg-1)
1652 qweight(4)=
ucontact(cr)%Qweight(4,m)* &
1653 &
grid(dg)%umask_full(idg-1,jdg )
1654 qweight(5)=
ucontact(cr)%Qweight(5,m)* &
1655 &
grid(dg)%umask_full(idg ,jdg )
1656 qweight(6)=
ucontact(cr)%Qweight(6,m)* &
1657 &
grid(dg)%umask_full(idgp1,jdg )
1658 qweight(7)=
ucontact(cr)%Qweight(7,m)* &
1659 &
grid(dg)%umask_full(idg-1,jdgp1)
1660 qweight(8)=
ucontact(cr)%Qweight(8,m)* &
1661 &
grid(dg)%umask_full(idg ,jdgp1)
1662 qweight(9)=
ucontact(cr)%Qweight(9,m)* &
1663 &
grid(dg)%umask_full(idgp1,jdgp1)
1666 IF (qwsum.gt.0)
THEN
1668 qweight(1)=cff*qweight(1)
1669 qweight(2)=cff*qweight(2)
1670 qweight(3)=cff*qweight(3)
1671 qweight(4)=cff*qweight(4)
1672 qweight(5)=cff*qweight(5)
1673 qweight(6)=cff*qweight(6)
1674 qweight(7)=cff*qweight(7)
1675 qweight(8)=cff*qweight(8)
1676 qweight(9)=cff*qweight(9)
1680 qwsum_check=sum(qweight)
1702 ucontact(cr)%Qweight(1,m)=qweight(1)
1703 ucontact(cr)%Qweight(2,m)=qweight(2)
1704 ucontact(cr)%Qweight(3,m)=qweight(3)
1705 ucontact(cr)%Qweight(4,m)=qweight(4)
1706 ucontact(cr)%Qweight(5,m)=qweight(5)
1707 ucontact(cr)%Qweight(6,m)=qweight(6)
1708 ucontact(cr)%Qweight(7,m)=qweight(7)
1709 ucontact(cr)%Qweight(8,m)=qweight(8)
1710 ucontact(cr)%Qweight(9,m)=qweight(9)
1724# ifdef QUADRATIC_WEIGHTS
1731 ucontact(cr)%Lweight(1:4,1:npointsu)=lw(1:4,1:npointsu)
1732# ifdef QUADRATIC_WEIGHTS
1733 ucontact(cr)%Qweight(1:9,1:npointsu)=qw(1:9,1:npointsu)
1738 IF (
allocated(lw))
THEN
1742# ifdef QUADRATIC_WEIGHTS
1743 IF (
allocated(qw))
THEN
1762 IF (.not.
allocated(lw))
THEN
1763 allocate ( lw(4,npointsv) )
1767# ifdef QUADRATIC_WEIGHTS
1769 IF (.not.
allocated(qw))
THEN
1770 allocate ( qw(9,npointsv) )
1780 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
1782 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
1783 IF (((istr.le.idg).and.(idg.le.iend)).and. &
1784 & ((jstr.le.jdg).and.(jdg.le.jend)))
THEN
1788 masklwsum=
grid(dg)%vmask_full(idg ,jdg )+ &
1789 &
grid(dg)%vmask_full(idgp1,jdg )+ &
1790 &
grid(dg)%vmask_full(idgp1,jdgp1)+ &
1791 &
grid(dg)%vmask_full(idg ,jdgp1)
1792 IF (masklwsum.lt.4)
THEN
1794 lweight(1)=
vcontact(cr)%LweightUnmasked(1,m)* &
1795 &
grid(dg)%vmask_full(idg ,jdg )
1796 lweight(2)=
vcontact(cr)%LweightUnmasked(2,m)* &
1797 &
grid(dg)%vmask_full(idgp1,jdg )
1798 lweight(3)=
vcontact(cr)%LweightUnmasked(3,m)* &
1799 &
grid(dg)%vmask_full(idgp1,jdgp1)
1800 lweight(4)=
vcontact(cr)%LweightUnmasked(4,m)* &
1801 &
grid(dg)%vmask_full(idg ,jdgp1)
1803 lweight(1)=
vcontact(cr)%Lweight(1,m)* &
1804 &
grid(dg)%vmask_full(idg ,jdg )
1805 lweight(2)=
vcontact(cr)%Lweight(2,m)* &
1806 &
grid(dg)%vmask_full(idgp1,jdg )
1807 lweight(3)=
vcontact(cr)%Lweight(3,m)* &
1808 &
grid(dg)%vmask_full(idgp1,jdgp1)
1809 lweight(4)=
vcontact(cr)%Lweight(4,m)* &
1810 &
grid(dg)%vmask_full(idg ,jdgp1)
1813 IF (lwsum.gt.0)
THEN
1815 lweight(1)=cff*lweight(1)
1816 lweight(2)=cff*lweight(2)
1817 lweight(3)=cff*lweight(3)
1818 lweight(4)=cff*lweight(4)
1822 lwsum_check=sum(lweight)
1834 vcontact(cr)%Lweight(1,m)=lweight(1)
1835 vcontact(cr)%Lweight(2,m)=lweight(2)
1836 vcontact(cr)%Lweight(3,m)=lweight(3)
1837 vcontact(cr)%Lweight(4,m)=lweight(4)
1841# ifdef QUADRATIC_WEIGHTS
1845 maskqwsum=
grid(dg)%vmask_full(idg-1, jdg-1)+ &
1846 &
grid(dg)%vmask_full(idg , jdg-1)+ &
1847 &
grid(dg)%vmask_full(idgp1, jdg-1)+ &
1848 &
grid(dg)%vmask_full(idg-1, jdg )+ &
1849 &
grid(dg)%vmask_full(idg , jdg )+ &
1850 &
grid(dg)%vmask_full(idgp1, jdg )+ &
1851 &
grid(dg)%vmask_full(idg-1, jdgp1)+ &
1852 &
grid(dg)%vmask_full(idg , jdgp1)+ &
1853 &
grid(dg)%vmask_full(idgp1, jdgp1)
1854 IF (maskqwsum.lt.9)
THEN
1856 qweight(1)=
vcontact(cr)%QweightUnmasked(1,m)* &
1857 &
grid(dg)%vmask_full(idg-1,jdg-1)
1858 qweight(2)=
vcontact(cr)%QweightUnmasked(2,m)* &
1859 &
grid(dg)%vmask_full(idg ,jdg-1)
1860 qweight(3)=
vcontact(cr)%QweightUnmasked(3,m)* &
1861 &
grid(dg)%vmask_full(idgp1,jdg-1)
1862 qweight(4)=
vcontact(cr)%QweightUnmasked(4,m)* &
1863 &
grid(dg)%vmask_full(idg-1,jdg )
1864 qweight(5)=
vcontact(cr)%QweightUnmasked(5,m)* &
1865 &
grid(dg)%vmask_full(idg ,jdg )
1866 qweight(6)=
vcontact(cr)%QweightUnmasked(6,m)* &
1867 &
grid(dg)%vmask_full(idgp1,jdg )
1868 qweight(7)=
vcontact(cr)%QweightUnmasked(7,m)* &
1869 &
grid(dg)%vmask_full(idg-1,jdgp1)
1870 qweight(8)=
vcontact(cr)%QweightUnmasked(8,m)* &
1871 &
grid(dg)%vmask_full(idg ,jdgp1)
1872 qweight(9)=
vcontact(cr)%QweightUnmasked(9,m)* &
1873 &
grid(dg)%vmask_full(idgp1,jdgp1)
1875 qweight(1)=
vcontact(cr)%Qweight(1,m)* &
1876 &
grid(dg)%vmask_full(idg-1,jdg-1)
1877 qweight(2)=
vcontact(cr)%Qweight(2,m)* &
1878 &
grid(dg)%vmask_full(idg ,jdg-1)
1879 qweight(3)=
vcontact(cr)%Qweight(3,m)* &
1880 &
grid(dg)%vmask_full(idgp1,jdg-1)
1881 qweight(4)=
vcontact(cr)%Qweight(4,m)* &
1882 &
grid(dg)%vmask_full(idg-1,jdg )
1883 qweight(5)=
vcontact(cr)%Qweight(5,m)* &
1884 &
grid(dg)%vmask_full(idg ,jdg )
1885 qweight(6)=
vcontact(cr)%Qweight(6,m)* &
1886 &
grid(dg)%vmask_full(idgp1,jdg )
1887 qweight(7)=
vcontact(cr)%Qweight(7,m)* &
1888 &
grid(dg)%vmask_full(idg-1,jdgp1)
1889 qweight(8)=
vcontact(cr)%Qweight(8,m)* &
1890 &
grid(dg)%vmask_full(idg ,jdgp1)
1891 qweight(9)=
vcontact(cr)%Qweight(9,m)* &
1892 &
grid(dg)%vmask_full(idgp1,jdgp1)
1895 IF (qwsum.gt.0)
THEN
1897 qweight(1)=cff*qweight(1)
1898 qweight(2)=cff*qweight(2)
1899 qweight(3)=cff*qweight(3)
1900 qweight(4)=cff*qweight(4)
1901 qweight(5)=cff*qweight(5)
1902 qweight(6)=cff*qweight(6)
1903 qweight(7)=cff*qweight(7)
1904 qweight(8)=cff*qweight(8)
1905 qweight(9)=cff*qweight(9)
1910 qwsum_check=sum(qweight)
1932 vcontact(cr)%Qweight(1,m)=qweight(1)
1933 vcontact(cr)%Qweight(2,m)=qweight(2)
1934 vcontact(cr)%Qweight(3,m)=qweight(3)
1935 vcontact(cr)%Qweight(4,m)=qweight(4)
1936 vcontact(cr)%Qweight(5,m)=qweight(5)
1937 vcontact(cr)%Qweight(6,m)=qweight(6)
1938 vcontact(cr)%Qweight(7,m)=qweight(7)
1939 vcontact(cr)%Qweight(8,m)=qweight(8)
1940 vcontact(cr)%Qweight(9,m)=qweight(9)
1954# ifdef QUADRATIC_WEIGHTS
1961 vcontact(cr)%Lweight(1:4,1:npointsv)=lw(1:4,1:npointsv)
1962# ifdef QUADRATIC_WEIGHTS
1963 vcontact(cr)%Qweight(1:9,1:npointsv)=qw(1:9,1:npointsv)
1968 IF (
allocated(lw))
THEN
1972# ifdef QUADRATIC_WEIGHTS
1973 IF (
allocated(qw))
THEN
1979 END IF scale_weights
3109 & LBi, UBi, LBj, UBj, &
3110 & IminS, ImaxS, JminS, JmaxS)
3128 integer,
intent(in) :: ngc, ngf, model, tile
3129 integer,
intent(in) :: lbi, ubi, lbj, ubj
3130 integer,
intent(in) :: imins, imaxs, jmins, jmaxs
3134 integer :: iedge, ibc, ibc_min, ibc_max, ibf, io
3135 integer :: jedge, jbc, jbc_min, jbc_max, jbf, jo
3136 integer :: istr, iend, jstr, jend
3137 integer :: istrm2, iendp2, jstrm2, jendp2
3138 integer :: tindex, i, ic, isum, itrc, j, jsum, k, half
3139 integer :: cr, dg, dgcr, rg, rgcr
3141 real(r8) :: tfc, tff, tvalue, cff
3143 real(r8) :: dinv(imins:imaxs,jmins:jmaxs)
3155 IF ((ngc.eq.dg).and.(ngf.eq.rg))
THEN
3157 ELSE IF ((ngc.eq.rg).and.(ngf.eq.dg))
THEN
3164 istr =
bounds(ngc)%Istr (tile)
3165 iend =
bounds(ngc)%Iend (tile)
3166 jstr =
bounds(ngc)%Jstr (tile)
3167 jend =
bounds(ngc)%Jend (tile)
3169 istrm2=
bounds(ngc)%Istrm2(tile)
3170 iendp2=
bounds(ngc)%Iendp2(tile)
3171 jstrm2=
bounds(ngc)%Jstrm2(tile)
3172 jendp2=
bounds(ngc)%Jendp2(tile)
3178 cff=
grid(ngc)%Hz(i,j,1)
3180 cff=cff+
grid(ngc)%Hz(i,j,k)
3182 dinv(i,j)=1.0_r8/cff
3212 t_loop :
DO itrc=1,
nt(ngc)
3221 jbc_max=
j_top(ngf)-1
3224 IF (((istr.le.ibc-1).and.(ibc-1.le.iend)).and. &
3225 & ((jbc_min.le.jbc).and.(jbc.le.jbc_max)))
THEN
3252 cff=
grid(ngc)%pm(ibc-1,jbc)* &
3253 &
grid(ngc)%pn(ibc-1,jbc)* &
3256 tvalue=max(0.0_r8, &
3257 &
ocean(ngc)%t(ibc-1,jbc,k,tindex,itrc)- &
3261 &
dt(ngc)*
clima(ngc)%Tnudgcof(ibc-1,jbc,k,itrc)* &
3262 & (
clima(ngc)%tclm(ibc-1,jbc,k,ic)-tvalue)
3265 tvalue=tvalue*
grid(ngc)%rmask(ibc-1,jbc)
3267 ocean(ngc)%t(ibc-1,jbc,k,tindex,itrc)=tvalue
3278 jbc_max=
j_top(ngf)-1
3281 IF (((istr.le.ibc).and.(ibc.le.iend)).and. &
3282 & ((jbc_min.le.jbc).and.(jbc.le.jbc_max)))
THEN
3309 cff=
grid(ngc)%pm(ibc,jbc)* &
3310 &
grid(ngc)%pn(ibc,jbc)* &
3313 tvalue=max(0.0_r8, &
3314 &
ocean(ngc)%t(ibc,jbc,k,tindex,itrc)- &
3318 &
dt(ngc)*
clima(ngc)%Tnudgcof(ibc,jbc,k,itrc)* &
3319 & (
clima(ngc)%tclm(ibc,jbc,k,ic)-tvalue)
3322 tvalue=tvalue*
grid(ngc)%rmask(ibc,jbc)
3324 ocean(ngc)%t(ibc,jbc,k,tindex,itrc)=tvalue
3338 IF (((ibc_min.le.ibc).and.(ibc.le.ibc_max)).and. &
3339 & ((jstr.le.jbc-1).and.(jbc-1.le.jend)))
THEN
3366 cff=
grid(ngc)%pm(ibc,jbc-1)* &
3367 &
grid(ngc)%pn(ibc,jbc-1)* &
3370 tvalue=max(0.0_r8, &
3371 &
ocean(ngc)%t(ibc,jbc-1,k,tindex,itrc)- &
3375 &
dt(ngc)*
clima(ngc)%Tnudgcof(ibc,jbc-1,k,itrc)* &
3376 & (
clima(ngc)%tclm(ibc,jbc-1,k,ic)-tvalue)
3379 tvalue=tvalue*
grid(ngc)%rmask(ibc,jbc-1)
3381 ocean(ngc)%t(ibc,jbc-1,k,tindex,itrc)=tvalue
3395 IF (((ibc_min.le.ibc).and.(ibc.le.ibc_max)).and. &
3396 & ((jstr.le.jbc).and.(jbc.le.jend)))
THEN
3423 cff=
grid(ngc)%pm(ibc,jbc)* &
3424 &
grid(ngc)%pn(ibc,jbc)* &
3427 tvalue=max(0.0_r8, &
3428 &
ocean(ngc)%t(ibc,jbc,k,tindex,itrc)- &
3432 &
dt(ngc)*
clima(ngc)%Tnudgcof(ibc,jbc,k,itrc)* &
3433 & (
clima(ngc)%tclm(ibc,jbc,k,ic)-tvalue)
3436 tvalue=tvalue*
grid(ngc)%rmask(ibc,jbc)
3438 ocean(ngc)%t(ibc,jbc,k,tindex,itrc)=tvalue
3451 & lbi, ubi, lbj, ubj, 1,
n(ngc), &
3455 &
ocean(ngc)%t(:,:,:,tindex,:))
3511 integer,
intent(in) :: ng, model, vtype, tile
3517 integer :: lbid, ubid, lbjd, ubjd
3518 integer :: lbir, ubir, lbjr, ubjr
3519 integer :: dindex2d, rindex2d
3521 integer :: dindex3d, rindex3d
3523 integer :: cr, dg, k, rg, nrec, rec
3528 character (len=*),
parameter :: myfile = &
3529 & __FILE__//
", fine2coarse"
3549 IF ((ng.eq.dg).and.(
dxmax(dg).lt.
dxmax(rg)))
THEN
3553 lbid=
bounds(dg)%LBi(tile)
3554 ubid=
bounds(dg)%UBi(tile)
3555 lbjd=
bounds(dg)%LBj(tile)
3556 ubjd=
bounds(dg)%UBj(tile)
3558 lbir=
bounds(rg)%LBi(tile)
3559 ubir=
bounds(rg)%UBi(tile)
3560 lbjr=
bounds(rg)%LBj(tile)
3561 ubjr=
bounds(rg)%UBj(tile)
3565 IF (
domain(ng)%SouthWest_Test(tile))
THEN
3567 WRITE (
stdout,10) dg, rg, cr
3568 10
FORMAT (6x,
'FINE2COARSE - exchanging data between grids:',&
3569 &
' dg = ',i2.2,
' and rg = ',i2.2,
' at cr = ',i2.2)
3588 IF (vtype.eq.
r2dvar)
THEN
3598 & lbid, ubid, lbjd, ubjd, &
3599 & lbir, ubir, lbjr, ubjr, &
3606 &
grid(dg)%rmask_full, &
3616 & lbid, ubid, lbjd, ubjd, &
3617 & lbir, ubir, lbjr, ubjr, &
3627 &
ocean(dg)%zeta(:,:,dindex2d), &
3628 &
ocean(rg)%zeta(:,:,rindex2d))
3639 & lbid, ubid, lbjd, ubjd, &
3640 & lbir, ubir, lbjr, ubjr, &
3647 &
grid(dg)%umask_full, &
3648 &
grid(rg)%umask_full, &
3650 &
ocean(dg)%ubar(:,:,dindex2d), &
3652 &
ocean(rg)%ubar(:,:,1), &
3653 &
ocean(rg)%ubar(:,:,2))
3655 &
ocean(rg)%ubar(:,:,rindex2d))
3663 & lbid, ubid, lbjd, ubjd, &
3664 & lbir, ubir, lbjr, ubjr, &
3671 &
grid(dg)%vmask_full, &
3672 &
grid(rg)%vmask_full, &
3674 &
ocean(dg)%vbar(:,:,dindex2d), &
3676 &
ocean(rg)%vbar(:,:,1), &
3677 &
ocean(rg)%vbar(:,:,2))
3679 &
ocean(rg)%vbar(:,:,rindex2d))
3689 ELSE IF (vtype.eq.
r3dvar)
THEN
3699 & lbid, ubid, lbjd, ubjd, 1,
n(dg), &
3700 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
3706 &
grid(dg)%rmask_full, &
3709 &
ocean(dg)%t(:,:,:,dindex3d,itrc), &
3710 &
ocean(rg)%t(:,:,:,rindex3d,itrc))
3712 & __line__, myfile))
RETURN
3722 & lbid, ubid, lbjd, ubjd, 1,
n(dg), &
3723 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
3729 &
grid(dg)%umask_full, &
3730 &
grid(rg)%umask_full, &
3732 &
ocean(dg)%u(:,:,:,dindex3d), &
3733 &
ocean(rg)%u(:,:,:,rindex3d))
3740 & lbid, ubid, lbjd, ubjd, 1,
n(dg), &
3741 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
3747 &
grid(dg)%vmask_full, &
3748 &
grid(rg)%vmask_full, &
3750 &
ocean(dg)%v(:,:,:,dindex3d), &
3751 &
ocean(rg)%v(:,:,:,rindex3d))
3761 IF (vtype.eq.
r2dvar)
THEN
3764 & lbir, ubir, lbjr, ubjr, &
3768 & lbir, ubir, lbjr, ubjr, &
3769 &
ocean(rg)%ubar(:,:,k))
3771 & lbir, ubir, lbjr, ubjr, &
3772 &
ocean(rg)%vbar(:,:,k))
3776 & lbir, ubir, lbjr, ubjr, &
3777 &
ocean(rg)%zeta(:,:,rindex2d))
3779 & lbir, ubir, lbjr, ubjr, &
3780 &
ocean(rg)%ubar(:,:,rindex2d))
3782 & lbir, ubir, lbjr, ubjr, &
3783 &
ocean(rg)%vbar(:,:,rindex2d))
3787 ELSE IF (vtype.eq.
r3dvar)
THEN
3789 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
3790 &
ocean(rg)%u(:,:,:,rindex3d))
3792 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
3793 &
ocean(rg)%v(:,:,:,rindex3d))
3796 & lbir, ubir, lbjr, ubjr, &
3798 &
ocean(rg)%t(:,:,:,rindex3d,itrc))
3806 IF (vtype.eq.
r2dvar)
THEN
3809 & lbir, ubir, lbjr, ubjr, &
3814 & lbir, ubir, lbjr, ubjr, &
3817 &
ocean(rg)%ubar(:,:,1), &
3818 &
ocean(rg)%vbar(:,:,1), &
3819 &
ocean(rg)%ubar(:,:,2), &
3820 &
ocean(rg)%vbar(:,:,2))
3823 & lbir, ubir, lbjr, ubjr, &
3826 &
ocean(rg)%zeta(:,:,rindex2d), &
3827 &
ocean(rg)%ubar(:,:,rindex2d), &
3828 &
ocean(rg)%vbar(:,:,rindex2d))
3831 ELSE IF (vtype.eq.
r3dvar)
THEN
3833 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
3836 &
ocean(rg)%u(:,:,:,rindex3d), &
3837 &
ocean(rg)%v(:,:,:,rindex3d))
3839 & lbir, ubir, lbjr, ubjr, 1,
n(rg), &
3843 &
ocean(rg)%t(:,:,:,rindex3d,:))
3855 & AreaAvg, Rscale, &
3856 & cr, Npoints, contact, &
3857 & LBiF, UBiF, LBjF, UBjF, &
3858 & LBiC, UBiC, LBjC, UBjC, &
3952 logical,
intent(in) :: areaavg
3953 integer,
intent(in) :: ng, dg, model, tile
3954 integer,
intent(in) :: gtype, cr, npoints, rscale
3955 integer,
intent(in) :: lbif, ubif, lbjf, ubjf
3956 integer,
intent(in) :: lbic, ubic, lbjc, ubjc
3958 character(len=*),
intent(in) :: svname
3960 TYPE (
t_ngc),
intent(in) :: contact(:)
3962# ifdef ASSUMED_SHAPE
3963 real(r8),
intent(in) :: pmc(lbic:,lbjc:)
3964 real(r8),
intent(in) :: pnc(lbic:,lbjc:)
3965 real(r8),
intent(in) :: hhc(lbic:,lbjc:)
3967 real(r8),
intent(in) :: cmsk(lbic:,lbjc:)
3969 real(r8),
intent(in) :: amsk(lbif:,lbjf:)
3971 real(r8),
intent(in) :: fmsk(lbif:,lbjf:)
3975 real(r8),
intent(in) :: a(lbif:,lbjf:)
3976 real(r8),
intent(in) :: adx(lbif:,lbjf:)
3977 real(r8),
intent(in) :: ady(lbif:,lbjf:)
3979 real(r8),
intent(in) :: f(lbif:,lbjf:)
3980 real(r8),
intent(in) :: dxf(lbif:,lbjf:)
3981 real(r8),
intent(in) :: dyf(lbif:,lbjf:)
3983 real(r8),
intent(inout) :: c1(lbic:,lbjc:)
3984 real(r8),
intent(inout),
optional :: c2(lbic:,lbjc:)
3986 real(r8),
intent(in) :: pmc(lbic:ubic,lbjc:ubjc)
3987 real(r8),
intent(in) :: pnc(lbic:ubic,lbjc:ubjc)
3988 real(r8),
intent(in) :: hhc(lbic:ubic,lbjc:ubjc)
3990 real(r8),
intent(in) :: cmsk(lbic:ubic,lbjc:ubjc)
3992 real(r8),
intent(in) :: amsk(lbif:ubif,lbjf:ubjf)
3994 real(r8),
intent(in) :: fmsk(lbif:ubif,lbjf:ubjf)
3998 real(r8),
intent(in) :: a(lbif:ubif,lbjf:ubjf)
3999 real(r8),
intent(in) :: adx(lbif:ubif,lbjf:ubjf)
4000 real(r8),
intent(in) :: adx(lbif:ubif,lbjf:ubjf)
4002 real(r8),
intent(in) :: f(lbif:ubif,lbjf:ubjf)
4003 real(r8),
intent(in) :: dxf(lbif:ubif,lbjf:ubjf)
4004 real(r8),
intent(in) :: dyf(lbif:ubif,lbjf:ubjf)
4006 real(r8),
intent(inout) :: c1(lbic:ubic,lbjc:ubjc)
4007 real(r8),
intent(inout),
optional :: c2(lbic:ubic,lbjc:ubjc)
4012 integer :: iadd, ic, jadd, jc, half, i, j, m
4013 integer :: ib_east, ib_west, jb_north, jb_south
4015 integer :: lbi, ubi, lbj, ubj
4018 real(r8) :: areac_inv, my_area, my_areasum, ratio
4019 real(r8) :: my_avg, my_count, my_sum
4022 real(r8),
allocatable :: f(:,:)
4023 real(r8),
allocatable :: dxf(:,:)
4024 real(r8),
allocatable :: dyf(:,:)
4026 real(r8),
allocatable :: fmsk(:,:)
4030 character (len=*),
parameter :: myfile = &
4031 & __FILE__//
", fine2coarse2d"
4033# include "set_bounds.h"
4048 IF (.not.
allocated(f))
THEN
4049 allocate ( f(lbi:ubi,lbj:ubj) )
4052 IF (.not.
allocated(dxf))
THEN
4053 allocate ( dxf(lbi:ubi,lbj:ubj) )
4055 IF (.not.
allocated(dyf))
THEN
4056 allocate ( dyf(lbi:ubi,lbj:ubj) )
4060 IF (.not.
allocated(fmsk))
THEN
4061 allocate ( fmsk(lbi:ubi,lbj:ubj) )
4069 & lbif, ubif, lbjf, ubjf, &
4070 & lbi, ubi, lbj, ubj, &
4076 & lbif, ubif, lbjf, ubjf, &
4077 & lbi, ubi, lbj, ubj, &
4082 & lbif, ubif, lbjf, ubjf, &
4083 & lbi, ubi, lbj, ubj, &
4090 & lbif, ubif, lbjf, ubjf, &
4091 & lbi, ubi, lbj, ubj, &
4103 i=contact(cr)%Idg(m)
4104 j=contact(cr)%Jdg(m)
4105 ic=contact(cr)%Irg(m)
4106 jc=contact(cr)%Jrg(m)
4107 IF (((istr.le.ic).and.(ic.le.iend)).and. &
4108 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
4114 my_area=dxf(i+iadd,j+jadd)*dyf(i+iadd,j+jadd)
4115 my_areasum=my_areasum+my_area
4118 & f(i+iadd,j+jadd)*my_area* &
4119 & min(1.0_r8,fmsk(i+iadd,j+jadd))
4120 my_count=my_count+min(1.0_r8,fmsk(i+iadd,j+jadd))
4123 & f(i+iadd,j+jadd)*my_area
4129 areac_inv=pmc(ic,jc)*pnc(ic,jc)
4131 areac_inv=0.25_r8*(pmc(ic-1,jc)+pmc(ic,jc))* &
4132 & (pnc(ic-1,jc)+pnc(ic,jc))
4134 areac_inv=0.25_r8*(pmc(ic,jc-1)+pmc(ic,jc))* &
4135 & (pnc(ic,jc-1)+pnc(ic,jc))
4137 areac_inv=pmc(ic,jc)*pnc(ic,jc)
4139 ratio=my_areasum*areac_inv
4140 my_avg=my_sum*areac_inv
4142 IF (my_count.gt.0.0_r8)
THEN
4143 my_avg=my_avg*rscale*rscale/my_count
4145 my_avg=my_avg*cmsk(ic,jc)
4148 IF (
PRESENT(c2))
THEN
4155 i=contact(cr)%Idg(m)
4156 j=contact(cr)%Jdg(m)
4157 ic=contact(cr)%Irg(m)
4158 jc=contact(cr)%Jrg(m)
4159 IF (((istr.le.ic).and.(ic.le.iend)).and. &
4160 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
4168 & f(i+iadd,j+jadd)*fmsk(i+iadd,j+jadd)
4169 my_count=my_count+min(1.0_r8,fmsk(i+iadd,j+jadd))
4173 my_count=my_count+1.0_r8
4177 IF (my_count.gt.0.0_r8) my_avg=my_sum/my_count
4179 my_avg=my_avg*cmsk(ic,jc)
4181 IF (gtype.eq.
r2dvar)
THEN
4182 IF (my_avg.le.(
dcrit(ng)-hhc(ic,jc)))
THEN
4183 my_avg=
dcrit(ng)-hhc(ic,jc)
4190 IF (
PRESENT(c2))
THEN
4196# ifdef REFINE_BOUNDARY
4205 IF (gtype.eq.
u2dvar)
THEN
4219 DO jc=jb_south,jb_north-1
4220 j=(jc-jb_south)*rscale+half+1
4221 IF (((istr.le.ic).and.(ic.le.iend)).and. &
4222 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
4229 my_count=my_count+1.0_r8
4231 my_avg=my_sum/my_count
4240 DO jc=jb_south,jb_north-1
4241 j=(jc-jb_south)*rscale+half+1
4242 IF (((istr.le.ic).and.(ic.le.iend)).and. &
4243 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
4250 my_count=my_count+1.0_r8
4252 my_avg=my_sum/my_count
4260 IF (gtype.eq.
v2dvar)
THEN
4274 DO ic=ib_west,ib_east-1
4275 i=(ic-ib_west)*rscale+half+1
4276 IF (((istr.le.ic).and.(ic.le.iend)).and. &
4277 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
4284 my_count=my_count+1.0_r8
4286 my_avg=my_sum/my_count
4295 DO ic=ib_west,ib_east-1
4296 i=(ic-ib_west)*rscale+half+1
4297 IF (((istr.le.ic).and.(ic.le.iend)).and. &
4298 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
4305 my_count=my_count+1.0_r8
4307 my_avg=my_sum/my_count
4317 IF (
allocated(f))
THEN
4321 IF (
allocated(dxf))
THEN
4324 IF (
allocated(dyf))
THEN
4329 IF (
allocated(fmsk))
THEN
4341 & AreaAvg, Rscale, &
4342 & cr, Npoints, contact, &
4343 & LBiF, UBiF, LBjF, UBjF, LBkF, UBkF, &
4344 & LBiC, UBiC, LBjC, UBjC, LBkC, UBkC, &
4440 logical,
intent(in) :: areaavg
4441 integer,
intent(in) :: ng, dg, model, tile
4442 integer,
intent(in) :: gtype, cr, npoints, rscale
4443 integer,
intent(in) :: lbif, ubif, lbjf, ubjf, lbkf, ubkf
4444 integer,
intent(in) :: lbic, ubic, lbjc, ubjc, lbkc, ubkc
4446 character(len=*),
intent(in) :: svname
4448 TYPE (
t_ngc),
intent(in) :: contact(:)
4450# ifdef ASSUMED_SHAPE
4451 real(r8),
intent(in) :: pmc(lbic:,lbjc:)
4452 real(r8),
intent(in) :: pnc(lbic:,lbjc:)
4454 real(r8),
intent(in) :: cmsk(lbic:,lbjc:)
4456 real(r8),
intent(in) :: amsk(lbif:,lbjf:)
4458 real(r8),
intent(in) :: fmsk(lbif:,lbjf:)
4462 real(r8),
intent(in) :: a(lbif:,lbjf:,lbkf:)
4463 real(r8),
intent(in) :: adx(lbif:,lbjf:)
4464 real(r8),
intent(in) :: ady(lbif:,lbjf:)
4466 real(r8),
intent(in) :: f(lbif:,lbjf:,lbkf:)
4467 real(r8),
intent(in) :: dxf(lbif:,lbjf:)
4468 real(r8),
intent(in) :: dyf(lbif:,lbjf:)
4470 real(r8),
intent(inout) :: c(lbic:,lbjc:,lbkc:)
4472 real(r8),
intent(in) :: pmc(lbic:ubic,lbjc:ubjc)
4473 real(r8),
intent(in) :: pnc(lbic:ubic,lbjc:ubjc)
4475 real(r8),
intent(in) :: cmsk(lbic:ubic,lbjc:ubjc)
4477 real(r8),
intent(in) :: amsk(lbif:ubif,lbjf:ubjf)
4479 real(r8),
intent(in) :: fmsk(lbif:ubif,lbjf:ubjf)
4483 real(r8),
intent(in) :: a(lbif:ubif,lbjf:ubjf,lbkf:ubkf)
4484 real(r8),
intent(in) :: adx(lbif:ubif,lbjf:ubjf)
4485 real(r8),
intent(in) :: adx(lbif:ubif,lbjf:ubjf)
4487 real(r8),
intent(in) :: f(lbif:ubif,lbjf:ubjf,lbkf:ubkf)
4488 real(r8),
intent(in) :: dxf(lbif:ubif,lbjf:ubjf)
4489 real(r8),
intent(in) :: dyf(lbif:ubif,lbjf:ubjf)
4491 real(r8),
intent(inout) :: c(lbic:ubic,lbjc:ubjc,lbkc:ubkc)
4496 integer :: iadd, ic, jadd, jc, half, i, j, k, m
4497 integer :: ib_east, ib_west, jb_north, jb_south
4499 integer :: lbi, ubi, lbj, ubj
4502 real(r8) :: areac_inv, my_area, my_areasum, ratio
4503 real(r8) :: my_avg, my_count, my_sum
4506 real(r8),
allocatable :: f(:,:,:)
4507 real(r8),
allocatable :: dxf(:,:)
4508 real(r8),
allocatable :: dyf(:,:)
4510 real(r8),
allocatable :: fmsk(:,:)
4514 character (len=*),
parameter :: myfile = &
4515 & __FILE__//
", fine2coarse3d"
4517# include "set_bounds.h"
4532 IF (.not.
allocated(f))
THEN
4533 allocate ( f(lbi:ubi,lbj:ubj,lbkf:ubkf) )
4536 IF (.not.
allocated(dxf))
THEN
4537 allocate ( dxf(lbi:ubi,lbj:ubj) )
4539 IF (.not.
allocated(dyf))
THEN
4540 allocate ( dyf(lbi:ubi,lbj:ubj) )
4544 IF (.not.
allocated(fmsk))
THEN
4545 allocate ( fmsk(lbi:ubi,lbj:ubj) )
4553 & lbif, ubif, lbjf, ubjf, &
4554 & lbi, ubi, lbj, ubj, &
4561 & lbif, ubif, lbjf, ubjf, &
4562 & lbi, ubi, lbj, ubj, &
4567 & lbif, ubif, lbjf, ubjf, &
4568 & lbi, ubi, lbj, ubj, &
4575 & lbif, ubif, lbjf, ubjf, &
4576 & lbi, ubi, lbj, ubj, &
4591 i=contact(cr)%Idg(m)
4592 j=contact(cr)%Jdg(m)
4593 ic=contact(cr)%Irg(m)
4594 jc=contact(cr)%Jrg(m)
4595 IF (((istr.le.ic).and.(ic.le.iend)).and. &
4596 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
4602 my_area=dxf(i+iadd,j+jadd)*dyf(i+iadd,j+jadd)
4603 my_areasum=my_areasum+my_area
4606 & f(i+iadd,j+jadd,k)*my_area* &
4607 & min(1.0_r8,fmsk(i+iadd,j+jadd))
4608 my_count=my_count+min(1.0_r8,fmsk(i+iadd,j+jadd))
4611 & f(i+iadd,j+jadd,k)*my_area
4617 areac_inv=pmc(ic,jc)*pnc(ic,jc)
4619 areac_inv=0.25_r8*(pmc(ic-1,jc)+pmc(ic,jc))* &
4620 & (pnc(ic-1,jc)+pnc(ic,jc))
4622 areac_inv=0.25_r8*(pmc(ic,jc-1)+pmc(ic,jc))* &
4623 & (pnc(ic,jc-1)+pnc(ic,jc))
4625 areac_inv=pmc(ic,jc)*pnc(ic,jc)
4627 ratio=my_areasum*areac_inv
4628 my_avg=my_sum*areac_inv
4630 IF (my_count.gt.0.0_r8)
THEN
4631 my_avg=my_avg*rscale*rscale/my_count
4633 my_avg=my_avg*cmsk(ic,jc)
4642 i=contact(cr)%Idg(m)
4643 j=contact(cr)%Jdg(m)
4644 ic=contact(cr)%Irg(m)
4645 jc=contact(cr)%Jrg(m)
4646 IF (((istr.le.ic).and.(ic.le.iend)).and. &
4647 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
4655 & f(i+iadd,j+jadd,k)*fmsk(i+iadd,j+jadd)
4656 my_count=my_count+min(1.0_r8,fmsk(i+iadd,j+jadd))
4659 & f(i+iadd,j+jadd,k)
4660 my_count=my_count+1.0_r8
4664 IF (my_count.gt.0.0_r8) my_avg=my_sum/my_count
4666 my_avg=my_avg*cmsk(ic,jc)
4673# ifdef REFINE_BOUNDARY
4682 IF (gtype.eq.
u3dvar)
THEN
4697 DO jc=jb_south,jb_north-1
4698 j=(jc-jb_south)*rscale+half+1
4699 IF (((istr.le.ic).and.(ic.le.iend)).and. &
4700 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
4707 my_count=my_count+1.0_r8
4709 my_avg=my_sum/my_count
4720 DO jc=jb_south,jb_north-1
4721 j=(jc-jb_south)*rscale+half+1
4722 IF (((istr.le.ic).and.(ic.le.iend)).and. &
4723 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
4730 my_count=my_count+1.0_r8
4732 my_avg=my_sum/my_count
4741 IF (gtype.eq.
v3dvar)
THEN
4756 DO ic=ib_west,ib_east-1
4757 i=(ic-ib_west)*rscale+half+1
4758 IF (((istr.le.ic).and.(ic.le.iend)).and. &
4759 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
4766 my_count=my_count+1.0_r8
4768 my_avg=my_sum/my_count
4779 DO ic=ib_west,ib_east-1
4780 i=(ic-ib_west)*rscale+half+1
4781 IF (((istr.le.ic).and.(ic.le.iend)).and. &
4782 & ((jstr.le.jc).and.(jc.le.jend)))
THEN
4789 my_count=my_count+1.0_r8
4791 my_avg=my_sum/my_count
4802 IF (
allocated(f))
THEN
4806 IF (
allocated(dxf))
THEN
4809 IF (
allocated(dyf))
THEN
4814 IF (
allocated(fmsk))
THEN
5617 & LBi, UBi, LBj, UBj)
5666 logical,
intent(in) :: lputfsur
5667 integer,
intent(in) :: ng, dg, cr, model, tile
5668 integer,
intent(in) :: lbi, ubi, lbj, ubj
5672 logical :: uboundary, vboundary
5675 integer :: ilb, iub, jlb, jub, nptssn, nptswe, my_tile
5677 integer :: nsub, i, irec, j, kindex, m, tnew, told
5681 real(r8),
parameter :: spv = 0.0_r8
5683 real(dp) :: wnew, wold, secscale, fac
5684 real(r8) :: cff, cff1
5685 real(r8) :: my_value
5687 character (len=*),
parameter :: myfile = &
5688 & __FILE__//
", put_refined2d"
5690# include "set_bounds.h"
5701 IF (.not.lputfsur)
THEN
5703 ilb=
bounds(ng)%LBi(my_tile)
5704 iub=
bounds(ng)%UBi(my_tile)
5705 jlb=
bounds(ng)%LBj(my_tile)
5706 jub=
bounds(ng)%UBj(my_tile)
5710# ifdef NESTING_DEBUG
5737 fac=1.0_dp/(wold+wnew)
5741 IF (((wold*wnew).lt.0.0_dp).or.((wold+wnew).le.0.0_dp))
THEN
5742 IF (
domain(ng)%SouthWest_Test(tile))
THEN
5744 WRITE (
stdout,10) cr, dg, ng, &
5745 &
iic(dg), told, tnew, &
5746 &
iic(ng), wold, wnew, &
5760 free_surface :
IF (lputfsur)
THEN
5764 IF (((istrt.le.i).and.(i.le.iendt)).and. &
5765 & ((jstrt.le.j).and.(j.le.jendt)))
THEN
5766 my_value=wold*(
rcontact(cr)%Lweight(1,m)* &
5767 &
refined(cr)%zeta(1,m,told)+ &
5769 &
refined(cr)%zeta(2,m,told)+ &
5771 &
refined(cr)%zeta(3,m,told)+ &
5773 &
refined(cr)%zeta(4,m,told))+ &
5774 & wnew*(
rcontact(cr)%Lweight(1,m)* &
5775 &
refined(cr)%zeta(1,m,tnew)+ &
5777 &
refined(cr)%zeta(2,m,tnew)+ &
5779 &
refined(cr)%zeta(3,m,tnew)+ &
5783 my_value=my_value*
grid(ng)%rmask(i,j)
5786 IF (my_value.le.(
dcrit(ng)-
grid(ng)%h(i,j)))
THEN
5791 ocean(ng)%zeta(i,j,1)=my_value
5792 ocean(ng)%zeta(i,j,2)=my_value
5793 ocean(ng)%zeta(i,j,3)=my_value
5823 IF (((istrp.le.i).and.(i.le.iendt)).and. &
5824 & ((jstrt.le.j).and.(j.le.jendt)))
THEN
5825 my_value=wold*(
ucontact(cr)%Lweight(1,m)* &
5826 &
refined(cr)%ubar(1,m,told)+ &
5828 &
refined(cr)%ubar(2,m,told)+ &
5830 &
refined(cr)%ubar(3,m,told)+ &
5832 &
refined(cr)%ubar(4,m,told))+ &
5833 & wnew*(
ucontact(cr)%Lweight(1,m)* &
5834 &
refined(cr)%ubar(1,m,tnew)+ &
5836 &
refined(cr)%ubar(2,m,tnew)+ &
5838 &
refined(cr)%ubar(3,m,tnew)+ &
5842 my_value=my_value*
grid(ng)%umask(i,j)
5845 my_value=my_value*
grid(ng)%umask_wet(i,j)
5851 IF(.not.(uboundary.and.(irec.eq.kindex)))
THEN
5852 ocean(ng)%ubar(i,j,irec)=my_value
5858 IF (.not.uboundary)
THEN
5870 IF (((istrt.le.i).and.(i.le.iendt)).and. &
5871 & ((jstrp.le.j).and.(j.le.jendt)))
THEN
5872 my_value=wold*(
vcontact(cr)%Lweight(1,m)* &
5873 &
refined(cr)%vbar(1,m,told)+ &
5875 &
refined(cr)%vbar(2,m,told)+ &
5877 &
refined(cr)%vbar(3,m,told)+ &
5879 &
refined(cr)%vbar(4,m,told))+ &
5880 & wnew*(
vcontact(cr)%Lweight(1,m)* &
5881 &
refined(cr)%vbar(1,m,tnew)+ &
5883 &
refined(cr)%vbar(2,m,tnew)+ &
5885 &
refined(cr)%vbar(3,m,tnew)+ &
5889 my_value=my_value*
grid(ng)%vmask(i,j)
5892 my_value=my_value*
grid(ng)%vmask_wet(i,j)
5898 IF (.not.(vboundary.and.(irec.eq.kindex)))
THEN
5899 ocean(ng)%vbar(i,j,irec)=my_value
5905 IF (.not.vboundary)
THEN
5941 IF (
domain(ng)%Western_Edge(tile))
THEN
5946 cff=0.5_r8*
grid(ng)%on_u(istr,j)* &
5947 (
grid(ng)%h(istr-1,j)+ &
5948 &
ocean(ng)%zeta(istr-1,j,kindex)+ &
5949 &
grid(ng)%h(istr ,j)+ &
5950 &
ocean(ng)%zeta(istr ,j,kindex))
5952# ifdef TIME_INTERP_FLUX
5953 my_value=cff1*(wold*
refined(cr)%U2d_flux(1,m,told)+ &
5954 & wnew*
refined(cr)%U2d_flux(1,m,tnew))/cff
5956 my_value=cff1*
refined(cr)%U2d_flux(1,m,tnew)/cff
5959 my_value=my_value-
ocean(ng)%ubar_stokes(istr,j)
5962 my_value=my_value*
grid(ng)%umask(istr,j)
5965 my_value=my_value*
grid(ng)%umask_wet(istr,j)
5967# ifdef NESTING_DEBUG
5970 ocean(ng)%ubar(istr,j,kindex)=my_value
5976 IF (
domain(ng)%Eastern_Edge(tile))
THEN
5981 cff=0.5_r8*
grid(ng)%on_u(iend+1,j)* &
5982 & (
grid(ng)%h(iend+1,j)+ &
5983 &
ocean(ng)%zeta(iend+1,j,kindex)+ &
5984 &
grid(ng)%h(iend ,j)+ &
5985 &
ocean(ng)%zeta(iend ,j,kindex))
5987# ifdef TIME_INTERP_FLUX
5988 my_value=cff1*(wold*
refined(cr)%U2d_flux(1,m,told)+ &
5989 & wnew*
refined(cr)%U2d_flux(1,m,tnew))/cff
5991 my_value=cff1*
refined(cr)%U2d_flux(1,m,tnew)/cff
5994 my_value=my_value-
ocean(ng)%ubar_stokes(iend+1,j)
5997 my_value=my_value*
grid(ng)%umask(iend+1,j)
6000 my_value=my_value*
grid(ng)%umask_wet(iend+1,j)
6002# ifdef NESTING_DEBUG
6005 ocean(ng)%ubar(iend+1,j,kindex)=my_value
6011 IF (
domain(ng)%Southern_Edge(tile))
THEN
6016 cff=0.5_r8*
grid(ng)%om_v(i,jstr)* &
6017 & (
grid(ng)%h(i,jstr-1)+ &
6018 &
ocean(ng)%zeta(i,jstr-1,kindex)+ &
6019 &
grid(ng)%h(i,jstr )+ &
6020 &
ocean(ng)%zeta(i,jstr ,kindex))
6022# ifdef TIME_INTERP_FLUX
6023 my_value=cff1*(wold*
refined(cr)%V2d_flux(1,m,told)+ &
6024 & wnew*
refined(cr)%V2d_flux(1,m,tnew))/cff
6026 my_value=cff1*
refined(cr)%V2d_flux(1,m,tnew)/cff
6029 my_value=my_value-
ocean(ng)%vbar_stokes(i,jstr)
6032 my_value=my_value*
grid(ng)%vmask(i,jstr)
6035 my_value=my_value*
grid(ng)%vmask_wet(i,jstr)
6037# ifdef NESTING_DEBUG
6040 ocean(ng)%vbar(i,jstr,kindex)=my_value
6046 IF (
domain(ng)%Northern_Edge(tile))
THEN
6051 cff=0.5_r8*
grid(ng)%om_v(i,jend+1)* &
6052 & (
grid(ng)%h(i,jend+1)+ &
6053 &
ocean(ng)%zeta(i,jend+1,kindex)+ &
6054 &
grid(ng)%h(i,jend )+ &
6055 &
ocean(ng)%zeta(i,jend ,kindex))
6057# ifdef TIME_INTERP_FLUX
6058 my_value=cff1*(wold*
refined(cr)%V2d_flux(1,m,told)+ &
6059 & wnew*
refined(cr)%V2d_flux(1,m,tnew))/cff
6061 my_value=cff1*
refined(cr)%V2d_flux(1,m,tnew)/cff
6064 my_value=my_value-
ocean(ng)%vbar_stokes(i,jend+1)
6067 my_value=my_value*
grid(ng)%vmask(i,jend+1)
6070 my_value=my_value*
grid(ng)%vmask_wet(i,jend+1)
6072# ifdef NESTING_DEBUG
6075 ocean(ng)%vbar(i,jend+1,kindex)=my_value
6092 & lbi, ubi, lbj, ubj, &
6096 &
ocean(ng)%zeta(:,:,1), &
6097 &
ocean(ng)%zeta(:,:,2), &
6098 &
ocean(ng)%zeta(:,:,3))
6101 & lbi, ubi, lbj, ubj, &
6112 & lbi, ubi, lbj, ubj, &
6115 &
ocean(ng)%ubar(:,:,1), &
6116 &
ocean(ng)%ubar(:,:,2), &
6117 &
ocean(ng)%ubar(:,:,3))
6120 & lbi, ubi, lbj, ubj, &
6123 &
ocean(ng)%vbar(:,:,1), &
6124 &
ocean(ng)%vbar(:,:,2), &
6125 &
ocean(ng)%vbar(:,:,3))
6128 & lbi, ubi, lbj, ubj, &
6135# ifdef NESTING_DEBUG
6149 10
FORMAT (/,
' PUT_REFINE2D - unbounded contact points temporal: ', &
6150 &
' interpolation:', &
6151 & /,2x,
'cr = ',i2.2, &
6152 & 8x,
'dg = ',i2.2, &
6153 & 8x,
'ng = ',i2.2, &
6154 & /,2x,
'iic(dg) = ',i7.7, &
6155 & 3x,
'told = ',i1, &
6156 & 9x,
'tnew = ',i1, &
6157 & /,2x,
'iic(ng) = ',i7.7, &
6158 & 3x,
'Wold = ',f8.5, &
6159 & 2x,
'Wnew = ',f8.5, &
6160 & /,2x,
'time(ng) = ',i7.7, &
6161 & 3x,
'time(told) = ',i7.7, &
6162 & 3x,
'time(tnew) = ',i7.7)
6482 integer,
intent(in) :: ng, model, tile
6486 integer :: cr, dg, rg, i, j, k, m
6487 integer :: idg, jdg, kdg, imind, imaxd, jmind, jmaxd
6488 integer :: irg, jrg, krg, iminr, imaxr, jminr, jmaxr
6489 integer :: idgm1, idgp1, jdgm1, jdgp1
6492 integer :: nkpts, nwpts, nzpts
6494 integer,
parameter :: ispv = 0
6497 real(r8),
parameter :: spv = 0.0_r8
6499 real(r8) :: zbot, zr, ztop, dz, r1, r2
6501 real(r8),
allocatable :: zd(:,:,:)
6503 character (len=*),
parameter :: myfile = &
6504 & __FILE__//
", z_weights"
6532 imind=
bounds(dg) % IstrT(tile)
6533 imaxd=
bounds(dg) % IendT(tile)
6534 jmind=
bounds(dg) % JstrT(tile)
6535 jmaxd=
bounds(dg) % JendT(tile)
6537 iminr=
bounds(rg) % IstrT(tile)
6538 imaxr=
bounds(rg) % IendT(tile)
6539 jminr=
bounds(rg) % JstrT(tile)
6540 jmaxr=
bounds(rg) % JendT(tile)
6552 rcontact(cr)%Kdg(1:
n(rg),1:npoints)=ispv
6553 rcontact(cr)%Vweight(1:2,1:
n(rg),1:npoints)=spv
6558 r_contact :
IF (.not.
rcontact(cr)%interpolate.and. &
6564 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
6565 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
6567 rcontact(cr)%Vweight(1,krg,m)=1.0_r8
6568 rcontact(cr)%Vweight(2,krg,m)=0.0_r8
6580 IF (.not.
allocated(zd))
THEN
6581 allocate ( zd(4,
n(dg),npoints) )
6595 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
6597 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
6598 IF (((imind.le.idg).and.(idg.le.imaxd)).and. &
6599 & ((jmind.le.jdg).and.(jdg.le.jmaxd)))
THEN
6600 zd(1,kdg,m)=
grid(dg)%z_r(idg ,jdg ,kdg)
6601 zd(2,kdg,m)=
grid(dg)%z_r(idgp1,jdg ,kdg)
6602 zd(3,kdg,m)=
grid(dg)%z_r(idgp1,jdgp1,kdg)
6603 zd(4,kdg,m)=
grid(dg)%z_r(idg ,jdgp1,kdg)
6624 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
6625 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
6626 ztop=
rcontact(cr)%Lweight(1,m)*zd(1,
n(dg),m)+ &
6627 &
rcontact(cr)%Lweight(2,m)*zd(2,
n(dg),m)+ &
6628 &
rcontact(cr)%Lweight(3,m)*zd(3,
n(dg),m)+ &
6629 &
rcontact(cr)%Lweight(4,m)*zd(4,
n(dg),m)
6630 zbot=
rcontact(cr)%Lweight(1,m)*zd(1,1 ,m)+ &
6631 &
rcontact(cr)%Lweight(2,m)*zd(2,1 ,m)+ &
6632 &
rcontact(cr)%Lweight(3,m)*zd(3,1 ,m)+ &
6633 &
rcontact(cr)%Lweight(4,m)*zd(4,1 ,m)
6634 zr=
grid(rg)%z_r(irg,jrg,krg)
6635 IF (zr.ge.ztop)
THEN
6637 rcontact(cr)%Vweight(1,krg,m)=0.0_r8
6638 rcontact(cr)%Vweight(2,krg,m)=1.0_r8
6639 ELSE IF (zbot.ge.zr)
THEN
6641 rcontact(cr)%Vweight(1,krg,m)=0.0_r8
6642 rcontact(cr)%Vweight(2,krg,m)=1.0_r8
6645 ztop=
rcontact(cr)%Lweight(1,m)*zd(1,kdg ,m)+ &
6646 &
rcontact(cr)%Lweight(2,m)*zd(2,kdg ,m)+ &
6647 &
rcontact(cr)%Lweight(3,m)*zd(3,kdg ,m)+ &
6648 &
rcontact(cr)%Lweight(4,m)*zd(4,kdg ,m)
6649 zbot=
rcontact(cr)%Lweight(1,m)*zd(1,kdg-1,m)+ &
6650 &
rcontact(cr)%Lweight(2,m)*zd(2,kdg-1,m)+ &
6651 &
rcontact(cr)%Lweight(3,m)*zd(3,kdg-1,m)+ &
6652 &
rcontact(cr)%Lweight(4,m)*zd(4,kdg-1,m)
6653 IF ((ztop.gt.zr).and.(zr.ge.zbot))
THEN
6681 IF (
allocated(zd))
THEN
6696 imind=
bounds(dg) % IstrP(tile)
6697 imaxd=
bounds(dg) % IendT(tile)
6698 jmind=
bounds(dg) % JstrT(tile)
6699 jmaxd=
bounds(dg) % JendT(tile)
6701 iminr=
bounds(rg) % IstrP(tile)
6702 imaxr=
bounds(rg) % IendT(tile)
6703 jminr=
bounds(rg) % JstrT(tile)
6704 jmaxr=
bounds(rg) % JendT(tile)
6716 ucontact(cr)%Kdg(1:
n(rg),1:npoints)=ispv
6717 ucontact(cr)%Vweight(1:2,1:
n(rg),1:npoints)=spv
6722 u_contact :
IF (.not.
ucontact(cr)%interpolate.and. &
6728 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
6729 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
6731 ucontact(cr)%Vweight(1,krg,m)=1.0_r8
6732 ucontact(cr)%Vweight(2,krg,m)=0.0_r8
6744 IF (.not.
allocated(zd))
THEN
6745 allocate (zd(4,
n(dg),npoints))
6759 idgm1=max(idg-1,
bounds(dg)%LBi(-1))
6760 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
6762 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
6763 IF (((imind.le.idg).and.(idg.le.imaxd)).and. &
6764 & ((jmind.le.jdg).and.(jdg.le.jmaxd)))
THEN
6765 zd(1,kdg,m)=0.5_r8*(
grid(dg)%z_r(idgm1,jdg ,kdg)+ &
6766 &
grid(dg)%z_r(idg ,jdg ,kdg))
6767 zd(2,kdg,m)=0.5_r8*(
grid(dg)%z_r(idg ,jdg ,kdg)+ &
6768 &
grid(dg)%z_r(idgp1,jdg ,kdg))
6769 zd(3,kdg,m)=0.5_r8*(
grid(dg)%z_r(idg ,jdgp1,kdg)+ &
6770 &
grid(dg)%z_r(idgp1,jdgp1,kdg))
6771 zd(4,kdg,m)=0.5_r8*(
grid(dg)%z_r(idgm1,jdgp1,kdg)+ &
6772 &
grid(dg)%z_r(idg ,jdgp1,kdg))
6793 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
6794 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
6795 ztop=
ucontact(cr)%Lweight(1,m)*zd(1,
n(dg),m)+ &
6796 &
ucontact(cr)%Lweight(2,m)*zd(2,
n(dg),m)+ &
6797 &
ucontact(cr)%Lweight(3,m)*zd(3,
n(dg),m)+ &
6798 &
ucontact(cr)%Lweight(4,m)*zd(4,
n(dg),m)
6799 zbot=
ucontact(cr)%Lweight(1,m)*zd(1,1 ,m)+ &
6800 &
ucontact(cr)%Lweight(2,m)*zd(2,1 ,m)+ &
6801 &
ucontact(cr)%Lweight(3,m)*zd(3,1 ,m)+ &
6802 &
ucontact(cr)%Lweight(4,m)*zd(4,1 ,m)
6803 zr=0.5_r8*(
grid(rg)%z_r(irg ,jrg,krg)+ &
6804 &
grid(rg)%z_r(irg-1,jrg,krg))
6805 IF (zr.ge.ztop)
THEN
6807 ucontact(cr)%Vweight(1,krg,m)=0.0_r8
6808 ucontact(cr)%Vweight(2,krg,m)=1.0_r8
6809 ELSE IF (zbot.ge.zr)
THEN
6811 ucontact(cr)%Vweight(1,krg,m)=0.0_r8
6812 ucontact(cr)%Vweight(2,krg,m)=1.0_r8
6815 ztop=
ucontact(cr)%Lweight(1,m)*zd(1,kdg ,m)+ &
6816 &
ucontact(cr)%Lweight(2,m)*zd(2,kdg ,m)+ &
6817 &
ucontact(cr)%Lweight(3,m)*zd(3,kdg ,m)+ &
6818 &
ucontact(cr)%Lweight(4,m)*zd(4,kdg ,m)
6819 zbot=
ucontact(cr)%Lweight(1,m)*zd(1,kdg-1,m)+ &
6820 &
ucontact(cr)%Lweight(2,m)*zd(2,kdg-1,m)+ &
6821 &
ucontact(cr)%Lweight(3,m)*zd(3,kdg-1,m)+ &
6822 &
ucontact(cr)%Lweight(4,m)*zd(4,kdg-1,m)
6823 IF ((ztop.gt.zr).and.(zr.ge.zbot))
THEN
6851 IF (
allocated(zd))
THEN
6866 imind=
bounds(dg) % IstrT(tile)
6867 imaxd=
bounds(dg) % IendT(tile)
6868 jmind=
bounds(dg) % JstrP(tile)
6869 jmaxd=
bounds(dg) % JendT(tile)
6871 iminr=
bounds(rg) % IstrT(tile)
6872 imaxr=
bounds(rg) % IendT(tile)
6873 jminr=
bounds(rg) % JstrP(tile)
6874 jmaxr=
bounds(rg) % JendT(tile)
6886 vcontact(cr)%Kdg(1:
n(rg),1:npoints)=ispv
6887 vcontact(cr)%Vweight(1:2,1:
n(rg),1:npoints)=spv
6892 v_contact :
IF (.not.
vcontact(cr)%interpolate.and. &
6898 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
6899 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
6901 vcontact(cr)%Vweight(1,krg,m)=1.0_r8
6902 vcontact(cr)%Vweight(2,krg,m)=0.0_r8
6914 IF (.not.
allocated(zd))
THEN
6915 allocate (zd(4,
n(dg),npoints))
6925 idgp1=min(idg+1,
bounds(dg)%UBi(-1))
6927 jdgm1=max(jdg-1,
bounds(dg)%LBj(-1))
6928 jdgp1=min(jdg+1,
bounds(dg)%UBj(-1))
6929 IF (((imind.le.idg).and.(idg.le.imaxd)).and. &
6930 & ((jmind.le.jdg).and.(jdg.le.jmaxd)))
THEN
6931 zd(1,kdg,m)=0.5_r8*(
grid(dg)%z_r(idg ,jdgm1,kdg)+ &
6932 &
grid(dg)%z_r(idg ,jdg ,kdg))
6933 zd(2,kdg,m)=0.5_r8*(
grid(dg)%z_r(idgp1,jdgm1,kdg)+ &
6934 &
grid(dg)%z_r(idgp1,jdg ,kdg))
6935 zd(3,kdg,m)=0.5_r8*(
grid(dg)%z_r(idgp1,jdg ,kdg)+ &
6936 &
grid(dg)%z_r(idgp1,jdgp1,kdg))
6937 zd(4,kdg,m)=0.5_r8*(
grid(dg)%z_r(idg ,jdg ,kdg)+ &
6938 &
grid(dg)%z_r(idg ,jdgp1,kdg))
6959 IF (((iminr.le.irg).and.(irg.le.imaxr)).and. &
6960 & ((jminr.le.jrg).and.(jrg.le.jmaxr)))
THEN
6961 ztop=
vcontact(cr)%Lweight(1,m)*zd(1,
n(dg),m)+ &
6962 &
vcontact(cr)%Lweight(2,m)*zd(2,
n(dg),m)+ &
6963 &
vcontact(cr)%Lweight(3,m)*zd(3,
n(dg),m)+ &
6964 &
vcontact(cr)%Lweight(4,m)*zd(4,
n(dg),m)
6965 zbot=
vcontact(cr)%Lweight(1,m)*zd(1,1 ,m)+ &
6966 &
vcontact(cr)%Lweight(2,m)*zd(2,1 ,m)+ &
6967 &
vcontact(cr)%Lweight(3,m)*zd(3,1 ,m)+ &
6968 &
vcontact(cr)%Lweight(4,m)*zd(4,1 ,m)
6969 zr=0.5_r8*(
grid(rg)%z_r(irg,jrg ,krg)+ &
6970 &
grid(rg)%z_r(irg,jrg-1,krg))
6971 IF (zr.ge.ztop)
THEN
6973 vcontact(cr)%Vweight(1,krg,m)=0.0_r8
6974 vcontact(cr)%Vweight(2,krg,m)=1.0_r8
6975 ELSE IF (zbot.ge.zr)
THEN
6977 vcontact(cr)%Vweight(1,krg,m)=0.0_r8
6978 vcontact(cr)%Vweight(2,krg,m)=1.0_r8
6981 ztop=
vcontact(cr)%Lweight(1,m)*zd(1,kdg ,m)+ &
6982 &
vcontact(cr)%Lweight(2,m)*zd(2,kdg ,m)+ &
6983 &
vcontact(cr)%Lweight(3,m)*zd(3,kdg ,m)+ &
6984 &
vcontact(cr)%Lweight(4,m)*zd(4,kdg ,m)
6985 zbot=
vcontact(cr)%Lweight(1,m)*zd(1,kdg-1,m)+ &
6986 &
vcontact(cr)%Lweight(2,m)*zd(2,kdg-1,m)+ &
6987 &
vcontact(cr)%Lweight(3,m)*zd(3,kdg-1,m)+ &
6988 &
vcontact(cr)%Lweight(4,m)*zd(4,kdg-1,m)
6989 IF ((ztop.gt.zr).and.(zr.ge.zbot))
THEN
7017 IF (
allocated(zd))
THEN