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
140 amrex::Box const& bx, int ncomp,
141 amrex::Array4<amrex::Real > const& dUdt_out,
142 amrex::Array4<amrex::Real > const& dUdt_in,
144 amrex::Array4<amrex::Real > const& scratch,
154 amrex::BCRec const* d_bcrec_ptr,
155 amrex::Geometry const& lev_geom, amrex::Real dt,
156 std::string const& redistribution_type,
157 int as_crse,
158 amrex::Array4<amrex::Real > const& rr_drho_crse,
159 amrex::Array4<int const> const& rr_flag_crse,
160 int as_fine,
161 amrex::Array4<amrex::Real > const& dm_as_fine,
162 amrex::Array4<int const> const& levmsk,
163 int level_mask_not_covered,
164 amrex::Real fac_for_deltaR = 1.0_rt,
165 bool use_wts_in_divnc = false,
166 int icomp = 0,
167 int srd_max_order = 2,
168 amrex::Real target_volfrac = 0.5_rt,
169 amrex::Array4<amrex::Real const> const& update_scale={});
170
175 amrex::Box const& bx, int ncomp,
176 amrex::Array4<amrex::Real > const& U_out,
177 amrex::Array4<amrex::Real > const& U_in,
187 amrex::BCRec const* d_bcrec_ptr,
188 amrex::Geometry const& geom, std::string const& redistribution_type,
189 int srd_max_order = 2,
190 amrex::Real target_volfrac = 0.5_rt);
191
195 void StateRedistribute ( amrex::Box const& bx, int ncomp,
196 amrex::Array4<amrex::Real> const& U_out,
197 amrex::Array4<amrex::Real> const& U_in,
204 amrex::BCRec const* d_bcrec_ptr,
205 amrex::Array4<int const> const& itracker,
208 amrex::Array4<amrex::Real const> const& nbhd_vol,
209 amrex::Array4<amrex::Real const> const& cent_hat,
210 amrex::Geometry const& geom,
211 int max_order = 2);
212
216 void MLStateRedistribute ( amrex::Box const& bx, int ncomp,
217 amrex::Array4<amrex::Real> const& U_out,
218 amrex::Array4<amrex::Real> const& U_in,
225 amrex::BCRec const* d_bcrec_ptr,
226 amrex::Array4<int const> const& itracker,
229 amrex::Array4<amrex::Real const> const& nbhd_vol,
230 amrex::Array4<amrex::Real const> const& cent_hat,
231 amrex::Geometry const& geom,
232 int as_crse,
233 Array4<Real > const& drho_as_crse,
234 Array4<int const> const& flag_as_crse,
235 int as_fine,
236 Array4<Real > const& dm_as_fine,
237 Array4<int const> const& levmsk,
238 int is_ghost_cell,
239 amrex::Real fac_for_deltaR,
240 int max_order = 2);
241
245 void MakeITracker ( amrex::Box const& bx,
250 amrex::Array4<int> const& itracker,
251 amrex::Geometry const& geom,
252 amrex::Real target_volfrac);
253
261 amrex::Array4< int const> const& itracker,
263 amrex::Array4<amrex::Real> const& alpha,
264 amrex::Array4<amrex::Real> const& nbhd_vol,
265 amrex::Array4<amrex::Real> const& cent_hat,
266 amrex::Geometry const& geom,
267 amrex::Real target_volfrac);
268
269}
270
271#endif
Runtime initialization/finalization helpers and global diagnostics.
Boundary condition descriptors used throughout AMReX.
Array4< Real const > vfrac
Definition AMReX_MLEBNodeFDLaplacian.cpp:1468
#define AMREX_D_DECL(a, b, c)
Definition AMReX_SPACE.H:171
Boundary condition record storing low/high face types per coordinate.
Definition AMReX_BCRec.H:25
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:85
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:80
Definition AMReX_Amr.cpp:50
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:289