00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013
00014 #ifndef _EBCFDATA_H_
00015 #define _EBCFDATA_H_
00016
00017 #include "REAL.H"
00018 #include "FArrayBox.H"
00019 #include "LevelData.H"
00020 #include "DisjointBoxLayout.H"
00021 #include "EBIndexSpace.H"
00022 #include "EBISLayout.H"
00023 #include "EBCellFAB.H"
00024 #include "Interval.H"
00025 #include "Stencils.H"
00026 #include "QuadCFInterp.H"
00027 #include "BaseIVFAB.H"
00028 #include "CornerCopier.H"
00029 #include "VoFIterator.H"
00030 #include "NamespaceHeader.H"
00031
00032
00033
00034
00035
00036
00037
00038 class EBCFData
00039 {
00040 public:
00041
00042
00043 virtual ~EBCFData();
00044
00045
00046
00047
00048 EBCFData(const DisjointBoxLayout& a_dblFine,
00049 const DisjointBoxLayout& a_dblCoar,
00050 const EBISLayout& a_ebislFine,
00051 const EBISLayout& a_ebislCoar,
00052 const ProblemDomain& a_domainCoar,
00053 const int& a_nref,
00054 const LayoutData<IntVectSet>& a_cfivs,
00055 const EBIndexSpace* const a_ebisPtr = Chombo_EBIS::instance(),
00056 bool a_doEBCFCrossing = true,
00057 bool a_doCornerEdgeIterators = true);
00058
00059
00060
00061 static void getExtrapSigns(IntVect& a_signs, const IntVect& a_corner, const Box& a_grid) ;
00062
00063
00064 EBISLayout m_ebislCoar;
00065 EBISLayout m_ebislCoarsenedFine;
00066 EBISLayout m_ebislFine;
00067 DisjointBoxLayout m_gridsCoar;
00068 DisjointBoxLayout m_gridsCoarsenedFine;
00069 DisjointBoxLayout m_gridsFine;
00070 ProblemDomain m_domainFine;
00071 ProblemDomain m_domainCoar;
00072 int m_refRat;
00073
00074 bool m_doEBCFCrossing;
00075
00076
00077 LayoutData<VoFIterator> m_vofItEBCFLo[SpaceDim];
00078 LayoutData<VoFIterator> m_vofItEBCFHi[SpaceDim];
00079 LayoutData<VoFIterator> m_vofItCorners;
00080 LayoutData<VoFIterator> m_vofItEdges;
00081 LayoutData<IntVectSet> m_cornerIVS;
00082 LayoutData<IntVectSet> m_edgeIVS;
00083
00084
00085 LayoutData<IntVectSet> m_ebcfivsLo[SpaceDim];
00086 LayoutData<IntVectSet> m_ebcfivsHi[SpaceDim];
00087
00088
00089 static void getEBCFIVSGrid(IntVectSet& a_ebcfivs,
00090 const Box& a_grid,
00091 const int& a_idir,
00092 const Side::LoHiSide& a_side,
00093 const IntVect& a_diagGrow,
00094 const ProblemDomain& a_domain,
00095 const IntVectSet& a_cfivs,
00096 const EBISBox& a_ebisBox);
00097
00098
00099 static void
00100 getEdgeAndCornerIVS(IntVectSet& a_edgeIVS, IntVectSet& a_cornerIVS,
00101 const Box& a_grid, const ProblemDomain& a_domain,
00102 const IntVectSet& a_cfivsGrid);
00103
00104
00105 private:
00106
00107 void defineEdCoIterators(const LayoutData<IntVectSet>& a_cfivs);
00108 void defineLoHiIterators(const LayoutData<IntVectSet>& a_cfivs);
00109
00110
00111
00112
00113
00114
00115 bool getEBCFIVS(const LayoutData<IntVectSet>& a_cfivs);
00116
00117
00118
00119 EBCFData()
00120 {
00121 MayDay::Error("ebcfd invalid operator");
00122 }
00123
00124
00125 EBCFData(const EBCFData& ebcin)
00126 {
00127 MayDay::Error("ebcfd invalid operator");
00128 }
00129 void operator=(const EBCFData& fabin)
00130 {
00131 MayDay::Error("ebcfd invalid operator");
00132 }
00133 };
00134
00135 #include "NamespaceFooter.H"
00136 #endif