1335 character(SCRIP_charLength),
intent(in) ::
1339 integer (SCRIP_i4),
intent(in) ::
1349 integer (SCRIP_i4),
intent(out) ::
1358 character(SCRIP_charLength) ::
1362 integer (SCRIP_i4) ::
1374 real (SCRIP_r8),
dimension(:),
allocatable ::
1377 real (SCRIP_r8),
dimension(:,:),
allocatable ::
1380 character (15),
parameter :: rtnName =
'write_remap_csm'
1390 ncstat = nf90_create(interp_file, nf90_clobber, nc_file_id)
1391 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1392 &
'error opening file'))
return
1397 ncstat = nf90_put_att(nc_file_id, nf90_global,
'title', map_name)
1398 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1399 &
'error writing remap name'))
return
1404 ncstat = nf90_put_att(nc_file_id, nf90_global,
'normalization',
1406 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1407 &
'error writing normalization option'))
return
1412 ncstat = nf90_put_att(nc_file_id, nf90_global,
'map_method',
1414 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1415 &
'error writing remap method'))
return
1420 ncstat = nf90_put_att(nc_file_id, nf90_global,
'history',
1422 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1423 &
'error writing history'))
return
1428 convention =
'NCAR-CSM'
1429 ncstat = nf90_put_att(nc_file_id, nf90_global,
'conventions',
1431 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1432 &
'error writing output convention'))
return
1438 if (direction == 1)
then
1439 grid1_ctmp =
'domain_a'
1440 grid2_ctmp =
'domain_b'
1442 grid1_ctmp =
'domain_b'
1443 grid2_ctmp =
'domain_a'
1446 ncstat = nf90_put_att(nc_file_id, nf90_global, trim(grid1_ctmp),
1448 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1449 &
'error writing grid1 name'))
return
1451 ncstat = nf90_put_att(nc_file_id, nf90_global, trim(grid2_ctmp),
1453 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1454 &
'error writing grid2 name'))
return
1466 if (direction == 1)
then
1474 ncstat = nf90_def_dim(nc_file_id,
'n_a', itmp1, nc_srcgrdsize_id)
1475 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1476 &
'error defining source grid size'))
return
1478 ncstat = nf90_def_dim(nc_file_id,
'n_b', itmp2, nc_dstgrdsize_id)
1479 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1480 &
'error defining destination grid size'))
return
1486 if (direction == 1)
then
1494 ncstat = nf90_def_dim(nc_file_id,
'nv_a', itmp1, nc_srcgrdcorn_id)
1495 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1496 &
'error defining number of corners on source grid'))
return
1498 ncstat = nf90_def_dim(nc_file_id,
'nv_b', itmp2, nc_dstgrdcorn_id)
1499 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1500 &
'error defining number of corners on destination grid'))
return
1506 if (direction == 1)
then
1514 ncstat = nf90_def_dim(nc_file_id,
'src_grid_rank',
1515 & itmp1, nc_srcgrdrank_id)
1516 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1517 &
'error defining source grid rank'))
return
1519 ncstat = nf90_def_dim(nc_file_id,
'dst_grid_rank',
1520 & itmp2, nc_dstgrdrank_id)
1521 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1522 &
'error defining destination grid rank'))
return
1528 if (direction == 1)
then
1556 ncstat = nf90_def_dim(nc_file_id,
'ni_a', itmp1, nc_src_isize_id)
1557 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1558 &
'error defining source isize'))
return
1560 ncstat = nf90_def_dim(nc_file_id,
'nj_a', itmp2, nc_src_jsize_id)
1561 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1562 &
'error defining source jsize'))
return
1564 ncstat = nf90_def_dim(nc_file_id,
'ni_b', itmp3, nc_dst_isize_id)
1565 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1566 &
'error defining destination isize'))
return
1568 ncstat = nf90_def_dim(nc_file_id,
'nj_b', itmp4, nc_dst_jsize_id)
1569 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1570 &
'error defining destination jsize'))
return
1576 if (direction == 1)
then
1582 ncstat = nf90_def_dim(nc_file_id,
'n_s', itmp1, nc_numlinks_id)
1583 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1584 &
'error defining remap size'))
return
1586 ncstat = nf90_def_dim(nc_file_id,
'num_wgts',
1588 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1589 &
'error defining number of weights'))
return
1592 ncstat = nf90_def_dim(nc_file_id,
'num_wgts1',
1594 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1595 &
'error defining number of weights1'))
return
1602 ncstat = nf90_def_var(nc_file_id,
'src_grid_dims', nf90_int,
1603 & nc_srcgrdrank_id, nc_srcgrddims_id)
1604 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1605 &
'error defining source grid dims'))
return
1607 ncstat = nf90_def_var(nc_file_id,
'dst_grid_dims', nf90_int,
1608 & nc_dstgrdrank_id, nc_dstgrddims_id)
1609 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1610 &
'error defining destination grid dims'))
return
1622 ncstat = nf90_def_var(nc_file_id,
'yc_a',
1623 & nf90_double, nc_srcgrdsize_id,
1624 & nc_srcgrdcntrlat_id)
1625 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1626 &
'error defining source grid center lats'))
return
1628 ncstat = nf90_def_var(nc_file_id,
'yc_b',
1629 & nf90_double, nc_dstgrdsize_id,
1630 & nc_dstgrdcntrlat_id)
1631 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1632 &
'error defining destination grid center lats'))
return
1638 ncstat = nf90_def_var(nc_file_id,
'xc_a',
1639 & nf90_double, nc_srcgrdsize_id,
1640 & nc_srcgrdcntrlon_id)
1641 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1642 &
'error defining source grid center lons'))
return
1644 ncstat = nf90_def_var(nc_file_id,
'xc_b',
1645 & nf90_double, nc_dstgrdsize_id,
1646 & nc_dstgrdcntrlon_id)
1647 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1648 &
'error defining destination grid center lons'))
return
1654 nc_dims2_id(1) = nc_srcgrdcorn_id
1655 nc_dims2_id(2) = nc_srcgrdsize_id
1657 ncstat = nf90_def_var(nc_file_id,
'yv_a',
1658 & nf90_double, nc_dims2_id,
1659 & nc_srcgrdcrnrlat_id)
1660 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1661 &
'error defining source grid corner lats'))
return
1663 ncstat = nf90_def_var(nc_file_id,
'xv_a',
1664 & nf90_double, nc_dims2_id,
1665 & nc_srcgrdcrnrlon_id)
1666 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1667 &
'error defining source grid corner lons'))
return
1669 nc_dims2_id(1) = nc_dstgrdcorn_id
1670 nc_dims2_id(2) = nc_dstgrdsize_id
1672 ncstat = nf90_def_var(nc_file_id,
'yv_b',
1673 & nf90_double, nc_dims2_id,
1674 & nc_dstgrdcrnrlat_id)
1675 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1676 &
'error defining destination grid corner lats'))
return
1678 ncstat = nf90_def_var(nc_file_id,
'xv_b',
1679 & nf90_double, nc_dims2_id,
1680 & nc_dstgrdcrnrlon_id)
1681 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1682 &
'error defining destination grid corner lons'))
return
1691 if (direction == 1)
then
1699 ncstat = nf90_put_att(nc_file_id, nc_srcgrdcntrlat_id,
1700 &
'units', grid1_ctmp)
1701 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1702 &
'error writing grid units'))
return
1704 ncstat = nf90_put_att(nc_file_id, nc_dstgrdcntrlat_id,
1705 &
'units', grid2_ctmp)
1706 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1707 &
'error writing grid units'))
return
1709 ncstat = nf90_put_att(nc_file_id, nc_srcgrdcntrlon_id,
1710 &
'units', grid1_ctmp)
1711 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1712 &
'error writing grid units'))
return
1714 ncstat = nf90_put_att(nc_file_id, nc_dstgrdcntrlon_id,
1715 &
'units', grid2_ctmp)
1716 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1717 &
'error writing grid units'))
return
1719 ncstat = nf90_put_att(nc_file_id, nc_srcgrdcrnrlat_id,
1720 &
'units', grid1_ctmp)
1721 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1722 &
'error writing grid units'))
return
1724 ncstat = nf90_put_att(nc_file_id, nc_srcgrdcrnrlon_id,
1725 &
'units', grid1_ctmp)
1726 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1727 &
'error writing grid units'))
return
1729 ncstat = nf90_put_att(nc_file_id, nc_dstgrdcrnrlat_id,
1730 &
'units', grid2_ctmp)
1731 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1732 &
'error writing grid units'))
return
1734 ncstat = nf90_put_att(nc_file_id, nc_dstgrdcrnrlon_id,
1735 &
'units', grid2_ctmp)
1736 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1737 &
'error writing grid units'))
return
1743 ncstat = nf90_def_var(nc_file_id,
'mask_a', nf90_int,
1744 & nc_srcgrdsize_id, nc_srcgrdimask_id)
1745 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1746 &
'error defining source grid mask'))
return
1748 ncstat = nf90_put_att(nc_file_id, nc_srcgrdimask_id,
1749 &
'units',
'unitless')
1750 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1751 &
'error writing source mask units'))
return
1753 ncstat = nf90_def_var(nc_file_id,
'mask_b', nf90_int,
1754 & nc_dstgrdsize_id, nc_dstgrdimask_id)
1755 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1756 &
'error defining destination grid mask'))
return
1758 ncstat = nf90_put_att(nc_file_id, nc_dstgrdimask_id,
1759 &
'units',
'unitless')
1760 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1761 &
'error writing destination mask units'))
return
1767 ncstat = nf90_def_var(nc_file_id,
'area_a',
1768 & nf90_double, nc_srcgrdsize_id,
1770 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1771 &
'error defining source grid area'))
return
1773 ncstat = nf90_put_att(nc_file_id, nc_srcgrdarea_id,
1774 &
'units',
'square radians')
1775 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1776 &
'error defining source area units'))
return
1778 ncstat = nf90_def_var(nc_file_id,
'area_b',
1779 & nf90_double, nc_dstgrdsize_id,
1781 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1782 &
'error defining destination grid area'))
return
1784 ncstat = nf90_put_att(nc_file_id, nc_dstgrdarea_id,
1785 &
'units',
'square radians')
1786 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1787 &
'error defining destination area units'))
return
1793 ncstat = nf90_def_var(nc_file_id,
'frac_a',
1794 & nf90_double, nc_srcgrdsize_id,
1796 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1797 &
'error defining source grid frac'))
return
1799 ncstat = nf90_put_att(nc_file_id, nc_srcgrdfrac_id,
1800 &
'units',
'unitless')
1801 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1802 &
'error defining source frac units'))
return
1804 ncstat = nf90_def_var(nc_file_id,
'frac_b',
1805 & nf90_double, nc_dstgrdsize_id,
1807 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1808 &
'error defining destination grid frac'))
return
1810 ncstat = nf90_put_att(nc_file_id, nc_dstgrdfrac_id,
1811 &
'units',
'unitless')
1812 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1813 &
'error defining destination frac units'))
return
1819 ncstat = nf90_def_var(nc_file_id,
'col',
1820 & nf90_int, nc_numlinks_id,
1822 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1823 &
'error defining source addresses'))
return
1825 ncstat = nf90_def_var(nc_file_id,
'row',
1826 & nf90_int, nc_numlinks_id,
1828 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1829 &
'error defining destination addresses'))
return
1831 ncstat = nf90_def_var(nc_file_id,
'S',
1832 & nf90_double, nc_numlinks_id,
1834 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1835 &
'error defining weights'))
return
1838 nc_dims2_id(1) = nc_numwgts1_id
1839 nc_dims2_id(2) = nc_numlinks_id
1841 ncstat = nf90_def_var(nc_file_id,
'S2',
1842 & nf90_double, nc_dims2_id,
1844 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1845 &
'error defining weights2'))
return
1852 ncstat = nf90_enddef(nc_file_id)
1853 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1854 &
'error ending definition phase'))
return
1862 if (direction == 1)
then
1902 if (
grid1_units(1:7) ==
'degrees' .and. direction == 1)
then
1909 if (
grid2_units(1:7) ==
'degrees' .and. direction == 1)
then
1922 if (direction == 1)
then
1923 itmp1 = nc_srcgrddims_id
1924 itmp2 = nc_dstgrddims_id
1926 itmp2 = nc_srcgrddims_id
1927 itmp1 = nc_dstgrddims_id
1930 ncstat = nf90_put_var(nc_file_id, itmp1,
grid1_dims)
1931 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1932 &
'error writing grid1 dims'))
return
1934 ncstat = nf90_put_var(nc_file_id, itmp2,
grid2_dims)
1935 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1936 &
'error writing grid2 dims'))
return
1938 ncstat = nf90_put_var(nc_file_id, nc_srcgrdimask_id,
1940 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1941 &
'error writing source grid mask'))
return
1943 ncstat = nf90_put_var(nc_file_id, nc_dstgrdimask_id,
1945 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1946 &
'error writing destination grid mask'))
return
1948 deallocate(src_mask_int, dst_mask_int)
1950 if (direction == 1)
then
1951 itmp1 = nc_srcgrdcntrlat_id
1952 itmp2 = nc_srcgrdcntrlon_id
1953 itmp3 = nc_srcgrdcrnrlat_id
1954 itmp4 = nc_srcgrdcrnrlon_id
1956 itmp1 = nc_dstgrdcntrlat_id
1957 itmp2 = nc_dstgrdcntrlon_id
1958 itmp3 = nc_dstgrdcrnrlat_id
1959 itmp4 = nc_dstgrdcrnrlon_id
1963 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1964 &
'error writing grid1 center lats'))
return
1967 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1968 &
'error writing grid1 center lons'))
return
1971 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1972 &
'error writing grid1 corner lats'))
return
1975 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1976 &
'error writing grid1 corner lons'))
return
1978 if (direction == 1)
then
1979 itmp1 = nc_dstgrdcntrlat_id
1980 itmp2 = nc_dstgrdcntrlon_id
1981 itmp3 = nc_dstgrdcrnrlat_id
1982 itmp4 = nc_dstgrdcrnrlon_id
1984 itmp1 = nc_srcgrdcntrlat_id
1985 itmp2 = nc_srcgrdcntrlon_id
1986 itmp3 = nc_srcgrdcrnrlat_id
1987 itmp4 = nc_srcgrdcrnrlon_id
1991 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1992 &
'error writing grid2 center lats'))
return
1995 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
1996 &
'error writing grid2 center lons'))
return
1999 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2000 &
'error writing grid2 corner lats'))
return
2003 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2004 &
'error writing grid2 corner lons'))
return
2006 if (direction == 1)
then
2007 itmp1 = nc_srcgrdarea_id
2008 itmp2 = nc_srcgrdfrac_id
2009 itmp3 = nc_dstgrdarea_id
2010 itmp4 = nc_dstgrdfrac_id
2012 itmp1 = nc_dstgrdarea_id
2013 itmp2 = nc_dstgrdfrac_id
2014 itmp3 = nc_srcgrdarea_id
2015 itmp4 = nc_srcgrdfrac_id
2021 ncstat = nf90_put_var(nc_file_id, itmp1,
grid1_area)
2023 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2024 &
'error writing grid1 area'))
return
2026 ncstat = nf90_put_var(nc_file_id, itmp2,
grid1_frac)
2027 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2028 &
'error writing grid1 frac'))
return
2031 ncstat = nf90_put_var(nc_file_id, itmp3,
grid2_area)
2033 ncstat = nf90_put_var(nc_file_id, itmp3,
grid2_area)
2035 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2036 &
'error writing grid2 area'))
return
2038 ncstat = nf90_put_var(nc_file_id, itmp4,
grid2_frac)
2039 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2040 &
'error writing grid2 frac'))
return
2042 if (direction == 1)
then
2043 ncstat = nf90_put_var(nc_file_id, nc_srcadd_id,
2045 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2046 &
'error writing source addresses'))
return
2048 ncstat = nf90_put_var(nc_file_id, nc_dstadd_id,
2050 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2051 &
'error writing destination addresses'))
return
2054 ncstat = nf90_put_var(nc_file_id, nc_rmpmatrix_id,
2056 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2057 &
'error writing weights'))
return
2064 ncstat = nf90_put_var(nc_file_id, nc_rmpmatrix_id, wts1)
2065 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2066 &
'error writing weights1'))
return
2067 ncstat = nf90_put_var(nc_file_id, nc_rmpmatrix2_id, wts2)
2068 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2069 &
'error writing weights2'))
return
2070 deallocate(wts1,wts2)
2073 ncstat = nf90_put_var(nc_file_id, nc_srcadd_id,
2075 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2076 &
'error writing source addresses'))
return
2078 ncstat = nf90_put_var(nc_file_id, nc_dstadd_id,
2080 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2081 &
'error writing destination addresses'))
return
2084 ncstat = nf90_put_var(nc_file_id, nc_rmpmatrix_id,
2086 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2087 &
'error writing weights'))
return
2094 ncstat = nf90_put_var(nc_file_id, nc_rmpmatrix_id, wts1)
2095 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2096 &
'error writing weights1'))
return
2097 ncstat = nf90_put_var(nc_file_id, nc_rmpmatrix2_id, wts2)
2098 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2099 &
'error writing weights2'))
return
2100 deallocate(wts1,wts2)
2104 ncstat = nf90_close(nc_file_id)
2105 if (scrip_netcdferrorcheck(ncstat, errorcode, rtnname,
2106 &
'error closing file'))
return