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 <math.h>
00034 #include <assert.h>
00035 #include <stdlib.h>
00036 #include <REAL.H>
00037 #include <IntVect.H>
00038 #include <Box.H>
00039 #include <DisjointBoxLayout.H>
00040 #include <LevelData.H>
00041 #include <FArrayBox.H>
00042 #include <LoHiSide.H>
00043 #include <ProblemDomain.H>
00044
00046
00051 class LevelOp
00052 {
00053
00054 public:
00055
00057
00059
00063 virtual
00064 void CFInterp(
00065 LevelData<FArrayBox>& a_phi,
00066 const LevelData<FArrayBox>& a_phiCoarse
00067 ) = 0;
00068
00070
00073 virtual
00074 void homogeneousCFInterp(LevelData<FArrayBox>& a_phi) = 0;
00075
00077 LevelOp() {};
00078
00080
00083 virtual LevelOp* new_levelop() const = 0;
00084
00086 virtual bool isDefined() const = 0;
00087
00089
00093 virtual void define(
00094 const DisjointBoxLayout& Ba,
00095 const DisjointBoxLayout* base_ba,
00096 Real DxLevel,
00097 int refratio,
00098 const Box& domf,
00099 bool homogeneousOnly,
00100 int ncomp = 1) = 0;
00101
00103
00107 virtual void define(
00108 const DisjointBoxLayout& Ba,
00109 const DisjointBoxLayout* base_ba,
00110 Real DxLevel,
00111 int refratio,
00112 const ProblemDomain& domf,
00113 bool homogeneousOnly,
00114 int ncomp = 1) = 0;
00115
00116
00118
00124 virtual void define(
00125 const LevelOp* opfine,
00126 int reftofine) = 0;
00127
00129 virtual ~LevelOp(){};
00130
00132
00138 virtual void smooth(
00139 LevelData<FArrayBox>& phi,
00140 const LevelData<FArrayBox>& rhs
00141 ) = 0;
00142
00143
00145
00148 virtual void levelPreconditioner(
00149 LevelData<FArrayBox>& a_phihat,
00150 const LevelData<FArrayBox>& a_rhshat
00151 ) = 0;
00152
00153
00155
00159 virtual void applyOpI(
00160 LevelData<FArrayBox>& phi,
00161 const LevelData<FArrayBox>* phiCoarse,
00162 LevelData<FArrayBox>& LOfPhi
00163 ) = 0;
00164
00166
00170 virtual void applyOpIcfHphys(
00171 LevelData<FArrayBox>& phi,
00172 const LevelData<FArrayBox>* phiCoarse,
00173 LevelData<FArrayBox>& LOfPhi
00174 ) = 0;
00175
00177
00181 virtual void applyOpHcfIphys(
00182 LevelData<FArrayBox>& phi,
00183 LevelData<FArrayBox>& LOfPhi
00184 ) = 0;
00185
00187
00191 virtual void applyOpH(
00192 LevelData<FArrayBox>& phi,
00193 LevelData<FArrayBox>& LOfPhi
00194 ) = 0;
00195
00197
00200 virtual void bottomSmoother(
00201 LevelData<FArrayBox>& phi,
00202 const LevelData<FArrayBox>& rhs) = 0;
00203
00205
00211 virtual void
00212 getFlux(
00213 FArrayBox& flux,
00214 const FArrayBox& data,
00215 const DataIndex& a_datInd,
00216 int dir) = 0;
00217
00218 };
00219
00220
00221
00222
00223 #endif
00224