00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _BASEIVFAB_H_
00012 #define _BASEIVFAB_H_
00013
00014 #include <cmath>
00015 #include <cstdlib>
00016 #include "SPACE.H"
00017 #include "Vector.H"
00018 #include "IntVectSet.H"
00019 #include "VolIndex.H"
00020 #include "BaseFab.H"
00021 #include "EBGraph.H"
00022 #include "NamespaceHeader.H"
00023
00024
00026
00030 template <class T>
00031 class BaseIVFAB
00032 {
00033 public:
00035
00039 BaseIVFAB();
00040
00042
00048 BaseIVFAB(const IntVectSet& a_region,
00049 const EBGraph& a_ebgraph,
00050 const int& a_nvarin);
00051
00053
00066 BaseIVFAB(const Interval& a_comps,
00067 BaseIVFAB<T>& a_original);
00068
00069
00071 virtual ~BaseIVFAB();
00072
00074
00081 virtual void define(const IntVectSet& a_region,
00082 const EBGraph& a_ebgraph,
00083 const int& a_nvarin);
00084
00086
00089 void setVal(const T& value);
00090
00092
00095 void setVal(int ivar, const T& value);
00096
00098
00101 void setVal(const T& a_value,
00102 const Box& a_box,
00103 int a_nstart,
00104 int a_numcomp);
00106 void copy(const Box& a_fromBox,
00107 const Interval& a_destInterval,
00108 const Box& a_toBox,
00109 const BaseIVFAB<T>& a_src,
00110 const Interval& a_srcInterval);
00111
00113
00117 static int preAllocatable()
00118 {
00119 return 1;
00120 }
00121
00123 int size(const Box& R, const Interval& comps) const ;
00124
00126 void linearOut(void* buf, const Box& R, const Interval& comps) const;
00127
00129 void linearIn(void* buf, const Box& R, const Interval& comps);
00130
00132
00137 virtual void clear();
00138
00140
00145 bool
00146 isDefined() const;
00147
00149
00152 int numVoFs() const;
00153
00155
00158 int nComp() const;
00159
00161
00164 const IntVectSet& getIVS() const;
00165
00167 const EBGraph& getEBGraph() const;
00168
00170
00176 T& operator() (const VolIndex& a_vof,const int& varlocin);
00177 const T& operator() (const VolIndex& a_vof,const int& varlocin) const;
00178
00179
00181 BaseIVFAB(const Box& a_region, int a_nVar)
00182 {
00183 MayDay::Error("invalid constructor called for baseebcellfab");
00184 }
00185
00187 static void setVerbose(bool a_verbose);
00188
00190 static void setVerboseDebug(bool a_verboseDebug);
00191
00193 T* dataPtr(const int& a_comp);
00194
00196 const T* dataPtr(const int& a_comp) const;
00197
00199
00202 virtual T* getIndex(const VolIndex& a_vof,const int& a_comp) const;
00203
00204 static bool s_verboseDebug;
00205
00206 private:
00207
00208
00209 protected:
00210
00211 virtual void
00212 setDefaultValues();
00213
00214
00215 T* m_data;
00216
00217 int m_nComp;
00218 int m_nVoFs;
00219
00220 EBGraph m_ebgraph;
00221
00222
00223 BaseFab<T*> m_fab;
00224 IntVectSet m_ivs;
00225 bool m_isDefined;
00226
00227 static bool s_verbose;
00228 private:
00229
00230 void operator= (const BaseIVFAB<T>& a_input)
00231 {
00232 MayDay::Error("BaseIVFAB operator = not defined");
00233 }
00234 BaseIVFAB(const BaseIVFAB<T>& a_input)
00235 {
00236 MayDay::Error("invalid operator");
00237 }
00238 };
00239
00240 #include "NamespaceFooter.H"
00241
00242 #ifndef CH_EXPLICIT_TEMPLATES
00243 #include "BaseIVFABI.H"
00244 #endif
00245
00246 #endif