@@ -6,11 +6,10 @@ an Adaptive BDF2 Formula and Comparison with The MATLAB Ode15s. Procedia Compute
66ABDF2: Multistep Method
77An adaptive order 2 L-stable fixed leading coefficient multistep BDF method.
88"""
9- struct ABDF2{CS, AD, F, F2, P, FDT, ST, CJ, K, T, StepLimiter} < :
9+ struct ABDF2{CS, AD, F, F2, FDT, ST, CJ, K, T, StepLimiter} < :
1010 OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ}
1111 linsolve:: F
1212 nlsolve:: F2
13- precs:: P
1413 κ:: K
1514 tol:: T
1615 smooth_est:: Bool
@@ -20,14 +19,14 @@ struct ABDF2{CS, AD, F, F2, P, FDT, ST, CJ, K, T, StepLimiter} <:
2019end
2120function ABDF2 (; chunk_size = Val {0} (), autodiff = true , standardtag = Val {true} (),
2221 concrete_jac = nothing , diff_type = Val{:forward },
23- κ = nothing , tol = nothing , linsolve = nothing , precs = DEFAULT_PRECS,
22+ κ = nothing , tol = nothing , linsolve = nothing ,
2423 nlsolve = NLNewton (),
2524 smooth_est = true , extrapolant = :linear ,
2625 controller = :Standard , step_limiter! = trivial_limiter!)
2726 ABDF2{
2827 _unwrap_val (chunk_size), _unwrap_val (autodiff), typeof (linsolve), typeof (nlsolve),
29- typeof (precs), diff_type, _unwrap_val (standardtag), _unwrap_val (concrete_jac),
30- typeof (κ), typeof (tol), typeof (step_limiter!)}(linsolve, nlsolve, precs, κ, tol,
28+ diff_type, _unwrap_val (standardtag), _unwrap_val (concrete_jac),
29+ typeof (κ), typeof (tol), typeof (step_limiter!)}(linsolve, nlsolve, κ, tol,
3130 smooth_est, extrapolant, controller, step_limiter!)
3231end
3332
@@ -36,11 +35,10 @@ Uri M. Ascher, Steven J. Ruuth, Brian T. R. Wetton. Implicit-Explicit Methods fo
3635Dependent Partial Differential Equations. 1995 Society for Industrial and Applied Mathematics
3736Journal on Numerical Analysis, 32(3), pp 797-823, 1995. doi: https://doi.org/10.1137/0732037
3837"""
39- struct SBDF{CS, AD, F, F2, P, FDT, ST, CJ, K, T} < :
38+ struct SBDF{CS, AD, F, F2, FDT, ST, CJ, K, T} < :
4039 OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ}
4140 linsolve:: F
4241 nlsolve:: F2
43- precs:: P
4442 κ:: K
4543 tol:: T
4644 extrapolant:: Symbol
5048
5149function SBDF (order; chunk_size = Val {0} (), autodiff = Val {true} (),
5250 standardtag = Val {true} (), concrete_jac = nothing , diff_type = Val{:forward },
53- linsolve = nothing , precs = DEFAULT_PRECS, nlsolve = NLNewton (), κ = nothing ,
51+ linsolve = nothing , nlsolve = NLNewton (), κ = nothing ,
5452 tol = nothing ,
5553 extrapolant = :linear , ark = false )
5654 SBDF{_unwrap_val (chunk_size), _unwrap_val (autodiff), typeof (linsolve), typeof (nlsolve),
57- typeof (precs), diff_type, _unwrap_val (standardtag), _unwrap_val (concrete_jac),
55+ diff_type, _unwrap_val (standardtag), _unwrap_val (concrete_jac),
5856 typeof (κ), typeof (tol)}(linsolve,
5957 nlsolve,
60- precs,
6158 κ,
6259 tol,
6360 extrapolant,
6865# All keyword form needed for remake
6966function SBDF (; chunk_size = Val {0} (), autodiff = Val {true} (), standardtag = Val {true} (),
7067 concrete_jac = nothing , diff_type = Val{:forward },
71- linsolve = nothing , precs = DEFAULT_PRECS, nlsolve = NLNewton (), κ = nothing ,
68+ linsolve = nothing , nlsolve = NLNewton (), κ = nothing ,
7269 tol = nothing ,
7370 extrapolant = :linear ,
7471 order, ark = false )
7572 SBDF{_unwrap_val (chunk_size), _unwrap_val (autodiff), typeof (linsolve), typeof (nlsolve),
76- typeof (precs), diff_type, _unwrap_val (standardtag), _unwrap_val (concrete_jac),
73+ diff_type, _unwrap_val (standardtag), _unwrap_val (concrete_jac),
7774 typeof (κ), typeof (tol)}(linsolve,
7875 nlsolve,
79- precs,
8076 κ,
8177 tol,
8278 extrapolant,
@@ -136,11 +132,10 @@ Optional parameter kappa defaults to Shampine's accuracy-optimal -0.1850.
136132
137133See also `QNDF`.
138134"""
139- struct QNDF1{CS, AD, F, F2, P, FDT, ST, CJ, κType, StepLimiter} < :
135+ struct QNDF1{CS, AD, F, F2, FDT, ST, CJ, κType, StepLimiter} < :
140136 OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ}
141137 linsolve:: F
142138 nlsolve:: F2
143- precs:: P
144139 extrapolant:: Symbol
145140 kappa: :κType
146141 controller:: Symbol
@@ -149,15 +144,14 @@ end
149144
150145function QNDF1 (; chunk_size = Val {0} (), autodiff = Val {true} (), standardtag = Val {true} (),
151146 concrete_jac = nothing , diff_type = Val{:forward },
152- linsolve = nothing , precs = DEFAULT_PRECS, nlsolve = NLNewton (),
147+ linsolve = nothing , nlsolve = NLNewton (),
153148 extrapolant = :linear , kappa = - 37 // 200 ,
154149 controller = :Standard , step_limiter! = trivial_limiter!)
155150 QNDF1{
156151 _unwrap_val (chunk_size), _unwrap_val (autodiff), typeof (linsolve), typeof (nlsolve),
157- typeof (precs), diff_type, _unwrap_val (standardtag), _unwrap_val (concrete_jac),
152+ diff_type, _unwrap_val (standardtag), _unwrap_val (concrete_jac),
158153 typeof (kappa), typeof (step_limiter!)}(linsolve,
159154 nlsolve,
160- precs,
161155 extrapolant,
162156 kappa,
163157 controller,
@@ -170,11 +164,10 @@ An adaptive order 2 quasi-constant timestep L-stable numerical differentiation f
170164
171165See also `QNDF`.
172166"""
173- struct QNDF2{CS, AD, F, F2, P, FDT, ST, CJ, κType, StepLimiter} < :
167+ struct QNDF2{CS, AD, F, F2, FDT, ST, CJ, κType, StepLimiter} < :
174168 OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ}
175169 linsolve:: F
176170 nlsolve:: F2
177- precs:: P
178171 extrapolant:: Symbol
179172 kappa: :κType
180173 controller:: Symbol
@@ -183,15 +176,14 @@ end
183176
184177function QNDF2 (; chunk_size = Val {0} (), autodiff = Val {true} (), standardtag = Val {true} (),
185178 concrete_jac = nothing , diff_type = Val{:forward },
186- linsolve = nothing , precs = DEFAULT_PRECS, nlsolve = NLNewton (),
179+ linsolve = nothing , nlsolve = NLNewton (),
187180 extrapolant = :linear , kappa = - 1 // 9 ,
188181 controller = :Standard , step_limiter! = trivial_limiter!)
189182 QNDF2{
190183 _unwrap_val (chunk_size), _unwrap_val (autodiff), typeof (linsolve), typeof (nlsolve),
191- typeof (precs), diff_type, _unwrap_val (standardtag), _unwrap_val (concrete_jac),
184+ diff_type, _unwrap_val (standardtag), _unwrap_val (concrete_jac),
192185 typeof (kappa), typeof (step_limiter!)}(linsolve,
193186 nlsolve,
194- precs,
195187 extrapolant,
196188 kappa,
197189 controller,
@@ -214,12 +206,11 @@ year={1997},
214206publisher={SIAM}
215207}
216208"""
217- struct QNDF{MO, CS, AD, F, F2, P, FDT, ST, CJ, K, T, κType, StepLimiter} < :
209+ struct QNDF{MO, CS, AD, F, F2, FDT, ST, CJ, K, T, κType, StepLimiter} < :
218210 OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ}
219211 max_order:: Val{MO}
220212 linsolve:: F
221213 nlsolve:: F2
222- precs:: P
223214 κ:: K
224215 tol:: T
225216 extrapolant:: Symbol
@@ -231,15 +222,15 @@ end
231222function QNDF (; max_order:: Val{MO} = Val {5} (), chunk_size = Val {0} (),
232223 autodiff = Val {true} (), standardtag = Val {true} (), concrete_jac = nothing ,
233224 diff_type = Val{:forward },
234- linsolve = nothing , precs = DEFAULT_PRECS, nlsolve = NLNewton (), κ = nothing ,
225+ linsolve = nothing , nlsolve = NLNewton (), κ = nothing ,
235226 tol = nothing ,
236227 extrapolant = :linear , kappa = (- 37 // 200 , - 1 // 9 , - 823 // 10000 , - 83 // 2000 , 0 // 1 ),
237228 controller = :Standard , step_limiter! = trivial_limiter!) where {MO}
238229 QNDF{MO, _unwrap_val (chunk_size), _unwrap_val (autodiff), typeof (linsolve),
239- typeof (nlsolve), typeof (precs), diff_type, _unwrap_val (standardtag),
230+ typeof (nlsolve), diff_type, _unwrap_val (standardtag),
240231 _unwrap_val (concrete_jac),
241232 typeof (κ), typeof (tol), typeof (kappa), typeof (step_limiter!)}(
242- max_order, linsolve, nlsolve, precs, κ, tol,
233+ max_order, linsolve, nlsolve, κ, tol,
243234 extrapolant, kappa, controller, step_limiter!)
244235end
245236
@@ -250,22 +241,20 @@ MEBDF2: Multistep Method
250241The second order Modified Extended BDF method, which has improved stability properties over the standard BDF.
251242Fixed timestep only.
252243"""
253- struct MEBDF2{CS, AD, F, F2, P, FDT, ST, CJ} < :
244+ struct MEBDF2{CS, AD, F, F2, FDT, ST, CJ} < :
254245 OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ}
255246 linsolve:: F
256247 nlsolve:: F2
257- precs:: P
258248 extrapolant:: Symbol
259249end
260250function MEBDF2 (; chunk_size = Val {0} (), autodiff = true , standardtag = Val {true} (),
261251 concrete_jac = nothing , diff_type = Val{:forward },
262- linsolve = nothing , precs = DEFAULT_PRECS, nlsolve = NLNewton (),
252+ linsolve = nothing , nlsolve = NLNewton (),
263253 extrapolant = :constant )
264254 MEBDF2{_unwrap_val (chunk_size), _unwrap_val (autodiff), typeof (linsolve),
265- typeof (nlsolve), typeof (precs), diff_type, _unwrap_val (standardtag),
255+ typeof (nlsolve), diff_type, _unwrap_val (standardtag),
266256 _unwrap_val (concrete_jac)}(linsolve,
267257 nlsolve,
268- precs,
269258 extrapolant)
270259end
271260
@@ -282,12 +271,11 @@ year={2002},
282271publisher={Walter de Gruyter GmbH \\ & Co. KG}
283272}
284273"""
285- struct FBDF{MO, CS, AD, F, F2, P, FDT, ST, CJ, K, T, StepLimiter} < :
274+ struct FBDF{MO, CS, AD, F, F2, FDT, ST, CJ, K, T, StepLimiter} < :
286275 OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ}
287276 max_order:: Val{MO}
288277 linsolve:: F
289278 nlsolve:: F2
290- precs:: P
291279 κ:: K
292280 tol:: T
293281 extrapolant:: Symbol
@@ -298,14 +286,14 @@ end
298286function FBDF (; max_order:: Val{MO} = Val {5} (), chunk_size = Val {0} (),
299287 autodiff = Val {true} (), standardtag = Val {true} (), concrete_jac = nothing ,
300288 diff_type = Val{:forward },
301- linsolve = nothing , precs = DEFAULT_PRECS, nlsolve = NLNewton (), κ = nothing ,
289+ linsolve = nothing , nlsolve = NLNewton (), κ = nothing ,
302290 tol = nothing ,
303291 extrapolant = :linear , controller = :Standard , step_limiter! = trivial_limiter!) where {MO}
304292 FBDF{MO, _unwrap_val (chunk_size), _unwrap_val (autodiff), typeof (linsolve),
305- typeof (nlsolve), typeof (precs), diff_type, _unwrap_val (standardtag),
293+ typeof (nlsolve), diff_type, _unwrap_val (standardtag),
306294 _unwrap_val (concrete_jac),
307295 typeof (κ), typeof (tol), typeof (step_limiter!)}(
308- max_order, linsolve, nlsolve, precs, κ, tol, extrapolant,
296+ max_order, linsolve, nlsolve, κ, tol, extrapolant,
309297 controller, step_limiter!)
310298end
311299
@@ -389,41 +377,39 @@ See also `SBDF`, `IMEXEuler`.
389377"""
390378IMEXEulerARK (; kwargs... ) = SBDF (1 ; ark = true , kwargs... )
391379
392- struct DImplicitEuler{CS, AD, F, F2, P, FDT, ST, CJ} <: DAEAlgorithm{CS, AD, FDT, ST, CJ}
380+ struct DImplicitEuler{CS, AD, F, F2, FDT, ST, CJ} <: DAEAlgorithm{CS, AD, FDT, ST, CJ}
393381 linsolve:: F
394382 nlsolve:: F2
395- precs:: P
396383 extrapolant:: Symbol
397384 controller:: Symbol
398385end
399386function DImplicitEuler (;
400387 chunk_size = Val {0} (), autodiff = true , standardtag = Val {true} (),
401388 concrete_jac = nothing , diff_type = Val{:forward },
402- linsolve = nothing , precs = DEFAULT_PRECS, nlsolve = NLNewton (),
389+ linsolve = nothing , nlsolve = NLNewton (),
403390 extrapolant = :constant ,
404391 controller = :Standard )
405392 DImplicitEuler{_unwrap_val (chunk_size), _unwrap_val (autodiff), typeof (linsolve),
406- typeof (nlsolve), typeof (precs), diff_type, _unwrap_val (standardtag),
393+ typeof (nlsolve), diff_type, _unwrap_val (standardtag),
407394 _unwrap_val (concrete_jac)}(linsolve,
408- nlsolve, precs, extrapolant, controller)
395+ nlsolve, extrapolant, controller)
409396end
410397
411- struct DABDF2{CS, AD, F, F2, P, FDT, ST, CJ} <: DAEAlgorithm{CS, AD, FDT, ST, CJ}
398+ struct DABDF2{CS, AD, F, F2, FDT, ST, CJ} <: DAEAlgorithm{CS, AD, FDT, ST, CJ}
412399 linsolve:: F
413400 nlsolve:: F2
414- precs:: P
415401 extrapolant:: Symbol
416402 controller:: Symbol
417403end
418404function DABDF2 (; chunk_size = Val {0} (), autodiff = Val {true} (), standardtag = Val {true} (),
419405 concrete_jac = nothing , diff_type = Val{:forward },
420- linsolve = nothing , precs = DEFAULT_PRECS, nlsolve = NLNewton (),
406+ linsolve = nothing , nlsolve = NLNewton (),
421407 extrapolant = :constant ,
422408 controller = :Standard )
423409 DABDF2{_unwrap_val (chunk_size), _unwrap_val (autodiff), typeof (linsolve),
424- typeof (nlsolve), typeof (precs), diff_type, _unwrap_val (standardtag),
410+ typeof (nlsolve), diff_type, _unwrap_val (standardtag),
425411 _unwrap_val (concrete_jac)}(linsolve,
426- nlsolve, precs, extrapolant, controller)
412+ nlsolve, extrapolant, controller)
427413end
428414
429415#=
@@ -440,11 +426,10 @@ DBDF(;chunk_size=Val{0}(),autodiff=Val{true}(), standardtag = Val{true}(), concr
440426 linsolve,nlsolve,precs,extrapolant)
441427=#
442428
443- struct DFBDF{MO, CS, AD, F, F2, P, FDT, ST, CJ, K, T} <: DAEAlgorithm{CS, AD, FDT, ST, CJ}
429+ struct DFBDF{MO, CS, AD, F, F2, FDT, ST, CJ, K, T} <: DAEAlgorithm{CS, AD, FDT, ST, CJ}
444430 max_order:: Val{MO}
445431 linsolve:: F
446432 nlsolve:: F2
447- precs:: P
448433 κ:: K
449434 tol:: T
450435 extrapolant:: Symbol
@@ -453,13 +438,13 @@ end
453438function DFBDF (; max_order:: Val{MO} = Val {5} (), chunk_size = Val {0} (),
454439 autodiff = Val {true} (), standardtag = Val {true} (), concrete_jac = nothing ,
455440 diff_type = Val{:forward },
456- linsolve = nothing , precs = DEFAULT_PRECS, nlsolve = NLNewton (), κ = nothing ,
441+ linsolve = nothing , nlsolve = NLNewton (), κ = nothing ,
457442 tol = nothing ,
458443 extrapolant = :linear , controller = :Standard ) where {MO}
459444 DFBDF{MO, _unwrap_val (chunk_size), _unwrap_val (autodiff), typeof (linsolve),
460- typeof (nlsolve), typeof (precs), diff_type, _unwrap_val (standardtag),
445+ typeof (nlsolve), diff_type, _unwrap_val (standardtag),
461446 _unwrap_val (concrete_jac),
462- typeof (κ), typeof (tol)}(max_order, linsolve, nlsolve, precs, κ, tol, extrapolant,
447+ typeof (κ), typeof (tol)}(max_order, linsolve, nlsolve, κ, tol, extrapolant,
463448 controller)
464449end
465450
0 commit comments