Skip to content

Commit dc395f6

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

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
@@ -1795,7 +1795,7 @@ function io_preprocessing(sys::AbstractSystem, inputs,
17951795
end
17961796

17971797
"""
1798-
lin_fun, simplified_sys = linearization_function(sys::AbstractSystem, inputs, outputs; simplify = false, initialize = true, kwargs...)
1798+
lin_fun, simplified_sys = linearization_function(sys::AbstractSystem, inputs, outputs; simplify = false, initialize = true, initialization_solver_alg = TrustRegion(), kwargs...)
17991799
18001800
Return a function that linearizes the system `sys`. The function [`linearize`](@ref) provides a higher-level and easier to use interface.
18011801
@@ -1820,6 +1820,7 @@ The `simplified_sys` has undergone [`structural_simplify`](@ref) and had any occ
18201820
- `outputs`: A vector of variables that indicate the outputs of the linearized input-output model.
18211821
- `simplify`: Apply simplification in tearing.
18221822
- `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.
1823+
- `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.
18231824
- `kwargs`: Are passed on to `find_solvables!`
18241825
18251826
See also [`linearize`](@ref) which provides a higher-level interface.
@@ -1830,6 +1831,7 @@ function linearization_function(sys::AbstractSystem, inputs,
18301831
op = Dict(),
18311832
p = DiffEqBase.NullParameters(),
18321833
zero_dummy_der = false,
1834+
initialization_solver_alg = TrustRegion(),
18331835
kwargs...)
18341836
inputs isa AbstractVector || (inputs = [inputs])
18351837
outputs isa AbstractVector || (outputs = [outputs])
@@ -1936,6 +1938,7 @@ function linearization_function(sys::AbstractSystem, inputs,
19361938
chunk = ForwardDiff.Chunk(input_idxs),
19371939
sys_ps = sys_ps,
19381940
initialize = initialize,
1941+
initialization_solver_alg = initialization_solver_alg,
19391942
sys = sys
19401943

19411944
function (u, p, t)
@@ -1956,7 +1959,7 @@ function linearization_function(sys::AbstractSystem, inputs,
19561959
if norm(residual[alge_idxs]) > (eps(eltype(residual)))
19571960
initu0, initp = get_initprob_u_p(u, p, t)
19581961
initprob = NonlinearLeastSquaresProblem(initfn, initu0, initp)
1959-
nlsol = solve(initprob)
1962+
nlsol = solve(initprob, initialization_solver_alg)
19601963
u = initprobmap(nlsol)
19611964
end
19621965
end

0 commit comments

Comments
 (0)