00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _VCAGGSTENCIL_H_
00012 #define _VCAGGSTENCIL_H_
00013
00014 #include "Stencils.H"
00015 #include "BaseIndex.H"
00016 #include "Vector.H"
00017 #include "REAL.H"
00018 #include "CH_Timer.H"
00019 #include "EBCellFAB.H"
00020 #include "EBArith.H"
00021 #include "RefCountedPtr.H"
00022 #include "AggStencil.H"
00023 #include "NamespaceHeader.H"
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 class VCAggStencil: public AggStencil<EBCellFAB, EBCellFAB>
00037 {
00038 public:
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 VCAggStencil(const Vector<RefCountedPtr<BaseIndex > >& a_dstVoFs,
00049 const Vector<RefCountedPtr<BaseStencil> >& a_stencil,
00050 const EBCellFAB & a_phiData,
00051 const EBCellFAB & a_rhsData,
00052 const EBCellFAB & a_relCoef,
00053 const BaseIVFAB<Real> & a_alphaDiagWeight,
00054 const int & a_ncomp);
00055
00056
00057 virtual ~VCAggStencil()
00058 {
00059 }
00060
00061
00062 virtual void cachePhi(const EBCellFAB& a_phi) const;
00063
00064
00065 virtual void uncachePhi( EBCellFAB& a_phi) const;
00066
00067
00068
00069
00070
00071
00072
00073
00074 virtual void relax(EBCellFAB & a_phi,
00075 const EBCellFAB & a_rhs,
00076 const EBCellFAB & a_relCoef,
00077 const BaseIVFAB<Real> & a_alphaDiagWeight,
00078 const Real & a_alpha,
00079 const Real & a_beta,
00080 const int & a_varDest,
00081 const IntVect & a_color);
00082
00083
00084
00085
00086
00087
00088
00089 virtual void apply(EBCellFAB & a_lphi,
00090 const EBCellFAB & a_phi,
00091 const BaseIVFAB<Real> & a_alphaDiagWeight,
00092 const Real & a_alpha,
00093 const Real & a_beta,
00094 const int & a_varDest,
00095 const bool & a_incrmentOnly);
00096
00097 protected:
00098 Vector<IntVect> m_iv;
00099 int m_destVar;
00100 Vector<access_t> m_phiAccess;
00101 Vector<access_t> m_relAccess;
00102
00103 Vector<access_t> m_alpAccess;
00104
00105 Vector<IntVect> m_destIV;
00106 mutable Vector< Vector<Real> > m_cachePhi;
00107
00108 private:
00109
00110
00111
00112 VCAggStencil();
00113
00114
00115 VCAggStencil& operator=(const VCAggStencil& stenin);
00116
00117
00118 VCAggStencil(const VCAggStencil& stenin);
00119
00120 };
00121
00122 #include "NamespaceFooter.H"
00123 #endif