diff --git a/src/GRHD/GRHD.jl b/src/GRHD/GRHD.jl index 8fdfe09127755231f51627ed5000d88c83ccf888..9f9ebe1d47d5aa5d2f94fe6aea0f46f7d7b5433f 100644 --- a/src/GRHD/GRHD.jl +++ b/src/GRHD/GRHD.jl @@ -342,6 +342,19 @@ dg1d.@parameters GRHD begin limiter_tci_log_D = false @check limiter_tci_log_D isa Bool + """ + The TCI method with which the triggering of the limiter is controlled. + """ + limiter_tci_method = "mda" + @check limiter_tci_method in [ "mda" ] + + """ + TCIs provide an indicator value in the range [0,1]. + `limiter_tci_threshold` controls above which which value the limiter should activate. + """ + limiter_tci_threshold = 0.9 + @check 0 < limiter_tci_threshold ≤ 1 + end diff --git a/src/GRHD/callbacks.jl b/src/GRHD/callbacks.jl index 10db122ae2c76ca9005894ab6d0d8f056320b8ef..593fc6514b569134bee83df51d9fa3d28a9a56e0 100644 --- a/src/GRHD/callbacks.jl +++ b/src/GRHD/callbacks.jl @@ -573,7 +573,7 @@ function callback_limiter(env, P::Project{:spherical1d}, mesh::Mesh1d{<:DGElemen broadcast_volume!(impose_atmosphere_spherical1d, P.equation, mesh) - @unpack limiter_tci_log_D, limiter_limit_log_D = P.prms + @unpack limiter_tci_log_D, limiter_limit_log_D, limiter_tci, limiter_tci_threshold = P.prms if limiter_tci_log_D || limiter_limit_log_D @. log_D = log(D) @@ -582,13 +582,13 @@ function callback_limiter(env, P::Project{:spherical1d}, mesh::Mesh1d{<:DGElemen K = mesh.tree.dims[1] dg1d.enter(P.prms.workspace) do tmp_flag = dg1d.borrow(P.prms.workspace, length(flag)) - TCI.compute_indicator!(tmp_flag, limiter_tci_log_D ? log_D : D, P.tci) + TCI.compute_indicator!(tmp_flag, limiter_tci_log_D ? log_D : D, limiter_tci) for (i,f) in enumerate(tmp_flag) - flag[i] = f > 0.9 + flag[i] = f > limiter_tci_threshold end - TCI.compute_indicator!(tmp_flag, Sr, P.tci) + TCI.compute_indicator!(tmp_flag, Sr, limiter_tci) for (i,f) in enumerate(tmp_flag) - flag[i] = max(flag[i], f > 0.9) + flag[i] = max(flag[i], f > limiter_tci_threshold) end tmp_flag .= (flag .+ flag[end:-1:1])./2 flag .= tmp_flag diff --git a/src/GRHD/setup.jl b/src/GRHD/setup.jl index 7638364e5c0ca3bbb515dcd9c932261f637adcdf..973f84343619d1d8fe6f63bc6fd9c2ce3431c55f 100644 --- a/src/GRHD/setup.jl +++ b/src/GRHD/setup.jl @@ -43,6 +43,11 @@ function Project(env::Environment, prms) limiter = prms["GRHD"]["limiter"] limiter_limit_log_D = prms["GRHD"]["limiter_limit_log_D"] limiter_tci_log_D = prms["GRHD"]["limiter_tci_log_D"] + limiter_tci_method = prms["GRHD"]["limiter_tci_method"] + limiter_tci_threshold = prms["GRHD"]["limiter_tci_threshold"] + limiter_tci_prms = dg1d.parameters(:TCI) + limiter_tci_prms["method"] = limiter_tci_method + limiter_tci = TCI.make_TCI(env.mesh, limiter_tci_prms) freeze_vars = Symbol.(prms["GRHD"]["freeze_vars"]) fv_numerical_flux = prms["GRHD"]["fv_numerical_flux"] id = prms["GRHD"]["id"] @@ -68,7 +73,7 @@ function Project(env::Environment, prms) c2p_set_atmosphere_on_failure, c2p_enforce_causal_atm, c2p_enforce_atm, av_drag, av_sensor_abslog_D, problem, freeze_vars, V_bspline, invV_bspline, workspace, dt_min_grid_spacing, - limiter, limiter_limit_log_D, limiter_tci_log_D, + limiter, limiter_limit_log_D, limiter_tci_log_D, limiter_tci, limiter_tci_threshold, id, bc, hrsc, fv_numerical_flux) # construct Project