00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _EBPOISSONOPFACTORY_H__
00012 #define _EBPOISSONOPFACTORY_H__
00013
00014 #include "REAL.H"
00015 #include "Box.H"
00016 #include "FArrayBox.H"
00017 #include "Vector.H"
00018 #include <map>
00019 #include "RefCountedPtr.H"
00020
00021 #include "AMRMultiGrid.H"
00022
00023 #include "EBIndexSpace.H"
00024 #include "EBCellFAB.H"
00025 #include "EBCellFactory.H"
00026
00027 #include "EBLevelDataOps.H"
00028 #include "BaseEBBC.H"
00029 #include "BaseDomainBC.H"
00030 #include "CFIVS.H"
00031 #include "EBFluxRegister.H"
00032 #include "EBMGAverage.H"
00033 #include "EBMGInterp.H"
00034 #include "EBCoarsen.H"
00035 #include "PolyGeom.H"
00036 #include "EBPoissonOp.H"
00037 #include "EBLevelGrid.H"
00038 #include "NamespaceHeader.H"
00039
00040
00042
00045 class EBPoissonOpFactory: public MGLevelOpFactory<LevelData<EBCellFAB> >
00046 {
00047 public:
00049 virtual ~EBPoissonOpFactory();
00050
00052
00069 EBPoissonOpFactory(const EBLevelGrid& a_eblgs,
00070 const RealVect& a_dx,
00071 const RealVect& a_origin,
00072 const int& a_orderEB,
00073 const int& a_numPreCondIters,
00074 const int& a_relaxType,
00075 RefCountedPtr<BaseDomainBCFactory> a_domainBCFactory,
00076 RefCountedPtr<BaseEBBCFactory> a_ebBcFactory,
00077 const Real& a_alpha,
00078 const Real& a_beta,
00079 const IntVect& a_ghostCellsPhi,
00080 const IntVect& a_ghostCellsRhs);
00081
00083 virtual EBPoissonOp*
00084 MGnewOp(const ProblemDomain& a_FineindexSpace,
00085 int a_depth,
00086 bool a_homoOnly = true);
00087
00088 EBPoissonOp* createOperator(const EBLevelGrid& a_eblgMGLevel,
00089 const EBLevelGrid& a_eblgCoarMG,
00090 const bool& a_hasMGObjects,
00091 const RealVect& a_dxMGLevel);
00092
00093
00094 protected:
00095 int m_orderEB;
00096 int m_numPreCondIters;
00097 int m_relaxType;
00098
00099
00100 EBLevelGrid m_eblg;
00101 Vector<EBLevelGrid> m_eblgVecMG;
00102
00103 RealVect m_dx;
00104 RealVect m_origin;
00105 Real m_alpha;
00106 Real m_beta;
00107 const IntVect m_ghostCellsPhi;
00108 const IntVect m_ghostCellsRHS;
00109
00110 RefCountedPtr<BaseDomainBCFactory> m_domainBCFactory;
00111 RefCountedPtr<BaseEBBCFactory> m_ebBCFactory;
00112
00113 private:
00115 EBPoissonOpFactory()
00116 {
00117 MayDay::Error("invalid operator");
00118 }
00119
00120
00121 EBPoissonOpFactory(const EBPoissonOpFactory& a_opin)
00122 {
00123 MayDay::Error("invalid operator");
00124 }
00125
00126 void operator=(const EBPoissonOpFactory& a_opin)
00127 {
00128 MayDay::Error("invalid operator");
00129 }
00130 };
00131
00132 #include "NamespaceFooter.H"
00133 #endif