00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _FOURTHORDERINTERPSTENCIL_H_
00012 #define _FOURTHORDERINTERPSTENCIL_H_
00013
00014 #include "FArrayBox.H"
00015 #include "IntVect.H"
00016 #include "Vector.H"
00017 #include "NamespaceHeader.H"
00018
00019
00020
00021
00022
00023 class FourthOrderInterpStencil
00024 {
00025 public:
00026
00027
00028
00029
00030 FourthOrderInterpStencil();
00031
00032
00033 FourthOrderInterpStencil(
00034 const IntVect& a_bdryOffset,
00035
00036 const int& a_refineCoarse,
00037
00038 const int& a_degree = 3,
00039
00040 Interval a_fixedDims = Interval() )
00041 {
00042 define(a_bdryOffset, a_refineCoarse, a_degree, a_fixedDims);
00043 }
00044
00045
00046
00047
00048
00049
00050 ~FourthOrderInterpStencil();
00051
00052
00053
00054
00055
00056 void define(
00057 const IntVect& a_bdryOffset,
00058
00059 const int& a_refineCoarse,
00060
00061 const int& a_degree = 3,
00062
00063 Interval a_fixedDims = Interval() );
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075 void fillFine(
00076 FArrayBox& a_fineFab,
00077
00078 const FArrayBox& a_coarseFab,
00079
00080 const IntVect& a_coarseDataCell,
00081
00082 const IntVect& a_coarseToFineOffset = IntVect::Zero) const;
00083
00084 protected:
00085
00086
00087 int m_refineCoarse;
00088
00089
00090 int m_degree;
00091
00092
00093 Interval m_fixedDims;
00094
00095
00096 IntVect m_refineVect;
00097
00098
00099 IntVect m_bdryOffset;
00100
00101
00102 Box m_baseFineBox;
00103
00104 public:
00105
00106 int m_stencilSize;
00107
00108
00109 Vector<IntVect> m_coarseBaseIndices;
00110
00111
00112 FArrayBox m_coarseToFineFab;
00113
00114 protected:
00115
00116
00117 bool m_defined;
00118
00119 Real power1d0avg(Real a_lower,
00120 Real a_upper,
00121 int a_ipwr) const;
00122
00123 Real power1dcoarseind0avg(int a_offset,
00124 int a_ipwr) const;
00125
00126 Real power1dfineind0avg(int a_offset,
00127 int a_ipwr) const;
00128
00129 private:
00130
00131
00132 void operator=(const FourthOrderInterpStencil& a_input)
00133 {
00134 MayDay::Error("invalid operator");
00135 }
00136
00137
00138 FourthOrderInterpStencil(const FourthOrderInterpStencil& a_input)
00139 {
00140 MayDay::Error("invalid operator");
00141 }
00142 };
00143
00144 #include "NamespaceFooter.H"
00145 #endif