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
00020
00021
00022
00023
00024 class CoarseAverageFace
00025 {
00026 public:
00027
00028 enum averageType
00029 {
00030 arithmetic = 0,
00031 harmonic,
00032 NUM_AVERAGE_TYPES
00033 };
00034
00035
00036 CoarseAverageFace();
00037
00038
00039 CoarseAverageFace(const DisjointBoxLayout& a_fineGrids,
00040 int a_nComp, int a_nRef);
00041
00042
00043 ~CoarseAverageFace();
00044
00045
00046 void define(const DisjointBoxLayout& a_fineGrids,
00047 int a_nComp, int a_nRef);
00048
00049
00050 bool isDefined() const;
00051
00052
00053 void average(const LevelData<FluxBox>& a_fineData);
00054
00055
00056
00057 void averageHarmonic(const LevelData<FluxBox>& a_fineData);
00058
00059
00060 void sum(const LevelData<FluxBox>& a_fineData,
00061 const int a_refFactor = 1);
00062
00063
00064 void copyTo(LevelData<FluxBox>& a_coarseData);
00065
00066
00067 void averageToCoarse(LevelData<FluxBox>& a_coarse_data,
00068 const LevelData<FluxBox>& a_fine_data);
00069
00070
00071 void averageToCoarseHarmonic(LevelData<FluxBox>& a_coarse_data,
00072 const LevelData<FluxBox>& a_fine_data);
00073
00074 protected:
00075
00076
00077 bool m_isDefined;
00078 bool m_isAveraged;
00079 int m_nRef;
00080
00081
00082 LevelData<FluxBox> m_coarsenedFineData;
00083
00084
00085 void computeAverages(LevelData<FluxBox>& a_coarse_data,
00086 const LevelData<FluxBox>& a_fine_data,
00087 int a_averageType);
00088
00089
00090
00091 void average(const LevelData<FluxBox>& a_fineData,
00092 const int a_averageType,
00093 const int a_refFactor);
00094
00095
00096 void averageGridData(FluxBox& a_coarsenedFine,
00097 const FluxBox& a_fine,
00098 int a_averageType,
00099 const int a_refFactor) const;
00100
00101 };
00102
00103 #include "NamespaceFooter.H"
00104 #endif
00105
00106
00107
00108