00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _IVSFAB_H_
00012 #define _IVSFAB_H_
00013
00014 #include <cmath>
00015 #include <cstdlib>
00016 #include "SPACE.H"
00017 #include "Vector.H"
00018 #include "IntVectSet.H"
00019 #include "IntVect.H"
00020 #include "BaseFab.H"
00021 #include "NamespaceHeader.H"
00022
00023
00025
00029 template <class T>
00030 class IVSFAB
00031 {
00032 public:
00034
00038 IVSFAB();
00039
00041
00043 IVSFAB(const IntVectSet& a_region,
00044 const int& a_nvarin);
00045
00047 ~IVSFAB();
00048
00050
00052 void define(const IntVectSet& a_region,
00053 const int& a_nvarin);
00054
00056
00059 void setVal(const T& value);
00060
00062 void copy(const Box& a_fromBox,
00063 const Interval& a_destInterval,
00064 const Box& a_toBox,
00065 const IVSFAB<T>& a_src,
00066 const Interval& a_srcInterval);
00067
00069
00073 static int preAllocatable()
00074 {
00075 return 1;
00076 }
00077
00079 int size(const Box& R, const Interval& comps) const ;
00080
00082 void linearOut(void* buf, const Box& R, const Interval& comps) const;
00083
00085 void linearIn(void* buf, const Box& R, const Interval& comps);
00086
00088
00093 void clear();
00094
00096
00101 bool
00102 isDefined() const;
00103
00105
00108 int numIvs() const;
00109
00111
00114 int nComp() const;
00115
00117
00120 const IntVectSet& getIVS() const;
00121
00123
00129 T& operator() (const IntVect& a_iv,const int& varlocin);
00130 const T& operator() (const IntVect& a_iv,const int& varlocin) const;
00131
00133
00136 const T* dataPtr(const int& a_comp) const;
00137
00139
00142 T* dataPtr(const int& a_comp) ;
00143
00145 IVSFAB(const Box& a_region, int a_nVar)
00146 {
00147 MayDay::Error("invalid constructor called ");
00148 }
00149
00151
00154 const int* loVect() const;
00155
00157
00160 const int* hiVect() const;
00161
00163 static void setVerbose(bool a_verbose);
00164 private:
00165 void
00166 setDefaultValues();
00167
00168 protected:
00169
00170 int getIndex(const IntVect& a_iv,const int& a_comp) const;
00171
00172
00173 T* m_dataPtr;
00174 int m_nComp;
00175 int m_nIvs;
00176 IntVect m_loVect;
00177 IntVect m_hiVect;
00178
00179
00180
00181
00182
00183
00184
00185 BaseFab<int> m_ivmap;
00186 IntVectSet m_ivs;
00187 bool m_isDefined;
00188
00189 static bool s_verbose;
00190 private:
00191
00192 IVSFAB<T>& operator= (const IVSFAB<T>&);
00193 IVSFAB (const IVSFAB<T>&);
00194 };
00195
00196 #include "NamespaceFooter.H"
00197 #include "IVSFABI.H"
00198
00199 #endif