@@ -11,6 +11,113 @@ struct IMEXTableau{T, T2}
1111 s:: Int
1212end
1313
14+ # Dispatch: each algorithm type maps to its tableau constructor
15+ IMEXTableau (:: ARS343 , T, T2) = ARS343Tableau (T, T2)
16+
17+ #
18+ # KenCarp3 IMEX Tableau
19+ #
20+
21+ function KenCarp3IMEXTableau (T:: Type{<:CompiledFloats} , T2:: Type{<:CompiledFloats} )
22+ γ = convert (T, 0.435866521508459 )
23+
24+ a31 = convert (T, 0.2576482460664272 )
25+ a32 = - convert (T, 0.09351476757488625 )
26+ a41 = convert (T, 0.18764102434672383 )
27+ a42 = - convert (T, 0.595297473576955 )
28+ a43 = convert (T, 0.9717899277217721 )
29+
30+ btilde1 = convert (T, 0.027099261876665316 )
31+ btilde2 = convert (T, 0.11013520969201586 )
32+ btilde3 = - convert (T, 0.10306492520138458 )
33+ btilde4 = - convert (T, 0.0341695463672966 )
34+
35+ c3 = convert (T2, 0.6 )
36+ c2 = 2 γ
37+ θ = c3 / c2
38+ α31 = ((1 + (- 4 θ + 3 θ^ 2 )) + (6 θ * (1 - θ) / c2) * γ)
39+ α32 = ((- 2 θ + 3 θ^ 2 ) + (6 θ * (1 - θ) / c2) * γ)
40+ θ = 1 / c2
41+ α41 = ((1 + (- 4 θ + 3 θ^ 2 )) + (6 θ * (1 - θ) / c2) * γ)
42+ α42 = ((- 2 θ + 3 θ^ 2 ) + (6 θ * (1 - θ) / c2) * γ)
43+
44+ ea21 = convert (T, 0.871733043016918 )
45+ ea31 = convert (T, 0.5275890119763004 )
46+ ea32 = convert (T, 0.0724109880236996 )
47+ ea41 = convert (T, 0.3990960076760701 )
48+ ea42 = - convert (T, 0.4375576546135194 )
49+ ea43 = convert (T, 1.0384616469374492 )
50+ eb1 = convert (T, 0.18764102434672383 )
51+ eb2 = - convert (T, 0.595297473576955 )
52+ eb3 = convert (T, 0.9717899277217721 )
53+ eb4 = convert (T, 0.435866521508459 )
54+ ebtilde1 = convert (T, 0.027099261876665316 )
55+ ebtilde2 = convert (T, 0.11013520969201586 )
56+ ebtilde3 = - convert (T, 0.10306492520138458 )
57+ ebtilde4 = - convert (T, 0.0341695463672966 )
58+
59+ s = 4
60+ Ai = zeros (T, s, s)
61+ Ai[2 , 1 ] = γ
62+ Ai[2 , 2 ] = γ
63+ Ai[3 , 1 ] = a31
64+ Ai[3 , 2 ] = a32
65+ Ai[3 , 3 ] = γ
66+ Ai[4 , 1 ] = a41
67+ Ai[4 , 2 ] = a42
68+ Ai[4 , 3 ] = a43
69+ Ai[4 , 4 ] = γ
70+
71+ bi_vec = zeros (T, s)
72+ bi_vec[1 ] = a41
73+ bi_vec[2 ] = a42
74+ bi_vec[3 ] = a43
75+ bi_vec[4 ] = γ
76+
77+ Ae = zeros (T, s, s)
78+ Ae[2 , 1 ] = ea21
79+ Ae[3 , 1 ] = ea31
80+ Ae[3 , 2 ] = ea32
81+ Ae[4 , 1 ] = ea41
82+ Ae[4 , 2 ] = ea42
83+ Ae[4 , 3 ] = ea43
84+
85+ be_vec = zeros (T, s)
86+ be_vec[1 ] = eb1
87+ be_vec[2 ] = eb2
88+ be_vec[3 ] = eb3
89+ be_vec[4 ] = eb4
90+
91+ c_vec = zeros (T2, s)
92+ c_vec[1 ] = zero (T2)
93+ c_vec[2 ] = convert (T2, 2 γ)
94+ c_vec[3 ] = c3
95+ c_vec[4 ] = one (T2)
96+
97+ btilde_vec = zeros (T, s)
98+ btilde_vec[1 ] = btilde1
99+ btilde_vec[2 ] = btilde2
100+ btilde_vec[3 ] = btilde3
101+ btilde_vec[4 ] = btilde4
102+
103+ ebtilde_vec = zeros (T, s)
104+ ebtilde_vec[1 ] = ebtilde1
105+ ebtilde_vec[2 ] = ebtilde2
106+ ebtilde_vec[3 ] = ebtilde3
107+ ebtilde_vec[4 ] = ebtilde4
108+
109+ α_mat = zeros (T2, s, s)
110+ α_mat[3 , 1 ] = α31
111+ α_mat[3 , 2 ] = α32
112+ α_mat[4 , 1 ] = α41
113+ α_mat[4 , 2 ] = α42
114+
115+ return IMEXTableau (
116+ Ai, bi_vec, Ae, be_vec, c_vec,
117+ btilde_vec, ebtilde_vec, α_mat, 3 , s
118+ )
119+ end
120+
14121function KenCarp3IMEXTableau (T, T2)
15122 γ = convert (T, 1767732205903 // 4055673282236 )
16123
@@ -143,19 +250,23 @@ function KenCarp3IMEXTableau(T, T2)
143250 )
144251end
145252
146- function ARS343Tableau (T, T2)
147- γ = convert (T, 4358665215084590 // 10000000000000000 )
253+ #
254+ # ARS343 Tableau
255+ #
256+
257+ function ARS343Tableau (T:: Type{<:CompiledFloats} , T2:: Type{<:CompiledFloats} )
258+ γ = convert (T, 0.435866521508459 )
148259
149260 s = 4
150261
151- c2 = γ
152- c3 = ( one (T2) + convert (T2, γ)) / 2
262+ c2 = convert (T2, 0.435866521508459 )
263+ c3 = convert (T2, 0.7179332607542295 )
153264 c4 = one (T2)
154265
155- a32_i = ( one (T) - γ) / 2
266+ a32_i = convert (T, 0.2820667392457705 )
156267
157- b3_i = ( one (T) / 2 - 2 γ + γ ^ 2 ) / (( one (T) - γ) / 2 )
158- b2_i = one (T) - γ - b3_i
268+ b3_i = convert (T, - 0.644363170684469 )
269+ b2_i = convert (T, 1.20849664917601 )
159270
160271 Ai = zeros (T, s, s)
161272 Ai[2 , 2 ] = γ
@@ -167,7 +278,67 @@ function ARS343Tableau(T, T2)
167278
168279 bi_vec = T[zero (T), b2_i, b3_i, γ]
169280
170- ae21 = γ
281+ ae21 = convert (T, 0.435866521508459 )
282+ ae31 = convert (T, 0.321278886 )
283+ ae32 = convert (T, 0.3966543748 )
284+ ae41 = - convert (T, 0.105858296 )
285+ ae42 = convert (T, 0.5529291479 )
286+ ae43 = convert (T, 0.5529291479 )
287+
288+ Ae = zeros (T, s, s)
289+ Ae[2 , 1 ] = ae21
290+ Ae[3 , 1 ] = ae31
291+ Ae[3 , 2 ] = ae32
292+ Ae[4 , 1 ] = ae41
293+ Ae[4 , 2 ] = ae42
294+ Ae[4 , 3 ] = ae43
295+
296+ be_vec = T[zero (T), b2_i, b3_i, γ]
297+
298+ c_vec = T2[zero (T2), c2, c3, c4]
299+
300+ btilde_vec = T[
301+ zero (T), convert (T, 1.20849664917601 ), convert (T, - 0.644363170684469 ),
302+ convert (T, - 0.564133478491541 ),
303+ ]
304+ ebtilde_vec = T[
305+ zero (T), convert (T, 1.20849664917601 ), convert (T, - 0.644363170684469 ),
306+ convert (T, - 0.564133478491541 ),
307+ ]
308+
309+ α_mat = zeros (T2, s, s)
310+
311+ return IMEXTableau (
312+ Ai, bi_vec, Ae, be_vec, c_vec,
313+ btilde_vec, ebtilde_vec, α_mat, 3 , s
314+ )
315+ end
316+
317+ function ARS343Tableau (T, T2)
318+ γ = convert (T, 4358665215084590 // 10000000000000000 )
319+
320+ s = 4
321+
322+ c2 = convert (T2, γ)
323+ c3 = (one (T2) + convert (T2, γ)) / 2
324+ c4 = one (T2)
325+
326+ a32_i = (one (T) - γ) / 2
327+
328+ b3_i = (one (T) / 2 - 2 γ + γ^ 2 ) / ((one (T) - γ) / 2 )
329+ b2_i = one (T) - γ - b3_i
330+
331+ Ai = zeros (T, s, s)
332+ Ai[2 , 2 ] = convert (T, γ)
333+ Ai[3 , 2 ] = convert (T, a32_i)
334+ Ai[3 , 3 ] = convert (T, γ)
335+ Ai[4 , 2 ] = convert (T, b2_i)
336+ Ai[4 , 3 ] = convert (T, b3_i)
337+ Ai[4 , 4 ] = convert (T, γ)
338+
339+ bi_vec = T[zero (T), convert (T, b2_i), convert (T, b3_i), convert (T, γ)]
340+
341+ ae21 = convert (T, γ)
171342 ae31 = convert (T, 3212788860 // 10000000000 )
172343 ae32 = convert (T, 3966543748 // 10000000000 )
173344 ae41 = - convert (T, 1058582960 // 10000000000 )
@@ -182,9 +353,9 @@ function ARS343Tableau(T, T2)
182353 Ae[4 , 2 ] = ae42
183354 Ae[4 , 3 ] = ae43
184355
185- be_vec = T[zero (T), b2_i, b3_i, γ ]
356+ be_vec = T[zero (T), convert (T, b2_i), convert (T, b3_i), convert (T, γ) ]
186357
187- c_vec = T2[zero (T2), convert (T2, c2), c3, c4 ]
358+ c_vec = T2[zero (T2), convert (T2, c2), convert (T2, c3), convert (T2, c4) ]
188359
189360 btilde_vec = bi_vec .- T[zero (T), zero (T), zero (T), one (T)]
190361 ebtilde_vec = be_vec .- T[zero (T), zero (T), zero (T), one (T)]
0 commit comments