Line | Exclusive | Inclusive | Code |
---|---|---|---|
1 | mutable struct TimeGradientWrapper{iip, fType, uType, P} <: AbstractSciMLFunction{iip} | ||
2 | f::fType | ||
3 | uprev::uType | ||
4 | p::P | ||
5 | end | ||
6 | |||
7 | function TimeGradientWrapper{iip}(f::F, uprev, p) where {F, iip} | ||
8 | return TimeGradientWrapper{iip, F, typeof(uprev), typeof(p)}(f, uprev, p) | ||
9 | end | ||
10 | function TimeGradientWrapper(f::F, uprev, p) where {F} | ||
11 | return TimeGradientWrapper{isinplace(f, 4)}(f, uprev, p) | ||
12 | end | ||
13 | |||
14 | (ff::TimeGradientWrapper{true})(t) = (du2 = similar(ff.uprev); ff.f(du2, ff.uprev, ff.p, t); du2) | ||
15 | (ff::TimeGradientWrapper{true})(du2, t) = ff.f(du2, ff.uprev, ff.p, t) | ||
16 | |||
17 | (ff::TimeGradientWrapper{false})(t) = ff.f(ff.uprev, ff.p, t) | ||
18 | |||
19 | mutable struct UJacobianWrapper{iip, fType, tType, P} <: AbstractSciMLFunction{iip} | ||
20 | f::fType | ||
21 | t::tType | ||
22 | p::P | ||
23 | end | ||
24 | |||
25 | function UJacobianWrapper{iip}(f::F, t, p) where {F, iip} | ||
26 | return UJacobianWrapper{iip, F, typeof(t), typeof(p)}(f, t, p) | ||
27 | end | ||
28 | UJacobianWrapper(f::F, t, p) where {F} = UJacobianWrapper{isinplace(f, 4)}(f, t, p) | ||
29 | |||
30 | (ff::UJacobianWrapper{true})(du1, uprev) = ff.f(du1, uprev, ff.p, ff.t) | ||
31 | (ff::UJacobianWrapper{true})(uprev) = (du1 = similar(uprev); ff.f(du1, uprev, ff.p, ff.t); du1) | ||
32 | (ff::UJacobianWrapper{true})(du1, uprev, p, t) = ff.f(du1, uprev, p, t) | ||
33 | (ff::UJacobianWrapper{true})(uprev, p, t) = (du1 = similar(uprev); ff.f(du1, uprev, p, t); du1) | ||
34 | |||
35 | (ff::UJacobianWrapper{false})(uprev) = ff.f(uprev, ff.p, ff.t) | ||
36 | (ff::UJacobianWrapper{false})(uprev, p, t) = ff.f(uprev, p, t) | ||
37 | |||
38 | mutable struct TimeDerivativeWrapper{iip, F, uType, P} <: AbstractSciMLFunction{iip} | ||
39 | f::F | ||
40 | u::uType | ||
41 | p::P | ||
42 | end | ||
43 | |||
44 | function TimeDerivativeWrapper{iip}(f::F, u, p) where {F, iip} | ||
45 | return TimeDerivativeWrapper{iip, F, typeof(u), typeof(p)}(f, u, p) | ||
46 | end | ||
47 | function TimeDerivativeWrapper(f::F, u, p) where {F} | ||
48 | return TimeDerivativeWrapper{isinplace(f, 4)}(f, u, p) | ||
49 | end | ||
50 | |||
51 | (ff::TimeDerivativeWrapper{false})(t) = ff.f(ff.u, ff.p, t) | ||
52 | (ff::TimeDerivativeWrapper{true})(du1, t) = ff.f(du1, ff.u, ff.p, t) | ||
53 | (ff::TimeDerivativeWrapper{true})(t) = (du1 = similar(ff.u); ff.f(du1, ff.u, ff.p, t); du1) | ||
54 | |||
55 | mutable struct UDerivativeWrapper{iip, F, tType, P} <: AbstractSciMLFunction{iip} | ||
56 | f::F | ||
57 | t::tType | ||
58 | p::P | ||
59 | end | ||
60 | |||
61 | function UDerivativeWrapper{iip}(f::F, t, p) where {F, iip} | ||
62 | return UDerivativeWrapper{iip, F, typeof(t), typeof(p)}(f, t, p) | ||
63 | end | ||
64 | UDerivativeWrapper(f::F, t, p) where {F} = UDerivativeWrapper{isinplace(f, 4)}(f, t, p) | ||
65 | |||
66 | (ff::UDerivativeWrapper{false})(u) = ff.f(u, ff.p, ff.t) | ||
67 | (ff::UDerivativeWrapper{true})(du1, u) = ff.f(du1, u, ff.p, ff.t) | ||
68 | (ff::UDerivativeWrapper{true})(u) = (du1 = similar(u); ff.f(du1, u, ff.p, ff.t); du1) | ||
69 | |||
70 | mutable struct ParamJacobianWrapper{iip, fType, tType, uType} <: AbstractSciMLFunction{iip} | ||
71 | f::fType | ||
72 | t::tType | ||
73 | u::uType | ||
74 | end | ||
75 | |||
76 | function ParamJacobianWrapper{iip}(f::F, t, u) where {F, iip} | ||
77 | return ParamJacobianWrapper{iip, F, typeof(t), typeof(u)}(f, t, u) | ||
78 | end | ||
79 | ParamJacobianWrapper(f::F, t, u) where {F} = ParamJacobianWrapper{isinplace(f, 4)}(f, t, u) | ||
80 | |||
81 | (ff::ParamJacobianWrapper{true})(du1, p) = ff.f(du1, ff.u, p, ff.t) | ||
82 | function (ff::ParamJacobianWrapper{true})(p) | ||
83 | du1 = similar(p, size(ff.u)) | ||
84 | ff.f(du1, ff.u, p, ff.t) | ||
85 | return du1 | ||
86 | end | ||
87 | (ff::ParamJacobianWrapper{false})(p) = ff.f(ff.u, p, ff.t) | ||
88 | |||
89 | mutable struct JacobianWrapper{iip, fType, pType} <: AbstractSciMLFunction{iip} | ||
90 | f::fType | ||
91 | p::pType | ||
92 | end | ||
93 | |||
94 | JacobianWrapper{iip}(f::F, p) where {F, iip} = JacobianWrapper{iip, F, typeof(p)}(f, p) | ||
95 | JacobianWrapper(f::F, p) where {F} = JacobianWrapper{isinplace(f, 3)}(f, p) | ||
96 | |||
97 | (uf::JacobianWrapper{false})(u) = uf.f(u, uf.p) | ||
98 | (uf::JacobianWrapper{false})(res, u) = (vec(res) .= vec(uf.f(u, uf.p))) | ||
99 | 26 (9 %) |
26 (9 %)
samples spent in JacobianWrapper
26 (100 %) (incl.) when called from chunk_mode_jacobian! line 194
26 (100 %)
samples spent calling
NonlinearFunction
(uf::JacobianWrapper{true})(res, u) = uf.f(res, u, uf.p)
|