00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _EBFLUXFAB_H_
00014 #define _EBFLUXFAB_H_
00015
00016 #include "Box.H"
00017 #include "Vector.H"
00018 #include "EBFaceFAB.H"
00019 #include "NamespaceHeader.H"
00020
00022
00025 class EBFluxFAB
00026 {
00027
00028 public:
00029
00031
00034 static int preAllocatable()
00035 {
00036 return 1;
00037 }
00038
00040 EBFluxFAB();
00041
00043 ~EBFluxFAB();
00044
00046 void clear();
00047
00049 EBFluxFAB& operator+=(const EBFluxFAB& a_ebfab)
00050 {
00051 for(int idir = 0; idir < SpaceDim; idir++)
00052 {
00053 (*m_fluxes[idir]) += (*a_ebfab.m_fluxes[idir]);
00054 }
00055 return *this;
00056 }
00057
00058
00060 EBFluxFAB& operator-=(const EBFluxFAB& a_ebfab)
00061 {
00062 for(int idir = 0; idir < SpaceDim; idir++)
00063 {
00064 (*m_fluxes[idir]) -= (*a_ebfab.m_fluxes[idir]);
00065 }
00066 return *this;
00067 }
00068
00069
00071 EBFluxFAB& operator*=(const EBFluxFAB& a_ebfab)
00072 {
00073 for(int idir = 0; idir < SpaceDim; idir++)
00074 {
00075 (*m_fluxes[idir]) *= (*a_ebfab.m_fluxes[idir]);
00076 }
00077 return *this;
00078 }
00079
00080
00082 EBFluxFAB& operator/=(const EBFluxFAB& a_ebfab)
00083 {
00084 for(int idir = 0; idir < SpaceDim; idir++)
00085 {
00086 (*m_fluxes[idir]) /= (*a_ebfab.m_fluxes[idir]);
00087 }
00088 return *this;
00089 }
00090
00092
00094 int nComp() const;
00095
00097 const Box& getRegion() const;
00098
00100 EBFaceFAB& operator[] (const int dir);
00101
00103 const EBFaceFAB& operator[] (const int dir) const;
00104
00105 void setVal(const Real& val);
00106
00108
00112 void copy(const Box& Rfrom,
00113 const Interval& Cdest,
00114 const Box& Rto,
00115 const EBFluxFAB& src,
00116 const Interval& Csrc);
00117
00119 bool isDefined() const;
00120
00122 EBFluxFAB(const EBISBox& a_ebisBox, const Box& bx, int n);
00123
00125 void define(const EBISBox& a_ebisBox, const Box& bx, int n);
00126
00127 int size(const Box& R, const Interval& comps) const;
00128
00129 void linearOut(void* buf, const Box& R, const Interval& comps) const;
00130
00131 void linearIn(void* buf, const Box& R, const Interval& comps);
00132
00134
00138 void alias(Vector<EBFaceFAB*> a_inputFAB);
00139
00141 EBFluxFAB(const Box& bx, int n)
00142 {
00143 MayDay::Error("invalid constructor called for EBFluxFAB");
00144 }
00145 EBISBox getEBISBox() const
00146 {
00147 return m_ebisBox;
00148 }
00149
00150 protected:
00151 void setDefaultValues();
00152
00154 bool m_aliased;
00156 Box m_region;
00157
00159 EBISBox m_ebisBox;
00160
00162 int m_nComp;
00163
00164 bool m_isDefined;
00165
00167 Tuple<EBFaceFAB*, CH_SPACEDIM> m_fluxes;
00168
00169
00170 private:
00172
00173 EBFluxFAB (const EBFluxFAB&)
00174 {
00175 MayDay::Error("bogus constructor");
00176 }
00177
00178 void operator = (const EBFluxFAB&)
00179 {
00180 MayDay::Error("bogus constructor");
00181 }
00182
00183 };
00184
00185 #include "NamespaceFooter.H"
00186 #endif