@@ -109,6 +109,27 @@ struct DDEFunction{iip,F,TMM,Ta,Tt,TJ,JVP,VJP,JP,SP,TW,TWt,TPJ,S,TCV} <: Abstrac
109109 colorvec:: TCV
110110end
111111
112+ """
113+ $(TYPEDEF)
114+ """
115+ struct DynamicalDDEFunction{iip,F1,F2,TMM,Ta,Tt,TJ,JVP,VJP,JP,SP,TW,TWt,TPJ,S,TCV} <: AbstractDDEFunction{iip}
116+ f1:: F1
117+ f2:: F2
118+ mass_matrix:: TMM
119+ analytic:: Ta
120+ tgrad:: Tt
121+ jac:: TJ
122+ jvp:: JVP
123+ vjp:: VJP
124+ jac_prototype:: JP
125+ sparsity:: SP
126+ Wfact:: TW
127+ Wfact_t:: TWt
128+ paramjac:: TPJ
129+ syms:: S
130+ colorvec:: TCV
131+ end
132+
112133"""
113134$(TYPEDEF)
114135"""
322343(f:: DDEFunction )(args... ) = f. f (args... )
323344(f:: DDEFunction )(:: Type{Val{:analytic}} ,args... ) = f. analytic (args... )
324345
346+ function (f:: DynamicalDDEFunction )(u,h,p,t)
347+ ArrayPartition (f. f1 (u. x[1 ],u. x[2 ],h,p,t),f. f2 (u. x[1 ],u. x[2 ],h,p,t))
348+ end
349+ function (f:: DynamicalDDEFunction )(du,u,h,p,t)
350+ f. f1 (du. x[1 ],u. x[1 ],u. x[2 ],h,p,t)
351+ f. f2 (du. x[2 ],u. x[1 ],u. x[2 ],h,p,t)
352+ end
353+ function Base. getproperty (f:: DynamicalDDEFunction , name:: Symbol )
354+ if name === :f
355+ # Use the f property as an alias for calling the function itself, so DynamicalDDEFunction fits the same interface as DDEFunction as expected by the ODEFunctionWrapper in DelayDiffEq.jl.
356+ return f
357+ end
358+ return getfield (f, name)
359+ end
360+
325361(f:: SDEFunction )(args... ) = f. f (args... )
326362(f:: SDEFunction )(:: Type{Val{:analytic}} ,args... ) = f. analytic (args... )
327363(f:: SDEFunction )(:: Type{Val{:tgrad}} ,args... ) = f. tgrad (args... )
@@ -933,6 +969,63 @@ DDEFunction{iip}(f::DDEFunction; kwargs...) where iip = f
933969DDEFunction (f; kwargs... ) = DDEFunction {isinplace(f, 5),RECOMPILE_BY_DEFAULT} (f; kwargs... )
934970DDEFunction (f:: DDEFunction ; kwargs... ) = f
935971
972+ @add_kwonly function DynamicalDDEFunction {iip} (f1,f2,mass_matrix,analytic,tgrad,jac,jvp,vjp,
973+ jac_prototype,sparsity,Wfact,Wfact_t,paramjac,
974+ syms,colorvec) where iip
975+ f1 = typeof (f1) <: AbstractDiffEqOperator ? f1 : DDEFunction (f1)
976+ f2 = DDEFunction (f2)
977+ DynamicalDDEFunction{isinplace (f2),typeof (f1),typeof (f2),typeof (mass_matrix),
978+ typeof (analytic),typeof (tgrad),typeof (jac),typeof (jvp),typeof (vjp),
979+ typeof (jac_prototype),
980+ typeof (Wfact),typeof (Wfact_t),typeof (paramjac),typeof (syms),
981+ typeof (colorvec)}(f1,f2,mass_matrix,analytic,tgrad,jac,jvp,vjp,
982+ jac_prototype,sparsity,Wfact,Wfact_t,paramjac,syms,colorvec)
983+ end
984+ function DynamicalDDEFunction {iip,true} (f1,f2;mass_matrix= I,
985+ analytic= nothing ,
986+ tgrad= nothing ,
987+ jac= nothing ,
988+ jvp= nothing ,
989+ vjp= nothing ,
990+ jac_prototype= nothing ,
991+ sparsity= jac_prototype,
992+ Wfact= nothing ,
993+ Wfact_t= nothing ,
994+ paramjac = nothing ,
995+ syms = nothing ,
996+ colorvec = nothing ) where iip
997+ DynamicalDDEFunction{iip,typeof (f1),typeof (f2),typeof (mass_matrix),
998+ typeof (analytic),
999+ typeof (tgrad),typeof (jac),typeof (jvp),typeof (vjp),typeof (jac_prototype),typeof (sparsity),
1000+ typeof (Wfact),typeof (Wfact_t),typeof (paramjac),typeof (syms),
1001+ typeof (colorvec)}(
1002+ f1,f2,mass_matrix,analytic,tgrad,jac,jvp,vjp,jac_prototype,sparsity,
1003+ Wfact,Wfact_t,paramjac,syms,colorvec)
1004+ end
1005+ function DynamicalDDEFunction {iip,false} (f1,f2;mass_matrix= I,
1006+ analytic= nothing ,
1007+ tgrad= nothing ,
1008+ jac= nothing ,
1009+ jvp= nothing ,
1010+ vjp= nothing ,
1011+ jac_prototype= nothing ,
1012+ sparsity= jac_prototype,
1013+ Wfact= nothing ,
1014+ Wfact_t= nothing ,
1015+ paramjac = nothing ,
1016+ syms = nothing ,
1017+ colorvec = nothing ) where iip
1018+ DynamicalDDEFunction{iip,Any,Any,Any,Any,Any,Any,Any,
1019+ Any,Any,Any,Any,Any}(
1020+ f1,f2,mass_matrix,analytic,tgrad,
1021+ jac,jvp,vjp,jac_prototype,sparsity,
1022+ Wfact,Wfact_t,paramjac,syms,colorvec)
1023+ end
1024+ DynamicalDDEFunction (f1,f2= nothing ; kwargs... ) = DynamicalDDEFunction {isinplace(f1, 6)} (f1, f2; kwargs... )
1025+ DynamicalDDEFunction {iip} (f1,f2; kwargs... ) where iip =
1026+ DynamicalDDEFunction {iip,RECOMPILE_BY_DEFAULT} (DDEFunction {iip} (f1), DDEFunction {iip} (f2); kwargs... )
1027+ DynamicalDDEFunction (f:: DynamicalDDEFunction ; kwargs... ) = f
1028+
9361029function SDDEFunction {iip,true} (f,g;
9371030 mass_matrix= I,
9381031 analytic= nothing ,
@@ -1135,14 +1228,14 @@ has_Wfact_t(f::Union{SplitFunction,SplitSDEFunction}) = has_Wfact_t(f.f1)
11351228has_paramjac (f:: Union{SplitFunction,SplitSDEFunction} ) = has_paramjac (f. f1)
11361229has_colorvec (f:: Union{SplitFunction,SplitSDEFunction} ) = has_colorvec (f. f1)
11371230
1138- has_jac (f:: DynamicalODEFunction ) = has_jac (f. f1)
1139- has_jvp (f:: DynamicalODEFunction ) = has_jvp (f. f1)
1140- has_vjp (f:: DynamicalODEFunction ) = has_vjp (f. f1)
1141- has_tgrad (f:: DynamicalODEFunction ) = has_tgrad (f. f1)
1142- has_Wfact (f:: DynamicalODEFunction ) = has_Wfact (f. f1)
1143- has_Wfact_t (f:: DynamicalODEFunction ) = has_Wfact_t (f. f1)
1144- has_paramjac (f:: DynamicalODEFunction ) = has_paramjac (f. f1)
1145- has_colorvec (f:: DynamicalODEFunction ) = has_colorvec (f. f1)
1231+ has_jac (f:: Union{ DynamicalODEFunction,DynamicalDDEFunction} ) = has_jac (f. f1)
1232+ has_jvp (f:: Union{ DynamicalODEFunction,DynamicalDDEFunction} ) = has_jvp (f. f1)
1233+ has_vjp (f:: Union{ DynamicalODEFunction,DynamicalDDEFunction} ) = has_vjp (f. f1)
1234+ has_tgrad (f:: Union{ DynamicalODEFunction,DynamicalDDEFunction} ) = has_tgrad (f. f1)
1235+ has_Wfact (f:: Union{ DynamicalODEFunction,DynamicalDDEFunction} ) = has_Wfact (f. f1)
1236+ has_Wfact_t (f:: Union{ DynamicalODEFunction,DynamicalDDEFunction} ) = has_Wfact_t (f. f1)
1237+ has_paramjac (f:: Union{ DynamicalODEFunction,DynamicalDDEFunction} ) = has_paramjac (f. f1)
1238+ has_colorvec (f:: Union{ DynamicalODEFunction,DynamicalDDEFunction} ) = has_colorvec (f. f1)
11461239
11471240has_jac (f:: Union{UDerivativeWrapper,UJacobianWrapper} ) = has_jac (f. f)
11481241has_jvp (f:: Union{UDerivativeWrapper,UJacobianWrapper} ) = has_jvp (f. f)
0 commit comments