Skip to content
Snippets Groups Projects
Verified Commit 3080dfe7 authored by Florian Atteneder's avatar Florian Atteneder
Browse files

wip

parent 416e8bde
No related branches found
No related tags found
No related merge requests found
...@@ -30,7 +30,8 @@ const Mesh2d{Element} = Mesh{Element,2,4} ...@@ -30,7 +30,8 @@ const Mesh2d{Element} = Mesh{Element,2,4}
####################################################################### #######################################################################
function Mesh1d(; N=5, K=10, range=[-1.0,1.0], basis="lgl_lumped", periodic=(true,), scheme="DG", function Mesh1d(; N=5, K=10, range=[-1.0,1.0], periodic=(true,),
basis="lgl_lumped", dg_kind="nodal_legendre", scheme="DG",
filter_parameters=parameters(:Mesh)["filter_parameters"]) filter_parameters=parameters(:Mesh)["filter_parameters"])
@toggled_assert N > 0 @toggled_assert N > 0
...@@ -45,7 +46,7 @@ function Mesh1d(; N=5, K=10, range=[-1.0,1.0], basis="lgl_lumped", periodic=(tru ...@@ -45,7 +46,7 @@ function Mesh1d(; N=5, K=10, range=[-1.0,1.0], basis="lgl_lumped", periodic=(tru
# TODO Remove this after updating parameter names in SpectralElement # TODO Remove this after updating parameter names in SpectralElement
quadrature_method = Dict("lgl" => :LGL, "glgl" => :GLGL, "lgl_lumped" => :LGL_lumped)[basis] quadrature_method = Dict("lgl" => :LGL, "glgl" => :GLGL, "lgl_lumped" => :LGL_lumped)[basis]
ηc, sh, α = filter_parameters ηc, sh, α = filter_parameters
SpectralElement(N, Symbol(quadrature_method); ηc, sh, α) SpectralElement(N, Symbol(quadrature_method), Symbol(dg_kind); ηc, sh, α)
elseif scheme == "FV" elseif scheme == "FV"
FVElement() FVElement()
else else
...@@ -98,9 +99,8 @@ function Mesh1d(; N=5, K=10, range=[-1.0,1.0], basis="lgl_lumped", periodic=(tru ...@@ -98,9 +99,8 @@ function Mesh1d(; N=5, K=10, range=[-1.0,1.0], basis="lgl_lumped", periodic=(tru
end end
function Mesh2d(; N=[5,5], K=[4,4], range=[-1.0,1.0, -1.0,1.0], function Mesh2d(; N=[5,5], K=[4,4], range=[-1.0,1.0, -1.0,1.0], periodic=(true,true),
basis="lgl_lumped", periodic=(true,true), basis="lgl_lumped", dg_kind="nodal_legendre", scheme="DG",
scheme="DG",
filter_parameters=parameters(:Mesh)["filter_parameters"]) filter_parameters=parameters(:Mesh)["filter_parameters"])
@toggled_assert length(N) == 2 @toggled_assert length(N) == 2
...@@ -124,8 +124,8 @@ function Mesh2d(; N=[5,5], K=[4,4], range=[-1.0,1.0, -1.0,1.0], ...@@ -124,8 +124,8 @@ function Mesh2d(; N=[5,5], K=[4,4], range=[-1.0,1.0, -1.0,1.0],
# TODO Remove this after updating parameter names in SpectralElement # TODO Remove this after updating parameter names in SpectralElement
quadrature_method = Dict("lgl" => :LGL, "glgl" => :GLGL, "lgl_lumped" => :LGL_lumped)[basis] quadrature_method = Dict("lgl" => :LGL, "glgl" => :GLGL, "lgl_lumped" => :LGL_lumped)[basis]
ηc, sh, α = filter_parameters ηc, sh, α = filter_parameters
element_x = SpectralElement(Nx, Symbol(quadrature_method); ηc, sh, α) element_x = SpectralElement(Nx, Symbol(quadrature_method), Symbol(dg_kind); ηc, sh, α)
element_y = SpectralElement(Ny, Symbol(quadrature_method); ηc, sh, α) element_y = SpectralElement(Ny, Symbol(quadrature_method), Symbol(dg_kind); ηc, sh, α)
elseif scheme == "FV" elseif scheme == "FV"
TODO() TODO()
element_x = FVElement() element_x = FVElement()
...@@ -235,12 +235,13 @@ function Mesh(; N=parameters(:Mesh)["n"], ...@@ -235,12 +235,13 @@ function Mesh(; N=parameters(:Mesh)["n"],
K=parameters(:Mesh)["k"], K=parameters(:Mesh)["k"],
range=parameters(:Mesh)["range"], range=parameters(:Mesh)["range"],
basis=parameters(:Mesh)["basis"], basis=parameters(:Mesh)["basis"],
dg_kind=parameters(:Mesh)["kind"],
periodic=parameters(:Mesh)["periodic"], periodic=parameters(:Mesh)["periodic"],
scheme=parameters(:Mesh)["scheme"], scheme=parameters(:Mesh)["scheme"],
filter_parameters=parameters(:Mesh)["filter_parameters"]) filter_parameters=parameters(:Mesh)["filter_parameters"])
dims = Int(length(range)/2) dims = Int(length(range)/2)
MType = dims == 1 ? Mesh1d : Mesh2d MType = dims == 1 ? Mesh1d : Mesh2d
return MType(; N, K, range, basis, periodic, scheme, filter_parameters) return MType(; N, K, range, basis, dg_kind, periodic, scheme, filter_parameters)
end end
...@@ -269,6 +270,7 @@ extends(m::Mesh,cell::Cell) = m.boxes[cell.index].extends ...@@ -269,6 +270,7 @@ extends(m::Mesh,cell::Cell) = m.boxes[cell.index].extends
function min_grid_spacing(m::Mesh{SpectralElement}) function min_grid_spacing(m::Mesh{SpectralElement})
# TODO Use nodal_points(m)
@unpack z = m.element @unpack z = m.element
ws = widths(m.boxes[1]) ws = widths(m.boxes[1])
minw = minimum(ws) minw = minimum(ws)
......
...@@ -36,35 +36,33 @@ struct SpectralElement ...@@ -36,35 +36,33 @@ struct SpectralElement
if quadr === :LGL if quadr === :LGL
qaudr_z, qaudr_w = LGL.rule(Npts); qaudr_v = -1.0 # unused here qaudr_z, qaudr_w = LGL.rule(Npts); qaudr_v = -1.0 # unused here
purge_zeros!(qaudr_z) purge_zeros!(qaudr_z)
z = quadr_z
D = first_derivative_matrix(z)
S = LGL.stiffness_matrix(Npts) S = LGL.stiffness_matrix(Npts)
invM = LGL.inverse_mass_matrix_exact(Npts) invM = LGL.inverse_mass_matrix_exact(Npts)
elseif quadr === :LGL_lumped elseif quadr === :LGL_lumped
quadr_z, quadr_w = LGL.rule(Npts); quadr_v = -1.0 # unused here quadr_z, quadr_w = LGL.rule(Npts); quadr_v = -1.0 # unused here
purge_zeros!(quadr_z) purge_zeros!(quadr_z)
z = quadr_z
D = first_derivative_matrix(z)
S = LGL.stiffness_matrix(Npts) S = LGL.stiffness_matrix(Npts)
invM = LGL.inverse_mass_matrix_lumped(Npts) invM = LGL.inverse_mass_matrix_lumped(Npts)
elseif quadr === :GLGL elseif quadr === :GLGL
quadr_z, quadr_w, quadr_v = GLGL.rule(Npts) quadr_z, quadr_w, quadr_v = GLGL.rule(Npts)
purge_zeros!(quadr_z) purge_zeros!(quadr_z)
z = quadr_z quadr_D = first_derivative_matrix(quadr_z)
D = first_derivative_matrix(z) quadr_D2 = second_derivative_matrix(quadr_z)
D2 = second_derivative_matrix(z) M = GLGL.mass_matrix(quadr_z, quadr_w, quadr_v, quadr_D)
M = GLGL.mass_matrix(z, w, v, D) S = GLGL.stiffness_matrix(quadr_z, quadr_w, quadr_v, quadr_D, quadr_D2)
S = GLGL.stiffness_matrix(z, w, v, D, D2)
invM = inv(M) invM = inv(M)
else else
error("Invalid quadrature rule specified for kind $kind: $quadr. Use one of :LGL_lumped, :LGL, :GLGL.") error("Invalid quadrature rule specified for kind $kind: $quadr. Use one of :LGL_lumped, :LGL, :GLGL.")
end end
z = quadr_z
D = first_derivative_matrix(z)
quadr_D = D
l_lhs = zeros(Float64, N+1) l_lhs = zeros(Float64, N+1)
l_rhs = zeros(Float64, N+1) l_rhs = zeros(Float64, N+1)
l_lhs[1] = 1.0 l_lhs[1] = 1.0
l_rhs[end] = 1.0 l_rhs[end] = 1.0
quadr_D = D
V = vandermonde_matrix_legendre(z) V = vandermonde_matrix_legendre(z)
# In preparation for Bernstein basis
# elseif kind === :nodal_bernstein # elseif kind === :nodal_bernstein
# if quadr === :LGL || quadr === :LGL_lumped # if quadr === :LGL || quadr === :LGL_lumped
# qaudr_z, qaudr_w = LGL.rule(Npts) # qaudr_z, qaudr_w = LGL.rule(Npts)
...@@ -82,9 +80,11 @@ struct SpectralElement ...@@ -82,9 +80,11 @@ struct SpectralElement
# S = Bernstein.stiffness_matrix(Npts) # S = Bernstein.stiffness_matrix(Npts)
# invM = inv(M) # invM = inv(M)
# D = Bernstein.first_derivative_matrix(Npts) # D = Bernstein.first_derivative_matrix(Npts)
# D2 = Bernstein.second_derivative_matrix(Npts) # TODO("quadr_D")
# TODO("quadr_w")
# V = Bernstein.vandermonde_matrix(z) # V = Bernstein.vandermonde_matrix(z)
# I = stack(Bernstein.bernstein_polynomial.(quadr_z, i-1, N) for i in 1:Npts) # I = stack(Bernstein.bernstein_polynomial.(quadr_z, i-1, N) for i in 1:Npts)
# quadr_w = transpose(I) * quadr_w
# quadr_D = D * I # quadr_D = D * I
# l_lhs = zeros(Float64, N+1) # l_lhs = zeros(Float64, N+1)
# l_rhs = zeros(Float64, N+1) # l_rhs = zeros(Float64, N+1)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment