00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _COARSEAVERAGEFACE_H_
00012 #define _COARSEAVERAGEFACE_H_
00013
00014 #include "REAL.H"
00015 #include "FluxBox.H"
00016 #include "LevelData.H"
00017 #include "NamespaceHeader.H"
00018
00019
00021
00024 class CoarseAverageFace
00025 {
00026 public:
00028 CoarseAverageFace();
00029
00031 CoarseAverageFace(const DisjointBoxLayout& a_fineGrids,
00032 int a_nComp, int a_nRef);
00033
00035 ~CoarseAverageFace();
00036
00038 void define(const DisjointBoxLayout& a_fineGrids,
00039 int a_nComp, int a_nRef);
00040
00042 bool isDefined() const;
00043
00045 void averageToCoarse(LevelData<FluxBox>& a_coarse_data,
00046 const LevelData<FluxBox>& a_fine_data);
00047
00049 void averageToCoarseHarmonic(LevelData<FluxBox>& a_coarse_data,
00050 const LevelData<FluxBox>& a_fine_data);
00051
00052 protected:
00053
00055 enum averageType {arithmetic = 0,
00056 harmonic,
00057 NUM_AVERAGE_TYPES};
00058
00059 bool m_isDefined;
00060
00061 int m_nRef;
00062
00063
00064 LevelData<FluxBox> m_coarsenedFineData;
00065
00069 void computeAverages(LevelData<FluxBox>& a_coarse_data,
00070 const LevelData<FluxBox>& a_fine_data,
00071 int a_averageType);
00072
00073
00075 void averageGridData(FluxBox& a_coarsenedFine,
00076 const FluxBox& fine,
00077 int a_averageType) const;
00078
00079
00080 };
00081
00082 #include "NamespaceFooter.H"
00083 #endif
00084
00085
00086
00087