Skip to content
Snippets Groups Projects
Commit 6c245a13 authored by Florian Atteneder's avatar Florian Atteneder
Browse files

add specialized equations for the rescaled GRHD version

parent d14ab9d5
No related branches found
No related tags found
1 merge request!101Refactor GRHD project
This commit is part of merge request !101. Comments created here will be created in the context of that merge request.
......@@ -260,6 +260,176 @@ end
end
@with_signature function flux_source_rescaled_spherical1d(eq::Equation)
@accepts D, Sr, τ, ϵ, ρ, p, vr
@accepts A, ∂Ar, B, ∂Br, r
γuurr = 1/B^2
vru = γuurr * vr
B3 = B^3
flr_rD = r*A*B3 * D * vru
flr_rSr = r*A*B3 * (Sr*vru + p)
flr_rτ = r*A*B3 * (τ + p) * vru
src_rD = - A*B3 * D * vru
src_rSr = -(τ+p)*r*B3*∂Ar + A*B^2*(r*∂Br+B/3)*(Sr*vru+3*p) - 4/3*A*B3*Sr*vru
src_rτ = -r*B*Sr*∂Ar - A*B3*(τ+p)*vru
@returns src_rD, src_rSr, src_rτ, flr_rD, flr_rSr, flr_rτ
end
@with_signature function maxspeed_rescaled_spherical1d(equation::Equation)
@accepts vr, ρ, ϵ
@accepts B, A
@unpack eos = equation
cs2 = eos(SquareSpeedOfSound, Density, ρ, InternalEnergy, ϵ)
cs = sqrt(abs(cs2))
γuurr = 1/B^2
vru = γuurr * vr
v2 = vru*vr
λ0 = A*vru
W = 1/sqrt(1-v2)
λp = A/(1-v2)*(vru*(1-cs2)+cs/W*sqrt((1-v2*cs2)*γuurr-vru^2*(1-cs2)))
λm = A/(1-v2)*(vru*(1-cs2)-cs/W*sqrt((1-v2*cs2)*γuurr-vru^2*(1-cs2)))
max_v = absmax(λm, λ0, λp)
@returns max_v
end
@with_signature function llf_rescaled_spherical1d(equation::Equation)
@accepts D, flr_rD, Sr, flr_rSr, τ, flr_rτ, max_v, p
@accepts A, B, r
@accepts [bdry] bdry_D, bdry_Sr, bdry_τ, bdry_max_v, bdry_vr, bdry_p
@accepts [bdry] nx
vmax = absmax(max_v, bdry_max_v)
γuurr = 1/B^2
bdry_vru = γuurr * bdry_vr
B3 = B^3
rD = r*B3*D
rSr = r*B3*Sr
= r*B3*τ
bdry_rD = r*B3*bdry_D
bdry_rSr = r*B3*bdry_Sr
bdry_rτ = r*B3*bdry_τ
bdry_flr_rD = r*A*B3 * bdry_D * bdry_vru
bdry_flr_rSr = r*A*B3 * ( bdry_Sr * bdry_vru + bdry_p )
bdry_flr_rτ = r*A*B3 * ( (bdry_τ + bdry_p) * bdry_vru )
nflr = nx*flr_rD
bdry_nflr = nx*bdry_flr_rD
nflr_rD = LLF(nflr, bdry_nflr, rD, bdry_rD, vmax)
nflr = nx*flr_rSr
bdry_nflr = nx*bdry_flr_rSr
nflr_rSr = LLF(nflr, bdry_nflr, rSr, bdry_rSr, vmax)
nflr = nx*flr_rτ
bdry_nflr = nx*bdry_flr_rτ
nflr_rτ = LLF(nflr, bdry_nflr, , bdry_rτ, vmax)
@returns [bdry] nflr_rD, nflr_rSr, nflr_rτ
end
@with_signature function bdryllf_rescaled_spherical1d(equation::Equation)
@accepts D, flr_rD, Sr, flr_rSr, τ, flr_rτ, max_v, vr, p
@accepts init_D, init_Sr, init_τ, init_vr, init_max_v, init_p
@accepts A, B, r
@accepts [bdry] nx
vmax = absmax(max_v, init_max_v)
γuurr = 1/B^2
init_vru = γuurr * init_vr
vru = γuurr * vr
# enforce dirichlet/neumann conditions following stability analysis
# see dg-notes/tex/evm.pdf
# Hesthaven, Numerical Methods for Conservation Laws uses same logic
# Dirichlet conditions
# ## if block for hand-tweaked outflow condition for bondi accretion at inner radius
# if nx > 0
bdry_D = -D + 2*init_D
bdry_Sr = -Sr + 2*init_Sr
bdry_τ = -τ + 2*init_τ
bdry_vru = -vru + 2*init_vru
bdry_p = -p + 2*init_p
# else
# bdry_D = D
# bdry_Sr = Sr
# bdry_τ = τ
# bdry_vru = vru
# bdry_p = p
# end
# Neumann conditions
# bdry_D = D
# bdry_Sr = Sr
# bdry_τ = τ
B3 = B^3
rD = r*B3*D
rSr = r*B3*Sr
= r*B3*τ
bdry_rD = r*B3*bdry_D
bdry_rSr = r*B3*bdry_Sr
bdry_rτ = r*B3*bdry_τ
bdry_flr_rD = r*A*B3 * bdry_D * bdry_vru
bdry_flr_rSr = r*A*B3 * ( bdry_Sr * bdry_vru + bdry_p )
bdry_flr_rτ = r*A*B3 * ( (bdry_τ + bdry_p) * bdry_vru )
nflr = nx*flr_rD
bdry_nflr = nx*bdry_flr_rD
nflr_rD = LLF(nflr, bdry_nflr, rD, bdry_rD, vmax)
nflr = nx*flr_rSr
bdry_nflr = nx*bdry_flr_rSr
nflr_rSr = LLF(nflr, bdry_nflr, rSr, bdry_rSr, vmax)
nflr = nx*flr_rτ
bdry_nflr = nx*bdry_flr_rτ
nflr_rτ = LLF(nflr, bdry_nflr, , bdry_rτ, vmax)
@returns [bdry] nflr_rD, nflr_rSr, nflr_rτ
end
@with_signature function unscale_conservatives(equation::Equation)
@accepts rD, rSr,
@accepts r, B
B3 = B^3
D = rD/(r*B3)
Sr = rSr/(r*B3)
τ = /(r*B3)
@returns D, Sr, τ
end
function impose_symmetry!(equations::Equation, mesh::Mesh)
@unpack cache = mesh
@unpack D, Sr, τ = get_static_variables(cache)
L = layout(mesh)
Npts, _ = L
vD = dg1d.vreshape(D, L)
vSr = dg1d.vreshape(Sr, L)
= dg1d.vreshape(τ, L)
# symmetric variables are interpolated such that derivative vanishes at r=0
for var in (vD, )
tmp = 0
for j = 2:Npts
tmp += mesh.element.D[1,j] * var[j,1]
end
var[1,1] = -tmp/mesh.element.D[1,1]
end
# asymmetric variables are set to zero at r=0
Sr[1] = 0
return
end
# @with_signature function flux(equation::Equation)
# @accepts sD, sSr, stau, p, rho, vr, eps, A, B, r
......
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