47 Field(
int a_levs,
const amrex::Vector<amrex::BoxArray> & a_grids,
const amrex::Vector<amrex::DistributionMapping> & a_dmap,
int a_ncomp,
int a_nghost)
49 Define(a_levs,a_grids,a_dmap,a_ncomp,a_nghost);
51 Field(
int size) : amrex::
Vector<std::unique_ptr<amrex::FabArray<amrex::BaseFab<T>>>>(size) {}
52 void Define(
int a_levs,
const amrex::Vector<amrex::BoxArray> & a_grids,
const amrex::Vector<amrex::DistributionMapping> & a_dmap,
int a_ncomp,
int a_nghost)
57 for (
int lev = 0; lev < a_levs; lev++)
59 (*this)[lev].reset(
new amrex::FabArray<amrex::BaseFab<T>>(a_grids[lev],a_dmap[lev],a_ncomp,a_nghost));
62 void Define(
int a_lev,
const amrex::BoxArray & a_grid,
const amrex::DistributionMapping & a_dmap,
int a_ncomp,
int a_nghost)
65 (*this)[a_lev].reset(
new amrex::FabArray<amrex::BaseFab<T>>(a_grid,a_dmap,a_ncomp,a_nghost));
68 void Copy(
int , amrex::MultiFab &,
int ,
int )
const {}
69 void CopyFrom(
int , amrex::MultiFab &,
int ,
int )
const {}
70 void Add(
int , amrex::MultiFab &,
int ,
int )
const {}
71 void AddFrom(
int , amrex::MultiFab &,
int ,
int )
const {}
76 amrex::Array4<T>
Patch (
int lev, amrex::MFIter &mfi)
const &
78 if (this->size())
return (*(*
this)[lev]).array(mfi);
88 using Patch = amrex::Array4<T>
const&;
95 for (amrex::MFIter mfi(a_dst, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
97 const amrex::Box& bx = mfi.growntilebox(amrex::IntVect(a_nghost));
100 amrex::Array4<const Set::Vector>
const & src = ((*this)[a_lev])->array(mfi);
101 amrex::Array4<Set::Scalar>
const & dst = a_dst.array(mfi);
102 for (
int n = 0; n < AMREX_SPACEDIM; n++)
104 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) {
105 dst(i,j,k,a_dstcomp + n) = src(i,j,k)(n);
115 for (amrex::MFIter mfi(a_src, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
117 const amrex::Box& bx = mfi.growntilebox(amrex::IntVect(a_nghost));
120 amrex::Array4<Set::Vector>
const & dst = ((*this)[a_lev])->array(mfi);
121 amrex::Array4<const Set::Scalar>
const & src = a_src.array(mfi);
122 for (
int n = 0; n < AMREX_SPACEDIM; n++)
124 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) {
125 dst(i,j,k)(n) = src(i,j,k,a_dstcomp + n);
135 for (amrex::MFIter mfi(a_dst, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
137 const amrex::Box& bx = mfi.growntilebox(amrex::IntVect(a_nghost));
140 amrex::Array4<const Set::Vector>
const & src = ((*this)[a_lev])->array(mfi);
141 amrex::Array4<Set::Scalar>
const & dst = a_dst.array(mfi);
142 for (
int n = 0; n < AMREX_SPACEDIM; n++)
144 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) {
145 dst(i,j,k,a_dstcomp + n) += src(i,j,k)(n);
155 for (amrex::MFIter mfi(a_src, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
157 const amrex::Box& bx = mfi.growntilebox(amrex::IntVect(a_nghost));
160 amrex::Array4<Set::Vector>
const & dst = ((*this)[a_lev])->array(mfi);
161 amrex::Array4<const Set::Scalar>
const & src = a_src.array(mfi);
162 for (
int n = 0; n < AMREX_SPACEDIM; n++)
164 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) {
165 dst(i,j,k)(n) += src(i,j,k,a_srccomp + n);
176 if (i==0)
return name +
"_x";
179 else if (i==1)
return name +
"_y";
182 else if (i==2)
return name +
"_z";
192 for (amrex::MFIter mfi(a_dst, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
194 const amrex::Box& bx = mfi.growntilebox(amrex::IntVect(a_nghost));
197 amrex::Array4<const Set::Matrix>
const & src = ((*this)[a_lev])->array(mfi);
198 amrex::Array4<Set::Scalar>
const & dst = a_dst.array(mfi);
199 for (
int n = 0; n < AMREX_SPACEDIM*AMREX_SPACEDIM; n++)
201 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) {
202 dst(i,j,k,a_dstcomp + n) = src(i,j,k)(n/AMREX_SPACEDIM,n%AMREX_SPACEDIM);
212 #if AMREX_SPACEDIM==1
213 if (i==0)
return name +
"_xx";
214 #elif AMREX_SPACEDIM==2
215 if (i==0)
return name +
"_xx";
216 else if (i==1)
return name +
"_xy";
217 else if (i==2)
return name +
"_yx";
218 else if (i==3)
return name +
"_yy";
219 #elif AMREX_SPACEDIM==3
220 if (i==0)
return name +
"_xx";
221 else if (i==1)
return name +
"_xy";
222 else if (i==2)
return name +
"_xz";
223 else if (i==3)
return name +
"_yx";
224 else if (i==4)
return name +
"_yy";
225 else if (i==5)
return name +
"_yz";
226 else if (i==6)
return name +
"_zx";
227 else if (i==7)
return name +
"_zy";
228 else if (i==8)
return name +
"_zz";
240 Field(
int size) : amrex::
Vector<std::unique_ptr<amrex::MultiFab>>(size) {}
241 void Define(
int a_levs,
const amrex::Vector<amrex::BoxArray> & a_grids,
const amrex::Vector<amrex::DistributionMapping> & a_dmap,
int a_ncomp,
int a_nghost)
245 this->resize(a_levs);
246 for (
int lev = 0; lev < a_levs; lev++)
248 (*this)[lev].reset(
new amrex::MultiFab(a_grids[lev],a_dmap[lev],a_ncomp,a_nghost));
251 void Define(
int a_lev,
const amrex::BoxArray & a_grid,
const amrex::DistributionMapping & a_dmap,
int a_ncomp,
int a_nghost)
254 (*this)[a_lev].reset(
new amrex::MultiFab(a_grid,a_dmap,a_ncomp,a_nghost));
256 int finest_level = 0;
258 void Copy(
int , amrex::MultiFab &,
int ,
int )
const
263 amrex::Array4<Set::Scalar>
Patch (
int lev, amrex::MFIter &mfi)
const &
265 if (this->size())
return (*(*
this)[lev]).array(mfi);
293 #include "Set/Matrix4.H"