00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _EBSTENVARCOEF_H_
00012 #define _EBSTENVARCOEF_H_
00013
00014 #include "Stencils.H"
00015 #include "Vector.H"
00016 #include "VolIndex.H"
00017 #include "REAL.H"
00018 #include "Box.H"
00019 #include "FArrayBox.H"
00020 #include "EBIndexSpace.H"
00021 #include "EBCellFAB.H"
00022 #include "NamespaceHeader.H"
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 class EBStenVarCoef
00033 {
00034 public:
00035
00036
00037
00038
00039 ~EBStenVarCoef()
00040 {;}
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 EBStenVarCoef(const Vector<VolIndex>& a_srcVofs,
00053 const BaseIVFAB<VoFStencil>& a_vofstencil,
00054 const Box& a_validBox,
00055 const EBISBox& a_ebisbox,
00056 const IntVect& a_ghostVect,
00057 int a_varDest);
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 void apply(EBCellFAB& a_lofphi,
00073 const EBCellFAB& a_phi,
00074 const EBCellFAB& a_alphaWeight,
00075 const Real& a_alpha,
00076 const EBCellFAB& a_betaWeight,
00077 const Real& a_beta);
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094 void relax(EBCellFAB& a_phi,
00095 const EBCellFAB& a_rhs,
00096 const EBCellFAB& a_alphaWeight,
00097 const EBCellFAB& a_betaWeight,
00098 const EBCellFAB& a_lambda,
00099 Real a_alpha, Real a_beta) const;
00100
00101
00102
00103
00104
00105 void cache(const EBCellFAB& a_phi, int ivar);
00106
00107
00108
00109
00110
00111 void uncache(EBCellFAB& a_phi, int ivar) const;
00112
00113 struct
00114 {
00115 int offset;
00116 bool multiValued;
00117 } typedef destTerm_t;
00118
00119 struct
00120 {
00121 int offset;
00122 Real weight;
00123
00124
00125 } typedef stencilTerm;
00126
00127 struct
00128 {
00129 Vector<stencilTerm> single;
00130 Vector<stencilTerm> multi;
00131 } typedef varcsten_t;
00132
00133 protected:
00134 void computeOffsets(const Vector<VolIndex>& a_srcVoFs, const BaseIVFAB<VoFStencil>& a_vofstencil);
00135
00136 Box m_box;
00137 EBISBox m_ebisBox;
00138 Box m_grownBox;
00139 IntVect m_ghostVect;
00140 int m_destVar;
00141 Vector<varcsten_t> m_stencil;
00142 Vector<destTerm_t> m_destTerms;
00143 Vector<destTerm_t> m_sourTerms;
00144 mutable Vector<Real> m_cache;
00145 mutable Vector<Real> m_cachePhi;
00146
00147 Vector<VolIndex> m_srcVoFs;
00148 private:
00149
00150 EBStenVarCoef()
00151 {
00152 MayDay::Error("invalid operator");
00153 }
00154
00155
00156 void operator=(const EBStenVarCoef& stenin)
00157 {
00158 MayDay::Error("invalid operator");
00159 }
00160
00161
00162 EBStenVarCoef(const EBStenVarCoef& stenin)
00163 {
00164 MayDay::Error("invalid operator");
00165 }
00166
00167 };
00168
00169
00170 #include "NamespaceFooter.H"
00171 #endif