00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _LEVELOP_H_
00030 #define _LEVELOP_H_
00031
00032 #include <iostream>
00033 #include <cmath>
00034 #include <cassert>
00035 #include <cstdlib>
00036
00037 #include "REAL.H"
00038 #include "IntVect.H"
00039 #include "Box.H"
00040 #include "DisjointBoxLayout.H"
00041 #include "LevelData.H"
00042 #include "FArrayBox.H"
00043 #include "LoHiSide.H"
00044 #include "ProblemDomain.H"
00045
00047
00052 class LevelOp
00053 {
00054 public:
00056 LevelOp() {};
00057
00059 virtual ~LevelOp(){};
00060
00062
00066 virtual void define(
00067 const DisjointBoxLayout& a_grids,
00069 const DisjointBoxLayout* a_baseBAPtr,
00071 Real a_dxLevel,
00073 int a_refRatio,
00075 const ProblemDomain& a_domain,
00077 bool a_homogeneousOnly,
00079 int a_ncomp = 1) = 0;
00080
00082
00086 virtual void define(const DisjointBoxLayout& a_grids,
00087 const DisjointBoxLayout* a_baseBAPtr,
00088 Real a_dxLevel,
00089 int a_refRatio,
00090 const Box& a_domain,
00091 bool a_homogeneousOnly,
00092 int a_ncomp = 1) = 0;
00093
00095
00100 virtual void define(
00101 const LevelOp* a_opfine,
00103 int a_reftoFine) = 0;
00104
00106
00110 virtual void CFInterp(
00111 LevelData<FArrayBox>& a_phif,
00113 const LevelData<FArrayBox>& a_phic) = 0;
00114
00116
00118 virtual void homogeneousCFInterp(LevelData<FArrayBox>& a_phif) = 0;
00119
00121
00123 virtual LevelOp* new_levelop() const = 0;
00124
00126 virtual bool isDefined() const = 0;
00127
00129
00134 virtual void smooth(
00135 LevelData<FArrayBox>& a_phi,
00137 const LevelData<FArrayBox>& a_rhs) = 0;
00138
00140
00143 virtual void levelPreconditioner(LevelData<FArrayBox>& a_phihat,
00144 const LevelData<FArrayBox>& a_rhshat) = 0;
00145
00147
00151 virtual void applyOpI(LevelData<FArrayBox>& a_phi,
00152 const LevelData<FArrayBox>* a_phicPtr,
00153 LevelData<FArrayBox>& a_lofPhi) = 0;
00154
00156
00160 virtual void applyOpIcfHphys(LevelData<FArrayBox>& a_phi,
00161 const LevelData<FArrayBox>* a_phicPtr,
00162 LevelData<FArrayBox>& a_lofPhi) = 0;
00163
00165
00169 virtual void applyOpHcfIphys(LevelData<FArrayBox>& a_phi,
00170 LevelData<FArrayBox>& a_lofPhi) = 0;
00171
00173
00177 virtual void applyOpH(LevelData<FArrayBox>& a_phi,
00178 LevelData<FArrayBox>& a_lofPhi) = 0;
00179
00181
00183 virtual void bottomSmoother(LevelData<FArrayBox>& a_phi,
00184 const LevelData<FArrayBox>& a_rhs) = 0;
00185
00187
00192 virtual void getFlux(
00193 FArrayBox& a_fineFlux,
00195 const FArrayBox& a_data,
00197 const DataIndex& a_datInd,
00199 int a_dir) = 0;
00200
00201
00203
00208 virtual void setConvergenceMetric(Real a_metric, int a_comp) = 0;
00209
00210
00211 };
00212
00213 #endif