ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_ShocDriver.cpp File Reference
#include "ERF_ShocDriver.H"
#include "ERF_ShocImplicit.H"
#include "ERF_Constants.H"
#include "ERF_IndexDefines.H"
#include <AMReX_BLProfiler.H>
#include <AMReX_Gpu.H>
#include <algorithm>
#include <cstring>
#include <iomanip>
#include <limits>
#include <sstream>
#include <vector>
Include dependency graph for ERF_ShocDriver.cpp:

Functions

bool shoc_boxarray_spans_full_height (const BoxArray &ba, const Box &domain)
 
void shoc_fill_physical_boundary_ghosts (MultiFab &mf, const Geometry &geom, int comp, int ncomp)
 

Function Documentation

◆ shoc_boxarray_spans_full_height()

bool shoc_boxarray_spans_full_height ( const BoxArray &  ba,
const Box &  domain 
)
21 {
22  const int dom_klo = domain.smallEnd(2);
23  const int dom_khi = domain.bigEnd(2);
24  for (int ibox = 0; ibox < ba.size(); ++ibox) {
25  const Box& bx = ba[ibox];
26  if (bx.smallEnd(2) != dom_klo || bx.bigEnd(2) != dom_khi) {
27  return false;
28  }
29  }
30  return true;
31 }

◆ shoc_fill_physical_boundary_ghosts()

void shoc_fill_physical_boundary_ghosts ( MultiFab &  mf,
const Geometry &  geom,
int  comp,
int  ncomp 
)
38 {
39  mf.FillBoundary(comp, ncomp, geom.periodicity());
40 
41  const Box domain = geom.Domain();
42  const bool nonperiodic_x = !geom.isPeriodic(0);
43  const bool nonperiodic_y = !geom.isPeriodic(1);
44  const bool nonperiodic_z = !geom.isPeriodic(2);
45 
46  for (MFIter mfi(mf, false); mfi.isValid(); ++mfi) {
47  const Box gbx = mfi.growntilebox();
48  auto data = mf.array(mfi);
49  ParallelFor(gbx, ncomp,
50  [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) noexcept {
51  const int ii = nonperiodic_x
52  ? ((i < domain.smallEnd(0)) ? domain.smallEnd(0)
53  : ((i > domain.bigEnd(0)) ? domain.bigEnd(0) : i))
54  : i;
55  const int jj = nonperiodic_y
56  ? ((j < domain.smallEnd(1)) ? domain.smallEnd(1)
57  : ((j > domain.bigEnd(1)) ? domain.bigEnd(1) : j))
58  : j;
59  const int kk = nonperiodic_z
60  ? ((k < domain.smallEnd(2)) ? domain.smallEnd(2)
61  : ((k > domain.bigEnd(2)) ? domain.bigEnd(2) : k))
62  : k;
63 
64  if (ii != i || jj != j || kk != k) {
65  data(i,j,k,comp+n) = data(ii,jj,kk,comp+n);
66  }
67  });
68  }
69 }
ParallelFor(fab_box, [=] AMREX_GPU_DEVICE(int i, int j, int k) { qrcuten_arr(i, j, k)=Real(0);qscuten_arr(i, j, k)=Real(0);qicuten_arr(i, j, k)=Real(0);})

Referenced by ShocDriver::set_eddy_diffs().

Here is the call graph for this function:
Here is the caller graph for this function: