Skip to content

Commit 6c18a10

Browse files
feat: allow specifying initialization solver algorithm
default to `TrustRegion`
1 parent 1d42958 commit 6c18a10

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

src/systems/abstractsystem.jl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1724,7 +1724,7 @@ function io_preprocessing(sys::AbstractSystem, inputs,
17241724
end
17251725

17261726
"""
1727-
lin_fun, simplified_sys = linearization_function(sys::AbstractSystem, inputs, outputs; simplify = false, initialize = true, kwargs...)
1727+
lin_fun, simplified_sys = linearization_function(sys::AbstractSystem, inputs, outputs; simplify = false, initialize = true, initialization_solver_alg = TrustRegion(), kwargs...)
17281728
17291729
Return a function that linearizes the system `sys`. The function [`linearize`](@ref) provides a higher-level and easier to use interface.
17301730
@@ -1749,6 +1749,7 @@ The `simplified_sys` has undergone [`structural_simplify`](@ref) and had any occ
17491749
- `outputs`: A vector of variables that indicate the outputs of the linearized input-output model.
17501750
- `simplify`: Apply simplification in tearing.
17511751
- `initialize`: If true, a check is performed to ensure that the operating point is consistent (satisfies algebraic equations). If the op is not consistent, initialization is performed.
1752+
- `initialization_solver_alg`: A NonlinearSolve algorithm to use for solving the initialization problem.
17521753
- `kwargs`: Are passed on to `find_solvables!`
17531754
17541755
See also [`linearize`](@ref) which provides a higher-level interface.
@@ -1759,6 +1760,7 @@ function linearization_function(sys::AbstractSystem, inputs,
17591760
op = Dict(),
17601761
p = DiffEqBase.NullParameters(),
17611762
zero_dummy_der = false,
1763+
initialization_solver_alg = TrustRegion(),
17621764
kwargs...)
17631765
inputs isa AbstractVector || (inputs = [inputs])
17641766
outputs isa AbstractVector || (outputs = [outputs])
@@ -1863,6 +1865,7 @@ function linearization_function(sys::AbstractSystem, inputs,
18631865
chunk = ForwardDiff.Chunk(input_idxs),
18641866
sys_ps = sys_ps,
18651867
initialize = initialize,
1868+
initialization_solver_alg = initialization_solver_alg,
18661869
sys = sys
18671870

18681871
function (u, p, t)
@@ -1883,7 +1886,7 @@ function linearization_function(sys::AbstractSystem, inputs,
18831886
if norm(residual[alge_idxs]) > (eps(eltype(residual)))
18841887
initu0, initp = get_initprob_u_p(u, p, t)
18851888
initprob = NonlinearLeastSquaresProblem(initfn, initu0, initp)
1886-
nlsol = solve(initprob)
1889+
nlsol = solve(initprob, initialization_solver_alg)
18871890
u = initprobmap(nlsol)
18881891
end
18891892
end

0 commit comments

Comments
 (0)