00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _IRREGFAB_H_
00012 #define _IRREGFAB_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 "BaseIndex.H"
00021 #include "BaseFab.H"
00022 #include "BaseIVFAB.H"
00023 #include "EBGraph.H"
00024 #include "NamespaceHeader.H"
00025
00026
00027
00028
00029
00030
00031
00032
00033 class IrregFAB: public BaseIVFAB<Real>
00034 {
00035 public:
00036
00037
00038
00039
00040
00041 IrregFAB();
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 IrregFAB(const Box& a_region,
00052 const EBGraph& a_ebgraph,
00053 const int& a_nvarin);
00054
00055
00056
00057 virtual ~IrregFAB();
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068 virtual void define(const Box& a_region,
00069 const EBGraph& a_ebgraph,
00070 const int& a_nvarin);
00071
00072
00073
00074 IrregFAB(const Box& a_region, int a_nVar)
00075 {
00076 MayDay::Error("invalid constructor called for baseebcellfab");
00077 }
00078
00079
00080 class arithOp
00081 {
00082 public:
00083 virtual void func(Real& dstVal, const Real& srcVal) = 0;
00084 };
00085
00086
00087 class additionOp: public arithOp
00088 {
00089 void func(Real& a_dstVal, const Real& a_srcVal)
00090 {
00091 a_dstVal += a_srcVal;
00092 }
00093 };
00094
00095
00096 class subtractionOp: public arithOp
00097 {
00098 void func(Real& a_dstVal, const Real& a_srcVal)
00099 {
00100 a_dstVal -= a_srcVal;
00101 }
00102 };
00103
00104
00105 class multiplicationOp: public arithOp
00106 {
00107 void func(Real& a_dstVal, const Real& a_srcVal)
00108 {
00109 a_dstVal *= a_srcVal;
00110 }
00111 };
00112
00113
00114 class divisionOp: public arithOp
00115 {
00116 void func(Real& a_dstVal, const Real& a_srcVal)
00117 {
00118 a_dstVal /= a_srcVal;
00119 }
00120 };
00121
00122
00123 IrregFAB& applyOp(const Real& a_srcVal,
00124 int a_srccomp,
00125 int a_destcomp,
00126 int a_numcomp,
00127 IrregFAB::arithOp& a_op);
00128
00129
00130 IrregFAB& applyOp(const IrregFAB& a_srcVal,
00131 const Box& a_region,
00132 int a_srccomp,
00133 int a_destcomp,
00134 int a_numcomp,
00135 IrregFAB::arithOp& a_op);
00136
00137
00138
00139
00140
00141
00142 IrregFAB& operator+=(const IrregFAB& a_ebfab);
00143
00144
00145
00146
00147
00148
00149 IrregFAB& operator+=(const Real& a_ebfab);
00150
00151
00152
00153
00154
00155
00156
00157 IrregFAB& operator-=(const IrregFAB& a_ebfab);
00158
00159
00160
00161
00162 IrregFAB& operator-=(const Real& a_ebfab);
00163
00164
00165
00166
00167
00168
00169 IrregFAB& operator*=(const IrregFAB& a_IrregFAB);
00170
00171
00172
00173
00174 IrregFAB& operator*=(const Real& a_ebfab);
00175
00176
00177
00178
00179
00180
00181 IrregFAB& operator/=(const IrregFAB& a_ebfab);
00182
00183
00184
00185
00186 IrregFAB& operator/=(const Real& a_ebfab);
00187
00188
00189
00190
00191
00192 IrregFAB& plus(const IrregFAB& a_src,
00193 int a_srccomp,
00194 int a_destcomp,
00195 int a_numcomp);
00196
00197
00198 IrregFAB& plus(const Real& a_src,
00199 int a_srccomp,
00200 int a_destcomp,
00201 int a_numcomp);
00202
00203
00204 IrregFAB& plus(const IrregFAB& a_src,
00205 const Box& a_region,
00206 int a_srccomp,
00207 int a_destcomp,
00208 int a_numcomp);
00209
00210
00211 IrregFAB& minus(const IrregFAB& a_src,
00212 int a_srccomp,
00213 int a_destcomp,
00214 int a_numcomp);
00215
00216
00217 IrregFAB& minus(const Real& a_src,
00218 int a_srccomp,
00219 int a_destcomp,
00220 int a_numcomp);
00221
00222
00223 IrregFAB& mult(const Real& a_src,
00224 int a_srccomp,
00225 int a_destcomp,
00226 int a_numcomp);
00227
00228 IrregFAB& divide(const Real& a_src,
00229 int a_srccomp,
00230 int a_destcomp,
00231 int a_numcomp);
00232
00233
00234 IrregFAB& minus(const IrregFAB& a_src,
00235 const Box& a_region,
00236 int a_srccomp,
00237 int a_destcomp,
00238 int a_numcomp);
00239
00240
00241
00242 IrregFAB& mult(const IrregFAB& a_src,
00243 int a_srccomp,
00244 int a_destcomp,
00245 int a_numcomp);
00246
00247
00248 IrregFAB& mult(const IrregFAB& a_src,
00249 const Box& a_region,
00250 int a_srccomp,
00251 int a_destcomp,
00252 int a_numcomp);
00253
00254
00255 IrregFAB& divide(const IrregFAB& a_src,
00256 int a_srccomp,
00257 int a_destcomp,
00258 int a_numcomp);
00259
00260
00261 IrregFAB& divide(const IrregFAB& a_src,
00262 const Box& a_region,
00263 int a_srccomp,
00264 int a_destcomp,
00265 int a_numcomp);
00266 protected:
00267 Box m_region;
00268
00269 private:
00270
00271
00272 void operator= (const IrregFAB& a_input)
00273 {
00274 MayDay::Error("IrregFAB operator = not defined");
00275 }
00276 IrregFAB(const IrregFAB& a_input)
00277 {
00278 MayDay::Error("invalid operator");
00279 }
00280 };
00281
00282 #include "NamespaceFooter.H"
00283 #endif