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