@@ -51,3 +51,60 @@ function generate_diffusion_function(sys::SDESystem, dvs = sys.dvs, ps = sys.ps,
5151 ps′ = [clean (p) for p ∈ ps]
5252 return build_function (sys. noiseeqs, dvs′, ps′, (sys. iv. name,), ODEToExpr (sys), expression; kwargs... )
5353end
54+
55+ """
56+ $(SIGNATURES)
57+
58+ Create an `SDEFunction` from the [`SDESystem`](@ref). The arguments `dvs` and `ps`
59+ are used to set the order of the dependent variable and parameter vectors,
60+ respectively.
61+ """
62+ function DiffEqBase. SDEFunction {iip} (sys:: SDESystem , dvs = sys. dvs, ps = sys. ps;
63+ version = nothing , tgrad= false ,
64+ jac = false , Wfact = false ) where {iip}
65+ f_oop,f_iip = generate_function (sys, dvs, ps, Val{false })
66+ g_oop,g_iip = generate_diffusion_function (sys, dvs, ps, Val{false })
67+
68+ f (u,p,t) = f_oop (u,p,t)
69+ f (du,u,p,t) = f_iip (du,u,p,t)
70+ g (u,p,t) = g_oop (u,p,t)
71+ g (du,u,p,t) = g_iip (du,u,p,t)
72+
73+ if tgrad
74+ tgrad_oop,tgrad_iip = generate_tgrad (sys, dvs, ps, Val{false })
75+ _tgrad (u,p,t) = tgrad_oop (u,p,t)
76+ _tgrad (J,u,p,t) = tgrad_iip (J,u,p,t)
77+ else
78+ _tgrad = nothing
79+ end
80+
81+ if jac
82+ jac_oop,jac_iip = generate_jacobian (sys, dvs, ps, Val{false })
83+ _jac (u,p,t) = jac_oop (u,p,t)
84+ _jac (J,u,p,t) = jac_iip (J,u,p,t)
85+ else
86+ _jac = nothing
87+ end
88+
89+ if Wfact
90+ tmp_Wfact,tmp_Wfact_t = generate_factorized_W (sys, dvs, ps, true , Val{false })
91+ Wfact_oop, Wfact_iip = tmp_Wfact
92+ Wfact_oop_t, Wfact_iip_t = tmp_Wfact_t
93+ _Wfact (u,p,dtgamma,t) = Wfact_oop (u,p,dtgamma,t)
94+ _Wfact (W,u,p,dtgamma,t) = Wfact_iip (W,u,p,dtgamma,t)
95+ _Wfact_t (u,p,dtgamma,t) = Wfact_oop_t (u,p,dtgamma,t)
96+ _Wfact_t (W,u,p,dtgamma,t) = Wfact_iip_t (W,u,p,dtgamma,t)
97+ else
98+ _Wfact,_Wfact_t = nothing ,nothing
99+ end
100+
101+ SDEFunction {iip} (f,g,jac= _jac,
102+ tgrad = _tgrad,
103+ Wfact = _Wfact,
104+ Wfact_t = _Wfact_t,
105+ syms = Symbol .(sys. dvs))
106+ end
107+
108+ function DiffEqBase. SDEFunction (sys:: SDESystem , args... ; kwargs... )
109+ SDEFunction {true} (sys, args... ; kwargs... )
110+ end
0 commit comments