Skip to content

Commit b453151

Browse files
feat: allow specifying initialization solver algorithm
default to `TrustRegion`
1 parent a5dc3f3 commit b453151

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
@@ -1765,7 +1765,7 @@ function io_preprocessing(sys::AbstractSystem, inputs,
17651765
end
17661766

17671767
"""
1768-
lin_fun, simplified_sys = linearization_function(sys::AbstractSystem, inputs, outputs; simplify = false, initialize = true, kwargs...)
1768+
lin_fun, simplified_sys = linearization_function(sys::AbstractSystem, inputs, outputs; simplify = false, initialize = true, initialization_solver_alg = TrustRegion(), kwargs...)
17691769
17701770
Return a function that linearizes the system `sys`. The function [`linearize`](@ref) provides a higher-level and easier to use interface.
17711771
@@ -1790,6 +1790,7 @@ The `simplified_sys` has undergone [`structural_simplify`](@ref) and had any occ
17901790
- `outputs`: A vector of variables that indicate the outputs of the linearized input-output model.
17911791
- `simplify`: Apply simplification in tearing.
17921792
- `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.
1793+
- `initialization_solver_alg`: A NonlinearSolve algorithm to use for solving for a feasible set of state and algebraic variables that satisfies the specified operating point.
17931794
- `kwargs`: Are passed on to `find_solvables!`
17941795
17951796
See also [`linearize`](@ref) which provides a higher-level interface.
@@ -1800,6 +1801,7 @@ function linearization_function(sys::AbstractSystem, inputs,
18001801
op = Dict(),
18011802
p = DiffEqBase.NullParameters(),
18021803
zero_dummy_der = false,
1804+
initialization_solver_alg = TrustRegion(),
18031805
kwargs...)
18041806
inputs isa AbstractVector || (inputs = [inputs])
18051807
outputs isa AbstractVector || (outputs = [outputs])
@@ -1906,6 +1908,7 @@ function linearization_function(sys::AbstractSystem, inputs,
19061908
chunk = ForwardDiff.Chunk(input_idxs),
19071909
sys_ps = sys_ps,
19081910
initialize = initialize,
1911+
initialization_solver_alg = initialization_solver_alg,
19091912
sys = sys
19101913

19111914
function (u, p, t)
@@ -1926,7 +1929,7 @@ function linearization_function(sys::AbstractSystem, inputs,
19261929
if norm(residual[alge_idxs]) > (eps(eltype(residual)))
19271930
initu0, initp = get_initprob_u_p(u, p, t)
19281931
initprob = NonlinearLeastSquaresProblem(initfn, initu0, initp)
1929-
nlsol = solve(initprob)
1932+
nlsol = solve(initprob, initialization_solver_alg)
19301933
u = initprobmap(nlsol)
19311934
end
19321935
end

0 commit comments

Comments
 (0)