Skip to content

Commit

Permalink
add options for preconditioning elliptic grid
Browse files Browse the repository at this point in the history
  • Loading branch information
juddmehr committed Feb 24, 2025
1 parent c6afc1a commit f340103
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 43 deletions.
86 changes: 43 additions & 43 deletions src/preprocess/geometry/wake_geometry.jl
Original file line number Diff line number Diff line change
Expand Up @@ -368,56 +368,56 @@ function relax_grid!(
tabchar=" ",
ntab=1,
)

# if verbose
# println(tabchar^ntab * "Preconditioning Elliptic Grid System using SLOR")
# end
# # - Relax grid to allow Newton solve a tractable starting point - #
# relax_grid!(
# wake_grid;
# iteration_limit=grid_solver_options.iteration_limit,
# atol=grid_solver_options.atol,
# converged=grid_solver_options.converged,
# verbose=verbose,
# tabchar="\t",
# ntab=1,
# )
if grid_solver_options.precondition
if verbose
println(tabchar^ntab * "Preconditioning Elliptic Grid System using SLOR")
end
# - Relax grid to allow Newton solve a tractable starting point - #
relax_grid!(
wake_grid;
iteration_limit=grid_solver_options.iteration_limit,
atol=grid_solver_options.atol,
converged=grid_solver_options.converged,
verbose=verbose,
tabchar="\t",
ntab=1,
)
end

# - Converge grid with NLsolve - #

# reset convergence flag
grid_solver_options.converged[1] = false
if !grid_solver_options.converged[1]

if verbose
println(
tabchar^ntab *
"Solving Elliptic Grid System using $(grid_solver_options.algorithm) Method",
# reset convergence flag
grid_solver_options.converged[1] = false

if verbose
println(
tabchar^ntab *
"Solving Elliptic Grid System using $(grid_solver_options.algorithm) Method",
)
end

# solve
solve_elliptic_grid!(
wake_grid;
algorithm=grid_solver_options.algorithm,
atol=grid_solver_options.atol,
iteration_limit=grid_solver_options.iteration_limit,
grid_solver_options.converged,
grid_solver_options.residual_value,
grid_solver_options.iterations,
verbose=verbose,
)
else
if verbose
println(
tabchar^ntab *
"Preconditioning Elliptic Grid System converged within final tolerance, skipping non-linear solve.",
)
end
end

# # precondition
# relax_grid!(
# wake_grid;
# iteration_limit=grid_solver_options.iteration_limit,
# atol=grid_solver_options.atol,
# converged=grid_solver_options.converged,
# verbose=verbose,
# tabchar="\t",
# ntab=1,
# )

# solve
solve_elliptic_grid!(
wake_grid;
algorithm=grid_solver_options.algorithm,
atol=grid_solver_options.atol,
iteration_limit=grid_solver_options.iteration_limit,
grid_solver_options.converged,
grid_solver_options.residual_value,
grid_solver_options.iterations,
verbose=verbose,
)

return wake_grid
end

Expand Down
5 changes: 5 additions & 0 deletions src/utilities/options.jl
Original file line number Diff line number Diff line change
Expand Up @@ -652,14 +652,19 @@ Options for Newton elliptic grid solver.
- `atol::Float = 3e-10` : absolute convergence tolerance
- `algorithm::Symbol = :newton` : algorithm to use in NLsolve.jl
- `autodiff::Symbol = :forward` : differentiation method to use in NLsolve.jl
- `precondition = false` : flag to precondition with SLOR
- `precondition_max_iterations = 3` : number of precondition iterations
- `converged::AbstractArray{Bool}` = [false]
- `iterations::AbstractArray{Int} = [0]` : iteration counter
- `residual_value::AbstractArray{Int} = [0]` : residual value
"""
@kwdef struct GridSolverOptions{TB,TF,TI,TSym} <: GridSolverOptionsType
iteration_limit::TI = 30
atol::TF = 3e-10
algorithm::TSym = :newton
autodiff::TSym = :forward
precondition::TB = false
precondition_max_iterations::TI = 3
converged::AbstractArray{TB} = [false]
iterations::AbstractArray{TI} = [0]
residual_value::AbstractArray{TF} = [0.0]
Expand Down

0 comments on commit f340103

Please sign in to comment.