Functions and Types
Types
ExaFMMt.HelmholtzFMMOptions
— TypeHelmholtzFMMOptions{I, C} <: FMMOptions
Helmoltz-initializer for setup function.
Fields
p::I
: Multipole expansion order.ncrit::I
: Minimum number of points in each box of the tree.wavek::C
: Wavenumber.
ExaFMMt.ModifiedHelmholtzFMMOptions
— TypeModifiedHelmholtzFMMOptions{I, F} <: FMMOptions
Modified-Helmoltz-initializer for setup function.
Fields
p::I
: Multipole expansion order.ncrit::I
: Minimum number of points in each box of the tree.wavek::F
: Wavenumber.
ExaFMMt.LaplaceFMMOptions
— TypeLaplaceFMMOptions{I} <: FMMOptions
Laplace-initializer for setup function.
Fields
p::I
: Multipole expansion order.ncrit::I
: Minimum number of points in each box of the tree.
ExaFMMt.ExaFMM
— TypeExaFMM{K} <: LinearMaps.LinearMap{K}
Is an type resembling the fmm matrix and can be multipied by a vector resembling for example the charges of the source points. This type is necassary for the garbage collector to free the allocated storage of the C++ part.
Fields
fmmoptions::FMMOptions
: Initializer either LaplaceFMMOptions, HelmholtzFMMOptions or ModifiedHelmholtzFMMOptions.nsources::Int
: Number of sources.ntargets::Int
: Number of targets.fmm::Ptr{Cvoid}
: Pointer to the fmm sruct generated by the C++ part.fmmstruct::Ptr{Cvoid}
: Pointer to an struct with all necassary substructs of the fmm. This pointer is mandatory for the comunication with the C++ part.sources::Ptr{Cvoid}
: Pointer to the C++ struct of the sources.targets::Ptr{Cvoid}
: Pointer to the C++ struct of the targets.
Functions
ExaFMMt.init_sources
— Methodinit_sources(points::Matrix{F}, charges::Vector{F}) where F <: Real
Creates struct for sources and charges in the C++ part from the Julia matrix. Real charges are used and mandatory for the Laplace- and Modified-Helmholtz-FMM.
Arguments
points::Matrix{F}
: 3d-coordinates of sources.charges::Vector{F}
: Values of for example the charge at each source location.
ExaFMMt.init_sources
— Methodinit_sources(points::Matrix{F}, charges::Vector{C}) where {F <: Real, C <: Complex}
Creates struct for sources and charges in the C++ part from the Julia matrix. Complex charges are used and mandatory for the Laplace- and Modified-Helmholtz-FMM.
Arguments
points::Matrix{C}
: 3d-coordinates of sources.charges::Vector{C}
: Values of for example the charge at each source location.
ExaFMMt.init_targets
— Methodinit_targets(points::Matrix{F}, T::Type) where F <: Real
Creates struct for targets in the C++ part from a Julia matrix of points.
Arguments
points::Matrix{C}
: 3d-coordinates of targets.T
: Type must be set for the Helmholtz-FMM to ComplexF32 or ComplexF64.
ExaFMMt.update_charges
— Methodupdate_charges(fmmstruct::Ptr{Cvoid}, charges::Vector{Float64})
Updates charges in already generated Lapalce or Modified-Helmholtz-FMM. Requires a Float64 array of charges.
Arguments
fmmstruct::Ptr{Cvoid}
: Pointer to an struct with all necassary substructs of the fmm. This pointer is mandatory for the comunication with the C++ part.charges::Vector{Float64}
: Values of for example the charge at each source location.
ExaFMMt.update_charges
— Methodupdate_charges(fmmstruct::Ptr{Cvoid}, charges::Vector{Float32})
Updates charges in already generated Lapalce or Modified-Helmholtz-FMM. Requires a Float32 array of charges.
Arguments
fmmstruct::Ptr{Cvoid}
: Pointer to an struct with all necassary substructs of the fmm. This pointer is mandatory for the comunication with the C++ part.charges::Vector{Float32}
: Values of for example the charge at each source location.
ExaFMMt.update_charges
— Methodupdate_charges(fmmstruct::Ptr{Cvoid}, charges::Vector{ComplexF64})
Updates charges in already generated Helmholtz-FMM. Requires a ComplexF64 array of charges.
Arguments
fmmstruct::Ptr{Cvoid}
: Pointer to an struct with all necassary substructs of the fmm. This pointer is mandatory for the comunication with the C++ part.charges::Vector{ComplexF64}
: Values of for example the charge at each source location.
ExaFMMt.update_charges
— Methodupdate_charges(fmmstruct::Ptr{Cvoid}, charges::Vector{ComplexF32})
Updates charges in already generated Helmholtz-FMM. Requires a ComplexF32 array of charges.
Arguments
fmmstruct::Ptr{Cvoid}
: Pointer to an struct with all necassary substructs of the fmm. This pointer is mandatory for the comunication with the C++ part.charges::Vector{ComplexF32}
: Values of for example the charge at each source location.
ExaFMMt.clear_values
— Methodclear_values(fmmstruct::Ptr{Cvoid}, T::Type{Float64})
Clears the soultion values in the FMM structure.
Arguments
fmmstruct::Ptr{Cvoid}
: Pointer to an struct with all necassary substructs of the fmm. This pointer is mandatory for the comunication with the C++ part.T
: Type must be set for the Helmholtz-FMM to ComplexF32 or ComplexF64, for Laplace and Modifed-Helmholz-FMM Float64 or Flot32.
ExaFMMt.clear_values
— Methodclear_values(fmmstruct::Ptr{Cvoid}, T::Type{Float32})
Clears the soultion values in the FMM structure.
Arguments
fmmstruct::Ptr{Cvoid}
: Pointer to an struct with all necassary substructs of the fmm. This pointer is mandatory for the comunication with the C++ part.T
: Type must be set for the Helmholtz-FMM to ComplexF32 or ComplexF64, for Laplace and Modifed-Helmholz-FMM Float64 or Flot32.
ExaFMMt.clear_values
— Methodclear_values(fmmstruct::Ptr{Cvoid}, T::Type{ComplexF64})
Clears the soultion values in the FMM structure.
Arguments
fmmstruct::Ptr{Cvoid}
: Pointer to an struct with all necassary substructs of the fmm. This pointer is mandatory for the comunication with the C++ part.T
: Type must be set for the Helmholtz-FMM to ComplexF32 or ComplexF64, for Laplace and Modifed-Helmholz-FMM Float64 or Flot32.
ExaFMMt.clear_values
— Methodclear_values(fmmstruct::Ptr{Cvoid}, T::Type{ComplexF32})
Clears the soultion values in the FMM structure.
Arguments
fmmstruct::Ptr{Cvoid}
: Pointer to an struct with all necassary substructs of the fmm. This pointer is mandatory for the comunication with the C++ part.T
: Type must be set for the Helmholtz-FMM to ComplexF32 or ComplexF64, for Laplace and Modifed-Helmholz-FMM Float64 or Flot32.
ExaFMMt.freeF!
— MethodfreeF!(x::ExaFMM{Float64})
Frees the storage which is allocated by the C++ part for the Laplace-FMM and Modified-Helmholtz-FMM.
Arguments
x::ExaFMM{Float64}
: ExaFMM structure with pointers to all allocated variables.
ExaFMMt.freeF!
— MethodfreeF!(x::ExaFMM{Float32})
Frees the storage which is allocated by the C++ part for the Laplace-FMM and Modified-Helmholtz-FMM.
Arguments
x::ExaFMM{Float32}
: ExaFMM structure with pointers to all allocated variables.
ExaFMMt.freeC!
— MethodfreeC!(x::ExaFMM{ComplexF64})
Frees the storage which is allocated by the C++ part for Helmholtz-FMM.
Arguments
x::ExaFMM{ComplexF64}
: ExaFMM structure with pointers to all allocated variables.
ExaFMMt.freeC!
— MethodfreeC!(x::ExaFMM{ComplexF32})
Frees the storage which is allocated by the C++ part for Helmholtz-FMM.
Arguments
x::ExaFMM{ComplexF64}
: ExaFMM structure with pointers to all allocated variables.
Laplace FMM
ExaFMMt.LaplaceFMM64
— MethodLaplaceFMM64(;ncrit=100, p=8)
Initializer for the Laplace-FMM in the C++ part.
Arguments
p::Int
: Multipole expansion order.ncrit::Int
: Minimum number of points in each box of the tree.
ExaFMMt.LaplaceFMM32
— MethodLaplaceFMM32(;ncrit=100, p=8)
Initializer for the Laplace-FMM in the C++ part.
Arguments
p::Int
: Multipole expansion order.ncrit::Int
: Minimum number of points in each box of the tree.
ExaFMMt.setup
— Methodsetup(
sources::Matrix{F},
targets::Matrix{F},
fmmoptions::LaplaceFMMOptions{I}
) where {I, F <: Real}
Sets FMM structure up in the C++ part and allocates all madatory storage.
Arguments
sources::Matrix{F}
: 3d-coordinates of sources.targets::Matrix{F}
: 3d-coordinates of targets.fmmoptions::LaplaceFMMOptions{I}
: Julia Laplace-initializer for setup function.
ExaFMMt.evaluate
— Methodevaluate(
A::ExaFMM{F},
x::Vector{F},
fmmoptions::LaplaceFMMOptions{I}
) where {I, F <: Real}
Evaluates prebuild FMM structure A
for new values x
.
Arguments
A::ExaFMM{F}
: ExaFMM structure with pointers to all allocated variables.x::Vector{F}
: Values of for example the charge at each source location.fmmoptions::LaplaceFMMOptions{I}
: Julia Laplace-initializer for setup function, used as identifier.
ExaFMMt.verify
— Methodverify(exafmm::ExaFMM{Float64}, fmmoptions::LaplaceFMMOptions{I}) where I
Function compute accuracy of evaluated FMM exafmm
.
Arguments
exafmmm::ExaFMM{Float64}
: ExaFMM structure with pointers to all allocated variables.fmmoptions::LaplaceFMMOptions{I}
: Julia Laplace-initializer for setup function, used as identifier.
ExaFMMt.verify
— Methodverify(exafmm::ExaFMM{Float32}, fmmoptions::LaplaceFMMOptions{I}) where I
Function compute accuracy of evaluated FMM exafmm
.
Arguments
exafmmm::ExaFMM{Float32}
: ExaFMM structure with pointers to all allocated variables.fmmoptions::LaplaceFMMOptions{I}
: Julia Laplace-initializer for setup function, used as identifier.
Helmholtz FMM
ExaFMMt.HelmholtzFMM
— MethodHelmholtzFMM(wavek::ComplexF64; p=8, ncrit=100)
Initializer for the Helmholtz-FMM in the C++ part.
Arguments
wavek::ComplexF64
: Wavenumber.p::Int
: Multipole expansion order.ncrit::Int
: Minimum number of points in each box of the tree.
ExaFMMt.HelmholtzFMM
— MethodHelmholtzFMM(wavek::ComplexF32; p=8, ncrit=100)
Initializer for the Helmholtz-FMM in the C++ part.
Arguments
wavek::ComplexF32
: Wavenumber.p::Int
: Multipole expansion order.ncrit::Int
: Minimum number of points in each box of the tree.
ExaFMMt.setup
— Methodsetup(
sources::Matrix{F},
targets::Matrix{F},
fmmoptions::HelmholtzFMMOptions{I, C}
) where {I, F <: Real, C <: Complex}
Sets FMM structure up in the C++ part and allocates all madatory storage.
Arguments
sources::Matrix{F}
: 3d-coordinates of sources.targets::Matrix{F}
: 3d-coordinates of targets.fmmoptions::HelmholtzFMMOptions{I, C}
: Julia Helmoltz-initializer for setup function.
ExaFMMt.evaluate
— Methodevaluate(
A::ExaFMM{C},
x::Vector{C},
fmmoptions::HelmholtzFMMOptions{I, C}
) where {I, C <: Complex}
Evaluates prebuild FMM structure A
for new values x
.
Arguments
A::ExaFMM{C}
: ExaFMM structure with pointers to all allocated variables.x::Vector{C}
: Values of for example the charge at each source location.fmmoptions::HelmholtzFMMOptions{I, C}
: Julia Helmoltz-initializer for setup function, used as identifier.
ExaFMMt.verify
— Methodverify(exafmm::ExaFMM{ComplexF64}, fmmoptions::HelmholtzFMMOptions{I, ComplexF64}) where I
Function compute accuracy of evaluated FMM exafmm
.
Arguments
exafmmm::ExaFMM
: ExaFMM structure with pointers to all allocated variables.fmmoptions::HelmholtzFMMOptions{I, ComplexF64}
: Julia Helmoltz-initializer for setup function, used as identifier.
ExaFMMt.verify
— Methodverify(exafmm::ExaFMM{ComplexF32}, fmmoptions::HelmholtzFMMOptions{I, ComplexF32}) where I
Function compute accuracy of evaluated FMM exafmm
.
Arguments
exafmmm::ExaFMM
: ExaFMM structure with pointers to all allocated variables.fmmoptions::HelmholtzFMMOptions{I, ComplexF32}
: Julia Helmoltz-initializer for setup function, used as identifier.
Modified-Helmholtz FMM
ExaFMMt.ModifiedHelmholtzFMM
— MethodModifiedHelmholtzFMM(wavek::Float64; ncrit=100, p=8)
Initializer for the modified-Helmholtz-FMM in the C++ part.
Arguments
wavek::Float64
: Wavenumber.p::Int
: Multipole expansion order.ncrit::Int
: Minimum number of points in each box of the tree.
ExaFMMt.ModifiedHelmholtzFMM
— MethodModifiedHelmholtzFMM(wavek::Float32; ncrit=100, p=8)
Initializer for the modified-Helmholtz-FMM in the C++ part.
Arguments
wavek::Float32
: Wavenumber.p::Int
: Multipole expansion order.ncrit::Int
: Minimum number of points in each box of the tree.
ExaFMMt.setup
— Methodsetup(
sources::Matrix{F},
targets::Matrix{F},
fmmoptions::ModifiedHelmholtzFMMOptions{I, F}
) where {I, F <: Real}
Sets FMM structure up in the C++ part and allocates all madatory storage.
Arguments
sources::Matrix{F}
: 3d-coordinates of sources.targets::Matrix{F}
: 3d-coordinates of targets.fmmoptions::ModifiedHelmholtzFMMOptions{I, F}
: Julia modified-Helmholtz-initializer for setup function.
ExaFMMt.evaluate
— Methodevaluate(
A::ExaFMM{F},
x::Vector{F},
fmmoptions::ModifiedHelmholtzFMMOptions{I, F}
) where {I, F <: Real}
Evaluates prebuild FMM structure A
for new values x
.
Arguments
A::ExaFMM{F}
: ExaFMM structure with pointers to all allocated variables.x::Vector{F}
: Values of for example the charge at each source location.fmmoptions::ModifiedHelmholtzFMMOptions{I, F}
: Julia modified-Helmoltz-initializer for setup function, used as identifier.
ExaFMMt.verify
— Methodverify(exafmm::ExaFMM{Float64}, fmmoptions::ModifiedHelmholtzFMMOptions{I, Float64})
Function compute accuracy of evaluated FMM exafmm
.
Arguments
exafmmm::ExaFMM{Float64}
: ExaFMM structure with pointers to all allocated variables.fmmoptions::ModifiedHelmholtzFMMOptions{I, Float64}
: Julia modified-Helmholtz-initializer for setup function, used as identifier.
ExaFMMt.verify
— Methodverify(exafmm::ExaFMM{Float32}, fmmoptions::ModifiedHelmholtzFMMOptions{I, Float32})
Function compute accuracy of evaluated FMM exafmm
.
Arguments
exafmmm::ExaFMM{Float32}
: ExaFMM structure with pointers to all allocated variables.fmmoptions::ModifiedHelmholtzFMMOptions{I, Float32}
: Julia modified-Helmholtz-initializer for setup function, used as identifier.