Mesh Creation¶
Building a Mesh¶
The mpas_tools.mesh.creation.build_mesh.build_mesh()
function is used
create an MPAS mesh using the JIGSAW
and JIGSAW-Python packages.
The user must define a local python module define_base_mesh
that provides a
function that returns a 2D array cellWidth
of cell sizes in kilometers.
If the mesh is on a sphere, this function is called cellWidthVsLatLon()
and also returns 1D lon
and lat
arrays.
The mesh is planar, the function is called cellWidthVsXY()
and returns 4
arrays in addition to cellWidth
: 1D x
and y
arrays defining planar
coordinates in meters; as well as geom_points
, list of point coordinates for
bounding polygon for the planar mesh; and geom_edges
, list of edges between
points in geom_points
that define the bounding polygon.
The result is an MPAS mesh file base_mesh.nc
as well as several intermediate
files: mesh.log
, mesh-HFUN.msh
, mesh.jig
, mesh-MESH.msh
,
mesh.msh
, and mesh_triangles.nc
.
The mpas_tools.viz.paraview_extractor.extract_vtk()
function is used
to produce a VTK file in the base_mesh_vtk
directory that can be viewed in
ParaVeiw.
Optionally, a field, cellSeedMask
, can be added to the mesh file that can
later be used preserve a “flood plain” of positive elevations in the MPAS mesh.
See mpas_tools.mesh.creation.inject_preserve_floodplain.inject_preserve_floodplain()
.
Optioanlly, a field, bottomDepthObserved
, can be added to the mesh file
with bathymetry data from one of two topography files: earth_relief_15s.nc
or topo.msh
. If bathymetry should be added to the mesh, a local link with
one of these file names must exist. See
py:func:mpas_tools.mesh.creation.inject_bathymetry.inject_bathymetry`.
A simple example of define_base_mesh.py
for a spherical mesh with constant,
240-km resolution is:
import numpy as np
def cellWidthVsLatLon():
"""
Create cell width array for this mesh on a regular latitude-longitude grid.
Returns
-------
cellWidth : numpy.ndarray
m x n array of cell width in km
lon : numpy.ndarray
longitude in degrees (length n and between -180 and 180)
lat : numpy.ndarray
longitude in degrees (length m and between -90 and 90)
"""
ddeg = 10
constantCellWidth = 240
lat = np.arange(-90, 90.01, ddeg)
lon = np.arange(-180, 180.01, ddeg)
cellWidth = constantCellWidth * np.ones((lat.size, lon.size))
return cellWidth, lon, lat
With this module defined locally, a mesh can be generated either with the
command-line tool build_mesh
:
$ build_mesh
or by calling py:func:mpas_tools.mesh.creation.build_mesh.build_mesh:
from mpas_tools.mesh.creation.build_mesh import build_mesh
build_mesh()
The full usage details of the command-line tool are:
$ build_mesh --help
usage: build_mesh [-h] [--preserve_floodplain]
[--floodplain_elevation FLOODPLAIN_ELEVATION]
[--inject_bathymetry] [--geometry GEOMETRY]
[--plot_cellWidth]
optional arguments:
-h, --help show this help message and exit
--preserve_floodplain
Whether a flood plain (bathymetry above z = 0) should
be preserved in the mesh
--floodplain_elevation FLOODPLAIN_ELEVATION
The elevation in meters to which the flood plain is
preserved, default is 20 m
--inject_bathymetry Whether one of the default bathymetry datasets,
earth_relief_15s.nc or topo.msh, should be added to
the MPAS mesh
--geometry GEOMETRY Whether the mesh is on a sphere or a plane, default is
a sphere
--plot_cellWidth Whether to produce a plot of cellWidth