Skip to content

Commit c6dd1e5

Browse files
Cleanup and fix names
1 parent f7e410e commit c6dd1e5

File tree

4 files changed

+37
-39
lines changed

4 files changed

+37
-39
lines changed

src/ClimaTimeSteppers.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ using LinearOperators
5151
using StaticArrays
5252
using CUDA
5353

54+
export AbstractIMEXARKTableau
55+
5456
array_device(::Union{Array, SArray, MArray}) = CPU()
5557
array_device(::CuArray) = CUDADevice()
5658
realview(x::Union{Array, SArray, MArray}) = x

src/functions.jl

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,18 @@
1-
export ForwardEulerODEFunction
1+
import DiffEqBase
2+
export ClimaODEFunction, ForwardEulerODEFunction
3+
4+
Base.@kwdef struct ClimaODEFunction{TL, TE, TI, L, D, S} <: DiffEqBase.AbstractODEFunction{true}
5+
T_lim!::TL = nothing # nothing or (uₜ, u, p, t) -> ...
6+
T_exp!::TE = nothing # nothing or (uₜ, u, p, t) -> ...
7+
T_imp!::TI = nothing # nothing or (uₜ, u, p, t) -> ...
8+
lim!::L = (u, p, t, u_ref) -> nothing
9+
dss!::D = (u, p, t) -> nothing
10+
stage_callback!::S = (u, p, t) -> nothing
11+
end
12+
13+
# Don't wrap a ClimaODEFunction in an ODEFunction (makes ODEProblem work).
14+
DiffEqBase.ODEFunction{iip}(f::ClimaODEFunction) where {iip} = f
15+
DiffEqBase.ODEFunction(f::ClimaODEFunction) = f
216

