00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _COARSEAVERAGECODIM_H_
00012 #define _COARSEAVERAGECODIM_H_
00013
00014 #include "CodimBox.H"
00015 #include "LevelData.H"
00016 #include "NamespaceHeader.H"
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 class CoarseAverageCodim
00028 {
00029
00030 public:
00031
00032
00033 CoarseAverageCodim();
00034
00035
00036 CoarseAverageCodim(const DisjointBoxLayout& a_fineGrids,
00037 const int a_codim,
00038 const int a_nComp,
00039 const int a_nRef);
00040
00041
00042 ~CoarseAverageCodim();
00043
00044
00045 void define(const DisjointBoxLayout& a_fineGrids,
00046 const int a_codim,
00047 const int a_nComp,
00048 const int a_nRef);
00049
00050
00051 bool isDefined() const;
00052
00053
00054 void average(const LevelData<CodimBox<FArrayBox> >& a_fineData);
00055
00056
00057 void averageHarmonic(const LevelData<CodimBox<FArrayBox> >& a_fineData);
00058
00059
00060 void sum(const LevelData<CodimBox<FArrayBox> >& a_fineData,
00061 const int a_refFactor = 1);
00062
00063
00064 void copyTo(LevelData<CodimBox<FArrayBox> >& a_coarseData);
00065
00066
00067 void averageToCoarse(LevelData<CodimBox<FArrayBox> >& a_coarseData,
00068 const LevelData<CodimBox<FArrayBox> >& a_fineData);
00069
00070
00071 void averageToCoarseHarmonic(LevelData<CodimBox<FArrayBox> >& a_coarseData,
00072 const LevelData<CodimBox<FArrayBox> >& a_fineData);
00073
00074 protected:
00075
00076 enum AverageType
00077 {
00078 arithmetic = 0,
00079 harmonic
00080 };
00081
00082 LevelData<CodimBox<FArrayBox> > m_coarsenedFineData;
00083
00084
00085
00086 bool m_isDefined;
00087 bool m_isAveraged;
00088 int m_nRef;
00089
00090
00091 void computeAverages(LevelData<CodimBox<FArrayBox> >& a_coarseData,
00092 const LevelData<CodimBox<FArrayBox> >& a_fineData,
00093 const AverageType a_averageType);
00094
00095
00096
00097 void average(const LevelData<CodimBox<FArrayBox> >& a_fineData,
00098 const AverageType a_averageType,
00099 const int a_refFactor);
00100
00101
00102 void averageGridData(CodimBox<FArrayBox>& a_coarsenedFine,
00103 const CodimBox<FArrayBox>& a_fine,
00104 const AverageType a_averageType,
00105 const int a_refFactor) const;
00106
00107 };
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 inline bool
00121 CoarseAverageCodim::isDefined() const
00122 {
00123 return m_isDefined;
00124 }
00125
00126 #include "NamespaceFooter.H"
00127 #endif