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
00030
00031
00032
00033 #ifndef AMRNODESOLVERALT_H
00034 #define AMRNODESOLVERALT_H
00035
00036 #include <cstdlib>
00037 #include <cmath>
00038 #include <iostream>
00039 #include <assert.h>
00040 #include "REAL.H"
00041 #include "ProblemDomain.H"
00042 #include "NodeFArrayBox.H"
00043 #include "Vector.H"
00044 #include "IntVectSet.H"
00045 #include "DisjointBoxLayout.H"
00046 #include "LevelData.H"
00047 #include "LevelNodeSolver.H"
00048
00050
00058 class AMRNodeSolverAlt
00059 {
00060 public:
00061
00066
00068
00072 AMRNodeSolverAlt();
00073
00075
00078 AMRNodeSolverAlt(const Vector<DisjointBoxLayout>& a_gridsLevel,
00079 const Vector<ProblemDomain>& a_domainLevel,
00080 const Vector<Real>& a_dxLevel,
00081 const Vector<int>& a_refRatio,
00082 int a_numLevels,
00083 int a_lBase,
00084 const NodeLevelOp* const a_opin,
00085 int a_minLength = 1);
00086
00088
00091 AMRNodeSolverAlt(const Vector<DisjointBoxLayout>& a_gridsLevel,
00092 const Vector<Box>& a_domainLevel,
00093 const Vector<Real>& a_dxLevel,
00094 const Vector<int>& a_refRatio,
00095 int a_numLevels,
00096 int a_lBase,
00097 const NodeLevelOp* const a_opin,
00098 int a_minLength = 1);
00099
00100
00102
00104 ~AMRNodeSolverAlt();
00105
00107
00113 void define(
00114 const Vector<DisjointBoxLayout>& a_gridsLevel,
00116 const Vector<ProblemDomain>& a_domainLevel,
00118 const Vector<Real>& a_dxLevel,
00120 const Vector<int>& a_refRatio,
00122 int a_numLevels,
00124 int a_lBase,
00126 const NodeLevelOp* const a_opin,
00128 int a_minLength = 1);
00129
00130
00132
00138 void define(
00139 const Vector<DisjointBoxLayout>& a_gridsLevel,
00141 const Vector<Box>& a_domainLevel,
00143 const Vector<Real>& a_dxLevel,
00145 const Vector<int>& a_refRatio,
00147 int a_numLevels,
00149 int a_lBase,
00151 const NodeLevelOp* const a_opin,
00153 int a_minLength = 1);
00154
00161
00163
00165 bool isDefined() const;
00166
00173
00175
00178 void setNumSmoothUp(int a_numSmoothUp);
00179
00181
00184 void setNumSmoothDown(int a_numSmoothDown);
00185
00187
00189 void setTolerance(Real a_tolerance);
00190
00192
00195 void setBottomSmoothing(bool a_doBottomSmooth);
00196
00198
00201 void setMaxIter(int a_maxIter);
00202
00204
00206 void setVerbose(bool a_verbose);
00207
00208
00215
00217
00227 void solveAMR(
00228 Vector<LevelData<NodeFArrayBox> *>& a_phiLevel,
00230 const Vector<LevelData<NodeFArrayBox> *>& a_rhsLevel);
00231
00234 protected:
00235
00238 void setDefaultValues();
00239
00242 void clear();
00243
00246 Real m_tolerance;
00247
00250 int m_lBase;
00251
00254 int m_numLevels;
00255
00258 int m_finestLevel;
00259
00263 Vector<int> m_refRatio;
00264
00267 Vector<Real> m_dxLevel;
00268
00271 Vector<DisjointBoxLayout> m_gridsLevel;
00272
00275 Vector<ProblemDomain> m_domainLevel;
00276
00279 int m_numSmoothUp;
00280
00283 int m_numSmoothDown;
00284
00287 bool m_isDefined;
00288
00291 Vector<LevelNodeSolver*> m_levelSolver;
00292
00295 bool m_verbose;
00296
00297 private:
00298 AMRNodeSolverAlt(const AMRNodeSolverAlt&);
00299 AMRNodeSolverAlt& operator=(const AMRNodeSolverAlt&);
00300
00301
00302 };
00303 #endif