Skip to content

Commit 910ce0c

Browse files
committed
Tests passing - Release
1 parent 8e2fdaf commit 910ce0c

File tree

10 files changed

+119
-146
lines changed

10 files changed

+119
-146
lines changed

Manifest.toml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255"
455455
version = "7.1.1"
456456

457457
[[LinearAlgebra]]
458-
deps = ["Libdl"]
458+
deps = ["Libdl", "libblastrampoline_jll"]
459459
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
460460

461461
[[LogExpFunctions]]
@@ -571,6 +571,10 @@ git-tree-sha1 = "043017e0bdeff61cfbb7afeb558ab29536bbb5ed"
571571
uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
572572
version = "1.10.8"
573573

574+
[[OpenBLAS_jll]]
575+
deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
576+
uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
577+
574578
[[OpenLibm_jll]]
575579
deps = ["Artifacts", "Libdl"]
576580
uuid = "05823500-19ac-5b8b-9628-191a04bc5112"
@@ -659,7 +663,7 @@ deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
659663
uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
660664

661665
[[Random]]
662-
deps = ["Serialization"]
666+
deps = ["SHA", "Serialization"]
663667
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
664668

665669
[[RandomNumbers]]
@@ -972,6 +976,10 @@ git-tree-sha1 = "8c1a8e4dfacb1fd631745552c8db35d0deb09ea0"
972976
uuid = "700de1a5-db45-46bc-99cf-38207098b444"
973977
version = "0.2.2"
974978

979+
[[libblastrampoline_jll]]
980+
deps = ["Artifacts", "Libdl", "OpenBLAS_jll"]
981+
uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
982+
975983
[[nghttp2_jll]]
976984
deps = ["Artifacts", "Libdl"]
977985
uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"

Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e"
88
DomainSets = "5b8099bc-c8ec-5219-889f-1d9e522a28bf"
99
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
1010
ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
11+
NonlinearSolve = "8913a72c-1f9b-4ce2-8d82-65094dcecaec"
1112
OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
1213
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
1314
SciMLBase = "0bca4576-84f4-4d90-8ffe-ffa030f20462"

src/bcs/generate_bc_eqs.jl

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ function generate_maps(bcs, t, s, tspan, grid_align)
1818
depvarbcmaps = reduce(vcat,[subvar(depvar, edgevals(s)) .=> edgevar for (depvar, edgevar) in zip(s.vars, edgevars(s))])
1919
end
2020
# depvarderivbcmaps will dictate what to replace the Differential terms with in the bcs
21-
if length(s.params) == 1
21+
if length(s.nottime) == 1
2222
# 1D system
23-
bc_der_orders = filter(!iszero,sort(unique([count_differentials(bc.lhs, s.params[1]) for bc in bcs])))
23+
bc_der_orders = filter(!iszero,sort(unique([count_differentials(bc.lhs, s.nottime[1]) for bc in bcs])))
2424
left_weights(d_order,j) = calculate_weights(d_order, s.grid[j][1], s.grid[j][1:1+d_order])
2525
right_weights(d_order,j) = calculate_weights(d_order, s.grid[j][end], s.grid[j][end-d_order:end])
26-
# central_neighbor_idxs(II,j) = [II-CartesianIndex((1:length(s.params).==j)...),II,II+CartesianIndex((1:length(s.params).==j)...)]
26+
# central_neighbor_idxs(II,j) = [II-CartesianIndex((1:length(s.nottime).==j)...),II,II+CartesianIndex((1:length(s.nottime).==j)...)]
2727
left_idxs(d_order) = CartesianIndices(s.grid[1])[1:1+d_order]
2828
right_idxs(d_order,j) = CartesianIndices(s.grid[j])[end-d_order:end]
2929
# Constructs symbolic spatially discretized terms of the form e.g. au₂ - bu₁
@@ -32,7 +32,7 @@ function generate_maps(bcs, t, s, tspan, grid_align)
3232
subderivar(depvar,d_order,x) = substitute.(((Differential(x)^d_order)(depvar),), edgevals(s))
3333
# Create map of symbolic Differential terms with symbolic spatially discretized terms
3434
depvarderivbcmaps = []
35-
for x in s.params
35+
for x in s.nottime
3636
rs = (subderivar(depvar,bc_der_orders[j],x) .=> derivars[i][j] for j in 1:length(bc_der_orders), (i,depvar) in enumerate(s.vars))
3737
for r in rs
3838
push!(depvarderivbcmaps, r)
@@ -45,7 +45,7 @@ function generate_maps(bcs, t, s, tspan, grid_align)
4545
for depvar in s.discvars]
4646
# replace u(t,0) with (u₁ + u₂) / 2, etc
4747
depvarbcmaps = reduce(vcat,[subvar(depvar, edgevals(s)) .=> bcvars[i]
48-
for (i, depvar) in enumerate(s.vars) for param in s.params])
48+
for (i, depvar) in enumerate(s.vars) for param in s.nottime])
4949

5050
end
5151
else
@@ -62,7 +62,7 @@ function generate_maps(bcs, t, s, tspan, grid_align)
6262
end
6363

