00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _BASEEBCELLFAB_H_
00014 #define _BASEEBCELLFAB_H_
00015
00016 #include <cmath>
00017 #include <cstdlib>
00018 #include "Vector.H"
00019 #include "EBISBox.H"
00020 #include "BaseIVFAB.H"
00021 #include "IntVectSet.H"
00022 #include "BaseFab.H"
00023 #include "MiniIVFAB.H"
00024 #include "NamespaceHeader.H"
00025
00027
00039 template <class T>
00040 class BaseEBCellFAB
00041 {
00042 public:
00044 BaseEBCellFAB();
00045
00047 BaseEBCellFAB(const EBISBox& a_ebisBox, const Box& a_region, int a_nVar);
00048
00050 void define(const EBISBox& a_ebisBox, const Box& a_region, int a_nVar);
00051
00053
00066 BaseEBCellFAB(const Interval& a_comps,
00067 BaseEBCellFAB<T>& a_original);
00068
00070 virtual ~BaseEBCellFAB();
00071
00073 void clear();
00074
00076 void setVal(const T& value);
00077
00079 void setVal(int ivar,const T& value);
00080
00082 void setVal(const T& value,
00083 const Box& a_box,
00084 int a_nstart,
00085 int a_numcomp);
00086
00088 bool isDefined() const;
00089
00091 int nComp() const ;
00092
00094 const Box& getRegion() const ;
00095
00097 const Box& box() const ;
00098
00100 const IntVectSet& getMultiCells() const ;
00101
00103 const BaseIVFAB<T>& getMultiValuedFAB() const;
00104
00106 BaseIVFAB<T>& getMultiValuedFAB() ;
00107
00109 const BaseFab<T>& getSingleValuedFAB() const;
00110
00112 BaseFab<T>& getSingleValuedFAB();
00113
00124 const T& operator() (const VolIndex& a_ndin, int a_nVarLoc,
00125 int a_isKnownMultiValued=0) const;
00126
00134 T& operator() (const VolIndex& a_ndin,int a_nVarLoc,
00135 int a_isKnownMultiValued=0);
00136
00137 void fill(T* array, const VolIndex& a_ndin, const Interval& a_comps) const;
00138
00139 void assign(const T* array, const VolIndex& a_ndin, const Interval& a_comps);
00141 void copy(const Box& RegionFrom,
00142 const Interval& destInt,
00143 const Box& RegionTo,
00144 const BaseEBCellFAB<T>& source,
00145 const Interval& srcInt);
00146
00148 BaseEBCellFAB<T>& copy(const BaseEBCellFAB<T>& source);
00149
00151
00154 static int preAllocatable()
00155 {
00156 return 1;
00157 }
00158
00160 int size(const Box& R, const Interval& comps) const ;
00161
00163 void linearOut(void* buf, const Box& R, const Interval& comps) const ;
00164
00166 void linearIn(void* buf, const Box& R, const Interval& comps);
00167
00169 BaseEBCellFAB(const Box& a_region, int a_nVar)
00170 {
00171 MayDay::Error("invalid constructor called for baseebcellfab");
00172 }
00173
00175 const EBISBox& getEBISBox() const;
00176
00178 void
00179 setCoveredCellVal(const T& a_val,
00180 const int& a_comp,
00181 const bool& a_doMulti=true);
00182
00183 protected:
00184
00186
00187 MiniIVFAB<T> m_irrFAB;
00188
00190 BaseFab<T> m_regFAB;
00191
00192 EBISBox m_ebisBox;
00193
00194 int m_nComp;
00195
00197 Box m_region;
00198
00200 IntVectSet m_multiCells;
00201
00203 bool m_hasMultiCells;
00204
00206 bool m_isDefined;
00207
00208 protected:
00209 void
00210 setDefaultValues();
00211
00212 private:
00213
00214 void operator= (const BaseEBCellFAB<T>& ebcin)
00215 {
00216 MayDay::Error("operator= for baseebcellfab undefined");
00217 }
00218 BaseEBCellFAB (const BaseEBCellFAB<T>& ebcin)
00219 {
00220 MayDay::Error("copy constructor for baseebcellfab undefined");
00221 }
00222 };
00223
00224 #include "NamespaceFooter.H"
00225
00226 #ifndef CH_EXPLICIT_TEMPLATES
00227 #include "BaseEBCellFABI.H"
00228 #endif // CH_EXPLICIT_TEMPLATES
00229
00230 #endif