00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _MINIIFFAB_H_
00014 #define _MINIIFFAB_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 MiniIFFAB
00035 {
00036 public:
00038
00042 MiniIFFAB();
00043
00045
00051 MiniIFFAB(const IntVectSet& a_region,
00052 const EBGraph& a_ebgraph,
00053 const int& a_direction,
00054 const int& a_nvarin);
00055
00057 ~MiniIFFAB();
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 MiniIFFAB<T>& a_src,
00092 const Interval& a_srcInterval);
00093
00095
00100 void clear();
00101
00103 MiniIFFAB(const Box& a_region, int a_nVar)
00104 {
00105 MayDay::Error("invalid constructor called for baseebcellfab");
00106 }
00107
00109
00114 bool
00115 isDefined() const
00116 {
00117 return (m_isDefined);
00118 }
00119
00120
00122
00125 int nComp() const
00126 {
00127 return m_nComp;
00128 }
00129
00131
00137 T& operator() (const FaceIndex& a_face,const int& varlocin);
00138 const T& operator()(const FaceIndex& a_face,const int& varlocin) const;
00139
00140
00142 T* dataPtr(const int& a_comp);
00143
00144 T* getIndex(const FaceIndex& a_face, const int& a_comp) const;
00146 const T* dataPtr(const int& a_comp) const;
00147
00148 static int preAllocatable()
00149 {
00150 return 1;
00151 }
00152
00154 int size(const Box& R, const Interval& comps) const ;
00155
00157 void linearOut(void* buf, const Box& R, const Interval& comps) const;
00158
00160 void linearIn(void* buf, const Box& R, const Interval& comps);
00161
00163 int numFaces() const
00164 {
00165 return m_nFaces;
00166 }
00167
00168 const IntVectSet& getIVS() const
00169 {
00170 return m_ivs;
00171 }
00172
00173 static bool s_verbose;
00174 private:
00175 void setDefaultValues();
00176
00177 void getFaceSubset(Vector<FaceIndex>& a_subFaces, const Box& a_subBox) const;
00178 protected:
00179
00180 T* m_data;
00181 Vector<FaceIndex> m_faces;
00182 IntVectSet m_ivs;
00183 int m_nFaces;
00184 int m_nComp;
00185 int m_direction;
00186
00187 EBGraph m_ebgraph;
00188 bool m_isDefined;
00189 private:
00190
00191 void operator= (const MiniIFFAB<T>&)
00192 {
00193 MayDay::Error("invalid operator");
00194 }
00195 MiniIFFAB (const MiniIFFAB<T>&)
00196 {
00197 MayDay::Error("invalid operator");
00198 }
00199 };
00200
00201 #include "NamespaceFooter.H"
00202
00203 #ifndef CH_EXPLICIT_TEMPLATES
00204 #include "MiniIFFABI.H"
00205 #endif
00206
00207 #endif