From 54071f659318ed9b3955548fb25a0cf233cfacd6 Mon Sep 17 00:00:00 2001 From: Florian Atteneder <florian.atteneder@uni-jena.de> Date: Thu, 25 Jul 2024 10:56:46 +0000 Subject: [PATCH] GRHD: add toggle to allow AV to sense based on the log10 of the variable (https://git.tpi.uni-jena.de/dg/dg1d.jl/-/merge_requests/190) Adds a new parameter to the `GRHD` section: - `av_sensor_logabs_D`: If `true` apply the AV sensor to `log(|D|)`, otherwise use `D`, where `D` is the state variable for the rest-mass density (including the volume factor). --- src/GRHD/GRHD.jl | 7 +++++ src/GRHD/callbacks.jl | 26 ++++++++++--------- src/GRHD/setup.jl | 9 ++++--- .../grhd_bondi_infall_avmda.toml | 1 + 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/GRHD/GRHD.jl b/src/GRHD/GRHD.jl index 21a0a31e..b4c8c6c7 100644 --- a/src/GRHD/GRHD.jl +++ b/src/GRHD/GRHD.jl @@ -132,6 +132,13 @@ dg1d.@parameters GRHD begin av_drag = 0.0 @check 0.0 <= av_drag <= 1.0 + """ + If `true` apply the AV sensor to `log(|D|)`, otherwise use `D`, + where `D` is the state variable for the rest-mass density (including the volume factor). + """ + av_sensor_abslog_D = false + @check av_mda_abslog_D isa Bool + """ For testing purposes. """ diff --git a/src/GRHD/callbacks.jl b/src/GRHD/callbacks.jl index 840fe355..265baf3e 100644 --- a/src/GRHD/callbacks.jl +++ b/src/GRHD/callbacks.jl @@ -331,24 +331,26 @@ function compute_hrsc(P, equation, mesh, hrsc::HRSC.AbstractArtificialViscosity) @unpack max_v, v, Ï, ϵ, v, p, r = get_static_variables(mesh) @unpack mu, tmp_mu, cellmax_v = get_cell_variables(mesh) @unpack t, tm1 = get_global_variables(mesh) + @unpack av_sensor_abslog_D = P.prms + @unpack av_u = get_static_variables(mesh) if formulation(P) === :doublecartoon @unpack rD = get_dynamic_variables(mesh) - @unpack abslog_rD = get_static_variables(mesh) - @. abslog_rD = log10.(abs.(rD)) + if av_sensor_abslog_D + @. av_u = log10(abs(rD)) + else + @. av_u = rD + end fill!(tmp_mu, 0.0) - HRSC.compute_viscosity!( - mu, tmp_mu, - (abslog_rD,), cellmax_v, - hrsc) + HRSC.compute_viscosity!(mu, av_u, cellmax_v, hrsc) elseif formulation(P) === :spherical1d @unpack D = get_dynamic_variables(mesh) - @unpack abslog_D = get_static_variables(mesh) - @. abslog_D = log10.(abs.(D)) + if av_sensor_abslog_D + @. av_u = log10(abs(D)) + else + @. av_u = D + end fill!(tmp_mu, 0.0) - HRSC.compute_viscosity!( - mu, tmp_mu, - (abslog_D,), cellmax_v, - hrsc) + HRSC.compute_viscosity!(mu, av_u, cellmax_v, hrsc) else TODO(formulation(P)) end diff --git a/src/GRHD/setup.jl b/src/GRHD/setup.jl index 2dc1b712..f7e18af8 100644 --- a/src/GRHD/setup.jl +++ b/src/GRHD/setup.jl @@ -27,6 +27,7 @@ function Project(env::Environment, prms) end av_drag = prms["GRHD"]["av_drag"] + av_sensor_abslog_D = Bool(prms["GRHD"]["av_sensor_abslog_D"]) slope_limiter_method = Symbol(prms["GRHD"]["slope_limiter_method"]) slope_limiter_tvb_M = prms["GRHD"]["slope_limiter_tvb_M"] c2p_dynamic_atm = prms["GRHD"]["c2p_dynamic_atm"] @@ -46,7 +47,7 @@ function Project(env::Environment, prms) bernstein, slope_limiter_method, slope_limiter_tvb_M, c2p_dynamic_atm, atm_evolve, c2p_set_atmosphere_on_failure, c2p_enforce_causal_atm, c2p_enforce_atm, - av_drag, problem, freeze_vars, + av_drag, av_sensor_abslog_D, problem, freeze_vars, id, bc, hrsc, fv_numerical_flux) # construct Project @@ -509,7 +510,7 @@ end function register_hrsc!(mesh, P::Project{:valencia1d}, hrsc::HRSC.AbstractArtificialViscosity) register_variables!(mesh, static_variablenames = (:ldg_rD, :ldg_rSr, :ldg_rÏ„, - :abslog_D, :abslog_Ï„), + :av_u), bdry_variablenames = (:bdry_ldg_rD, :bdry_ldg_rSr, :bdry_ldg_rÏ„, :bdry_smoothed_mu, :bdry_rhs_rD, :bdry_rhs_rSr, :bdry_rhs_rÏ„), @@ -525,7 +526,7 @@ end function register_hrsc!(mesh, P::Project{:spherical1d}, hrsc::HRSC.AbstractArtificialViscosity) register_variables!(mesh, static_variablenames = (:ldg_D, :ldg_Sr, :ldg_Ï„, - :abslog_D, :abslog_Ï„), + :av_u), bdry_variablenames = (:bdry_ldg_D, :bdry_ldg_Sr, :bdry_ldg_Ï„, :bdry_smoothed_mu, :bdry_rhs_D, :bdry_rhs_Sr, :bdry_rhs_Ï„), @@ -541,7 +542,7 @@ end function register_hrsc!(mesh, P::Project{:doublecartoon}, hrsc::HRSC.AbstractArtificialViscosity) register_variables!(mesh, static_variablenames = (:ldg_rD, :ldg_rSx, :ldg_rÏ„, - :abslog_rD), + :av_u), bdry_variablenames = (:bdry_ldg_rD, :bdry_ldg_rSx, :bdry_ldg_rÏ„, :bdry_smoothed_mu, :bdry_rhs_rD, :bdry_rhs_rSx, :bdry_rhs_rÏ„), diff --git a/test/IntegrationTests/refs/grhd_bondi_infall_avmda/grhd_bondi_infall_avmda.toml b/test/IntegrationTests/refs/grhd_bondi_infall_avmda/grhd_bondi_infall_avmda.toml index a5265ad9..de8c6c7b 100644 --- a/test/IntegrationTests/refs/grhd_bondi_infall_avmda/grhd_bondi_infall_avmda.toml +++ b/test/IntegrationTests/refs/grhd_bondi_infall_avmda/grhd_bondi_infall_avmda.toml @@ -10,6 +10,7 @@ variables0d_analyze_error = ["Ï", "D"] variables1d_analyze_error = ["Ï", "D"] analyze_error_reference_solution = "bondi_accretion" c2p_enforce_causal_atm = false +av_sensor_abslog_D = true [Mesh] range = [ 1.8, 20.0 ] -- GitLab