00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013
00014 #ifndef NODELEVELOP_H
00015 #define NODELEVELOP_H
00016
00017 #include <iostream>
00018 #include <math.h>
00019 #include "SPACE.H"
00020 #include <stdlib.h>
00021 #include "REAL.H"
00022 #include "ProblemDomain.H"
00023 #include "DisjointBoxLayout.H"
00024 #include "LevelData.H"
00025 #include "NodeFArrayBox.H"
00026 #include "IntVectSet.H"
00027
00028 #include "UsingNamespace.H"
00029
00031
00032 class NodeLevelOp
00038 {
00039
00040 public:
00041
00046
00048
00050 NodeLevelOp() {};
00051
00053
00055
00056
00057 virtual NodeLevelOp* new_levelop() const = 0;
00058
00060
00062 virtual ~NodeLevelOp(){};
00063
00065
00069 virtual void define(
00070 const DisjointBoxLayout& a_grids,
00072 const DisjointBoxLayout* a_gridsCoarsePtr,
00074 Real a_dx,
00076 int a_refToCoarse,
00078 const ProblemDomain& a_domain,
00080 bool a_homogeneousOnly = false,
00082 int a_ncomp = 1,
00084 bool a_verbose = false
00085 ) = 0;
00086
00088
00092 virtual void define(
00093 const DisjointBoxLayout& a_grids,
00095 const DisjointBoxLayout* a_gridsCoarsePtr,
00097 Real a_dx,
00099 int a_refToCoarse,
00101 const Box& a_domain,
00103 bool a_homogeneousOnly = false,
00105 int a_ncomp = 1,
00107 bool a_verbose = false
00108 ) = 0;
00109
00111
00115 virtual void define(
00116 const NodeLevelOp* a_opfine,
00118 int a_refToFine
00119 ) = 0;
00120
00127
00129
00132 virtual bool isDefined() const = 0;
00133
00140
00143 virtual void setVerbose( bool a_verbose ){ m_verbose = a_verbose ; } ;
00144
00151
00153
00157 virtual void CFInterp(
00158 LevelData<NodeFArrayBox>& a_phi,
00160 const LevelData<NodeFArrayBox>& a_phiCoarse,
00162 bool a_inhomogeneous
00163 ) = 0;
00164
00166
00169 virtual void homogeneousCFInterp(
00170 LevelData<NodeFArrayBox>& a_phi
00171 ) = 0;
00172
00179
00181
00190 virtual void residualI(
00191 LevelData<NodeFArrayBox>& a_resid,
00193 LevelData<NodeFArrayBox>& a_phi,
00195 const LevelData<NodeFArrayBox>* a_phiCoarsePtr,
00197 const LevelData<NodeFArrayBox>& a_rhs) = 0;
00198
00199
00201
00210 virtual void residualH(
00211 LevelData<NodeFArrayBox>& a_resid,
00213 LevelData<NodeFArrayBox>& a_phi,
00215 const LevelData<NodeFArrayBox>& a_rhs) = 0;
00216
00217
00219
00228 virtual void residualIcfHphys(
00229 LevelData<NodeFArrayBox>& a_resid,
00231 LevelData<NodeFArrayBox>& a_phi,
00233 const LevelData<NodeFArrayBox>* a_phiCoarsePtr,
00235 const LevelData<NodeFArrayBox>& a_rhs) = 0;
00236
00237
00239
00248 virtual void residualHcfIphys(
00249 LevelData<NodeFArrayBox>& a_resid,
00251 LevelData<NodeFArrayBox>& a_phi,
00253 const LevelData<NodeFArrayBox>& a_rhs) = 0;
00254
00261
00263
00271 virtual void applyOpI(
00272 LevelData<NodeFArrayBox>& a_LofPhi,
00274 LevelData<NodeFArrayBox>& a_phi,
00276 const LevelData<NodeFArrayBox>* a_phiCoarsePtr
00277 ) = 0;
00278
00280
00288 virtual void applyOpH(
00289 LevelData<NodeFArrayBox>& a_LofPhi,
00291 LevelData<NodeFArrayBox>& a_phi
00292 ) = 0;
00293
00295
00303 virtual void applyOpIcfHphys(
00304 LevelData<NodeFArrayBox>& a_LofPhi,
00306 LevelData<NodeFArrayBox>& a_phi,
00308 const LevelData<NodeFArrayBox>* a_phiCoarsePtr
00309 ) = 0;
00310
00312
00320 virtual void applyOpHcfIphys(
00321 LevelData<NodeFArrayBox>& a_LofPhi,
00323 LevelData<NodeFArrayBox>& a_phi
00324 ) = 0;
00325
00332
00334
00342 virtual void gradient(
00343 LevelData<NodeFArrayBox>& a_gradPhi,
00345 LevelData<NodeFArrayBox>& a_phi,
00347 const LevelData<NodeFArrayBox>* a_phiCoarsePtr
00348 ) = 0;
00349
00356
00358
00363 virtual void smooth(
00364 LevelData<NodeFArrayBox>& a_phi,
00366 const LevelData<NodeFArrayBox>& a_rhs
00367 ) = 0;
00368
00370
00374 virtual void levelPreconditioner(
00375 LevelData<NodeFArrayBox>& a_phihat,
00377 const LevelData<NodeFArrayBox>& a_rhshat
00378 ) = 0;
00379
00381
00383 virtual void bottomSmoother(
00384 LevelData<NodeFArrayBox>& a_phi,
00386 const LevelData<NodeFArrayBox>& a_rhs) = 0;
00387
00390
00391
00394 ProblemDomain m_domain;
00395
00398 LayoutData< Vector<IntVectSet> > m_IVSVext;
00399
00402 bool m_verbose;
00403 };
00404
00405 #endif