Skip to content

Pressure solvers

The discrete pressure Poisson equation

Lp=WMF(u)

enforces divergence freeness. There are multiple options for solving this system.

IncompressibleNavierStokes.amgx_setup Function

Initializes AMGX, all needed objects are returned in a named tuple. Needs to be followed by amgx_close after use.

Becomes available using AMGX.

source
IncompressibleNavierStokes.close_amgx Function

Close all objects created by amgx_setup.

Becomes available using AMGX.

source
IncompressibleNavierStokes.default_psolver Method
julia
default_psolver(
    setup
) -> Union{IncompressibleNavierStokes.var"#psolve!#126", IncompressibleNavierStokes.var"#psolve!#92"{Bool}}

Get default Poisson solver from setup.

source
IncompressibleNavierStokes.poisson! Method
julia
poisson!(psolver, f) -> Any

Solve the Poisson equation for the pressure (in-place version).

source
IncompressibleNavierStokes.poisson Method
julia
poisson(psolver, f) -> Any

Solve the Poisson equation for the pressure with right hand side f at time t. For periodic and no-slip BC, the sum of f should be zero.

Differentiable version.

source
IncompressibleNavierStokes.project! Method
julia
project!(u, setup; psolver, p)

Project velocity field onto divergence-free space (in-place version).

source
IncompressibleNavierStokes.project Method
julia
project(u, setup; psolver)

Project velocity field onto divergence-free space (differentiable version).

source
IncompressibleNavierStokes.psolver_cg Method
julia
psolver_cg(
    setup;
    abstol,
    reltol,
    maxiter,
    preconditioner
) -> IncompressibleNavierStokes.var"#psolve!#103"{_A, _B, _C, IncompressibleNavierStokes.var"#laplace_diag#101"{ndrange, workgroupsize}} where {_A, _B, _C, ndrange, workgroupsize}

Conjugate gradients iterative Poisson solver.

source
IncompressibleNavierStokes.psolver_cg_AMGX Function

Poisson solver using conjugate gradient method from AMGX.

Becomes available using AMGX.

source
IncompressibleNavierStokes.psolver_cg_matrix Method
julia
psolver_cg_matrix(
    setup;
    kwargs...
) -> IncompressibleNavierStokes.var"#psolve!#96"{Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}}}

Conjugate gradients iterative Poisson solver. The kwargs are passed to the cg! function from IterativeSolvers.jl.

source
IncompressibleNavierStokes.psolver_direct Method
julia
psolver_direct(
    setup
) -> IncompressibleNavierStokes.var"#psolve!#92"{Bool}

Create direct Poisson solver using an appropriate matrix decomposition.

source
IncompressibleNavierStokes.psolver_spectral Method
julia
psolver_spectral(
    setup
) -> IncompressibleNavierStokes.var"#psolve!#126"

Create spectral Poisson solver from setup.

source
IncompressibleNavierStokes.psolver_transform Method
julia
psolver_transform(
    setup
) -> IncompressibleNavierStokes.var"#psolve!#121"{_A, NamedTuple{(:uhat, :w, :winv, :perm, :perminv), var"#s182"}} where {_A, var"#s182"<:NTuple{5, Any}}

Create FFT/DCT Poisson solver from setup. This solver does FFT in periodic directions, and DCT in Dirichlet directions. Only works on uniform grids, with periodic/dirichlet BC. If there is only Periodic BC, then psolver_spectral is faster, and uses half as much memory.

Warning: This does transform one dimension at a time. With Float32 precision, this can lead to large errors.

source