CliMA / ClimaCore.jl

CliMA model dycore
https://clima.github.io/ClimaCore.jl/dev
Apache License 2.0
79 stars 8 forks source link

Missing method for `column_integral_indefinite!` for CUDADevice #1833

Closed Sbozzolo closed 2 weeks ago

Sbozzolo commented 2 months ago

Steps to reproduce (on clima):

import ClimaAtmos as CA; CA.ClimaComms.@import_required_backends
config = CA.AtmosConfig("config/model_configs/diagnostic_edmfx_trmm_box.yml");
simulation = CA.get_simulation(config); CA.solve_atmos!(simulation);

Stack trace:

ERROR: MethodError: no method matching column_integral_indefinite!(::ClimaAtmos.InitialConditions.var"#dp_dz#40"{…}, ::ClimaComms.CUDADevice, ::ClimaCore.Fields.Field{…}, ::Float64, ::ClimaCore.Operators.var"#127#129")

Closest candidates are:
  column_integral_indefinite!(::Function, ::ClimaComms.AbstractCPUDevice, ::Any, ::Any...)
   @ ClimaCore ~/.julia/packages/ClimaCore/ANgUC/src/Operators/integrals.jl:146
  column_integral_indefinite!(::Function, ::ClimaComms.AbstractCPUDevice, ::ClimaCore.Fields.Field{V, S} where {V<:ClimaCore.DataLayouts.AbstractData, S<:(ClimaCore.Spaces.ExtrudedFiniteDifferenceSpace{G, ClimaCore.Grids.CellFace} where G)}, ::Any...)
   @ ClimaCore ~/.julia/packages/ClimaCore/ANgUC/src/Operators/integrals.jl:153
  column_integral_indefinite!(::Function, ::ClimaCore.Fields.Field, ::Any, ::Any)
   @ ClimaCore ~/.julia/packages/ClimaCore/ANgUC/src/Operators/integrals.jl:129
  ...

Stacktrace:
  [1] column_integral_indefinite!(f::Function, ᶠ∫field::ClimaCore.Fields.Field{…}, ϕ₀::Float64, average::Function)
    @ ClimaCore.Operators ~/.julia/packages/ClimaCore/ANgUC/src/Operators/integrals.jl:129
  [2] column_indefinite_integral(f::Function, ϕ₀::Float64, zspan::Tuple{Float64, Float64}; nelems::Int64)
    @ ClimaAtmos.InitialConditions ~/ClimaAtmos.jl/src/initial_conditions/initial_conditions.jl:82
  [3] column_indefinite_integral
    @ ~/ClimaAtmos.jl/src/initial_conditions/initial_conditions.jl:62 [inlined]
  [4] #hydrostatic_pressure_profile#38
    @ ~/ClimaAtmos.jl/src/initial_conditions/initial_conditions.jl:758 [inlined]
  [5] hydrostatic_pressure_profile
    @ ~/ClimaAtmos.jl/src/initial_conditions/initial_conditions.jl:724 [inlined]
  [6] (::ClimaAtmos.InitialConditions.TRMM_LBA)(params::ClimaAtmos.Parameters.ClimaAtmosParameters{…})
    @ ClimaAtmos.InitialConditions ~/ClimaAtmos.jl/src/initial_conditions/initial_conditions.jl:1063
  [7] macro expansion
    @ ~/ClimaAtmos.jl/src/solver/type_getters.jl:635 [inlined]
  [8] macro expansion
    @ ./timing.jl:503 [inlined]
  [9] macro expansion
    @ ~/ClimaAtmos.jl/src/utils/utilities.jl:331 [inlined]
 [10] get_simulation(config::ClimaAtmos.AtmosConfig{…})
    @ ClimaAtmos ~/ClimaAtmos.jl/src/solver/type_getters.jl:634
 [11] top-level scope
    @ REPL[2]:1
Some type information was truncated. Use `show(err)` to see complete types.
charleskawczynski commented 2 months ago

I wonder if this is a similar dispatch pattern we experienced with fill. I can take a look

charleskawczynski commented 1 month ago

Ah, no, we just never added gpu support for this operation (probably because it's part of the initial conditions). We can add it, but it's not as easy as a dispatch fix.

dennisYatunin commented 2 weeks ago

GPU support for this operation was added in #1903, so we can close this issue now.