00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef included_JacobiPoissonX_h
00011 #define included_JacobiPoissonX_h
00012
00013
00014 #include <string.h>
00015 #include <tbox_Pointer.h>
00016 #include <tbox_Database.h>
00017
00018
00019
00020
00021
00022 #include <mesh_StandardTagAndInitStrategy2.h>
00023 #include <plot_CartesianVizamraiDataWriter2.h>
00024 #include <pdat_CellVariable2.h>
00025 #include <pdat_SideVariable2.h>
00026 #include <hier_Patch2.h>
00027 #include <hier_PatchHierarchy2.h>
00028 #include <hier_PatchLevel2.h>
00029 #include <hier_IntVector2.h>
00030 #include <mesh_StandardTagAndInitStrategy2.h>
00031 #include <hier_Box2.h>
00032 #include <plot_VizamraiDerivedDataStrategy2.h>
00033
00034
00035 using namespace SAMRAI;
00036
00037
00048 class JacobiPoissonX
00049 : public mesh_StandardTagAndInitStrategyX
00050 , public plot_VizamraiDerivedDataStrategyX
00051 {
00052
00053 public:
00054
00064 JacobiPoissonX(
00066 const string &object_name
00067 ,
00068 tbox_Pointer<SAMRAI::tbox_Database> database
00069 );
00070
00071
00072
00074
00075 public:
00076
00087 virtual void initializeLevelData (
00089 const tbox_Pointer< SAMRAI::hier_PatchHierarchyX > hierarchy
00090 ,
00091 const int level_number
00092 , const double init_data_time
00093 , const bool can_be_refined
00094 ,
00095 const bool initial_time
00096 ,
00097 const tbox_Pointer< SAMRAI::hier_PatchLevelX > old_level
00098 = tbox_Pointer< SAMRAI::hier_PatchLevelX >((0))
00099 ,
00100 const bool allocate_data = true
00101 );
00102
00103 virtual void resetHierarchyConfiguration (
00104 const tbox_Pointer< SAMRAI::hier_PatchHierarchyX > hierarchy
00105 , const int coarsest_level
00106 , const int finest_level
00107 ) { }
00108
00110
00112
00116 void JacobiPoissonX::writeDerivedDataToStream(
00117 tbox_AbstractStream &stream
00118 , const hier_PatchX &patch
00119 , int patch_level_number
00120 , const hier_BoxX ®ion
00121 , const string &variable_name
00122 , int plot_type
00123 );
00124
00126
00127
00128
00129 public:
00130
00134 int registerVariablesWithPlotter(
00136 tbox_Pointer<plot_CartesianVizamraiDataWriterX> viz_writer
00137 ) const;
00138
00142 int jacobiIteration(
00144 const tbox_Pointer< SAMRAI::hier_PatchHierarchyX > hierarchy
00145 ,
00146 double relax_coef = 1
00147 );
00148
00149
00153 int JacobiPoissonX::computeError(
00154 const tbox_Pointer< SAMRAI::hier_PatchHierarchyX > hierarchy
00155 , double *l2norm
00156 , double *linorm
00157 ) const;
00158
00159
00160
00161
00163 private:
00171 SAMRAI::hier_VariableContext d_context_persistent;
00172
00176 SAMRAI::hier_VariableContext d_context_scratch;
00177
00181 SAMRAI::pdat_SideVariableX<double> d_diffcoef;
00182
00186 SAMRAI::pdat_CellVariableX<double> d_scalar;
00187
00191 SAMRAI::pdat_CellVariableX<double> d_source;
00192
00196 SAMRAI::pdat_CellVariableX<double> d_exact;
00197
00205 SAMRAI::pdat_CellVariableX<double> d_weight;
00206
00207
00219 int d_scalar_persistent, d_scalar_scratch, d_diffcoef_persistent
00220 , d_source_persistent, d_weight_persistent, d_exact_persistent;
00221
00223
00224 };
00225
00226
00227 #endif // included_JacobiPoissonX_h