Skip to content

Commit 70772c0

Browse files
committed
Add (and utilize) a constructor for ParametricNonLinEq from ModelNonlinearEquation
1 parent 3d55501 commit 70772c0

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

src/ACME.jl

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,16 @@ end
127127
nn(nleq::ModelNonlinearEquation) = size(nleq.fq, 2)
128128
np(nleq::ModelNonlinearEquation) = size(nleq.pexp, 2)
129129
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
130140

131141
mutable struct DiscreteModel{Solvers}
132142
a::Matrix{Float64}
@@ -246,15 +256,7 @@ function DiscreteModel(circ::Circuit, t::Real, ::Type{Solver}=HomotopySolver{Cac
246256
]
247257

248258
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)
258260
for (nleq, init_z) in zip(nonlinear_eqs, init_zs)
259261
)
260262
return DiscreteModel(mats, nonlinear_eqs, solvers)

0 commit comments

Comments
 (0)