00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _BASEIFFAB_H_
00014 #define _BASEIFFAB_H_
00015
00016 #include <cmath>
00017 #include <cstdlib>
00018 #include "SPACE.H"
00019 #include "Vector.H"
00020 #include "IntVectSet.H"
00021 #include "FaceIndex.H"
00022 #include "BaseFab.H"
00023 #include "EBGraph.H"
00024 #include "Arena.H"
00025 #include "NamespaceHeader.H"
00026
00027
00029
00033 template <class T>
00034 class BaseIFFAB
00035 {
00036 public:
00038
00042 BaseIFFAB();
00043
00045
00051 BaseIFFAB(const IntVectSet& a_region,
00052 const EBGraph& a_ebgraph,
00053 const int& a_direction,
00054 const int& a_nvarin);
00055
00057 ~BaseIFFAB();
00058
00060
00067 void define(const IntVectSet& a_region,
00068 const EBGraph& a_ebgraph,
00069 const int& a_direction,
00070 const int& a_nvarin);
00071
00073
00076 void setVal(const T& value);
00077
00079
00082 void setVal(int ivar, const T& value);
00083
00085
00088 void copy(const Box& a_intBox,
00089 const Interval& a_destInterval,
00090 const Box& a_toBox,
00091 const BaseIFFAB<T>& a_src,
00092 const Interval& a_srcInterval);
00093
00095
00101 void clear();
00102
00104 BaseIFFAB(const Box& a_region, int a_nVar)
00105 {
00106 MayDay::Error("invalid constructor called for baseebcellfab");
00107 }
00108
00110
00115 bool
00116 isDefined() const;
00117
00119
00122 int numFaces() const;
00123
00125
00128 int nComp() const;
00129
00131
00133
00136 int direction() const;
00137
00139
00143 const IntVectSet& getIVS() const;
00144
00146
00152 T& operator() (const FaceIndex& a_face,const int& varlocin);
00153 const T& operator()(const FaceIndex& a_face,const int& varlocin) const;
00154
00155
00157 T* dataPtr(const int& a_comp);
00158
00159 T* getIndex(const FaceIndex& a_face, const int& a_comp) const;
00161 const T* dataPtr(const int& a_comp) const;
00162
00163 const EBGraph& getEBGraph() const;
00164
00165 static int preAllocatable()
00166 {
00167 return 1;
00168 }
00169
00171 int size(const Box& R, const Interval& comps) const ;
00172
00174 void linearOut(void* buf, const Box& R, const Interval& comps) const;
00175
00177 void linearIn(void* buf, const Box& R, const Interval& comps);
00178
00180 static void setVerbose(bool a_verbose);
00181 static bool s_verbose;
00182 private:
00183 void
00184 setDefaultValues();
00185
00186 protected:
00187
00188 static Arena* s_Arena;
00189
00190
00191
00192 int getLocalVecIndex(const FaceIndex& a_face) const;
00193
00194 T* m_data;
00195 int m_truesize;
00196 int m_nComp;
00197 int m_nFaces;
00198 int m_direction;
00199
00200
00201 BaseFab<T*> m_fab;
00202 IntVectSet m_ivs;
00203 EBGraph m_ebgraph;
00204 bool m_isDefined;
00205 private:
00206
00207 void operator= (const BaseIFFAB<T>&)
00208 {
00209 MayDay::Error("invalid operator");
00210 }
00211 BaseIFFAB (const BaseIFFAB<T>&)
00212 {
00213 MayDay::Error("invalid operator");
00214 }
00215 };
00216
00217 #include "NamespaceFooter.H"
00218
00219 #ifndef CH_EXPLICIT_TEMPLATES
00220 #include "BaseIFFABI.H"
00221 #endif
00222
00223 #endif