Skip to content

Commit 8726029

Browse files
committed
Added remapping to ClimaCorePlots
Might be useful for debugging in an infiltrator session
1 parent fa1e426 commit 8726029

File tree

1 file changed

+55
-16
lines changed

1 file changed

+55
-16
lines changed

lib/ClimaCorePlots/src/ClimaCorePlots.jl

Lines changed: 55 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ import ClimaCore:
1919
Quadratures,
2020
Topologies,
2121
Spaces,
22-
Utilities
22+
Utilities,
23+
Remapping
2324

2425
using StaticArrays
2526

27+
2628
RecipesBase.@recipe function f(
2729
field::Fields.SpectralElementField1D;
2830
interpolate = 10,
@@ -492,26 +494,63 @@ end
492494
RecipesBase.@recipe function f(
493495
field::Fields.CubedSphereSpectralElementField2D;
494496
interpolate = 10,
497+
remap_to_latlon = false,
498+
nlat = 180,
499+
nlon = 180,
495500
)
496-
@assert interpolate 1 "number of element quadrature points for uniform interpolation must be ≥ 1"
501+
FT = eltype(field)
497502

498-
unfolded_panels = _unfolded_pannel_matrix(field, interpolate)
503+
if remap_to_latlon
499504

500-
# construct the title for info about the field space
501-
space = axes(field)
502-
nelem = Topologies.nlocalelems(Spaces.topology(space))
503-
quad_from = Spaces.quadrature_style(space)
504-
dof_in = Quadratures.degrees_of_freedom(quad_from)
505-
quad_from_name = Base.typename(typeof(quad_from)).name
505+
Δh_scale = Spaces.node_horizontal_length_scale(Spaces.axes(field))
506+
planet_radius = FT(6.378e6)
507+
npts = Int(round(2π * planet_radius / Δh_scale))
508+
npts = ifelse(rem(npts, 2) == 0, npts, npts + 1)
509+
npts *= 4
510+
longpts = range(FT(-180), FT(180.0), Int(nlon))
511+
latpts = range(FT(-90), FT(90), Int(nlat))
512+
hcoords = [
513+
Geometry.LatLongPoint(lat, long) for long in longpts, lat in latpts
514+
]
506515

507-
# set the plot attributes
508-
seriestype := :heatmap
509-
title --> "$nelem $quad_from_name{$dof_in} element space"
510-
xguide --> "panel x1"
511-
yguide --> "panel x2"
512-
seriescolor --> :balance
516+
# @Main.infiltrate
513517

514-
(unfolded_panels)
518+
# hcoords = Remapping.default_target_hcoords(axes(field))
519+
520+
remapper = Remapping.Remapper(axes(field), hcoords)
521+
remapped = Array(Remapping.interpolate(remapper, field))
522+
523+
# Set plot attributes
524+
seriestype := :heatmap
525+
xguide --> "Longitude"
526+
yguide --> "Latitude"
527+
seriescolor --> :balance
528+
title --> "Lat-Lon Remapped Field ($nlat × $nlon)"
529+
530+
return (longpts, latpts, transpose(remapped))
531+
532+
else
533+
# Original panel plotting branch
534+
@assert interpolate 1 "number of element quadrature points for uniform interpolation must be ≥ 1"
535+
536+
unfolded_panels = _unfolded_pannel_matrix(field, interpolate)
537+
538+
# construct the title for info about the field space
539+
space = axes(field)
540+
nelem = Topologies.nlocalelems(Spaces.topology(space))
541+
quad_from = Spaces.quadrature_style(space)
542+
dof_in = Quadratures.degrees_of_freedom(quad_from)
543+
quad_from_name = Base.typename(typeof(quad_from)).name
544+
545+
# set the plot attributes
546+
seriestype := :heatmap
547+
title --> "$nelem $quad_from_name{$dof_in} element space"
548+
xguide --> "panel x1"
549+
yguide --> "panel x2"
550+
seriescolor --> :balance
551+
552+
(unfolded_panels)
553+
end
515554
end
516555

517556
RecipesBase.@recipe function f(

0 commit comments

Comments
 (0)