MOM6
mom_domains::clone_mom_domain Interface Reference

Detailed Description

Definition at line 101 of file MOM_domains.F90.

Private functions

subroutine clone_md_to_md (MD_in, MOM_dom, min_halo, halo_size, symmetric, domain_name)
 
subroutine clone_md_to_d2d (MD_in, mpp_domain, min_halo, halo_size, symmetric, domain_name)
 

Functions and subroutines

◆ clone_md_to_d2d()

subroutine mom_domains::clone_mom_domain::clone_md_to_d2d ( type(mom_domain_type), intent(in)  MD_in,
type(domain2d), intent(inout)  mpp_domain,
integer, dimension(2), intent(inout), optional  min_halo,
integer, intent(in), optional  halo_size,
logical, intent(in), optional  symmetric,
character(len=*), intent(in), optional  domain_name 
)
private

Definition at line 1774 of file MOM_domains.F90.

1774  type(mom_domain_type), intent(in) :: md_in
1775  type(domain2d), intent(inout) :: mpp_domain
1776  integer, dimension(2), optional, intent(inout) :: min_halo
1777  integer, optional, intent(in) :: halo_size
1778  logical, optional, intent(in) :: symmetric
1779  character(len=*), optional, intent(in) :: domain_name
1780 
1781  integer :: global_indices(4), layout(2), io_layout(2)
1782  integer :: x_flags, y_flags, niglobal, njglobal, nihalo, njhalo
1783  logical :: symmetric_dom
1784  character(len=64) :: dom_name
1785 
1786 ! Save the extra data for creating other domains of different resolution that overlay this domain
1787  niglobal = md_in%niglobal ; njglobal = md_in%njglobal
1788  nihalo = md_in%nihalo ; njhalo = md_in%njhalo
1789 
1790  symmetric_dom = md_in%symmetric
1791 
1792  x_flags = md_in%X_FLAGS ; y_flags = md_in%Y_FLAGS
1793  layout(:) = md_in%layout(:) ; io_layout(:) = md_in%io_layout(:)
1794 
1795  if (present(halo_size) .and. present(min_halo)) call mom_error(fatal, &
1796  "clone_MOM_domain can not have both halo_size and min_halo present.")
1797 
1798  if (present(min_halo)) then
1799  nihalo = max(nihalo, min_halo(1))
1800  njhalo = max(njhalo, min_halo(2))
1801  min_halo(1) = nihalo ; min_halo(2) = njhalo
1802  endif
1803 
1804  if (present(halo_size)) then
1805  nihalo = halo_size ; njhalo = halo_size
1806  endif
1807 
1808  if (present(symmetric)) then ; symmetric_dom = symmetric ; endif
1809 
1810  dom_name = "MOM"
1811  if (present(domain_name)) dom_name = trim(domain_name)
1812 
1813  global_indices(1) = 1 ; global_indices(2) = niglobal
1814  global_indices(3) = 1 ; global_indices(4) = njglobal
1815  if (associated(md_in%maskmap)) then
1816  call mom_define_domain( global_indices, layout, mpp_domain, &
1817  xflags=x_flags, yflags=y_flags, &
1818  xhalo=nihalo, yhalo=njhalo, &
1819  symmetry = symmetric, name=dom_name, &
1820  maskmap=md_in%maskmap )
1821  else
1822  call mom_define_domain( global_indices, layout, mpp_domain, &
1823  xflags=x_flags, yflags=y_flags, &
1824  xhalo=nihalo, yhalo=njhalo, &
1825  symmetry = symmetric, name=dom_name)
1826  endif
1827 
1828  if ((io_layout(1) + io_layout(2) > 0) .and. &
1829  (layout(1)*layout(2) > 1)) then
1830  call mom_define_io_domain(mpp_domain, io_layout)
1831  endif
1832 

◆ clone_md_to_md()

subroutine mom_domains::clone_mom_domain::clone_md_to_md ( type(mom_domain_type), intent(in)  MD_in,
type(mom_domain_type), pointer  MOM_dom,
integer, dimension(2), intent(inout), optional  min_halo,
integer, intent(in), optional  halo_size,
logical, intent(in), optional  symmetric,
character(len=*), intent(in), optional  domain_name 
)
private

