jlchan / StartUpDG.jl

Initializes and sets up reference elements and physical meshes for DG.
MIT License
27 stars 9 forks source link

Plotting #79

Closed ranocha closed 1 year ago

ranocha commented 1 year ago

This came up in https://github.com/jlchan/StartUpDG.jl/pull/73#issuecomment-1382055096:

julia> using Pkg; Pkg.activate(temp=true); Pkg.add(["StartUpDG", "Plots"])
  Activating new project at `/tmp/jl_yrB65R`
    Updating registry at `~/.julia/registries/General.toml`
   Resolving package versions...
   Installed HTTP ─ v1.7.2
    Updating `/tmp/jl_yrB65R/Project.toml`
  [91a5bcdd] + Plots v1.38.2
  [472ebc20] + StartUpDG v0.15.2
...

julia> using StartUpDG, Plots

julia> begin
           rd = RefElemData(Tri(), N = 3)
           md = MeshData(uniform_mesh(Tri(), 1)..., rd)
           meshIO = triangulate_domain(Scramjet())
           plot(BoundaryTagPlotter(meshIO))
       end
Error showing value of type Plots.Plot{Plots.GRBackend}:
ERROR: MethodError: no method matching firstindex(::Nothing)
Closest candidates are:
  firstindex(::Any, ::Any) at abstractarray.jl:402
  firstindex(::Union{Tables.AbstractColumns, Tables.AbstractRow}) at ~/.julia/packages/Tables/T7rHm/src/Tables.jl:182
  firstindex(::Union{ArrayInterfaceCore.BidiagonalIndex, ArrayInterfaceCore.TridiagonalIndex}) at ~/.julia/packages/ArrayInterfaceCore/ByLA5/src/ArrayInterfaceCore.jl:664
  ...
