00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _COARSEAVERAGE_H_
00012 #define _COARSEAVERAGE_H_
00013
00014 #include "REAL.H"
00015 #include "BaseFab.H"
00016 #include "FArrayBox.H"
00017 #include "LevelData.H"
00018 #include "NamespaceHeader.H"
00019
00020 class DisjointBoxLayout;
00021
00023
00030 class CoarseAverage
00031 {
00032 public:
00033
00035
00038 CoarseAverage();
00039
00041
00044 ~CoarseAverage();
00045
00047
00057 CoarseAverage(const DisjointBoxLayout& a_fine_domain,
00058 int a_numcomps,
00059 int a_ref_ratio);
00060
00062
00075 CoarseAverage(const DisjointBoxLayout& a_fine_domain,
00076 const DisjointBoxLayout& a_crse_domain,
00077 int a_numcomps,
00078 int a_ref_ratio);
00079
00081
00093 void
00094 define(const DisjointBoxLayout& a_fine_domain,
00095 int a_numcomps,
00096 int a_ref_ratio);
00097
00099
00115 void
00116 define(const DisjointBoxLayout& a_fine_domain,
00117 const DisjointBoxLayout& a_crse_domain,
00118 int a_numcomps,
00119 int a_ref_ratio);
00120
00122
00129 bool
00130 isDefined() const;
00131
00133
00153
00154
00155 void
00156 averageToCoarse(LevelData<FArrayBox>& a_coarse_data,
00157 const LevelData<FArrayBox>& a_fine_data);
00158
00159
00161 void
00162 averageToCoarseHarmonic(LevelData<FArrayBox>& a_coarse_data,
00163 const LevelData<FArrayBox>& a_fine_data);
00164
00165
00167 enum averageType {arithmetic = 0,
00168 harmonic,
00169 NUM_AVERAGE_TYPES};
00170
00171
00172 protected:
00173
00174
00178 void
00179 computeAverages(LevelData<FArrayBox>& a_coarse_data,
00180 const LevelData<FArrayBox>& a_fine_data,
00181 int a_averageType);
00182
00183 void
00184 averageGridData(BaseFab<Real>& a_coarse,
00185 const BaseFab<Real>& a_fine,
00186 int a_ref_ratio,
00187 int a_averageType)
00188 const;
00189
00190 protected:
00191 bool is_defined;
00192
00193
00194 int m_ref_ratio;
00195
00196
00197 LevelData<FArrayBox> m_coarsened_fine_data;
00198
00199
00200 bool m_is_copier_defined;
00201
00202
00203 Copier m_copier;
00204 };
00205
00206 #include "NamespaceFooter.H"
00207 #endif