11 #ifndef _LEVELDATAI_H_ 12 #define _LEVELDATAI_H_ 21 #include "NamespaceHeader.H" 47 : m_disjointBoxLayout(dp), m_ghost(ghost)
61 MayDay::Error(
"non-disjoint DisjointBoxLayout: LevelData<T>::LevelData(const DisjointBoxLayout& dp, int comps)");
69 this->
setVector(*
this, interval, interval);
83 CH_TIME(
"LevelData<T>::define(dbl,comps,ghost,factory)");
93 MayDay::Error(
"non-disjoint DisjointBoxLayout: LevelData<T>::define(const DisjointBoxLayout& dp,....)");
97 MayDay::Error(
"LevelData::LevelData(const BoxLayout& dp, int comps) comps<=0");
126 CH_TIME(
"LevelData<T>::define(LevelData<T>,factory)");
133 if (
this == &da)
return;
158 PR_TIME(
"Chombo::LevelData::define");
160 CH_TIME(
"LevelData<T>::define(LevelData<T>,comps,factory)");
172 MayDay::Error(
" LevelData<T>::define(const LevelData<T>& da, const Interval& comps) called with 'this'");
207 PR_TIME(
"Chombo::LevelData::copyTo");
216 PR_TIME(
"Chombo::LevelData::copyTo::local");
222 int nbox = it.
size();
223 #pragma omp parallel for if(this->m_threadSafe) 224 for (
int ibox = 0; ibox < nbox; ibox++)
226 dest[it[ibox]].copy(this->
box(it[ibox]),
229 this->
operator[](it[ibox]),
236 copyTo(srcComps, dest, destComps, copier);
245 PR_TIME(
"Chombo::LevelData::localCopyTo");
247 CH_TIME(
"LevelData::localCopyTo");
254 int nbox = it.
size();
255 #pragma omp parallel for if(this->m_threadSafe) 256 for (
int ibox = 0; ibox < nbox; ibox++)
258 Box srcBox = this->
box(it[ibox]);
259 Box dstBox = this->
box(it[ibox]);
264 dest[it[ibox]].copy(minBox,
267 this->
operator[](it[ibox]),
305 MayDay::Error(
"src == dest in copyTo function. Perhaps you want exchange ?");
312 int nbox = it.
size();
313 #pragma omp parallel for if(this->m_threadSafe) 314 for (
int ibox = 0; ibox < nbox; ibox++)
316 dest[it[ibox]].copy(this->
box(it[ibox]),
319 this->
operator[](it[ibox]),
326 copyTo(srcComps, dest, destComps, copier);
348 PR_TIME(
"Chombo::LevelData::copyTo");
359 this->
makeItSo(srcComps, *
this, dest, destComps, copier, a_op);
383 PR_TIME(
"Chombo::LevelData::copyTo");
393 this->
makeItSo(srcComps, *
this, dest, destComps, copier, a_op);
413 PR_TIME(
"Chombo::LevelData::exchange (exchange + copier)");
415 CH_TIME(
"LevelData::exchange (exchange + copier)");
425 PR_TIME(
"Chombo::LevelData::exchange (defining copier)");
427 CH_TIME(
"LevelData::exchange (defining copier)");
433 PR_TIME(
"Chombo::LevelData::exchange (actual exchange)");
435 CH_TIME(
"LevelData::exchange (actual exchange)");
464 PR_TIME(
"Chombo::LevelData::exchange");
474 this->
makeItSo(comps, *
this, *
this, comps, copier, a_op);
520 MayDay::Error(
"LevelData<T>::define called with BoxLayout input");
528 MayDay::Error(
"LevelData<T>::define called with BoxLayout input");
536 MayDay::Error(
"LevelData<T>::define called with BoxLayout input");
545 MayDay::Error(
"LevelData<T>::define called with BoxLayout input");
554 int nbox = it.
size();
555 #pragma omp parallel for 556 for (
int ibox = 0; ibox < nbox; ibox++)
569 int nbox = it.
size();
570 #pragma omp parallel for 571 for (
int ibox = 0; ibox < nbox; ibox++)
580 template<
class T>
void 603 template<
class T>
void 625 for (toDit.
begin(); toDit.
ok(); ++toDit)
637 Box intersectBox = toFAB.
box();
638 intersectBox &= fromFAB.
box();
640 toFAB.
copy(fromFAB, intersectBox);
649 if (!fromDit.
ok()) done =
true;
658 #include "NamespaceFooter.H" int m_comps
Definition: BoxLayoutData.H:403
const ProblemDomain & physDomain() const
bool isDefined() const
Definition: Copier.H:333
Interval interval() const
Definition: BoxLayoutData.H:312
#define CH_SPACEDIM
Definition: SPACE.H:51
#define CH_assert(cond)
Definition: CHArray.H:37
Vector< T * > m_vector
Definition: LayoutData.H:124
void degenerate(LevelData< T > &a_to, const SliceSpec &a_ss) const
Definition: LevelDataI.H:581
LevelData()
Definition: LevelDataI.H:30
DisjointBoxLayout m_disjointBoxLayout
Definition: LevelData.H:297
void makeItSoLocalCopy(const Interval &a_srcComps, const BoxLayoutData< T > &a_src, BoxLayoutData< T > &a_dest, const Interval &a_destComps, const Copier &a_copier, const LDOperator< T > &a_op=LDOperator< T >()) const
Definition: BoxLayoutDataI.H:291
A not-necessarily-disjoint collective of boxes.
Definition: BoxLayout.H:145
int size() const
Definition: Interval.H:75
A strange but true thing to make copying from one boxlayoutdata to another fast.
Definition: Copier.H:152
int begin() const
Definition: Interval.H:99
Definition: SliceSpec.H:41
IntVect m_ghost
Definition: LevelData.H:299
const BoxLayout & boxLayout() const
Definition: LayoutData.H:107
void begin()
initialize this iterator to the first Box in its Layout
Definition: LayoutIterator.H:122
DataIterator dataIterator() const
Definition: LayoutDataI.H:78
void makeItSoBegin(const Interval &a_srcComps, const BoxLayoutData< T > &a_src, BoxLayoutData< T > &a_dest, const Interval &a_destComps, const Copier &a_copier, const LDOperator< T > &a_op=LDOperator< T >()) const
Definition: BoxLayoutDataI.H:250
void setVector(const BoxLayoutData< T > &da, const Interval &srcComps, const Interval &destComps)
Definition: BoxLayoutDataI.H:45
Box box(const DataIndex &a_index) const
Definition: LayoutDataI.H:66
virtual bool ok() const
return true if this iterator is still in its Layout
Definition: LayoutIterator.H:117
Definition: DataIterator.H:190
Copier m_exchangeCopier
Definition: LevelData.H:305
const Box & box() const
Definition: BaseFabImplem.H:271
BoxLayout m_boxLayout
Definition: LayoutData.H:118
virtual void exchange(void)
Simplest case – do all components.
Definition: LevelDataI.H:451
void degenerateLocalOnly(LevelData< T > &a_to, const SliceSpec &a_ss) const
version of degenerate which does strictly local copying
Definition: LevelDataI.H:604
Definition: EBInterface.H:45
virtual void exchangeBegin(const Copier &copier)
asynchronous exchange start. load and fire off messages.
Definition: LevelDataI.H:499
Box minBox(const Box &b1, const Box &b2)
virtual void apply(void(*a_Function)(const Box &, int, T &))
int size() const
Definition: DataIterator.H:218
void degenerate(DisjointBoxLayout &a_to, const SliceSpec &a_ss, bool a_maintainProcAssign=false) const
#define CH_TIME(name)
Definition: CH_Timer.H:82
Structure for passing component ranges in code.
Definition: Interval.H:23
virtual void localCopyTo(const Interval &srcComps, LevelData< T > &dest, const Interval &destComps) const
only works if source and dest have the same disjointboxlayout
Definition: LevelDataI.H:240
void allocateGhostVector(const DataFactory< T > &factory, const IntVect &ghost=IntVect::Zero)
Definition: BoxLayoutDataI.H:167
Data on a BoxLayout.
Definition: BoxLayoutData.H:97
virtual void define(const DisjointBoxLayout &dp, int comps, const IntVect &ghost=IntVect::Zero, const DataFactory< T > &a_factory=DefaultDataFactory< T >())
Definition: LevelDataI.H:80
BaseFab< T > & copy(const BaseFab< T > &a_src, const Box &a_srcbox, int a_srccomp, const Box &a_destbox, int a_destcomp, int a_numcomp)
Definition: BaseFabImplem.H:426
void makeItSo(const Interval &a_srcComps, const BoxLayoutData< T > &a_src, BoxLayoutData< T > &a_dest, const Interval &a_destComps, const Copier &a_copier, const LDOperator< T > &a_op=LDOperator< T >()) const
Definition: BoxLayoutDataI.H:232
virtual void copyTo(const Interval &srcComps, BoxLayoutData< T > &dest, const Interval &destComps) const
Definition: LevelDataI.H:202
A BoxLayout that has a concept of disjointedness.
Definition: DisjointBoxLayout.H:30
Box get(const LayoutIndex &it) const
Definition: BoxLayout.H:717
bool isPeriodic(int a_dir) const
Returns true if BC is periodic in direction a_dir.
Definition: ProblemDomain.H:894
const DisjointBoxLayout & getBoxes() const
Definition: LevelData.H:203
const IntVect & ghostVect() const
Definition: LevelData.H:170
static void Error(const char *const a_msg=m_nullString, int m_exitCode=CH_DEFAULT_ERROR_CODE)
Print out message to cerr and exit with the specified exit code.
virtual bool threadSafe() const
Definition: BoxLayoutData.H:49
static const IntVect Zero
Definition: IntVect.H:658
A Rectangular Domain on an Integer Lattice.
Definition: Box.H:469
int nComp() const
Definition: BoxLayoutData.H:306
const DisjointBoxLayout & disjointBoxLayout() const
Definition: LevelData.H:209
const T & operator[](const DataIndex &a_index) const
const accessor function
Definition: LayoutDataI.H:25
bool m_isdefined
Definition: BoxLayoutData.H:405
virtual ~LevelData()
Definition: LevelDataI.H:37
An integer Vector in SpaceDim-dimensional space.
Definition: CHArray.H:42
Definition: FArrayBox.H:45
Factory object to data members of a BoxLayoutData container.
Definition: BoxLayoutData.H:30
void makeItSoEnd(const Interval &a_destComps, const LDOperator< T > &a_op=LDOperator< T >())
Definition: BoxLayoutDataI.H:335
Box & grow(int i)
grow functions
Definition: Box.H:2263
bool isClosed() const
Definition: BoxLayout.H:730
Definition: BoxLayoutData.H:173
bool m_threadSafe
Definition: BoxLayoutData.H:404
virtual void define(const DisjointBoxLayout &a_level, const BoxLayout &a_dest, bool a_exchange=false, IntVect a_shift=IntVect::Zero)
virtual void exchangeEnd()
finish asynchronous exchange
Definition: LevelDataI.H:509
int direction
Definition: SliceSpec.H:48
virtual void exchangeNoOverlap(const Copier &copier)
Definition: LevelDataI.H:488