|
127 | 127 | nn(nleq::ModelNonlinearEquation) = size(nleq.fq, 2)
|
128 | 128 | np(nleq::ModelNonlinearEquation) = size(nleq.pexp, 2)
|
129 | 129 | nq(nleq::ModelNonlinearEquation) = size(nleq.pexp, 1)
|
| 130 | +expand_p(nleq::ModelNonlinearEquation, p) = nleq.q0 + nleq.pexp * p |
| 131 | +evaluate(nleq::ModelNonlinearEquation, pfull, z) = nleq.func(pfull, nleq.fq, z) |
| 132 | +calc_Jp(nleq::ModelNonlinearEquation, Jq) = Jq * nleq.pexp |
| 133 | +function ParametricNonLinEq(nleq::ModelNonlinearEquation) |
| 134 | + return ParametricNonLinEq{nn(nleq), np(nleq), nq(nleq)}( |
| 135 | + (pfull, z) -> evaluate(nleq, pfull, z), |
| 136 | + (p) -> expand_p(nleq, p), |
| 137 | + (Jq) -> calc_Jp(nleq, Jq), |
| 138 | + ) |
| 139 | +end |
130 | 140 |
|
131 | 141 | mutable struct DiscreteModel{Solvers}
|
132 | 142 | a::Matrix{Float64}
|
@@ -246,15 +256,7 @@ function DiscreteModel(circ::Circuit, t::Real, ::Type{Solver}=HomotopySolver{Cac
|
246 | 256 | ]
|
247 | 257 |
|
248 | 258 | solvers = Tuple(
|
249 |
| - Solver( |
250 |
| - ParametricNonLinEq{nn(nleq), np(nleq), nq(nleq)}( |
251 |
| - (pfull, z) -> nleq.func(pfull, nleq.fq, z), |
252 |
| - (p) -> nleq.q0 + nleq.pexp * p, |
253 |
| - (Jq) -> Jq * nleq.pexp, |
254 |
| - ), |
255 |
| - zeros(np(nleq)), |
256 |
| - init_z, |
257 |
| - ) |
| 259 | + Solver(ParametricNonLinEq(nleq), zeros(np(nleq)), init_z) |
258 | 260 | for (nleq, init_z) in zip(nonlinear_eqs, init_zs)
|
259 | 261 | )
|
260 | 262 | return DiscreteModel(mats, nonlinear_eqs, solvers)
|
|
0 commit comments