6464
# All unique order of derivates in BCs
65-
bc_der_orders = filter(!iszero,sort(unique([count_differentials(bc.lhs, s.params[1]) for bc in bcs])))
65+
bc_der_orders = filter(!iszero,sort(unique([count_differentials(bc.lhs, s.nottime[1]) for bc in bcs])))
6666
# no. of different orders in BCs
6767
n = length(bc_der_orders)
6868
return BoundaryMap(depvarbcmaps, DerivativeMap{n}(depvarderivbcmaps, bc_der_orders), initmaps)
@@ -72,8 +72,9 @@ end
7272
"""
7373
Mutates bceqs and u0 by finding relevant equations and discretizing them
7474
"""
75-
function generate_u0_and_bceqs!!(u0, bceqs, bcs, t, s, depvar_ops, tspan, discretization)
75+
function generate_u0_and_bceqs!!(u0, bceqs, bcs, s, depvar_ops, tspan, discretization)
7676
grid_align = discretization.grid_align
77+
t=discretization.time
7778
boundarymap = generate_maps(bcs, t, s, tspan, grid_align)
7879
# Generate initial conditions and bc equations
7980
for bc in bcs
@@ -94,19 +95,19 @@ function generate_u0_and_bceqs!!(u0, bceqs, bcs, t, s, depvar_ops, tspan, discre
9495
# Replace Differential terms in the bc lhs with the symbolic spatially discretized terms
9596
# TODO: Fix Neumann and Robin on higher dimension
9697
# Update: Fixed for 1D systems
97-
derivativecount = count_differentials(bc.lhs, s.params[1])
98+
derivativecount = count_differentials(bc.lhs, s.nottime[1])
9899
derivativeindex = findfirst(isequal(derivativecount), boundarymap.derivatives.orders)
99100
k = initindex%2 == 0 ? 2 : 1
100101

101-
if (length(s.params) == 1) && (derivativeindex !== nothing)
102+
if (length(s.nottime) == 1) && (derivativeindex !== nothing)
102103
lhs = substitute(bc.lhs, boundarymap.derivatives.map[derivativeindex + count(boundarymap.derivatives)*Int(floor((initindex-1)/2))][k])
103104
else
104105
lhs = bc.lhs
105106
end
106107

107108
# Replace symbol in the bc lhs with the spatial discretized term
108109
lhs = substitute(lhs,boundarymap.vars[initindex])
109-
rhs = substitute.((bc.rhs,), edgemaps(t, s)[bcargs])
110+
rhs = substitute.((bc.rhs,), edgemaps(s)[bcargs])
110111
lhs = lhs isa Vector ? lhs : [lhs] # handle 1D
111112
push!(bceqs,lhs .~ rhs)
112113
end

src/discretization/MOL_discretization.jl

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ struct MOLFiniteDifference{T,T2} <: DiffEqBase.AbstractDiscretization
1111
end
1212

1313
# Constructors. If no order is specified, both upwind and centered differences will be 2nd order
14-
MOLFiniteDifference(dxs, time; upwind_order = 1, centered_order = 2, grid_align=center_align) =
14+
MOLFiniteDifference(dxs, time=nothing; upwind_order = 1, centered_order = 2, grid_align=center_align) =
1515
MOLFiniteDifference(dxs, time, upwind_order, centered_order, grid_align)
1616

1717
function SciMLBase.symbolic_discretize(pdesys::PDESystem, discretization::MethodOfLines.MOLFiniteDifference)
@@ -63,7 +63,7 @@ function SciMLBase.symbolic_discretize(pdesys::PDESystem, discretization::Method
6363
indvars = first(allindvars)
6464
nspace = length(nottime)
6565

66-
s = DiscreteSpace(pdesys.domain, depvars, nottime, grid_align, discretization)
66+
s = DiscreteSpace(pdesys.domain, depvars, indvars, nottime, grid_align, discretization)
6767

6868
#---- Count Boundary Equations --------------------
6969
# Count the number of boundary equations that lie at the spatial boundary on
@@ -97,7 +97,6 @@ function SciMLBase.symbolic_discretize(pdesys::PDESystem, discretization::Method
9797

9898

9999
# Calculate buffers
100-
I1 = oneunit(first(s.Igrid))
101100
#TODO: Update this when allowing higher order derivatives to correctly deal with boundary upwinding
102101
interior = s.Igrid[[let bcs = get_bc_counts(i)
103102
(1 + first(bcs)):length(g)-last(bcs)
@@ -112,11 +111,11 @@ function SciMLBase.symbolic_discretize(pdesys::PDESystem, discretization::Method
112111
end
113112
# For all cartesian indices in the interior, generate finite difference rules
114113
eqs = vec(map(interior) do II
115-
rules = generate_finite_difference_rules(II, I1, s, pde, discretization)
114+
rules = generate_finite_difference_rules(II, s, pde, discretization)
116115
substitute(pde.lhs,rules) ~ substitute(pde.rhs,rules)
117116
end)
118117

119-
generate_u0_and_bceqs!!(u0, bceqs, pdesys.bcs, t, s, depvar_ops, tspan, discretization)
118+
generate_u0_and_bceqs!!(u0, bceqs, pdesys.bcs, s, depvar_ops, tspan, discretization)
120119
push!(alleqs,eqs)
121120
push!(alldepvarsdisc, reduce(vcat, s.discvars))
122121
end

src/discretization/discretize_vars.jl

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ end
66

77

88
@inline function get_edgevals(s, i)
9-
return [s.params[i] => first(s.axies[i]), s.params[i] => last(s.axies[i])]
9+
return [s.nottime[i] => first(s.axies[i]), s.nottime[i] => last(s.axies[i])]
1010
end
1111

1212
@inline function subvar(depvar, edge_vals)
@@ -15,7 +15,8 @@ end
1515
struct DiscreteSpace{N,M}
1616
vars
1717
discvars
18-
params # Note that these aren't necessarily @params
18+
nottime # Note that these aren't necessarily @parameters
19+
params
1920
axies
2021
grid
2122
dxs
@@ -24,7 +25,7 @@ struct DiscreteSpace{N,M}
2425
Iedge
2526
end
2627

27-
function DiscreteSpace(domain, depvars, nottime, grid_align, discretization)
28+
function DiscreteSpace(domain, depvars, indvars, nottime, grid_align, discretization)
2829
t = discretization.time
2930
nspace = length(nottime)
3031
# Discretize space
@@ -72,7 +73,7 @@ function DiscreteSpace(domain, depvars, nottime, grid_align, discretization)
7273
Iedge = reduce(vcat, [[vcat([Colon() for j = 1:i-1], 1, [Colon() for j = i+1:nspace]),
7374
vcat([Colon() for j = 1:i-1], length(axies[i]), [Colon() for j = i+1:nspace])] for i = 1:nspace])
7475

75-
return DiscreteSpace{nspace,length(depvars)}(depvars, depvarsdisc, nottime, axies, grid, dxs, Iaxies, Igrid, Iedge)
76+
return DiscreteSpace{nspace,length(depvars)}(depvars, depvarsdisc, nottime, indvars, axies, grid, dxs, Iaxies, Igrid, Iedge)
7677
end
7778

7879
nparams(::DiscreteSpace{N,M}) where {N,M} = N
@@ -82,19 +83,19 @@ grid_idxs(s::DiscreteSpace) = CartesianIndices(((axes(g)[1] for g in s.grid)...,
8283
edge_idxs(s::DiscreteSpace{N}) where {N} = reduce(vcat, [[vcat([Colon() for j = 1:i-1], 1, [Colon() for j = i+1:N]),
8384
vcat([Colon() for j = 1:i-1], length(s.axies[i]), [Colon() for j = i+1:N])] for i = 1:N])
8485

85-
axiesvals(s::DiscreteSpace{N}) where {N} = map(y -> [s.params[i] => s.axies[i][y.I[i]] for i = 1:N], s.Iaxies)
86-
gridvals(s::DiscreteSpace{N}) where {N} = map(y -> [s.params[i] => s.grid[i][y.I[i]] for i = 1:N], s.Igrid)
86+
axiesvals(s::DiscreteSpace{N}) where {N} = map(y -> [s.nottime[i] => s.axies[i][y.I[i]] for i = 1:N], s.Iaxies)
87+
gridvals(s::DiscreteSpace{N}) where {N} = map(y -> [s.nottime[i] => s.grid[i][y.I[i]] for i = 1:N], s.Igrid)
8788

8889
## Boundary methods ##
89-
edgevals(s::DiscreteSpace{N}) where {N} = reduce(vcat, [get_edgevals(s.params, s.axies, i) for i = 1:N])
90+
edgevals(s::DiscreteSpace{N}) where {N} = reduce(vcat, [get_edgevals(s.nottime, s.axies, i) for i = 1:N])
9091
edgevars(s::DiscreteSpace) = [[d[e...] for e in s.Iedge] for d in s.discvars]
9192

92-
@inline function edgemaps(t, s::DiscreteSpace)
93-
bclocs(s::DiscreteSpace) = map(e -> substitute.(vcat(t, s.params), e), edgevals(s))
93+
@inline function edgemaps(s::DiscreteSpace)
94+
bclocs(s::DiscreteSpace) = map(e -> substitute.(s.params, e), edgevals(s))
9495
return Dict(bclocs(s) .=> [axiesvals(s)[e...] for e in s.Iedge])
9596
end
9697

97-
map_symbolic_to_discrete(II::CartesianIndex, s::DiscreteSpace{N,M}) where {N,M} = vcat([s.vars[k] => s.discvars[k][II] for k = 1:M], [s.params[j] => s.grid[j][II[j]] for j = 1:N])
98+
map_symbolic_to_discrete(II::CartesianIndex, s::DiscreteSpace{N,M}) where {N,M} = vcat([s.vars[k] => s.discvars[k][II] for k = 1:M], [s.nottime[j] => s.grid[j][II[j]] for j = 1:N])
9899

99100

100101
#varmap(s::DiscreteSpace{N,M}) where {N,M} = [s.vars[i] => i for i = 1:M]

0 commit comments

Comments
 (0)