1 #ifndef TEST_NUMERIC_STENCIL
2 #define TEST_NUMERIC_STENCIL
9 #include "Numeric/Stencil.H"
27 amrex::Geometry::Setup(&rb, 0);
30 amrex::IntVect::TheCellVector());
38 geom[0].define(domain);
39 grids[0].define(domain);
58 template<
int i,
int j,
int k>
85 const amrex::Real* DX =
geom[0].CellSize();
86 for ( amrex::MFIter mfi(*
phi[0],amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi )
88 const amrex::Box& bx = mfi.tilebox();
89 amrex::Array4<const amrex::Real>
const& Phi =
phi[0]->array(mfi);
90 amrex::Array4<amrex::Real>
const& DPhi =
DphiNumeric[0]->array(mfi);
91 amrex::ParallelFor (bx,[=] AMREX_GPU_DEVICE(
int p,
int q,
int r){ DPhi(p,q,r) =
::Numeric::Stencil<Set::Scalar,i,j,k>::D(Phi,p,q,r,0,DX); });
105 if (error < tolerance)
return 0;
112 amrex::Vector<amrex::MultiFab> plotmf(1);
113 plotmf[0].define(
grids[0],
dmap[0], 3, 0);
114 for (amrex::MFIter mfi(plotmf[0],
false); mfi.isValid(); ++mfi)
116 amrex::Box bx = mfi.validbox();
117 plotmf[0][mfi].copy((*
phi[0])[mfi] ,bx, 0, bx, 0, 1);
118 plotmf[0][mfi].copy((*
DphiExact[0])[mfi] ,bx, 0, bx, 1, 1);
119 plotmf[0][mfi].copy((*
DphiNumeric[0])[mfi],bx, 0, bx, 2, 1);
121 amrex::WriteSingleLevelPlotfile(plotfile,plotmf[0],
varnames,
geom[0],0.0,1);
129 amrex::Vector<amrex::Geometry>
geom;
130 amrex::Vector<amrex::BoxArray>
grids;
131 amrex::Vector<amrex::DistributionMapping>
dmap;
136 amrex::Vector<std::string>
varnames = {
"phi",
"dphi_exact",
"dphi_numeric"};