Skip to content

Broken compatibility with FastMultipole.jl #43

@EdoAlvarezR

Description

@EdoAlvarezR

Doing a fresh Julia installation with latest main commits from FLOWVPM and FastMultipole does not pass the unit tests. Recommended fix is to update FLOWVPM accordingly, or add a more specific version compatibility to Project.toml.

Here is how to replicate:

] add https://github.com/byuflowlab/FastMultipole.jl
] add https://github.com/byuflowlab/FLOWVPM.jl

] test FLOWVPM

Unit test output:

FMM UJ test: Single vortex ring...
test set: Error During Test at /Users/rachelmarie/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/test/runtests_singlevortexring.jl:36
  Got exception outside of a @test
  MethodError: no method matching fmm!(::Tuple{FLOWVPM.ParticleField{Float64, FLOWVPM.ReformulatedVPM{Float64}, FLOWVPM.Inviscid{Float64}, typeof(FLOWVPM.nofreestream), FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, typeof(FLOWVPM.UJ_fmm), typeof(FLOWVPM.euler), FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, 0}}, ::FastMultipole.Tree{Float64, 1}, ::Tuple{FLOWVPM.ParticleField{Float64, FLOWVPM.ReformulatedVPM{Float64}, FLOWVPM.Inviscid{Float64}, typeof(FLOWVPM.nofreestream), FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, typeof(FLOWVPM.UJ_fmm), typeof(FLOWVPM.euler), FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, 0}}, ::FastMultipole.Tree{Float64, 1}, ::StaticArraysCore.SVector{1, Int64}, ::Vector{StaticArraysCore.SVector{2, Int32}}, ::Vector{StaticArraysCore.SVector{2, Int32}}, ::Tuple{FastMultipole.DerivativesSwitch{false, true, true}}, ::FastMultipole.SelfTuningTargetStop; multipole_acceptance::Float64, t_source_tree::Float64, t_target_tree::Float64, t_lists::Float64, expansion_order::Int64, error_tolerance::FastMultipole.PowerRelativeGradient{1.0e-6, 1.0e-6, true}, tune::Bool, shrink_recenter::Bool, nearfield_device::Bool, silence_warnings::Bool)
  This method does not support all of the given keyword arguments (and may not support any).
  
  Closest candidates are:
    fmm!(::Tuple, ::FastMultipole.Tree, ::Tuple, ::FastMultipole.Tree, ::Any, ::Any, ::Any, ::Tuple, ::FastMultipole.InteractionListMethod; expansion_order, error_tolerance, upward_pass, horizontal_pass, downward_pass, horizontal_pass_verbose, reset_target_tree, reset_source_tree, nearfield_device, nearfield, tune, update_target_systems, multipole_acceptance, t_source_tree, t_target_tree, t_lists, silence_warnings) got unsupported keyword argument "shrink_recenter"
     @ FastMultipole ~/Dropbox/MHDResearch/FLOWCodes/FastMultipole.jl/src/fmm.jl:928
    fmm!(::Tuple, ::FastMultipole.Tree, ::Tuple, ::FastMultipole.Tree; leaf_size_source, multipole_acceptance, derivatives_switches, farfield, nearfield, self_induced, interaction_list_method, t_source_tree, t_target_tree, optargs...)
     @ FastMultipole ~/Dropbox/MHDResearch/FLOWCodes/FastMultipole.jl/src/fmm.jl:902
    fmm!(::Any, ::Any; ...)
     @ FastMultipole ~/Dropbox/MHDResearch/FLOWCodes/FastMultipole.jl/src/fmm.jl:810
    ...
  
  Stacktrace:
    [1] kwerr(::@NamedTuple{multipole_acceptance::Float64, t_source_tree::Float64, t_target_tree::Float64, t_lists::Float64, expansion_order::Int64, error_tolerance::FastMultipole.PowerRelativeGradient{1.0e-6, 1.0e-6, true}, tune::Bool, shrink_recenter::Bool, nearfield_device::Bool, silence_warnings::Bool}, ::Function, ::Tuple{FLOWVPM.ParticleField{Float64, FLOWVPM.ReformulatedVPM{Float64}, FLOWVPM.Inviscid{Float64}, typeof(FLOWVPM.nofreestream), FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, typeof(FLOWVPM.UJ_fmm), typeof(FLOWVPM.euler), FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, 0}}, ::FastMultipole.Tree{Float64, 1}, ::Tuple{FLOWVPM.ParticleField{Float64, FLOWVPM.ReformulatedVPM{Float64}, FLOWVPM.Inviscid{Float64}, typeof(FLOWVPM.nofreestream), FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, typeof(FLOWVPM.UJ_fmm), typeof(FLOWVPM.euler), FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, 0}}, ::FastMultipole.Tree{Float64, 1}, ::StaticArraysCore.SVector{1, Int64}, ::Vector{StaticArraysCore.SVector{2, Int32}}, ::Vector{StaticArraysCore.SVector{2, Int32}}, ::Tuple{FastMultipole.DerivativesSwitch{false, true, true}}, ::FastMultipole.SelfTuningTargetStop)
      @ Base ./error.jl:175
    [2] fmm!(target_systems::Tuple{FLOWVPM.ParticleField{Float64, FLOWVPM.ReformulatedVPM{Float64}, FLOWVPM.Inviscid{Float64}, typeof(FLOWVPM.nofreestream), FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, typeof(FLOWVPM.UJ_fmm), typeof(FLOWVPM.euler), FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, 0}}, target_tree::FastMultipole.Tree{Float64, 1}, source_systems::Tuple{FLOWVPM.ParticleField{Float64, FLOWVPM.ReformulatedVPM{Float64}, FLOWVPM.Inviscid{Float64}, typeof(FLOWVPM.nofreestream), FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, typeof(FLOWVPM.UJ_fmm), typeof(FLOWVPM.euler), FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, 0}}, source_tree::FastMultipole.Tree{Float64, 1}; leaf_size_source::StaticArraysCore.SVector{1, Int64}, multipole_acceptance::Float64, derivatives_switches::Tuple{FastMultipole.DerivativesSwitch{false, true, true}}, farfield::Bool, nearfield::Bool, self_induced::Bool, interaction_list_method::FastMultipole.SelfTuningTargetStop, t_source_tree::Float64, t_target_tree::Float64, optargs::@Kwargs{expansion_order::Int64, error_tolerance::FastMultipole.PowerRelativeGradient{1.0e-6, 1.0e-6, true}, tune::Bool, shrink_recenter::Bool, nearfield_device::Bool, silence_warnings::Bool})
      @ FastMultipole ~/Dropbox/MHDResearch/FLOWCodes/FastMultipole.jl/src/fmm.jl:925
    [3] fmm!(target_systems::Tuple{FLOWVPM.ParticleField{Float64, FLOWVPM.ReformulatedVPM{Float64}, FLOWVPM.Inviscid{Float64}, typeof(FLOWVPM.nofreestream), FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, typeof(FLOWVPM.UJ_fmm), typeof(FLOWVPM.euler), FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, 0}}, source_systems::Tuple{FLOWVPM.ParticleField{Float64, FLOWVPM.ReformulatedVPM{Float64}, FLOWVPM.Inviscid{Float64}, typeof(FLOWVPM.nofreestream), FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, typeof(FLOWVPM.UJ_fmm), typeof(FLOWVPM.euler), FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, 0}}, cache::FastMultipole.Cache{Float64, 1, 1}; leaf_size_target::Nothing, leaf_size_source::Int64, scalar_potential::Bool, gradient::Bool, hessian::Bool, expansion_order::Int64, error_tolerance::FastMultipole.PowerRelativeGradient{1.0e-6, 1.0e-6, true}, shrink::Bool, recenter::Bool, interaction_list_method::FastMultipole.SelfTuningTargetStop, optargs::@Kwargs{multipole_acceptance::Float64, tune::Bool, shrink_recenter::Bool, nearfield_device::Bool, silence_warnings::Bool})
      @ FastMultipole ~/Dropbox/MHDResearch/FLOWCodes/FastMultipole.jl/src/fmm.jl:897
    [4] fmm!
      @ ~/Dropbox/MHDResearch/FLOWCodes/FastMultipole.jl/src/fmm.jl:864 [inlined]
    [5] #fmm!#105
      @ ~/Dropbox/MHDResearch/FLOWCodes/FastMultipole.jl/src/fmm.jl:815 [inlined]
    [6] fmm!
      @ ~/Dropbox/MHDResearch/FLOWCodes/FastMultipole.jl/src/fmm.jl:810 [inlined]
    [7] fmm!
      @ ~/Dropbox/MHDResearch/FLOWCodes/FastMultipole.jl/src/fmm.jl:808 [inlined]
    [8] UJ_fmm(pfield::FLOWVPM.ParticleField{Float64, FLOWVPM.ReformulatedVPM{Float64}, FLOWVPM.Inviscid{Float64}, typeof(FLOWVPM.nofreestream), FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, typeof(FLOWVPM.UJ_fmm), typeof(FLOWVPM.euler), FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, 0}; verbose::Bool, rbf::Bool, sfs::Bool, sfs_type::Int64, transposed_sfs::Bool, reset::Bool, reset_sfs::Bool, autotune::Bool)
      @ FLOWVPM ~/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/src/FLOWVPM_UJ.jl:90
    [9] UJ_fmm
      @ ~/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/src/FLOWVPM_UJ.jl:62 [inlined]
   [10] #euler#106
      @ ~/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/src/FLOWVPM_timeintegration.jl:29 [inlined]
   [11] euler
      @ ~/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/src/FLOWVPM_timeintegration.jl:23 [inlined]
   [12] nextstep(pfield::FLOWVPM.ParticleField{Float64, FLOWVPM.ReformulatedVPM{Float64}, FLOWVPM.Inviscid{Float64}, typeof(FLOWVPM.nofreestream), FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, typeof(FLOWVPM.UJ_fmm), typeof(FLOWVPM.euler), FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, 0}, dt::Float64; update_U_prev::Bool, optargs::@Kwargs{relax::Bool, custom_UJ::Nothing})
      @ FLOWVPM ~/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/src/FLOWVPM_particlefield.jl:439
   [13] nextstep
      @ ~/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/src/FLOWVPM_particlefield.jl:435 [inlined]
   [14] run_vpm!(pfield::FLOWVPM.ParticleField{Float64, FLOWVPM.ReformulatedVPM{Float64}, FLOWVPM.Inviscid{Float64}, typeof(FLOWVPM.nofreestream), FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, typeof(FLOWVPM.UJ_fmm), typeof(FLOWVPM.euler), FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, 0}, dt::Float64, nsteps::Int64; runtime_function::var"#this_runtime_function#89"{var"#this_runtime_function#76#90"{var"#run_vortexring_simulation##8#run_vortexring_simulation##9"{var"#run_vortexring_simulation##10#run_vortexring_simulation##11"}}}, static_particles_function::typeof(FLOWVPM.static_particles_default), custom_UJ::Nothing, save_path::Nothing, save_pfield::Bool, create_savepath::Bool, run_name::String, save_code::String, nsteps_save::Int64, prompt::Bool, verbose::Bool, verbose_nsteps::Int64, v_lvl::Int64, save_time::Bool)
      @ FLOWVPM ~/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/src/FLOWVPM_utils.jl:106
   [15] run_vortexring_simulation(pfield::FLOWVPM.ParticleField{Float64, FLOWVPM.ReformulatedVPM{Float64}, FLOWVPM.Inviscid{Float64}, typeof(FLOWVPM.nofreestream), FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, typeof(FLOWVPM.UJ_fmm), typeof(FLOWVPM.euler), FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, 0}, nsteps::Int64, dt::Float64, nrings::Int64, Nphis::Vector{Int64}, ncs::Vector{Int64}, extra_ncs::Vector{Int64}; runtime_function::var"#run_vortexring_simulation##8#run_vortexring_simulation##9"{var"#run_vortexring_simulation##10#run_vortexring_simulation##11"}, save_path::Nothing, run_name::String, prompt::Bool, verbose::Bool, v_lvl::Int64, verbose_nsteps::Int64, calc_monitors::Bool, mon_enstrophy::typeof(FLOWVPM.monitor_enstrophy_Gammaomega), monitor_others::var"#this_monitor_others#108"{var"#this_monitor_others#95#109"{var"#run_vortexring_simulation##24#run_vortexring_simulation##25"{var"#run_vortexring_simulation##26#run_vortexring_simulation##27"}, var"#104#105"{var"#106#107"}}}, ringmon_optargs::Vector{Any}, optargs::@Kwargs{})
      @ Main ~/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/examples/vortexrings/vortexrings_simulation.jl:66
   [16] run_vortexring_simulation(pfield::FLOWVPM.ParticleField{Float64, FLOWVPM.ReformulatedVPM{Float64}, FLOWVPM.Inviscid{Float64}, typeof(FLOWVPM.nofreestream), FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, typeof(FLOWVPM.UJ_fmm), typeof(FLOWVPM.euler), FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, 0}, nrings::Int64, circulations::Vector{Float64}, Rs::Vector{Float64}, ARs::Vector{Float64}, Rcrosss::Vector{Float64}, Nphis::Vector{Int64}, ncs::Vector{Int64}, extra_ncs::Vector{Int64}, sigmas::Vector{Float64}, Os::Vector{Vector{Float64}}, Oaxiss::Vector{LinearAlgebra.UniformScaling{Bool}}; nref::Int64, nsteps::Int64, Rtot::Float64, beta::Float64, faux::Float64, rbf::Bool, rbf_optargs::Vector{Tuple{Symbol, Real}}, zeta::var"#run_vortexring_simulation##22#run_vortexring_simulation##23", minWfraction::Int64, restart_file::Nothing, restart_sigma::Nothing, verbose::Bool, v_lvl::Int64, use_monitor_ringvorticity::Bool, monvort_optargs::Vector{Tuple{Symbol, Int64}}, monitor_others::var"#run_vortexring_simulation##24#run_vortexring_simulation##25"{var"#run_vortexring_simulation##26#run_vortexring_simulation##27"}, optargs::@Kwargs{save_path::Nothing, calc_monitors::Bool, verbose_nsteps::Int64})
      @ Main ~/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/examples/vortexrings/vortexrings_simulation.jl:211
   [17] run_vortexring_simulation(::Int64, ::Vector{Float64}, ::Vector{Float64}, ::Vector{Float64}, ::Vector{Float64}, ::Vector{Int64}, ::Vector{Int64}, ::Vector{Int64}, ::Vector{Float64}, ::Vararg{Any}; maxparticles::String, pfieldargs::@NamedTuple{formulation::FLOWVPM.ReformulatedVPM{Float64}, SFS::FLOWVPM.NoSFS{Float64, typeof(FLOWVPM.null_model)}, relaxation::FLOWVPM.Relaxation{Float64, typeof(FLOWVPM.relax_pedrizzetti)}, kernel::FLOWVPM.Kernel{typeof(FLOWVPM.zeta_wnklmns), typeof(FLOWVPM.g_wnklmns), typeof(FLOWVPM.dgdr_wnklmns), typeof(FLOWVPM.g_dgdr_wnklmns)}, viscous::FLOWVPM.Inviscid{Float64}, transposed::Bool, integration::typeof(FLOWVPM.euler), UJ::typeof(FLOWVPM.UJ_fmm), fmm::FLOWVPM.FMM, useGPU::Int64}, nref::Int64, Re::Nothing, R::Type, optargs::@Kwargs{nsteps::Int64, Rtot::Float64, beta::Float64, faux::Float64, save_path::Nothing, calc_monitors::Bool, verbose::Bool, v_lvl::Int64, verbose_nsteps::Int64})
      @ Main ~/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/examples/vortexrings/vortexrings_simulation.jl:243
   [18] macro expansion
      @ ~/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/test/runtests_singlevortexring.jl:79 [inlined]
   [19] macro expansion
      @ ~/.julia/juliaup/julia-1.12.3+0.aarch64.apple.darwin14/share/julia/stdlib/v1.12/Test/src/Test.jl:1776 [inlined]
   [20] top-level scope
      @ ~/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/test/runtests_singlevortexring.jl:38
   [21] include(mapexpr::Function, mod::Module, _path::String)
      @ Base ./Base.jl:307
   [22] top-level scope
      @ ~/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/test/runtests.jl:13
   [23] include(mapexpr::Function, mod::Module, _path::String)
      @ Base ./Base.jl:307
   [24] top-level scope
      @ none:6
   [25] eval(m::Module, e::Any)
      @ Core ./boot.jl:489
   [26] exec_options(opts::Base.JLOptions)
      @ Base ./client.jl:283
   [27] _start()
      @ Base ./client.jl:550
Test Summary: | Error  Total  Time
test set      |     1      1  4.4s
RNG of the outermost testset: Random.Xoshiro(0x1803435b12bab19d, 0x54a14af12236d83c, 0xe08b4c59ae92e320, 0x4bbcace5c247278d, 0x8ac85c37322fbecc)
ERROR: LoadError: Some tests did not pass: 0 passed, 0 failed, 1 errored, 0 broken.
in expression starting at /Users/rachelmarie/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/test/runtests_singlevortexring.jl:21
in expression starting at /Users/rachelmarie/Dropbox/MHDResearch/FLOWCodes/FLOWVPM.jl/test/runtests.jl:13
ERROR: Package FLOWVPM errored during testing

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions