925
925
alg_cache (alg:: Feagin14 ,u,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,uprev2,f,t,:: Type{Val{false}} ) = Feagin14ConstantCache (realtype (uEltypeNoUnits),realtype (tTypeNoUnits))
926
926
927
927
928
- type Rosenbrock23Cache{uType,uArrayType,rateType,du2Type,vecuType,JType,TabType,TFType,UFType,F,JCType} <: OrdinaryDiffEqMutableCache
928
+ type Rosenbrock23Cache{uType,uArrayType,rateType,du2Type,LinuType, vecuType,JType,TabType,TFType,UFType,F,JCType} <: OrdinaryDiffEqMutableCache
929
929
u:: uType
930
930
uprev:: uType
931
931
k₁:: rateType
@@ -946,7 +946,8 @@ type Rosenbrock23Cache{uType,uArrayType,rateType,du2Type,vecuType,JType,TabType,
946
946
tab:: TabType
947
947
tf:: TFType
948
948
uf:: UFType
949
- linsolve_tmp:: vecuType
949
+ linsolve_tmp:: LinuType
950
+ linsolve_tmp_vec:: vecuType
950
951
linsolve:: F
951
952
jac_config:: JCType
952
953
end
@@ -956,7 +957,7 @@ du_cache(c::Rosenbrock23Cache) = (c.k₁,c.k₂,c.k₃,c.du1,c.du2,c.f₁,c.fsal
956
957
jac_cache (c:: Rosenbrock23Cache ) = (c. J,c. W)
957
958
vecu_cache (c:: Rosenbrock23Cache ) = (c. vectmp,c. vectmp2,c. vectmp3)
958
959
959
- type Rosenbrock32Cache{uType,uArrayType,rateType,du2Type,vecuType,JType,TabType,TFType,UFType,F,JCType} <: OrdinaryDiffEqMutableCache
960
+ type Rosenbrock32Cache{uType,uArrayType,rateType,du2Type,LinuType, vecuType,JType,TabType,TFType,UFType,F,JCType} <: OrdinaryDiffEqMutableCache
960
961
u:: uType
961
962
uprev:: uType
962
963
k₁:: rateType
@@ -977,7 +978,8 @@ type Rosenbrock32Cache{uType,uArrayType,rateType,du2Type,vecuType,JType,TabType,
977
978
tab:: TabType
978
979
tf:: TFType
979
980
uf:: UFType
980
- linsolve_tmp:: vecuType
981
+ linsolve_tmp:: LinuType
982
+ linsolve_tmp_vec:: vecuType
981
983
linsolve:: F
982
984
jac_config:: JCType
983
985
end
@@ -1009,11 +1011,12 @@ function alg_cache(alg::Rosenbrock23,u,rate_prototype,uEltypeNoUnits,tTypeNoUnit
1009
1011
vfr = VectorFReturn (f,size (u))
1010
1012
tf = TimeGradientWrapper (vf,uprev)
1011
1013
uf = UJacobianWrapper (vfr,t)
1012
- linsolve_tmp = vec (similar (u,indices (u)))
1014
+ linsolve_tmp = similar (u,indices (u))
1015
+ linsolve_tmp_vec = vec (linsolve_tmp)
1013
1016
jac_config = ForwardDiff. JacobianConfig (uf,vec (du1),vec (uprev),ForwardDiff. Chunk {determine_chunksize(u,alg)} ())
1014
1017
Rosenbrock23Cache (u,uprev,k₁,k₂,k₃,du1,du2,f₁,vectmp,vectmp2,vectmp3,fsalfirst,
1015
- fsallast,dT,J,W,tmp,tab,tf,uf,linsolve_tmp,alg . linsolve ,
1016
- jac_config)
1018
+ fsallast,dT,J,W,tmp,tab,tf,uf,linsolve_tmp,linsolve_tmp_vec ,
1019
+ alg . linsolve, jac_config)
1017
1020
end
1018
1021
1019
1022
function alg_cache (alg:: Rosenbrock32 ,u,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,uprev2,f,t,:: Type{Val{true}} )
@@ -1037,9 +1040,10 @@ function alg_cache(alg::Rosenbrock32,u,rate_prototype,uEltypeNoUnits,tTypeNoUnit
1037
1040
vfr = VectorFReturn (f,size (u))
1038
1041
tf = TimeGradientWrapper (vf,uprev)
1039
1042
uf = UJacobianWrapper (vfr,t)
1040
- linsolve_tmp = vec (similar (u,indices (u)))
1043
+ linsolve_tmp = similar (u,indices (u))
1044
+ linsolve_tmp_vec = vec (linsolve_tmp)
1041
1045
jac_config = ForwardDiff. JacobianConfig (uf,vec (du1),vec (uprev),ForwardDiff. Chunk {determine_chunksize(u,alg)} ())
1042
- Rosenbrock32Cache (u,uprev,k₁,k₂,k₃,du1,du2,f₁,vectmp,vectmp2,vectmp3,fsalfirst,fsallast,dT,J,W,tmp,tab,tf,uf,linsolve_tmp,alg. linsolve,jac_config)
1046
+ Rosenbrock32Cache (u,uprev,k₁,k₂,k₃,du1,du2,f₁,vectmp,vectmp2,vectmp3,fsalfirst,fsallast,dT,J,W,tmp,tab,tf,uf,linsolve_tmp,linsolve_tmp_vec, alg. linsolve,jac_config)
1043
1047
end
1044
1048
1045
1049
immutable Rosenbrock23ConstantCache{T,TF,UF} <: OrdinaryDiffEqConstantCache
@@ -1100,15 +1104,16 @@ vecu_cache(c::ImplicitEulerCache) = (c.uhold,)
1100
1104
dual_cache (c:: ImplicitEulerCache ) = (c. dual_cache,)
1101
1105
1102
1106
function alg_cache (alg:: ImplicitEuler ,u,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,uprev2,f,t,:: Type{Val{true}} )
1103
- u_old = similar (u,indices (u)); k = zeros (rate_prototype)
1107
+ tmp = similar (u)
1108
+ u_old = vec (tmp); k = zeros (rate_prototype)
1104
1109
dual_cache = DiffCache (u,Val{determine_chunksize (u,get_chunksize (alg. nlsolve))})
1105
1110
uhold = vec (u) # this makes uhold the same values as integrator.u
1106
1111
rhs = RHS_IE (f,u_old,t,t,dual_cache,size (u),eachindex (u))
1107
1112
fsalfirst = zeros (rate_prototype)
1108
1113
nl_rhs = alg. nlsolve (Val{:init },rhs,uhold)
1109
- tmp = u_old
1110
- ImplicitEulerCache{typeof (u),typeof (u_old),typeof (uhold),typeof (dual_cache),typeof (k),
1111
- typeof (rhs),typeof (nl_rhs)}(
1114
+
1115
+ ImplicitEulerCache{typeof (u),typeof (u_old),typeof (uhold),typeof (dual_cache),
1116
+ typeof (k), typeof ( rhs),typeof (nl_rhs)}(
1112
1117
u,uprev,uprev2,uhold,dual_cache,u_old,tmp,k,fsalfirst,rhs,nl_rhs)
1113
1118
end
1114
1119
@@ -1147,12 +1152,13 @@ vecu_cache(c::TrapezoidCache) = (c.uhold,)
1147
1152
dual_cache (c:: TrapezoidCache ) = (c. dual_cache,)
1148
1153
1149
1154
function alg_cache (alg:: Trapezoid ,u,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,uprev2,f,t,:: Type{Val{true}} )
1150
- u_old = similar (u,indices (u)); k = zeros (rate_prototype)
1155
+ tmp = similar (u)
1156
+ u_old = vec (tmp); k = zeros (rate_prototype)
1151
1157
uhold = vec (u); fsalfirst = zeros (rate_prototype)
1158
+ f_old = vec (fsalfirst)
1152
1159
dual_cache = DiffCache (u,Val{determine_chunksize (u,get_chunksize (alg. nlsolve))})
1153
- rhs = RHS_Trap (f,u_old,fsalfirst ,t,t,size (u),dual_cache,eachindex (u))
1160
+ rhs = RHS_Trap (f,u_old,f_old ,t,t,size (u),dual_cache,eachindex (u))
1154
1161
nl_rhs = alg. nlsolve (Val{:init },rhs,uhold)
1155
- tmp = u_old
1156
1162
TrapezoidCache{typeof (u),typeof (u_old),typeof (uhold),typeof (dual_cache),typeof (k),
1157
1163
typeof (rhs),typeof (nl_rhs)}(u,uprev,uprev2,uhold,u_old,fsalfirst,dual_cache,tmp,k,rhs,nl_rhs)
1158
1164
end
@@ -1206,7 +1212,6 @@ function alg_cache(alg::IIF1,u,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,
1206
1212
end
1207
1213
1208
1214
function alg_cache (alg:: IIF1 ,u,rate_prototype,uEltypeNoUnits,tTypeNoUnits,uprev,uprev2,f,t,:: Type{Val{true}} )
1209
-
1210
1215
tmp = similar (u,indices (u)); rtmp1 = zeros (rate_prototype)
1211
1216
dual_cache = DiffCache (u,Val{determine_chunksize (u,get_chunksize (alg. nlsolve))})
1212
1217
uhold = vec (u) # this makes uhold the same values as integrator.u
0 commit comments