Stacktrace:
  [1] _guess_best_legend_position(xl::Tuple{Float64, Float64}, yl::Tuple{Float64, Float64}, plt::Plots.Subplot{Plots.GRBackend}, weight::Int64)
    @ Plots ~/.julia/packages/Plots/nuwp4/src/utils.jl:1209
  [2] _guess_best_legend_position(xl::Tuple{Float64, Float64}, yl::Tuple{Float64, Float64}, plt::Plots.Subplot{Plots.GRBackend})
    @ Plots ~/.julia/packages/Plots/nuwp4/src/utils.jl:1197
  [3] _guess_best_legend_position(lp::Symbol, plt::Plots.Subplot{Plots.GRBackend})
    @ Plots ~/.julia/packages/Plots/nuwp4/src/utils.jl:1237
  [4] gr_legend_pos(sp::Plots.Subplot{Plots.GRBackend}, leg::NamedTuple{(:yoffset, :xoffset, :base_markersize, :base_factor, :has_title, :vertical, :entries, :space, :texth, :textw, :span, :pad, :dy, :dx, :w, :h), Tuple{Float64, Float64, Float64, Float64, Bool, Bool, Int64, Float64, Float64, Float64, Float64, Float64, Float64, Float64, Float64, Float64}}, vp::Plots.GRViewport{Float64})
    @ Plots ~/.julia/packages/Plots/nuwp4/src/backends/gr.jl:1122
  [5] gr_add_legend(sp::Plots.Subplot{Plots.GRBackend}, leg::NamedTuple{(:yoffset, :xoffset, :base_markersize, :base_factor, :has_title, :vertical, :entries, :space, :texth, :textw, :span, :pad, :dy, :dx, :w, :h), Tuple{Float64, Float64, Float64, Float64, Bool, Bool, Int64, Float64, Float64, Float64, Float64, Float64, Float64, Float64, Float64, Float64}}, viewport_area::Plots.GRViewport{Float64})
    @ Plots ~/.julia/packages/Plots/nuwp4/src/backends/gr.jl:993
  [6] gr_display(sp::Plots.Subplot{Plots.GRBackend}, w::Measures.AbsoluteLength, h::Measures.AbsoluteLength, vp_canvas::Plots.GRViewport{Float64})
    @ Plots ~/.julia/packages/Plots/nuwp4/src/backends/gr.jl:964
  [7] (::Plots.var"#526#527"{Int64, Int64, Plots.GRViewport{Float64}})(sp::Plots.Subplot{Plots.GRBackend})
    @ Plots ~/.julia/packages/Plots/nuwp4/src/backends/gr.jl:680
  [8] foreach(f::Plots.var"#526#527"{Int64, Int64, Plots.GRViewport{Float64}}, itr::Vector{Plots.Subplot})
    @ Base ./abstractarray.jl:2774
  [9] gr_display(plt::Plots.Plot{Plots.GRBackend}, dpi_factor::Int64)
    @ Plots ~/.julia/packages/Plots/nuwp4/src/backends/gr.jl:680
 [10] gr_display
    @ ~/.julia/packages/Plots/nuwp4/src/backends/gr.jl:650 [inlined]
 [11] #572
    @ ~/.julia/packages/Plots/nuwp4/src/backends/gr.jl:2044 [inlined]
 [12] withenv(::Plots.var"#572#574"{Plots.Plot{Plots.GRBackend}}, ::Pair{String, String}, ::Vararg{Pair{String}})
    @ Base ./env.jl:172
 [13] _display(plt::Plots.Plot{Plots.GRBackend})
    @ Plots ~/.julia/packages/Plots/nuwp4/src/backends/gr.jl:2043
 [14] display(#unused#::Plots.PlotsDisplay, plt::Plots.Plot{Plots.GRBackend})
    @ Plots ~/.julia/packages/Plots/nuwp4/src/output.jl:174
 [15] display(x::Any)
    @ Base.Multimedia ./multimedia.jl:328
 [16] #invokelatest#2
    @ ./essentials.jl:729 [inlined]
 [17] invokelatest
    @ ./essentials.jl:726 [inlined]
 [18] print_response(errio::IO, response::Any, show_value::Bool, have_color::Bool, specialdisplay::Union{Nothing, AbstractDisplay})
    @ REPL ~/Software/julia-1.8.3/share/julia/stdlib/v1.8/REPL/src/REPL.jl:296
 [19] (::REPL.var"#45#46"{REPL.LineEditREPL, Pair{Any, Bool}, Bool, Bool})(io::Any)
    @ REPL ~/Software/julia-1.8.3/share/julia/stdlib/v1.8/REPL/src/REPL.jl:278
 [20] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
    @ REPL ~/Software/julia-1.8.3/share/julia/stdlib/v1.8/REPL/src/REPL.jl:521
 [21] print_response(repl::REPL.AbstractREPL, response::Any, show_value::Bool, have_color::Bool)
    @ REPL ~/Software/julia-1.8.3/share/julia/stdlib/v1.8/REPL/src/REPL.jl:276
 [22] (::REPL.var"#do_respond#66"{Bool, Bool, REPL.var"#77#87"{REPL.LineEditREPL, REPL.REPLHistoryProvider}, REPL.LineEditREPL, REPL.LineEdit.Prompt})(s::REPL.LineEdit.MIState, buf::Any, ok::Bool)
    @ REPL ~/Software/julia-1.8.3/share/julia/stdlib/v1.8/REPL/src/REPL.jl:857
 [23] #invokelatest#2
    @ ./essentials.jl:729 [inlined]
 [24] invokelatest
    @ ./essentials.jl:726 [inlined]
 [25] run_interface(terminal::REPL.Terminals.TextTerminal, m::REPL.LineEdit.ModalInterface, s::REPL.LineEdit.MIState)
    @ REPL.LineEdit ~/Software/julia-1.8.3/share/julia/stdlib/v1.8/REPL/src/LineEdit.jl:2510
 [26] run_frontend(repl::REPL.LineEditREPL, backend::REPL.REPLBackendRef)
    @ REPL ~/Software/julia-1.8.3/share/julia/stdlib/v1.8/REPL/src/REPL.jl:1248
 [27] (::REPL.var"#49#54"{REPL.LineEditREPL, REPL.REPLBackendRef})()
    @ REPL ./task.jl:484

It works with

julia> begin
           rd = RefElemData(Tri(), N = 3)
           md = MeshData(uniform_mesh(Tri(), 1)..., rd)
           meshIO = triangulate_domain(Scramjet())
           plot(BoundaryTagPlotter(meshIO), legend=nothing)
       end
jlchan commented 1 year ago

This seems to work fine as of https://github.com/jlchan/StartUpDG.jl/commit/65ba38119d94471f74b660b9d9c677ce52800065.

The following works on Julia 1.8.5

using StartUpDG, Plots
begin
    meshIO = triangulate_domain(Scramjet())
    plot(BoundaryTagPlotter(meshIO))
end

However, the following still fails on Julia nightly CI

    recipe = RecipesBase.apply_recipe(Dict{Symbol, Any}(), BoundaryTagPlotter(meshIO));