00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _NONAGGREGATEDEBSTENCIL_H_
00012 #define _NONAGGREGATEDEBSTENCIL_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
00033
00034
00035 class NonAggregatedEBStencil
00036 {
00037 public:
00038
00039
00040
00041
00042 ~NonAggregatedEBStencil();
00043
00044
00045
00046
00047
00048
00049
00050
00051 NonAggregatedEBStencil(const Vector<VolIndex>& a_srcVofs,
00052 const BaseIVFAB<VoFStencil>& a_vofstencil,
00053 const Box& a_box,
00054 const EBISBox& a_ebisbox,
00055 const IntVect& a_ghostVectPhi,
00056 const IntVect& a_ghostVectLph,
00057 int a_varDest = 0,
00058 bool a_doRelaxOpt = false,
00059 int ncomp = 1,
00060 IntVectSet a_setIrreg = IntVectSet(),
00061 bool a_useInputSets = false);
00062
00063
00064
00065
00066
00067
00068
00069
00070 NonAggregatedEBStencil(const Vector<VolIndex>& a_srcVofs,
00071 const Vector<VoFStencil>& a_vofStencil,
00072 const Box& a_boxLph,
00073 const Box& a_boxPhi,
00074 const EBISBox& a_ebisBoxLph,
00075 const EBISBox& a_ebisBoxPhi,
00076 const IntVect& a_ghostVectLph,
00077 const IntVect& a_ghostVectPhi,
00078 int a_varDest = 0,
00079 int ncomp = 1,
00080 IntVectSet a_setIrreg = IntVectSet(),
00081 bool a_useInputSets = false);
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093 void
00094 apply(EBCellFAB& a_lofphi, const EBCellFAB& a_phi, bool incrementOnly = false, int ivar = 0) const;
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107 void
00108 apply(EBCellFAB& a_lofphi, const EBCellFAB& a_phi,
00109 const BaseIVFAB<Real>& a_alphaWeight,
00110 Real a_alpha, Real a_beta, bool incrementOnly = false) const;
00111
00112 void
00113 apply(EBCellFAB& a_lofphi,
00114 const EBCellFAB& a_phi,
00115 const Real a_lambdaFactor,
00116 const Real a_alpha,
00117 const BaseIVFAB<Real>& a_alphaWeight,
00118 const Real a_beta,
00119 const BaseIVFAB<Real>& a_betaWeight,
00120 Real a_one,
00121 bool incrementOnly = false) const;
00122
00123 void
00124 applyInhomDomBC(EBCellFAB& a_lofphi,
00125 const EBCellFAB& a_phi,
00126 const Real a_factor) const;
00127
00128
00129 void
00130 relax(EBCellFAB& a_phi,
00131 const EBCellFAB& a_rhs,
00132 const BaseIVFAB<Real>& a_alphaWeight,
00133 const BaseIVFAB<Real>& a_betaWeight,
00134 Real a_alpha, Real a_beta, Real a_safety) const;
00135
00136
00137 void
00138 relaxClone(EBCellFAB& a_phi,
00139 const EBCellFAB& a_phiOld,
00140 const EBCellFAB& a_rhs,
00141 const BaseIVFAB<Real>& a_alphaWeight,
00142 const BaseIVFAB<Real>& a_betaWeight,
00143 Real a_alpha, Real a_beta, Real a_safety) const;
00144
00145
00146
00147
00148
00149
00150 void
00151 cache(const EBCellFAB& a_lphi, int a_ivar = 0) const;
00152
00153
00154
00155
00156
00157
00158 void
00159 cachePhi(const EBCellFAB& a_lphi, int a_ivar = 0) const;
00160
00161
00162
00163
00164
00165
00166
00167 void
00168 uncache(EBCellFAB& a_lphi, int a_ivar = 0) const;
00169
00170
00171
00172
00173
00174
00175 void
00176 uncachePhi(EBCellFAB& a_phi, int a_ivar = 0) const;
00177
00178 protected:
00179 Vector<VolIndex> m_srcVofs;
00180 Vector<VoFStencil> m_vofStencil;
00181 EBISBox m_ebisBox;
00182 int m_destVar;
00183
00184 mutable Vector<Real> m_cacheLph;
00185 mutable Vector<Real> m_cachePhi;
00186 bool m_doRelaxOpt;
00187 int m_nComp;
00188 IntVectSet m_setIrreg;
00189 bool m_useInputSets;
00190
00191
00192 private:
00193
00194
00195
00196
00197 NonAggregatedEBStencil()
00198 {
00199 MayDay::Error("invalid operator");
00200 }
00201
00202
00203
00204
00205
00206 void
00207 operator=(const NonAggregatedEBStencil& stenin)
00208 {
00209 MayDay::Error("invalid operator");
00210 }
00211
00212
00213
00214
00215
00216 NonAggregatedEBStencil(const NonAggregatedEBStencil& stenin)
00217 {
00218 MayDay::Error("invalid operator");
00219 }
00220
00221 };
00222
00223
00224 #include "NamespaceFooter.H"
00225 #endif