Skip to content

Commit aa49047

Browse files
Improve show for spaces and grids (#2202)
1 parent 8c55ef7 commit aa49047

File tree

4 files changed

+90
-16
lines changed

4 files changed

+90
-16
lines changed

NEWS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ ClimaCore.jl Release Notes
44
main
55
-------
66

7+
- Improved `show` for spaces, and added `show` for grids. PR [2202](https://github.com/CliMA/ClimaCore.jl/pull/2202).
8+
79
v0.14.26
810
-------
911

src/Grids/Grids.jl

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@ Get the topology of a grid.
3535
"""
3636
function topology end
3737

38-
function vertical_topology end
39-
4038
"""
4139
Grids.local_geometry_data(
4240
grid :: AbstractGrid,
@@ -77,6 +75,47 @@ include("extruded.jl")
7775
include("column.jl")
7876
include("level.jl")
7977

78+
function Base.show(io::IO, grid::AbstractGrid)
79+
indent = get(io, :indent, 0)
80+
iio = IOContext(io, :indent => indent + 2)
81+
println(io, nameof(typeof(grid)), ":")
82+
if has_horizontal(grid)
83+
# some reduced spaces (like slab space) do not have topology
84+
println(iio, " "^(indent + 2), "horizontal:")
85+
print(iio, " "^(indent + 4), "context: ")
86+
Topologies.print_context(iio, topology(grid).context)
87+
println(iio)
88+
println(iio, " "^(indent + 4), "mesh: ", topology(grid).mesh)
89+
print(iio, " "^(indent + 4), "quadrature: ", quadrature_style(grid))
90+
end
91+
if has_vertical(grid)
92+
has_horizontal(grid) && println(iio, "")
93+
println(iio, " "^(indent + 2), "vertical:")
94+
print(iio, " "^(indent + 4), "mesh: ", vertical_topology(grid).mesh)
95+
end
96+
end
97+
98+
"""
99+
has_horizontal(::AbstractGrid)
100+
101+
Returns a bool indicating that the grid has a vertical part.
102+
"""
103+
function has_horizontal end
104+
has_horizontal(::AbstractGrid) = false
105+
has_horizontal(::ExtrudedFiniteDifferenceGrid) = true
106+
has_horizontal(::DeviceSpectralElementGrid2D) = true
107+
has_horizontal(::SpectralElementGrid2D) = true
108+
has_horizontal(::SpectralElementGrid1D) = true
109+
110+
"""
111+
has_vertical(::AbstractGrid)
112+
113+
Returns a bool indicating that the space has a vertical part.
114+
"""
115+
function has_vertical end
116+
has_vertical(::AbstractGrid) = false
117+
has_vertical(::FiniteDifferenceGrid) = true
118+
has_vertical(::ExtrudedFiniteDifferenceGrid) = true
80119

81120

82121
end # module

src/Spaces/Spaces.jl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,4 +178,25 @@ function ncolumns(space::SpectralElementSpace2D)
178178
end
179179

180180

181+
"""
182+
has_vertical(::AbstractSpace)
183+
184+
Returns a bool indicating that the space has a vertical grid.
185+
"""
186+
function has_vertical end
187+
has_vertical(::AbstractSpace) = false
188+
has_vertical(::ExtrudedFiniteDifferenceSpace) = true
189+
has_vertical(::FiniteDifferenceSpace) = false
190+
191+
"""
192+
has_horizontal(::AbstractSpace)
193+
194+
Returns a bool indicating that the space has a vertical grid.
195+
"""
196+
function has_horizontal end
197+
has_horizontal(::AbstractSpace) = false
198+
has_horizontal(::ExtrudedFiniteDifferenceSpace) = true
199+
has_horizontal(::SpectralElementSpace1D) = true
200+
has_horizontal(::SpectralElementSpace2D) = true
201+
181202
end # module

src/Spaces/extruded.jl

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -169,14 +169,32 @@ function Base.show(io::IO, space::ExtrudedFiniteDifferenceSpace)
169169
":",
170170
)
171171
print(iio, " "^(indent + 2), "context: ")
172-
hspace = Spaces.horizontal_space(space)
173-
Topologies.print_context(iio, Spaces.topology(hspace).context)
174-
println(iio)
175-
println(iio, " "^(indent + 2), "horizontal:")
176-
println(iio, " "^(indent + 4), "mesh: ", Spaces.topology(hspace).mesh)
177-
println(iio, " "^(indent + 4), "quadrature: ", quadrature_style(hspace))
178-
println(iio, " "^(indent + 2), "vertical:")
179-
print(iio, " "^(indent + 4), "mesh: ", vertical_topology(space).mesh)
172+
Topologies.print_context(iio, ClimaComms.context(space))
173+
if has_horizontal(space)
174+
hspace = Spaces.horizontal_space(space)
175+
hmesh = Spaces.topology(hspace).mesh
176+
Topologies.print_context(iio, Spaces.topology(hspace).context)
177+
println(iio)
178+
println(iio, " "^(indent + 2), "horizontal:")
179+
println(iio, " "^(indent + 4), "mesh: ", hmesh)
180+
println(
181+
iio,
182+
" "^(indent + 4),
183+
"node_horizontal_length_scale: ",
184+
Spaces.node_horizontal_length_scale(hspace),
185+
)
186+
println(
187+
iio,
188+
" "^(indent + 4),
189+
"element_horizontal_length_scale: ",
190+
Meshes.element_horizontal_length_scale(hmesh),
191+
)
192+
println(iio, " "^(indent + 4), "quadrature: ", quadrature_style(hspace))
193+
end
194+
if has_vertical(space)
195+
println(iio, " "^(indent + 2), "vertical:")
196+
print(iio, " "^(indent + 4), "mesh: ", vertical_topology(space).mesh)
197+
end
180198
end
181199

182200
quadrature_style(space::ExtrudedFiniteDifferenceSpace) =
@@ -190,17 +208,11 @@ horizontal_space(full_space::ExtrudedFiniteDifferenceSpace) =
190208
vertical_topology(space::ExtrudedFiniteDifferenceSpace) =
191209
vertical_topology(grid(space))
192210

193-
194-
195211
function column(space::ExtrudedFiniteDifferenceSpace, colidx::Grids.ColumnIndex)
196212
column_grid = column(grid(space), colidx)
197213
FiniteDifferenceSpace(column_grid, space.staggering)
198214
end
199215

200-
201-
202-
203-
204216
Base.@propagate_inbounds function slab(
205217
space::ExtrudedFiniteDifferenceSpace,
206218
v,

0 commit comments

Comments
 (0)