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
00027
00028
00029
00030
00031
00032
00033 class EBBackwardEuler
00034 {
00035 public:
00036
00037
00038
00039 ~EBBackwardEuler();
00040
00041
00042
00043
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
00051
00052
00053
00054
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 const bool a_kappaWeighted = false);
00063
00064
00065 void resetAlphaAndBeta(const Real& a_alpha,
00066 const Real& a_beta);
00067
00068 void
00069 computeDiffusion(Vector< LevelData<EBCellFAB>* >& a_diffusiveTerm,
00070 Vector< LevelData<EBCellFAB>* >& a_phiOld,
00071 Vector< LevelData<EBCellFAB>* >& a_src,
00072 Real a_oldTime, Real a_dt,
00073 int a_lbase, int a_lmax, bool a_zeroPhi);
00074
00075
00076 protected:
00077 void solveHelm(Vector<LevelData<EBCellFAB>* >& a_ans,
00078 Vector<LevelData<EBCellFAB>* >& a_rhs,
00079 int a_lbase,
00080 int a_lmax,
00081 Real a_dt,
00082 bool a_zeroPhi);
00083
00084
00085 void createEulerRHS(Vector<LevelData<EBCellFAB>* >& a_ans,
00086 Vector<LevelData<EBCellFAB>* >& a_source,
00087 Vector<LevelData<EBCellFAB>* >& a_phiOld,
00088 int a_lbase,
00089 int a_lmax,
00090 Real a_dt,
00091 const bool a_kappaWeighted = false);
00092 void createData(Vector<LevelData<EBCellFAB>* >& a_source,
00093 int a_lbase,
00094 int a_lmax);
00095
00096 TGAHelmOp<LevelData<EBCellFAB> >*
00097 newOp(const ProblemDomain& a_indexSpace,
00098 const AMRLevelOpFactory<LevelData<EBCellFAB> >& a_opFact);
00099
00100 private:
00101
00102
00103 Vector<TGAHelmOp<LevelData<EBCellFAB> > * > m_ops;
00104 Vector< LevelData<EBCellFAB>* > m_rhst;
00105 ProblemDomain m_level0Domain;
00106 Vector<int> m_refRat;
00107 RefCountedPtr<AMRMultiGrid< LevelData<EBCellFAB> > > m_solver;
00108 int m_verbosity, m_numLevels;
00109 bool m_dataCreated;
00110
00111
00112 EBBackwardEuler(const EBBackwardEuler& a_opin)
00113 {
00114 MayDay::Error("invalid operator");
00115 }
00116
00117 void operator=(const EBBackwardEuler& a_opin)
00118 {
00119 MayDay::Error("invalid operator");
00120 }
00121
00122
00123 EBBackwardEuler()
00124 {
00125 MayDay::Error("invalid operator");
00126 }
00127
00128
00129 };
00130
00131 #include "NamespaceFooter.H"
00132 #endif