317
"""
418
ForwardEulerODEFunction(f; jac_prototype, Wfact, tgrad)

src/solvers/imex_ark.jl

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,4 @@
1-
export ClimaODEFunction, IMEXARKAlgorithm, ARS343
2-
3-
Base.@kwdef struct ClimaODEFunction{TL, TE, TI, L, D, S} <: DiffEqBase.AbstractODEFunction{true}
4-
T_lim!::TL = nothing # nothing or (uₜ, u, p, t) -> ...
5-
T_exp!::TE = nothing # nothing or (uₜ, u, p, t) -> ...
6-
T_imp!::TI = nothing # nothing or (uₜ, u, p, t) -> ...
7-
lim!::L = (u, p, t, u_ref) -> nothing
8-
dss!::D = (u, p, t) -> nothing
9-
stage_callback!::S = (u, p, t) -> nothing
10-
end
11-
12-
# Don't wrap a ClimaODEFunction in an ODEFunction (makes ODEProblem work).
13-
DiffEqBase.ODEFunction{iip}(f::ClimaODEFunction) where {iip} = f
14-
DiffEqBase.ODEFunction(f::ClimaODEFunction) = f
1+
export IMEXARKAlgorithm
152

163
"""
174
IMEXARKAlgorithm(

src/solvers/imex_ark_tableaus.jl

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
export AbstractIMEXARKTableau
21
export ARS111, ARS121, ARS122, ARS233, ARS232, ARS222, ARS343, ARS443
32
export IMKG232a, IMKG232b, IMKG242a, IMKG242b, IMKG252a, IMKG252b
43
export IMKG253a, IMKG253b, IMKG254a, IMKG254b, IMKG254c, IMKG342a, IMKG343a
@@ -230,7 +229,7 @@ end
230229
imkg_exp(i, j, α, β) = i == j + 1 ? α[j] : (i > 2 && j == 1 ? β[i - 2] : 0)
231230
imkg_imp(i, j, α̂, β, δ̂) =
232231
i == j + 1 ? α̂[j] : (i > 2 && j == 1 ? β[i - 2] : (1 < i <= length(α̂) && i == j ? δ̂[i - 1] : 0))
233-
function make_IMKGAlgorithm(α, α̂, δ̂, β = ntuple(_ -> 0, length(δ̂)))
232+
function make_IMKGTableau(α, α̂, δ̂, β = ntuple(_ -> 0, length(δ̂)))
234233
s = length(α̂) + 1
235234
type = SMatrix{s, s}
236235
return IMEXARKTableau(;
@@ -241,48 +240,44 @@ end
241240

242241
struct IMKG232a <: AbstractIMEXARKTableau end
243242
function tableau(::IMKG232a)
244-
make_IMKGAlgorithm((1 / 2, 1 / 2, 1), (0, -1 / 2 + 2 / 2, 1), (1 - 2 / 2, 1 - 2 / 2))
243+
make_IMKGTableau((1 / 2, 1 / 2, 1), (0, -1 / 2 + 2 / 2, 1), (1 - 2 / 2, 1 - 2 / 2))
245244
end
246245

247246
struct IMKG232b <: AbstractIMEXARKTableau end
248247
function tableau(::IMKG232b)
249-
make_IMKGAlgorithm((1 / 2, 1 / 2, 1), (0, -1 / 2 - 2 / 2, 1), (1 + 2 / 2, 1 + 2 / 2))
248+
make_IMKGTableau((1 / 2, 1 / 2, 1), (0, -1 / 2 - 2 / 2, 1), (1 + 2 / 2, 1 + 2 / 2))
250249
end
251250

252251
struct IMKG242a <: AbstractIMEXARKTableau end
253252
function tableau(::IMKG242a)
254-
make_IMKGAlgorithm((1 / 4, 1 / 3, 1 / 2, 1), (0, 0, -1 / 2 + 2 / 2, 1), (0, 1 - 2 / 2, 1 - 2 / 2))
253+
make_IMKGTableau((1 / 4, 1 / 3, 1 / 2, 1), (0, 0, -1 / 2 + 2 / 2, 1), (0, 1 - 2 / 2, 1 - 2 / 2))
255254
end
256255

257256
struct IMKG242b <: AbstractIMEXARKTableau end
258257
function tableau(::IMKG242b)
259-
make_IMKGAlgorithm((1 / 4, 1 / 3, 1 / 2, 1), (0, 0, -1 / 2 - 2 / 2, 1), (0, 1 + 2 / 2, 1 + 2 / 2))
258+
make_IMKGTableau((1 / 4, 1 / 3, 1 / 2, 1), (0, 0, -1 / 2 - 2 / 2, 1), (0, 1 + 2 / 2, 1 + 2 / 2))
260259
end
261260

262261
# The paper uses √3/6 for α̂[3], which also seems to work.
263262
struct IMKG243a <: AbstractIMEXARKTableau end
264263
function tableau(::IMKG243a)
265-
make_IMKGAlgorithm(
266-
(1 / 4, 1 / 3, 1 / 2, 1),
267-
(0, 1 / 6, -√3 / 6, 1),
268-
(1 / 2 + 3 / 6, 1 / 2 + 3 / 6, 1 / 2 + 3 / 6),
269-
)
264+
make_IMKGTableau((1 / 4, 1 / 3, 1 / 2, 1), (0, 1 / 6, -√3 / 6, 1), (1 / 2 + 3 / 6, 1 / 2 + 3 / 6, 1 / 2 + 3 / 6))
270265
end
271266

272267
struct IMKG252a <: AbstractIMEXARKTableau end
273268
function tableau(::IMKG252a)
274-
make_IMKGAlgorithm((1 / 4, 1 / 6, 3 / 8, 1 / 2, 1), (0, 0, 0, -1 / 2 + 2 / 2, 1), (0, 0, 1 - 2 / 2, 1 - 2 / 2))
269+
make_IMKGTableau((1 / 4, 1 / 6, 3 / 8, 1 / 2, 1), (0, 0, 0, -1 / 2 + 2 / 2, 1), (0, 0, 1 - 2 / 2, 1 - 2 / 2))
275270
end
276271

277272
struct IMKG252b <: AbstractIMEXARKTableau end
278273
function tableau(::IMKG252b)
279-
make_IMKGAlgorithm((1 / 4, 1 / 6, 3 / 8, 1 / 2, 1), (0, 0, 0, -1 / 2 - 2 / 2, 1), (0, 0, 1 + 2 / 2, 1 + 2 / 2))
274+
make_IMKGTableau((1 / 4, 1 / 6, 3 / 8, 1 / 2, 1), (0, 0, 0, -1 / 2 - 2 / 2, 1), (0, 0, 1 + 2 / 2, 1 + 2 / 2))
280275
end
281276

282277
# The paper uses 0.08931639747704086 for α̂[3], which also seems to work.
283278
struct IMKG253a <: AbstractIMEXARKTableau end
284279
function tableau(::IMKG253a)
285-
make_IMKGAlgorithm(
280+
make_IMKGTableau(
286281
(1 / 4, 1 / 6, 3 / 8, 1 / 2, 1),
287282
(0, 0, 3 / 4 * (1 - 3 / 3) * ((1 + 3 / 3)^2 - 2), 3 / 6, 1),
288283
(0, 1 / 2 - 3 / 6, 1 / 2 - 3 / 6, 1 / 2 - 3 / 6),
@@ -292,7 +287,7 @@ end
292287
# The paper uses 1.2440169358562922 for α̂[3], which also seems to work.
293288
struct IMKG253b <: AbstractIMEXARKTableau end
294289
function tableau(::IMKG253b)
295-
make_IMKGAlgorithm(
290+
make_IMKGTableau(
296291
(1 / 4, 1 / 6, 3 / 8, 1 / 2, 1),
297292
(0, 0, 3 / 4 * (1 + 3 / 3) * ((1 - 3 / 3)^2 - 2), -√3 / 6, 1),
298293
(0, 1 / 2 + 3 / 6, 1 / 2 + 3 / 6, 1 / 2 + 3 / 6),
@@ -301,31 +296,31 @@ end
301296

302297
struct IMKG254a <: AbstractIMEXARKTableau end
303298
function tableau(::IMKG254a)
304-
make_IMKGAlgorithm((1 / 4, 1 / 6, 3 / 8, 1 / 2, 1), (0, -3 / 10, 5 / 6, -3 / 2, 1), (-1 / 2, 1, 1, 2))
299+
make_IMKGTableau((1 / 4, 1 / 6, 3 / 8, 1 / 2, 1), (0, -3 / 10, 5 / 6, -3 / 2, 1), (-1 / 2, 1, 1, 2))
305300
end
306301

307302
struct IMKG254b <: AbstractIMEXARKTableau end
308303
function tableau(::IMKG254b)
309-
make_IMKGAlgorithm((1 / 4, 1 / 6, 3 / 8, 1 / 2, 1), (0, -1 / 20, 5 / 4, -1 / 2, 1), (-1 / 2, 1, 1, 1))
304+
make_IMKGTableau((1 / 4, 1 / 6, 3 / 8, 1 / 2, 1), (0, -1 / 20, 5 / 4, -1 / 2, 1), (-1 / 2, 1, 1, 1))
310305
end
311306

312307
struct IMKG254c <: AbstractIMEXARKTableau end
313308
function tableau(::IMKG254c)
314-
make_IMKGAlgorithm((1 / 4, 1 / 6, 3 / 8, 1 / 2, 1), (0, 1 / 20, 5 / 36, 1 / 3, 1), (1 / 6, 1 / 6, 1 / 6, 1 / 6))
309+
make_IMKGTableau((1 / 4, 1 / 6, 3 / 8, 1 / 2, 1), (0, 1 / 20, 5 / 36, 1 / 3, 1), (1 / 6, 1 / 6, 1 / 6, 1 / 6))
315310
end
316311

317312
# The paper and HOMME completely disagree on this algorithm. Since the version
318313
# in the paper is not "342" (it appears to be "332"), the version from HOMME is
319314
# used here.
320-
# const IMKG342a = make_IMKGAlgorithm(
315+
# const IMKG342a = make_IMKGTableau(
321316
# (0, 1/3, 1/3, 3/4),
322317
# (0, -1/6 - √3/6, -1/6 - √3/6, 3/4),
323318
# (0, 1/2 + √3/6, 1/2 + √3/6),
324319
# (1/3, 1/3, 1/4),
325320
# )
326321
struct IMKG342a <: AbstractIMEXARKTableau end
327322
function tableau(::IMKG342a)
328-
make_IMKGAlgorithm(
323+
make_IMKGTableau(
329324
(1 / 4, 2 / 3, 1 / 3, 3 / 4),
330325
(0, 1 / 6 - 3 / 6, -1 / 6 - 3 / 6, 3 / 4),
331326
(0, 1 / 2 + 3 / 6, 1 / 2 + 3 / 6),
@@ -335,14 +330,14 @@ end
335330

336331
struct IMKG343a <: AbstractIMEXARKTableau end
337332
function tableau(::IMKG343a)
338-
make_IMKGAlgorithm((1 / 4, 2 / 3, 1 / 3, 3 / 4), (0, -1 / 3, -2 / 3, 3 / 4), (-1 / 3, 1, 1), (0, 1 / 3, 1 / 4))
333+
make_IMKGTableau((1 / 4, 2 / 3, 1 / 3, 3 / 4), (0, -1 / 3, -2 / 3, 3 / 4), (-1 / 3, 1, 1), (0, 1 / 3, 1 / 4))
339334
end
340335

341336
# The paper and HOMME completely disagree on this algorithm, but neither version
342337
# is "353" (they appear to be "343" and "354", respectively).
343338
# struct IMKG353a <: AbstractIMEXARKTableau end
344339
# function tableau(::IMKG353a)
345-
# make_IMKGAlgorithm(
340+
# make_IMKGTableau(
346341
# (1/4, 2/3, 1/3, 3/4),
347342
# (0, -359/600, -559/600, 3/4),
348343
# (-1.1678009811335388, 253/200, 253/200),
@@ -351,7 +346,7 @@ end
351346
# end
352347
# struct IMKG353a <: AbstractIMEXARKTableau end
353348
# function tableau(::IMKG353a)
354-
# make_IMKGAlgorithm(
349+
# make_IMKGTableau(
355350
# (-0.017391304347826087, -23/25, 5/3, 1/3, 3/4),
356351
# (0.3075640504095504, -1.2990164859879263, 751/600, -49/60, 3/4),
357352
# (-0.2981612530370581, 83/200, 83/200, 23/20),
@@ -365,7 +360,7 @@ end
365360
# for IMKG354a is not specified).
366361
# struct IMKG354a <: AbstractIMEXARKTableau end
367362
# function tableau(::IMKG354a)
368-
# make_IMKGAlgorithm(
363+
# make_IMKGTableau(
369364
# (1/5, 1/5, 2/3, 1/3, 3/4),
370365
# (0, 0, 11/30, -2/3, 3/4),
371366
# (0, 2/4, 2/5, 1),

0 commit comments

Comments
 (0)