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
00028
00029
00030
00031
00032
00033 template <class T>
00034 class MiniIFFAB
00035 {
00036 public:
00037
00038
00039
00040
00041
00042 MiniIFFAB();
00043
00044
00045
00046
00047
00048
00049
00050
00051 MiniIFFAB(const Box& a_box,
00052 const EBGraph& a_ebgraph,
00053 const int& a_direction,
00054 const int& a_nvarin);
00055
00056
00057
00058
00059
00060
00061 MiniIFFAB(const IntVectSet& a_ivs,
00062 const EBGraph& a_ebgraph,
00063 const int& a_direction,
00064 const int& a_nvarin);
00065
00066
00067
00068
00069
00070
00071 void define(const IntVectSet& a_ivs,
00072 const EBGraph& a_ebgraph,
00073 const int& a_direction,
00074 const int& a_nvarin);
00075
00076
00077
00078
00079
00080
00081 MiniIFFAB(const Interval& a_comps,
00082 MiniIFFAB<T>& a_original);
00083
00084 ~MiniIFFAB();
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094 void define(const Box& a_box,
00095 const EBGraph& a_ebgraph,
00096 const int& a_direction,
00097 const int& a_nvarin);
00098
00099
00100 long offset(const FaceIndex& a_vof, const int& a_ivar) const
00101 {
00102 const T* conval = &((*this)(a_vof, a_ivar));
00103 long roffset = (long)(conval-dataPtr(0));
00104 return roffset;
00105 }
00106
00107
00108
00109
00110
00111 void setVal(const T& value);
00112
00113
00114
00115
00116
00117 void setVal(int ivar, const T& value);
00118
00119
00120
00121
00122
00123 void copy(const Box& a_intBox,
00124 const Interval& a_destInterval,
00125 const Box& a_toBox,
00126 const MiniIFFAB<T>& a_src,
00127 const Interval& a_srcInterval);
00128
00129
00130
00131
00132
00133
00134
00135 void clear();
00136
00137
00138 MiniIFFAB(const Box& a_region, int a_nVar)
00139 {
00140 MayDay::Error("invalid constructor called for baseebcellfab");
00141 }
00142
00143
00144
00145
00146
00147
00148
00149 bool
00150 isDefined() const
00151 {
00152 return (m_isDefined);
00153 }
00154
00155
00156
00157
00158
00159
00160 int nComp() const
00161 {
00162 return m_nComp;
00163 }
00164
00165
00166
00167
00168
00169
00170
00171
00172 T& operator() (const FaceIndex& a_face,const int& varlocin);
00173 const T& operator()(const FaceIndex& a_face,const int& varlocin) const;
00174
00175
00176
00177 T* dataPtr(const int& a_comp);
00178
00179 T* getIndex(const FaceIndex& a_face, const int& a_comp) const;
00180
00181 const T* dataPtr(const int& a_comp) const;
00182
00183 static int preAllocatable()
00184 {
00185 return 1;
00186 }
00187
00188
00189 int size(const Box& R, const Interval& comps) const ;
00190
00191
00192 void linearOut(void* buf, const Box& R, const Interval& comps) const;
00193
00194
00195 void linearIn(void* buf, const Box& R, const Interval& comps);
00196
00197
00198 int numFaces() const
00199 {
00200 return m_nFaces;
00201 }
00202
00203
00204 const Vector<FaceIndex>& getFaces() const
00205 {
00206 return m_faces;
00207 }
00208
00209 static bool s_verbose;
00210
00211 Box m_box;
00212 EBGraph m_ebgraph;
00213
00214 private:
00215 void setDefaultValues();
00216
00217 void getFaceSubset(Vector<FaceIndex>& a_subFaces, const Box& a_subBox) const;
00218 protected:
00219
00220 T* m_data;
00221 Vector<FaceIndex> m_faces;
00222 int m_nFaces;
00223 int m_nComp;
00224 int m_direction;
00225 bool m_aliased = false;
00226 bool m_isDefined;
00227 private:
00228
00229 void operator= (const MiniIFFAB<T>&)
00230 {
00231 MayDay::Error("invalid operator");
00232 }
00233 MiniIFFAB (const MiniIFFAB<T>&)
00234 {
00235 MayDay::Error("invalid operator");
00236 }
00237 };
00238
00239 #include "NamespaceFooter.H"
00240
00241 #ifndef CH_EXPLICIT_TEMPLATES
00242 #include "MiniIFFABI.H"
00243 #endif
00244
00245 #endif