Definition at line 1695 of file MOM_domains.F90.

1695  type(mom_domain_type), intent(in) :: md_in
1696  type(mom_domain_type), pointer :: mom_dom
1697  integer, dimension(2), optional, intent(inout) :: min_halo
1698  integer, optional, intent(in) :: halo_size
1699  logical, optional, intent(in) :: symmetric
1700  character(len=*), optional, intent(in) :: domain_name
1701 
1702  integer :: global_indices(4)
1703  logical :: mask_table_exists
1704  character(len=64) :: dom_name
1705 
1706  if (.not.associated(mom_dom)) then
1707  allocate(mom_dom)
1708  allocate(mom_dom%mpp_domain)
1709  endif
1710 
1711 ! Save the extra data for creating other domains of different resolution that overlay this domain
1712  mom_dom%niglobal = md_in%niglobal ; mom_dom%njglobal = md_in%njglobal
1713  mom_dom%nihalo = md_in%nihalo ; mom_dom%njhalo = md_in%njhalo
1714 
1715  mom_dom%symmetric = md_in%symmetric
1716  mom_dom%nonblocking_updates = md_in%nonblocking_updates
1717 
1718  mom_dom%X_FLAGS = md_in%X_FLAGS ; mom_dom%Y_FLAGS = md_in%Y_FLAGS
1719  mom_dom%layout(:) = md_in%layout(:) ; mom_dom%io_layout(:) = md_in%io_layout(:)
1720  mom_dom%use_io_layout = (mom_dom%io_layout(1) + mom_dom%io_layout(2) > 0)
1721 
1722  if (associated(md_in%maskmap)) then
1723  mask_table_exists = .true.
1724  allocate(mom_dom%maskmap(mom_dom%layout(1), mom_dom%layout(2)))
1725  mom_dom%maskmap(:,:) = md_in%maskmap(:,:)
1726  else
1727  mask_table_exists = .false.
1728  endif
1729 
1730  if (present(halo_size) .and. present(min_halo)) call mom_error(fatal, &
1731  "clone_MOM_domain can not have both halo_size and min_halo present.")
1732 
1733  if (present(min_halo)) then
1734  mom_dom%nihalo = max(mom_dom%nihalo, min_halo(1))
1735  min_halo(1) = mom_dom%nihalo
1736  mom_dom%njhalo = max(mom_dom%njhalo, min_halo(2))
1737  min_halo(2) = mom_dom%njhalo
1738  endif
1739 
1740  if (present(halo_size)) then
1741  mom_dom%nihalo = halo_size ; mom_dom%njhalo = halo_size
1742  endif
1743 
1744  if (present(symmetric)) then ; mom_dom%symmetric = symmetric ; endif
1745 
1746  dom_name = "MOM"
1747  if (present(domain_name)) dom_name = trim(domain_name)
1748 
1749  global_indices(1) = 1 ; global_indices(2) = mom_dom%niglobal
1750  global_indices(3) = 1 ; global_indices(4) = mom_dom%njglobal
1751  if (mask_table_exists) then
1752  call mom_define_domain( global_indices, mom_dom%layout, mom_dom%mpp_domain, &
1753  xflags=mom_dom%X_FLAGS, yflags=mom_dom%Y_FLAGS, &
1754  xhalo=mom_dom%nihalo, yhalo=mom_dom%njhalo, &
1755  symmetry = mom_dom%symmetric, name=dom_name, &
1756  maskmap=mom_dom%maskmap )
1757  else
1758  call mom_define_domain( global_indices, mom_dom%layout, mom_dom%mpp_domain, &
1759  xflags=mom_dom%X_FLAGS, yflags=mom_dom%Y_FLAGS, &
1760  xhalo=mom_dom%nihalo, yhalo=mom_dom%njhalo, &
1761  symmetry = mom_dom%symmetric, name=dom_name)
1762  endif
1763 
1764  if ((mom_dom%io_layout(1) + mom_dom%io_layout(2) > 0) .and. &
1765  (mom_dom%layout(1)*mom_dom%layout(2) > 1)) then
1766  call mom_define_io_domain(mom_dom%mpp_domain, mom_dom%io_layout)
1767  endif
1768 

The documentation for this interface was generated from the following file: