Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_EB_Redistribution.H
Go to the documentation of this file.
1#ifndef AMREX_EB_REDIST_H_
2#define AMREX_EB_REDIST_H_
3#include <AMReX_Config.H>
4
5#include <AMReX.H>
6#include <AMReX_BCRec.H>
7#include <AMReX_MultiFab.H>
9#include <AMReX_MultiCutFab.H>
10#include <AMReX_EB2.H>
11
18namespace amrex {
19
20#ifdef AMREX_USE_FLOAT
22 static constexpr amrex::Real eb_covered_val = amrex::Real(1.e20);
23#else
25 static constexpr amrex::Real eb_covered_val = amrex::Real(1.e40);
26#endif
27
38 int div_comp, int ncomp, const amrex::Geometry& geom);
39
52 const amrex::MultiFab& weights,
53 int div_comp, int ncomp, const amrex::Geometry& geom,
54 bool use_wts_in_divnc);
55
74 int icomp, int ncomp,
77 const amrex::Geometry & geom,
78 bool use_wts_in_divnc);
79
91 int as_crse,
92 amrex::Array4<amrex::Real > const& rr_drho_crse,
93 amrex::Array4<int const> const& rr_flag_crse,
94 int as_fine,
95 amrex::Array4<amrex::Real > const& dm_as_fine,
96 amrex::Array4<int const> const& levmsk,
97 const amrex::Geometry & geom,
98 bool use_wts_in_divnc,
99 int level_mask_not_covered,
100 int icomp, int ncomp, amrex::Real dt);
101
108 void ApplyRedistribution ( amrex::Box const& bx, int ncomp,
109 amrex::Array4<amrex::Real> const& dUdt_out,
110 amrex::Array4<amrex::Real> const& dUdt_in,
112 amrex::Array4<amrex::Real> const& scratch,
122 amrex::BCRec const* d_bcrec_ptr,
123 amrex::Geometry const& lev_geom,
124 amrex::Real dt, std::string const& redistribution_type,
125 bool use_wts_in_divnc = false,
126 int srd_max_order = 2,
127 amrex::Real target_volfrac = 0.5_rt,
128 amrex::Array4<amrex::Real const> const& update_scale={});
129
136 amrex::Box const& bx, int ncomp,
137 amrex::Array4<amrex::Real > const& dUdt_out,
138 amrex::Array4<amrex::Real > const& dUdt_in,
140 amrex::Array4<amrex::Real > const& scratch,
150 amrex::BCRec const* d_bcrec_ptr,
151 amrex::Geometry const& lev_geom, amrex::Real dt,
152 std::string const& redistribution_type,
153 int as_crse,
154 amrex::Array4<amrex::Real > const& rr_drho_crse,
155 amrex::Array4<int const> const& rr_flag_crse,
156 int as_fine,
157 amrex::Array4<amrex::Real > const& dm_as_fine,
158 amrex::Array4<int const> const& levmsk,
159 int level_mask_not_covered,
160 amrex::Real fac_for_deltaR = 1.0_rt,
161 bool use_wts_in_divnc = false,
162 int icomp = 0,
163 int srd_max_order = 2,
164 amrex::Real target_volfrac = 0.5_rt,
165 amrex::Array4<amrex::Real const> const& update_scale={});
166
171 amrex::Box const& bx, int ncomp,
172 amrex::Array4<amrex::Real > const& U_out,
173 amrex::Array4<amrex::Real > const& U_in,
183 amrex::BCRec const* d_bcrec_ptr,
184 amrex::Geometry const& geom, std::string const& redistribution_type,
185 int srd_max_order = 2,
186 amrex::Real target_volfrac = 0.5_rt);
187
191 void StateRedistribute ( amrex::Box const& bx, int ncomp,
192 amrex::Array4<amrex::Real> const& U_out,
193 amrex::Array4<amrex::Real> const& U_in,
200 amrex::BCRec const* d_bcrec_ptr,
201 amrex::Array4<int const> const& itracker,
204 amrex::Array4<amrex::Real const> const& nbhd_vol,
205 amrex::Array4<amrex::Real const> const& cent_hat,
206 amrex::Geometry const& geom,
207 int max_order = 2);
208
212 void MLStateRedistribute ( amrex::Box const& bx, int ncomp,
213 amrex::Array4<amrex::Real> const& U_out,
214 amrex::Array4<amrex::Real> const& U_in,
221 amrex::BCRec const* d_bcrec_ptr,
222 amrex::Array4<int const> const& itracker,
225 amrex::Array4<amrex::Real const> const& nbhd_vol,
226 amrex::Array4<amrex::Real const> const& cent_hat,
227 amrex::Geometry const& geom,
228 int as_crse,
229 Array4<Real > const& drho_as_crse,
230 Array4<int const> const& flag_as_crse,
231 int as_fine,
232 Array4<Real > const& dm_as_fine,
233 Array4<int const> const& levmsk,
234 int is_ghost_cell,
235 amrex::Real fac_for_deltaR,
236 int max_order = 2);
237
241 void MakeITracker ( amrex::Box const& bx,
246 amrex::Array4<int> const& itracker,
247 amrex::Geometry const& geom,
248 amrex::Real target_volfrac);
249
257 amrex::Array4< int const> const& itracker,
259 amrex::Array4<amrex::Real> const& alpha,
260 amrex::Array4<amrex::Real> const& nbhd_vol,
261 amrex::Array4<amrex::Real> const& cent_hat,
262 amrex::Geometry const& geom,
263 amrex::Real target_volfrac);
264
265}
266
267#endif
#define AMREX_D_DECL(a, b, c)
Definition AMReX_SPACE.H:171
Boundary Condition Records. Necessary information and functions for computing boundary conditions.
Definition AMReX_BCRec.H:17
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:74
A collection (stored as an array) of FArrayBox objects.
Definition AMReX_MultiFab.H:40
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
Definition AMReX_Amr.cpp:49
void single_level_redistribute(MultiFab &div_tmp_in, MultiFab &div_out, int div_comp, int ncomp, const Geometry &geom)
Redistribute the provisional divergence within a single level (no coarse/fine coupling).
Definition AMReX_EB_Redistribution.cpp:105
void ApplyRedistribution(amrex::Box const &bx, int ncomp, amrex::Array4< amrex::Real > const &dUdt_out, amrex::Array4< amrex::Real > const &dUdt_in, amrex::Array4< amrex::Real const > const &U_in, amrex::Array4< amrex::Real > const &scratch, amrex::Array4< amrex::EBCellFlag const > const &flag, amrex::Array4< amrex::Real const > const &apx, amrex::Array4< amrex::Real const > const &apy, amrex::Array4< amrex::Real const > const &apz, amrex::Array4< amrex::Real const > const &vfrac, amrex::Array4< amrex::Real const > const &fcx, amrex::Array4< amrex::Real const > const &fcy, amrex::Array4< amrex::Real const > const &fcz, amrex::Array4< amrex::Real const > const &ccc, amrex::BCRec const *d_bcrec_ptr, amrex::Geometry const &lev_geom, amrex::Real dt, std::string const &redistribution_type, bool use_wts_in_divnc=false, int srd_max_order=2, amrex::Real target_volfrac=0.5_rt, amrex::Array4< amrex::Real const > const &update_scale={})
Interface for applying single-level redistribution schemes.
void MakeStateRedistUtils(amrex::Box const &bx, amrex::Array4< amrex::EBCellFlag const > const &flag, amrex::Array4< amrex::Real const > const &vfrac, amrex::Array4< amrex::Real const > const &ccent, amrex::Array4< int const > const &itracker, amrex::Array4< amrex::Real > const &nrs, amrex::Array4< amrex::Real > const &alpha, amrex::Array4< amrex::Real > const &nbhd_vol, amrex::Array4< amrex::Real > const &cent_hat, amrex::Geometry const &geom, amrex::Real target_volfrac)
Construct helper arrays (normals, neighbor volumes, etc.) for SRD.
void ApplyInitialRedistribution(amrex::Box const &bx, int ncomp, amrex::Array4< amrex::Real > const &U_out, amrex::Array4< amrex::Real > const &U_in, amrex::Array4< amrex::EBCellFlag const > const &flag, amrex::Array4< amrex::Real const > const &apx, amrex::Array4< amrex::Real const > const &apy, amrex::Array4< amrex::Real const > const &apz, amrex::Array4< amrex::Real const > const &vfrac, amrex::Array4< amrex::Real const > const &fcx, amrex::Array4< amrex::Real const > const &fcy, amrex::Array4< amrex::Real const > const &fcz, amrex::Array4< amrex::Real const > const &ccc, amrex::BCRec const *d_bcrec_ptr, amrex::Geometry const &geom, std::string const &redistribution_type, int srd_max_order=2, amrex::Real target_volfrac=0.5_rt)
Redistribute immediately after initialization (before time stepping).
void apply_flux_redistribution(const Box &bx, Array4< Real > const &div, Array4< Real const > const &divc, Array4< Real const > const &wt, int icomp, int ncomp, Array4< EBCellFlag const > const &flag_arr, Array4< Real const > const &vfrac, const Geometry &geom, bool use_wts_in_divnc)
Definition AMReX_EB_FluxRedistribute.cpp:299
void ApplyMLRedistribution(amrex::Box const &bx, int ncomp, amrex::Array4< amrex::Real > const &dUdt_out, amrex::Array4< amrex::Real > const &dUdt_in, amrex::Array4< amrex::Real const > const &U_in, amrex::Array4< amrex::Real > const &scratch, amrex::Array4< amrex::EBCellFlag const > const &flag, amrex::Array4< amrex::Real const > const &apx, amrex::Array4< amrex::Real const > const &apy, amrex::Array4< amrex::Real const > const &apz, amrex::Array4< amrex::Real const > const &vfrac, amrex::Array4< amrex::Real const > const &fcx, amrex::Array4< amrex::Real const > const &fcy, amrex::Array4< amrex::Real const > const &fcz, amrex::Array4< amrex::Real const > const &ccc, amrex::BCRec const *d_bcrec_ptr, amrex::Geometry const &lev_geom, amrex::Real dt, std::string const &redistribution_type, int as_crse, amrex::Array4< amrex::Real > const &rr_drho_crse, amrex::Array4< int const > const &rr_flag_crse, int as_fine, amrex::Array4< amrex::Real > const &dm_as_fine, amrex::Array4< int const > const &levmsk, int level_mask_not_covered, amrex::Real fac_for_deltaR=1.0_rt, bool use_wts_in_divnc=false, int icomp=0, int srd_max_order=2, amrex::Real target_volfrac=0.5_rt, amrex::Array4< amrex::Real const > const &update_scale={})
Multi-level redistribution interface that couples coarse and fine levels.
static constexpr amrex::Real eb_covered_val
Sentinel value used when marking EB-covered cells in double builds.
Definition AMReX_EB_Redistribution.H:25
void amrex_flux_redistribute(const Box &bx, Array4< Real > const &dqdt, Array4< Real const > const &divc, Array4< Real const > const &wt, Array4< Real const > const &vfrac, Array4< EBCellFlag const > const &flag, int as_crse, Array4< Real > const &rr_drho_crse, Array4< int const > const &rr_flag_crse, int as_fine, Array4< Real > const &dm_as_fine, Array4< int const > const &levmsk, const Geometry &geom, bool use_wts_in_divnc, int level_mask_not_covered, int icomp, int ncomp, Real dt)
Definition AMReX_EB_FluxRedistribute.cpp:13
void single_level_weighted_redistribute(MultiFab &div_tmp_in, MultiFab &div_out, const MultiFab &weights, int div_comp, int ncomp, const Geometry &geom, bool use_wts_in_divnc)
Weighted single-level redistribution (e.g., when weighting by density).
Definition AMReX_EB_Redistribution.cpp:63
void StateRedistribute(amrex::Box const &bx, int ncomp, amrex::Array4< amrex::Real > const &U_out, amrex::Array4< amrex::Real > const &U_in, amrex::Array4< amrex::EBCellFlag const > const &flag, amrex::Array4< amrex::Real const > const &vfrac, amrex::Array4< amrex::Real const > const &fcx, amrex::Array4< amrex::Real const > const &fcy, amrex::Array4< amrex::Real const > const &fcz, amrex::Array4< amrex::Real const > const &ccent, amrex::BCRec const *d_bcrec_ptr, amrex::Array4< int const > const &itracker, amrex::Array4< amrex::Real const > const &nrs, amrex::Array4< amrex::Real const > const &alpha, amrex::Array4< amrex::Real const > const &nbhd_vol, amrex::Array4< amrex::Real const > const &cent_hat, amrex::Geometry const &geom, int max_order=2)
Perform state redistribution (SRD) within a single AMR level.
void MLStateRedistribute(amrex::Box const &bx, int ncomp, amrex::Array4< amrex::Real > const &U_out, amrex::Array4< amrex::Real > const &U_in, amrex::Array4< amrex::EBCellFlag const > const &flag, amrex::Array4< amrex::Real const > const &vfrac, amrex::Array4< amrex::Real const > const &fcx, amrex::Array4< amrex::Real const > const &fcy, amrex::Array4< amrex::Real const > const &fcz, amrex::Array4< amrex::Real const > const &ccent, amrex::BCRec const *d_bcrec_ptr, amrex::Array4< int const > const &itracker, amrex::Array4< amrex::Real const > const &nrs, amrex::Array4< amrex::Real const > const &alpha, amrex::Array4< amrex::Real const > const &nbhd_vol, amrex::Array4< amrex::Real const > const &cent_hat, amrex::Geometry const &geom, int as_crse, Array4< Real > const &drho_as_crse, Array4< int const > const &flag_as_crse, int as_fine, Array4< Real > const &dm_as_fine, Array4< int const > const &levmsk, int is_ghost_cell, amrex::Real fac_for_deltaR, int max_order=2)
Multi-level state redistribution that couples coarse/fine tiles.
void MakeITracker(amrex::Box const &bx, amrex::Array4< amrex::Real const > const &apx, amrex::Array4< amrex::Real const > const &apy, amrex::Array4< amrex::Real const > const &apz, amrex::Array4< amrex::Real const > const &vfrac, amrex::Array4< int > const &itracker, amrex::Geometry const &geom, amrex::Real target_volfrac)
Build the irregular-cell tracker used by SRD algorithms.
A multidimensional array accessor.
Definition AMReX_Array4.H:283