00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _EBBackwardEuler_H_
00012 #define _EBBackwardEuler_H_
00013
00014 #include <cmath>
00015 #include <cstdlib>
00016 #include <cstdio>
00017 #include <iostream>
00018 #include <iomanip>
00019 #include <fstream>
00020 #include <string>
00021 #include "AMRMultiGrid.H"
00022 #include "LevelData.H"
00023 #include "EBCellFAB.H"
00024 #include "AMRTGA.H"
00025 #include "NamespaceHeader.H"
00026
00028
00033 class EBBackwardEuler
00034 {
00035 public:
00036
00037
00039 ~EBBackwardEuler();
00040
00042
00044 EBBackwardEuler(const RefCountedPtr<AMRMultiGrid< LevelData<EBCellFAB> > > & a_solver,
00045 const AMRLevelOpFactory<LevelData<EBCellFAB> >& a_factory,
00046 const ProblemDomain& a_level0Domain,
00047 const Vector<int>& a_refRat,
00048 int a_numLevels = -1, int a_verbosity = 3);
00049
00050
00052
00055 void oneStep(Vector<LevelData<EBCellFAB>*>& a_phiNew,
00056 Vector<LevelData<EBCellFAB>*>& a_phiOld,
00057 Vector<LevelData<EBCellFAB>*>& a_source,
00058 const Real& a_dt,
00059 int a_lbase,
00060 int a_lmax,
00061 bool a_zeroPhi = true);
00062
00064 void resetAlphaAndBeta(const Real& a_alpha,
00065 const Real& a_beta);
00066
00067 protected:
00068 void solveHelm(Vector<LevelData<EBCellFAB>* >& a_ans,
00069 Vector<LevelData<EBCellFAB>* >& a_rhs,
00070 int a_lbase,
00071 int a_lmax,
00072 Real a_dt,
00073 bool a_zeroPhi);
00074
00075
00076 void createEulerRHS(Vector<LevelData<EBCellFAB>* >& a_ans,
00077 Vector<LevelData<EBCellFAB>* >& a_source,
00078 Vector<LevelData<EBCellFAB>* >& a_phiOld,
00079 int a_lbase,
00080 int a_lmax,
00081 Real a_dt);
00082 void createData(Vector<LevelData<EBCellFAB>* >& a_source,
00083 int a_lbase,
00084 int a_lmax);
00085
00086 TGAHelmOp<LevelData<EBCellFAB> >*
00087 newOp(const ProblemDomain& a_indexSpace,
00088 const AMRLevelOpFactory<LevelData<EBCellFAB> >& a_opFact);
00089
00090 private:
00091 Vector<RefCountedPtr<TGAHelmOp<LevelData<EBCellFAB> > > > m_ops;
00092 Vector< LevelData<EBCellFAB>* > m_rhst;
00093 ProblemDomain m_level0Domain;
00094 Vector<int> m_refRat;
00095 RefCountedPtr<AMRMultiGrid< LevelData<EBCellFAB> > > m_solver;
00096 int m_verbosity, m_numLevels;
00097 bool m_dataCreated;
00098
00099
00100 EBBackwardEuler(const EBBackwardEuler& a_opin)
00101 {
00102 MayDay::Error("invalid operator");
00103 }
00104
00105 void operator=(const EBBackwardEuler& a_opin)
00106 {
00107 MayDay::Error("invalid operator");
00108 }
00109
00111 EBBackwardEuler()
00112 {
00113 MayDay::Error("invalid operator");
00114 }
00115
00116
00117 };
00118
00119 #include "NamespaceFooter.H"
00120 #endif