Skip to content
Snippets Groups Projects

Refactor GRHD project

Merged Florian Atteneder requested to merge fa/grhd into main
1 file
+ 21
0
Compare changes
  • Side-by-side
  • Inline
+ 36
1
@@ -404,6 +404,41 @@ norm_L2(u, mesh::Mesh) = sqrt(broken_inner_product(u, u, mesh))
norm_L1(u, mesh::Mesh) = broken_inner_product(abs.(u), ones(Float64, size(u)), mesh)
function differentiate!(du, u, mesh::Mesh1d)
@unpack invdetJ = get_static_variables(mesh.cache)
for (duk,uk,invdetJk) in zip(eachcell(mesh,du),eachcell(mesh,u),eachcell(mesh,invdetJ))
differentiate!(duk, uk, mesh.element)
duk .*= invdetJk
end
end
function differentiate!(du, u, mesh::Mesh1d{FVElement})
@unpack x, invdetJ = get_static_variables(mesh.cache)
K, = mesh.tree.dims
for k in 2:K-1
du[k] = (u[k+1]-u[k-1])/(x[k+1]-x[k-1])
end
x1, x2, x3 = x[1], x[2], x[3]
M = [ 1 x1 x1^2;
1 x2 x2^2;
1 x3 x3^2 ]
uu = u[1:3]
b = M \ uu
du[1] = b[2] + 2*b[3]*x1
x1, x2, x3 = x[end], x[end-1], x[end-2]
M = [ 1 x1 x1^2;
1 x2 x2^2;
1 x3 x3^2 ]
uu = u[end:-1:end-2]
b = M \ uu
du[end] = b[2] + 2*b[3]*x1
end
function differentiate(u, mesh)
du = similar(u)
differentiate!(du, u, mesh)
return du
end
"""
find_nearest(xi, mesh::Mesh)
@@ -571,7 +606,7 @@ end
struct CellDataIterator{M<:AbstractMesh,A<:AbstractArray}
mesh::M
data::A
data::A # TODO Replace with NTuple{N,A} to allow iterating multiple arrays at once
function CellDataIterator(m::AbstractMesh, a::AbstractArray)
@toggled_assert length(m) == length(a)
return new{typeof(m),typeof(a)}(m,a)
Loading