00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _AGGSTENCIL_H_
00012 #define _AGGSTENCIL_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 "RefCountedPtr.H"
00020 #include "NamespaceHeader.H"
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 template <class srcData_t, class dstData_t>
00039 class AggStencil
00040 {
00041 public:
00042
00043
00044
00045
00046
00047
00048
00049 AggStencil(const Vector<RefCountedPtr<BaseIndex > >& a_dstVoFs,
00050 const Vector<RefCountedPtr<BaseStencil> >& a_stencil,
00051 const srcData_t & a_srcData,
00052 const dstData_t & a_dstData);
00053
00054
00055 ~AggStencil()
00056 {
00057 }
00058
00059
00060 void apply(dstData_t & a_lph,
00061 const srcData_t & a_phi,
00062 const int & a_varDest,
00063 const bool & a_incrementOnly) const;
00064
00065
00066
00067
00068
00069
00070
00071
00072 void apply(dstData_t & a_lph,
00073 const srcData_t & a_phi,
00074 const int & a_src,
00075 const int & a_dst,
00076 const int & a_nco,
00077 const bool & a_incrementOnly) const;
00078
00079
00080 void cache(const dstData_t& a_lph) const;
00081
00082
00083 void uncache( dstData_t& a_phi) const;
00084
00085 struct
00086 {
00087 size_t offset;
00088 int dataID;
00089 } typedef access_t;
00090
00091 typedef Vector<pair<access_t, Real> > stencil_t;
00092
00093 protected:
00094
00095 int m_destVar;
00096 Vector<stencil_t> m_ebstencil;
00097 Vector<access_t> m_dstAccess;
00098 mutable Vector< Vector<Real> > m_cacheDst;
00099
00100 private:
00101
00102
00103
00104 AggStencil();
00105
00106
00107 AggStencil& operator=(const AggStencil& stenin);
00108
00109
00110 AggStencil(const AggStencil& stenin);
00111
00112 };
00113
00114 #include "AggStencilI.H"
00115 #include "NamespaceFooter.H"
00116 #endif