00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _LEVELTGA_H_
00012 #define _LEVELTGA_H_
00013
00014 #include <iostream>
00015 #include <math.h>
00016 #include "SPACE.H"
00017 #include <stdlib.h>
00018 #include <REAL.H>
00019 #include <Box.H>
00020 #include <DisjointBoxLayout.H>
00021 #include <LevelData.H>
00022 #include <FArrayBox.H>
00023 #include "FluxBox.H"
00024 #include "LevelFluxRegister.H"
00025 #include <ProblemDomain.H>
00026 #include "BaseLevelTGA.H"
00027 #include "BaseLevelBackwardEuler.H"
00028 #include "NamespaceHeader.H"
00029
00030
00031
00032
00033
00034 class LevelTGA : public BaseLevelTGA<LevelData<FArrayBox>, FluxBox, LevelFluxRegister>
00035 {
00036
00037 public:
00038
00039
00040
00041
00042 LevelTGA(const Vector<DisjointBoxLayout>& a_grids,
00043 const Vector<int>& a_refRat,
00044 const ProblemDomain& a_level0Domain,
00045 RefCountedPtr<AMRLevelOpFactory<LevelData<FArrayBox> > >& a_opFact,
00046 const RefCountedPtr<AMRMultiGrid<LevelData<FArrayBox> > >& a_solver)
00047 :BaseLevelTGA<LevelData<FArrayBox>, FluxBox, LevelFluxRegister>(a_grids, a_refRat, a_level0Domain, a_opFact, a_solver)
00048 {
00049 ;
00050 }
00051
00052
00053 virtual ~LevelTGA()
00054 {
00055 }
00056
00057
00058
00059
00060
00061
00062 void computeDiffusion(LevelData<FArrayBox>& a_DiffusiveTerm,
00063 LevelData<FArrayBox>& a_phiOld,
00064 LevelData<FArrayBox>& a_src,
00065 LevelFluxRegister* a_FineFluxRegPtr,
00066 LevelFluxRegister* a_crseFluxRegPtr,
00067 const LevelData<FArrayBox>* a_crsePhiOldPtr,
00068 const LevelData<FArrayBox>* a_crsePhiNewPtr,
00069 Real a_oldTime,
00070 Real a_crseOldTime,
00071 Real a_crseNewTime,
00072 Real a_dt,
00073 int a_level);
00074
00075
00076
00077
00078 void updateSoln(LevelData<FArrayBox>& a_phiNew,
00079 LevelData<FArrayBox>& a_phiOld,
00080 LevelData<FArrayBox>& a_src,
00081 LevelFluxRegister* a_fineFluxRegPtr,
00082 LevelFluxRegister* a_crseFluxRegPtr,
00083 const LevelData<FArrayBox>* a_crsePhiOldPtr,
00084 const LevelData<FArrayBox>* a_crsePhiNewPtr,
00085 Real a_oldTime,
00086 Real a_crseOldTime,
00087 Real a_crseNewTime,
00088 Real a_dt,
00089 int a_level,
00090 bool a_zeroPhi = true,
00091 int a_fluxStartComponent = 0);
00092
00093 void setSourceGhostCells(LevelData<FArrayBox>& a_src,
00094 const DisjointBoxLayout& a_grids,
00095 int a_level);
00096 protected:
00097
00098 };
00099
00100
00101
00102
00103
00104 class LevelBackwardEuler : public BaseLevelBackwardEuler<LevelData<FArrayBox>, FluxBox, LevelFluxRegister>
00105 {
00106
00107 public:
00108
00109
00110
00111
00112 LevelBackwardEuler(const Vector<DisjointBoxLayout>& a_grids,
00113 const Vector<int>& a_refRat,
00114 const ProblemDomain& a_level0Domain,
00115 RefCountedPtr<AMRLevelOpFactory<LevelData<FArrayBox> > >& a_opFact,
00116 const RefCountedPtr<AMRMultiGrid<LevelData<FArrayBox> > >& a_solver)
00117 :BaseLevelBackwardEuler<LevelData<FArrayBox>, FluxBox, LevelFluxRegister>(a_grids, a_refRat, a_level0Domain, a_opFact, a_solver)
00118 {
00119 ;
00120 }
00121
00122
00123 virtual ~LevelBackwardEuler()
00124 {
00125 }
00126
00127
00128
00129
00130
00131
00132 void computeDiffusion(LevelData<FArrayBox>& a_DiffusiveTerm,
00133 LevelData<FArrayBox>& a_phiOld,
00134 LevelData<FArrayBox>& a_src,
00135 LevelFluxRegister* a_FineFluxRegPtr,
00136 LevelFluxRegister* a_crseFluxRegPtr,
00137 const LevelData<FArrayBox>* a_crsePhiOldPtr,
00138 const LevelData<FArrayBox>* a_crsePhiNewPtr,
00139 Real a_oldTime,
00140 Real a_crseOldTime,
00141 Real a_crseNewTime,
00142 Real a_dt,
00143 int a_level);
00144
00145
00146
00147
00148 void updateSoln(LevelData<FArrayBox>& a_phiNew,
00149 LevelData<FArrayBox>& a_phiOld,
00150 LevelData<FArrayBox>& a_src,
00151 LevelFluxRegister* a_fineFluxRegPtr,
00152 LevelFluxRegister* a_crseFluxRegPtr,
00153 const LevelData<FArrayBox>* a_crsePhiOldPtr,
00154 const LevelData<FArrayBox>* a_crsePhiNewPtr,
00155 Real a_oldTime,
00156 Real a_crseOldTime,
00157 Real a_crseNewTime,
00158 Real a_dt,
00159 int a_level,
00160 bool a_zeroPhi = true,
00161 int a_fluxStartComponent = 0);
00162
00163 void setSourceGhostCells(LevelData<FArrayBox>& a_src,
00164 const DisjointBoxLayout& a_grids,
00165 int a_level);
00166 protected:
00167
00168 };
00169
00170 #include "NamespaceFooter.H"
00171
00172 #endif