Pressure solvers
The discrete pressure Poisson equation
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.
IncompressibleNavierStokes.close_amgx Function
Close all objects created by amgx_setup.
Becomes available using AMGX.
IncompressibleNavierStokes.default_psolver Method
default_psolver(
setup
) -> Union{IncompressibleNavierStokes.var"#psolve!#126", IncompressibleNavierStokes.var"#psolve!#92"{Bool}}Get default Poisson solver from setup.
sourceIncompressibleNavierStokes.poisson! Method
poisson!(psolver, f) -> AnySolve the Poisson equation for the pressure (in-place version).
sourceIncompressibleNavierStokes.poisson Method
poisson(psolver, f) -> AnySolve 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.
sourceIncompressibleNavierStokes.project! Method
project!(u, setup; psolver, p)Project velocity field onto divergence-free space (in-place version).
sourceIncompressibleNavierStokes.project Method
project(u, setup; psolver)Project velocity field onto divergence-free space (differentiable version).
sourceIncompressibleNavierStokes.psolver_cg Method
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.
sourceIncompressibleNavierStokes.psolver_cg_AMGX Function
Poisson solver using conjugate gradient method from AMGX.
Becomes available using AMGX.
IncompressibleNavierStokes.psolver_cg_matrix Method
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.
IncompressibleNavierStokes.psolver_direct Method
psolver_direct(
setup
) -> IncompressibleNavierStokes.var"#psolve!#92"{Bool}Create direct Poisson solver using an appropriate matrix decomposition.
sourceIncompressibleNavierStokes.psolver_spectral Method
psolver_spectral(
setup
) -> IncompressibleNavierStokes.var"#psolve!#126"Create spectral Poisson solver from setup.
sourceIncompressibleNavierStokes.psolver_transform Method
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.