CommonGrids
ClimaCore.CommonGrids — Module
CommonGridsCommonGrids contains convenience constructors for common grids. Constructors in this module are sometimes dynamically created. You may want to use a different constructor if you're making the object in a performance-critical section, and if you know the type parameters at compile time.
If no convenience constructor exists, then you may need to create a custom grid using our low-level compose-able API.
Transitioning to using CommonGrids
You may have constructed a grid in the following way:
using ClimaComms
using ClimaCore: DataLayouts, Geometry, Topologies, Quadratures, Domains, Meshes, Grids
FT = Float64
z_elem = 63
z_min = FT(0)
z_max = FT(1)
radius = FT(6.371229e6)
h_elem = 15
n_quad_points = 4
device = ClimaComms.device()
context = ClimaComms.context(device)
hypsography = Grids.Flat()
global_geometry = Geometry.ShallowSphericalGlobalGeometry{FT}(radius)
quad = Quadratures.GLL{n_quad_points}()
h_mesh = Meshes.EquiangularCubedSphere(Domains.SphereDomain{FT}(radius), h_elem)
h_topology = Topologies.Topology2D(context, h_mesh)
z_boundary_names = (:bottom, :top)
z_domain = Domains.IntervalDomain(
Geometry.ZPoint{FT}(z_min),
Geometry.ZPoint{FT}(z_max);
boundary_names = z_boundary_names,
)
z_mesh = Meshes.IntervalMesh(z_domain; nelems = z_elem)
h_grid = Grids.SpectralElementGrid2D(h_topology, quad)
z_topology = Topologies.IntervalTopology(ClimaComms.SingletonCommsContext(device), z_mesh)
z_grid = Grids.FiniteDifferenceGrid(z_topology)
grid = Grids.ExtrudedFiniteDifferenceGrid(
h_grid,
z_grid,
hypsography,
global_geometry,
)You may re-write this as:
using ClimaCore.CommonGrids: ExtrudedCubedSphereGrid
grid = ExtrudedCubedSphereGrid(;
z_elem = 63,
z_min = 0,
z_max = 1,
radius = 6.371229e6,
h_elem = 15,
n_quad_points = 4,
)ClimaCore.CommonGrids.ExtrudedCubedSphereGrid — Function
ExtrudedCubedSphereGrid(
::Type{<:AbstractFloat}; # defaults to Float64
z_elem::Integer,
z_min::Real,
z_max::Real,
radius::Real,
h_elem::Integer,
n_quad_points::Integer,
device::ClimaComms.AbstractDevice = ClimaComms.device(),
context::ClimaComms.AbstractCommsContext = ClimaComms.context(device),
stretch::Meshes.StretchingRule = Meshes.Uniform(),
hypsography_fun = (h_grid, z_grid) -> Grids.Flat(),
global_geometry::Geometry.AbstractGlobalGeometry = Geometry.ShallowSphericalGlobalGeometry{FT}(radius),
quad::Quadratures.QuadratureStyle = Quadratures.GLL{n_quad_points}(),
h_mesh = Meshes.EquiangularCubedSphere(Domains.SphereDomain{FT}(radius), h_elem),
h_topology::Topologies.AbstractDistributedTopology = Topologies.Topology2D(context, h_mesh),
VIJH = DataLayouts.VIJFH,
z_mesh::Meshes.IntervalMesh = DefaultZMesh(FT; z_min, z_max, z_elem, stretch),
enable_bubble::Bool = false
enable_mask::Bool = false
)A convenience constructor, which builds an Grids.ExtrudedFiniteDifferenceGrid, given:
FTthe floating-point type (defaults toFloat64) [Float32,Float64]z_elemthe number of z-pointsz_minthe domain minimum along the z-direction.z_maxthe domain maximum along the z-direction.radiusthe radius of the cubed sphereh_elemthe number of horizontal elements per side of every panel (6 panels in total)n_quad_pointsthe number of quadrature points per horizontal elementdevicetheClimaComms.devicecontexttheClimaComms.contextstretchthe meshMeshes.StretchingRule(defaults toMeshes.Uniform)hypsography_funa function or callable object (hypsography_fun(h_grid, z_grid) -> hypsography) for constructing the hypsography model.global_geometrythe global geometry (defaults toGeometry.CartesianGlobalGeometry)quadthe quadrature style (defaults toQuadratures.GLL{n_quad_points})h_meshthe horizontal mesh (defaults toMeshes.EquiangularCubedSphere)h_topologythe horizontal topology (defaults toTopologies.Topology2D)VIJHthe horizontal DataLayout type (defaults toDataLayouts.VIJFH). This parameter describes how data is arranged in memory. SeeGrids.SpectralElementGrid2Dfor its use.z_meshthe vertical mesh, defaults to anMeshes.IntervalMeshalongzwith givenstretchenable_bubbleenables the "bubble correction" for more accurate element areas when computing the spectral element space. SeeGrids.SpectralElementGrid2Dfor more information.enable_maskenables a horizontal mask, for skipping operations on specified columns viaset_mask!.
Example usage
using ClimaCore.CommonGrids
grid = ExtrudedCubedSphereGrid(;
z_elem = 10,
z_min = 0,
z_max = 1,
radius = 10,
h_elem = 10,
n_quad_points = 4,
)ClimaCore.CommonGrids.CubedSphereGrid — Function
CubedSphereGrid(
::Type{<:AbstractFloat}; # defaults to Float64
radius::Real,
h_elem::Integer,
n_quad_points::Integer,
device::ClimaComms.AbstractDevice = ClimaComms.device(),
context::ClimaComms.AbstractCommsContext = ClimaComms.context(device),
quad::Quadratures.QuadratureStyle = Quadratures.GLL{n_quad_points}(),
h_mesh = Meshes.EquiangularCubedSphere(Domains.SphereDomain{FT}(radius), h_elem),
h_topology::Topologies.AbstractDistributedTopology = Topologies.Topology2D(context, h_mesh),
VIJH = DataLayouts.VIJFH,
enable_mask = false,
)A convenience constructor, which builds a Grids.SpectralElementGrid2D given:
FTthe floating-point type (defaults toFloat64) [Float32,Float64]radiusthe radius of the cubed sphereh_elemthe number of horizontal elements per side of every panel (6 panels in total)n_quad_pointsthe number of quadrature points per horizontal elementdevicetheClimaComms.devicecontexttheClimaComms.contextquadthe quadrature style (defaults toQuadratures.GLL{n_quad_points})h_meshthe horizontal mesh (defaults toMeshes.EquiangularCubedSphere)h_topologythe horizontal topology (defaults toTopologies.Topology2D)VIJHthe horizontal DataLayout type (defaults toDataLayouts.VIJFH). This parameter describes how data is arranged in memory. SeeGrids.SpectralElementGrid2Dfor its use.enable_maskenables a horizontal mask, for skipping operations on specified columns viaset_mask!.
Example usage
using ClimaCore.CommonGrids
grid = CubedSphereGrid(; radius = 10, n_quad_points = 4, h_elem = 10)ClimaCore.CommonGrids.ColumnGrid — Function
ColumnGrid(
::Type{<:AbstractFloat}; # defaults to Float64
z_elem::Integer,
z_min::Real,
z_max::Real,
device::ClimaComms.AbstractDevice = ClimaComms.device(),
context::ClimaComms.AbstractCommsContext = ClimaComms.context(device),
stretch::Meshes.StretchingRule = Meshes.Uniform(),
z_mesh::Meshes.IntervalMesh = DefaultZMesh(FT; z_min, z_max, z_elem, stretch),
)A convenience constructor, which builds a Grids.FiniteDifferenceGrid given:
FTthe floating-point type (defaults toFloat64) [Float32,Float64]z_elemthe number of z-pointsz_minthe domain minimum along the z-direction.z_maxthe domain maximum along the z-direction.devicetheClimaComms.devicecontexttheClimaComms.contextstretchthe meshMeshes.StretchingRule(defaults toMeshes.Uniform)z_meshthe vertical mesh, defaults to anMeshes.IntervalMeshalongzwith givenstretch
Example usage
using ClimaCore.CommonGrids
grid = ColumnGrid(; z_elem = 10, z_min = 0, z_max = 10)ClimaCore.CommonGrids.Box3DGrid — Function
Box3DGrid(
::Type{<:AbstractFloat}; # defaults to Float64
z_elem::Integer,
x_min::Real,
x_max::Real,
y_min::Real,
y_max::Real,
z_min::Real,
z_max::Real,
periodic_x::Bool,
periodic_y::Bool,
n_quad_points::Integer,
x_elem::Integer,
y_elem::Integer,
device::ClimaComms.AbstractDevice = ClimaComms.device(),
context::ClimaComms.AbstractCommsContext = ClimaComms.context(device),
stretch::Meshes.StretchingRule = Meshes.Uniform(),
hypsography_fun = (h_grid, z_grid) -> Grids.Flat(),
global_geometry::Geometry.AbstractGlobalGeometry = Geometry.CartesianGlobalGeometry(),
quad::Quadratures.QuadratureStyle = Quadratures.GLL{n_quad_points}(),
VIJH = DataLayouts.VIJFH,
[h_topology::Topologies.AbstractDistributedTopology], # optional
[z_mesh::Meshes.IntervalMesh], # optional
enable_bubble::Bool = false,
enable_mask::Bool = false,
)A convenience constructor, which builds a Grids.ExtrudedFiniteDifferenceGrid with a Grids.FiniteDifferenceGrid vertical grid and a Grids.SpectralElementGrid2D horizontal grid, given:
z_elemthe number of z-pointsx_minthe domain minimum along the x-direction.x_maxthe domain maximum along the x-direction.y_minthe domain minimum along the y-direction.y_maxthe domain maximum along the y-direction.z_minthe domain minimum along the z-direction.z_maxthe domain maximum along the z-direction.periodic_xBool indicating to use periodic domain along x-directionperiodic_yBool indicating to use periodic domain along y-directionn_quad_pointsthe number of quadrature points per horizontal elementx_elemthe number of x-pointsy_elemthe number of y-pointsdevicetheClimaComms.devicecontexttheClimaComms.contextstretchthe meshMeshes.StretchingRule(defaults toMeshes.Uniform)hypsography_funa function or callable object (hypsography_fun(h_grid, z_grid) -> hypsography) for constructing the hypsography model.global_geometrythe global geometry (defaults toGeometry.CartesianGlobalGeometry)quadthe quadrature style (defaults toQuadratures.GLL{n_quad_points})h_topologythe horizontal topology (defaults toTopologies.Topology2D)z_meshthe vertical mesh, defaults to anMeshes.IntervalMeshalongzwith givenstretchenable_bubbleenables the "bubble correction" for more accurate element areas when computing the spectral element space. SeeGrids.SpectralElementGrid2Dfor more information.VIJHthe horizontal DataLayout type (defaults toDataLayouts.VIJFH). This parameter describes how data is arranged in memory. SeeGrids.SpectralElementGrid2Dfor its use.enable_maskenables a horizontal mask, for skipping operations on specified columns viaset_mask!.
Example usage
using ClimaCore.CommonGrids
grid = Box3DGrid(;
z_elem = 10,
x_min = 0,
x_max = 1,
y_min = 0,
y_max = 1,
z_min = 0,
z_max = 10,
periodic_x = false,
periodic_y = false,
n_quad_points = 4,
x_elem = 3,
y_elem = 4,
)ClimaCore.CommonGrids.SliceXZGrid — Function
SliceXZGrid(
::Type{<:AbstractFloat}; # defaults to Float64
z_elem::Integer,
x_min::Real,
x_max::Real,
z_min::Real,
z_max::Real,
periodic_x::Bool,
n_quad_points::Integer,
x_elem::Integer,
device::ClimaComms.AbstractDevice = ClimaComms.device(),
context::ClimaComms.AbstractCommsContext = ClimaComms.context(device),
stretch::Meshes.StretchingRule = Meshes.Uniform(),
hypsography_fun = (h_grid, z_grid) -> Grids.Flat(),
global_geometry::Geometry.AbstractGlobalGeometry = Geometry.CartesianGlobalGeometry(),
quad::Quadratures.QuadratureStyle = Quadratures.GLL{n_quad_points}(),
)A convenience constructor, which builds a Grids.ExtrudedFiniteDifferenceGrid with a Grids.FiniteDifferenceGrid vertical grid and a Grids.SpectralElementGrid1D horizontal grid, given:
FTthe floating-point type (defaults toFloat64) [Float32,Float64]z_elemthe number of z-pointsx_minthe domain minimum along the x-direction.x_maxthe domain maximum along the x-direction.z_minthe domain minimum along the z-direction.z_maxthe domain maximum along the z-direction.periodic_xBool indicating to use periodic domain along x-directionn_quad_pointsthe number of quadrature points per horizontal elementx_elemthe number of x-pointsdevicetheClimaComms.devicecontexttheClimaComms.contextstretchthe meshMeshes.StretchingRule(defaults toMeshes.Uniform)hypsography_funa function or callable object (hypsography_fun(h_grid, z_grid) -> hypsography) for constructing the hypsography model.global_geometrythe global geometry (defaults toGeometry.CartesianGlobalGeometry)quadthe quadrature style (defaults toQuadratures.GLL{n_quad_points})
Example usage
using ClimaCore.CommonGrids
grid = SliceXZGrid(;
z_elem = 10,
x_min = 0,
x_max = 1,
z_min = 0,
z_max = 1,
periodic_x = false,
n_quad_points = 4,
x_elem = 4,
)ClimaCore.CommonGrids.RectangleXYGrid — Function
RectangleXYGrid(
::Type{<:AbstractFloat}; # defaults to Float64
x_min::Real,
x_max::Real,
y_min::Real,
y_max::Real,
periodic_x::Bool,
periodic_y::Bool,
n_quad_points::Integer,
x_elem::Integer, # number of horizontal elements
y_elem::Integer, # number of horizontal elements
device::ClimaComms.AbstractDevice = ClimaComms.device(),
context::ClimaComms.AbstractCommsContext = ClimaComms.context(device),
hypsography::Grids.HypsographyAdaption = Grids.Flat(),
global_geometry::Geometry.AbstractGlobalGeometry = Geometry.CartesianGlobalGeometry(),
quad::Quadratures.QuadratureStyle = Quadratures.GLL{n_quad_points}(),
enable_mask::Bool = false,
)A convenience constructor, which builds a Grids.SpectralElementGrid2D with a horizontal RectilinearMesh mesh, given:
x_minthe domain minimum along the x-direction.x_maxthe domain maximum along the x-direction.y_minthe domain minimum along the y-direction.y_maxthe domain maximum along the y-direction.periodic_xBool indicating to use periodic domain along x-directionperiodic_yBool indicating to use periodic domain along y-directionn_quad_pointsthe number of quadrature points per horizontal elementx_elemthe number of x-pointsy_elemthe number of y-pointsdevicetheClimaComms.devicecontexttheClimaComms.contexthypsography_funa function or callable object (hypsography_fun(h_grid, z_grid) -> hypsography) for constructing the hypsography model.global_geometrythe global geometry (defaults toGeometry.CartesianGlobalGeometry)quadthe quadrature style (defaults toQuadratures.GLL{n_quad_points})enable_maskenables a horizontal mask, for skipping operations on specified columns viaset_mask!.
Example usage
using ClimaCore.CommonGrids
grid = RectangleXYGrid(;
x_min = 0,
x_max = 1,
y_min = 0,
y_max = 1,
periodic_x = false,
periodic_y = false,
n_quad_points = 4,
x_elem = 3,
y_elem = 4,
)