00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _BASEEBFACEFAB_H_
00014 #define _BASEEBFACEFAB_H_
00015
00016 #include <cmath>
00017 #include <cstdlib>
00018 #include "SPACE.H"
00019 #include "Vector.H"
00020 #include "BaseIFFAB.H"
00021 #include "IntVectSet.H"
00022 #include "BaseFab.H"
00023 #include "EBISBox.H"
00024 #include "NamespaceHeader.H"
00025
00027
00042 template <class T>
00043 class BaseEBFaceFAB
00044 {
00045 public:
00047 BaseEBFaceFAB();
00048
00050
00054 BaseEBFaceFAB(const EBISBox& a_ebisBox,
00055 const Box& a_region,
00056 int a_iDir, int a_nVar);
00057
00059
00063 void
00064 define(const EBISBox& a_ebisBox,
00065 const Box& a_region,
00066 int a_iDir, int a_nVar);
00067
00069 virtual ~BaseEBFaceFAB();
00070
00072 void clear();
00073
00075 void setVal(const T& value);
00076
00078 void setVal(int ivar,const T& value);
00079
00081 bool isDefined() const;
00082
00084 int nComp() const ;
00085
00087 const BaseIFFAB<T>& getMultiValuedFAB() const;
00088
00090 BaseIFFAB<T>& getMultiValuedFAB() ;
00091
00093 const BaseFab<T>& getSingleValuedFAB() const;
00094
00096 const IntVectSet& getMultiCells() const;
00097
00099 BaseFab<T>& getSingleValuedFAB() ;
00100
00102 int direction() const;
00103
00105
00108 const Box& getRegion() const ;
00109
00111
00114 const Box& getCellRegion() const ;
00115
00117 T& operator() (const FaceIndex& a_facein, int a_nVarLoc);
00118
00120 const T&
00121 operator() (const FaceIndex& a_facein, int a_nVarLoc) const;
00122
00124 static bool preAllocatable(){ return true;}
00125
00127
00131 void copy(const Box& RegionFrom,
00132 const Interval& destInt,
00133 const Box& RegionTo,
00134 const BaseEBFaceFAB<T>& source,
00135 const Interval& srcInt);
00136
00137 BaseEBFaceFAB<T>& copy(const BaseEBFaceFAB<T>& source);
00138
00139 int size(const Box& R, const Interval& comps) const;
00140
00141 void linearOut(void* buf, const Box& R, const Interval& comps) const;
00142
00143 void linearIn(void* buf, const Box& R, const Interval& comps);
00144
00146 BaseEBFaceFAB(const Box& a_region, int a_nVar)
00147 {
00148 MayDay::Error("invalid constructor called for BaseEBFaceFAB");
00149 }
00150
00152 const EBISBox& getEBISBox() const;
00153
00155 void
00156 setCoveredFaceVal(const T& a_val,
00157 const int& a_comp,
00158 const bool& a_doMulti=true);
00159
00160 protected:
00162 BaseIFFAB<T> m_irrFAB;
00164 BaseFab<T> m_regFAB;
00165
00167 int m_nComp;
00168
00169
00170 int m_iDir;
00171
00173 Box m_regionFace;
00174
00176 Box m_region;
00177
00179 bool m_isDefined;
00180
00181 EBISBox m_ebisBox;
00182 private:
00183 void
00184 setDefaultValues();
00185
00186 void operator= (const BaseEBFaceFAB<T>& ebcin)
00187 {
00188 MayDay::Error("BaseEBFaceFAB<T>::operator= not defined");
00189 }
00190 BaseEBFaceFAB (const BaseEBFaceFAB<T>& ebcin)
00191 {
00192 MayDay::Error("BaseEBFaceFAB<T> copy constructor not defined");
00193 }
00194 };
00195
00196 #include "NamespaceFooter.H"
00197
00198 #ifndef CH_EXPLICIT_TEMPLATES
00199 #include "BaseEBFaceFABI.H"
00200 #endif // CH_EXPLICIT_TEMPLATES
00201
00202 #endif