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
00041
00042
00043
00044
00045 class EBPoissonOpFactory: public MGLevelOpFactory<LevelData<EBCellFAB> >
00046 {
00047 public:
00048
00049 virtual ~EBPoissonOpFactory();
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
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 bool a_forceNocoarser = false);
00082
00083
00084 virtual EBPoissonOp*
00085 MGnewOp(const ProblemDomain& a_FineindexSpace,
00086 int a_depth,
00087 bool a_homoOnly = true);
00088
00089 EBPoissonOp* createOperator(const EBLevelGrid& a_eblgMGLevel,
00090 const EBLevelGrid& a_eblgCoarMG,
00091 const bool& a_hasMGObjects,
00092 const RealVect& a_dxMGLevel);
00093
00094
00095 protected:
00096 int m_orderEB;
00097 int m_numPreCondIters;
00098 int m_relaxType;
00099
00100
00101 EBLevelGrid m_eblg;
00102 Vector<EBLevelGrid> m_eblgVecMG;
00103
00104 RealVect m_dx;
00105 RealVect m_origin;
00106 Real m_alpha;
00107 Real m_beta;
00108 const IntVect m_ghostCellsPhi;
00109 const IntVect m_ghostCellsRHS;
00110
00111 RefCountedPtr<BaseDomainBCFactory> m_domainBCFactory;
00112 RefCountedPtr<BaseEBBCFactory> m_ebBCFactory;
00113
00114 private:
00115
00116 EBPoissonOpFactory()
00117 {
00118 MayDay::Error("invalid operator");
00119 }
00120
00121
00122 EBPoissonOpFactory(const EBPoissonOpFactory& a_opin)
00123 {
00124 MayDay::Error("invalid operator");
00125 }
00126
00127 void operator=(const EBPoissonOpFactory& a_opin)
00128 {
00129 MayDay::Error("invalid operator");
00130 }
00131 };
00132
00133 #include "NamespaceFooter.H"
00134 #endif