00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _EBTENSORCFINTERP_H_
00012 #define _EBTENSORCFINTERP_H_
00013
00014 #include <iostream>
00015 #include <math.h>
00016 #include "SPACE.H"
00017 #include <stdlib.h>
00018 #include "REAL.H"
00019 #include "IntVect.H"
00020 #include "Box.H"
00021 #include "BaseFab.H"
00022 #include "DisjointBoxLayout.H"
00023 #include "LevelData.H"
00024 #include "FArrayBox.H"
00025 #include "QuadCFStencil.H"
00026 #include "ProblemDomain.H"
00027 #include "TensorFineStencilSet.H"
00028 #include "REAL.H"
00029 #include "FArrayBox.H"
00030 #include "LevelData.H"
00031 #include "DisjointBoxLayout.H"
00032 #include "EBISLayout.H"
00033 #include "EBCellFAB.H"
00034 #include "Interval.H"
00035 #include "Stencils.H"
00036 #include "QuadCFInterp.H"
00037 #include "BaseIVFAB.H"
00038 #include "TensorCFInterp.H"
00039 #include "CornerCopier.H"
00040 #include "EBCFData.H"
00041 #include "EBQuadCFInterp.H"
00042 #include "NamespaceHeader.H"
00043
00044
00045
00046
00047
00048
00049
00050 class EBTensorCFInterp: public TensorCFInterp
00051 {
00052 public:
00053
00054
00055 EBTensorCFInterp(const DisjointBoxLayout& a_fineBoxes,
00056 const DisjointBoxLayout& a_coarBoxes,
00057 const EBISLayout& a_ebislFine,
00058 const EBISLayout& a_ebislCoar,
00059 const ProblemDomain& a_domainCoar,
00060 const int& a_nref,
00061 const int& a_nvar,
00062 const Real& a_dxFine,
00063 const LayoutData<IntVectSet>& a_cfivs,
00064 const EBIndexSpace* const a_ebisPtr = Chombo_EBIS::instance(),
00065 bool a_doEBCFCrossing = true);
00066
00067
00068 ~EBTensorCFInterp();
00069
00070
00071
00072
00073
00074 void coarseFineInterp(LevelData<EBCellFAB>& a_phif,
00075 LevelData<EBCellFAB>& a_tanGradf,
00076 const LevelData<EBCellFAB>& a_phic);
00077
00078
00079
00080
00081
00082
00083
00084
00085 void coarseFineInterpH(LevelData<EBCellFAB>& a_phif,
00086 LevelData<EBCellFAB>& a_tanGradf);
00087
00088
00089 protected:
00090
00091 void buildEBCFCornerStencils( const LayoutData<IntVectSet>& a_cfivs);
00092 void buildEBCFCrossingStencils(const LayoutData<IntVectSet>& a_cfivs);
00093
00094
00095 void interpEBCFCrossing(LevelData<EBCellFAB>& a_fineData,
00096 LevelData<EBCellFAB>& a_tanGradF,
00097 const LevelData<EBCellFAB>& a_coarData);
00098
00099 void interpEBCFCorners(LevelData<EBCellFAB>& a_fineData,
00100 LevelData<EBCellFAB>& a_tanGradF,
00101 const LevelData<EBCellFAB>& a_coarData);
00102
00103
00104
00105 RefCountedPtr<EBCFData> m_ebcfdata;
00106 RefCountedPtr<EBQuadCFInterp> m_ebquadcfi;
00107
00108 LevelData<EBCellFAB> m_ebBufferCoarsenedFine;
00109
00110 LayoutData<BaseIVFAB<VoFStencil> > m_coarStencilLo[SpaceDim];
00111 LayoutData<BaseIVFAB<VoFStencil> > m_coarStencilHi[SpaceDim];
00112 LayoutData<BaseIVFAB<VoFStencil> > m_stencilCorners;
00113 LayoutData<BaseIVFAB<VoFStencil> > m_stencilEdges;
00114
00115
00116 LayoutData<IntVectSet> m_ebcfivsLo[SpaceDim];
00117 LayoutData<IntVectSet> m_ebcfivsHi[SpaceDim];
00118
00119
00120 CornerCopier m_cornerCopier;
00121
00122 bool m_doEBCFCrossing;
00123 int m_refRat;
00124 static IntVect s_ivDebFine;
00125 static IntVect s_ivDebCoar;
00126 ProblemDomain m_domainFine, m_domainCoar;
00127
00128
00129 private:
00130
00131 EBTensorCFInterp()
00132 {
00133 MayDay::Error("invalid operator");
00134 }
00135
00136
00137 EBTensorCFInterp(EBTensorCFInterp& a_input)
00138 {
00139 MayDay::Error("invalid operator");
00140 }
00141
00142
00143 void operator=(EBTensorCFInterp& a_input)
00144 {
00145 MayDay::Error("invalid operator");
00146 }
00147
00148 };
00149
00150 #include "NamespaceFooter.H"
00151 #endif