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
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 #ifndef _QUADCFSTENCIL_H_
00053 #define _QUADCFSTENCIL_H_
00054
00055 #include <iostream>
00056 #include <math.h>
00057 #include <assert.h>
00058 #include <stdlib.h>
00059 #include "REAL.H"
00060 #include "IntVect.H"
00061 #include "Box.H"
00062 #include "DisjointBoxLayout.H"
00063 #include "FArrayBox.H"
00064 #include "IntVectSet.H"
00065 #include "CFStencil.H"
00066 #include "DerivStencil.H"
00067
00069
00074 class QuadCFStencil
00075 {
00076
00077 public:
00079
00081
00089 Real computeSecondDerivative(
00090 const BaseFab<Real> & a_phic,
00091 int a_derivdir,
00092 int a_ivar,
00093 const IntVect& a_ivin,
00094 Real a_dx) const;
00095
00097
00105 Real computeFirstDerivative(
00106 const BaseFab<Real> & a_phic,
00107 int a_derivdir,
00108 int a_ivar,
00109 const IntVect& a_ivin,
00110 Real a_dx) const;
00111
00113
00123 Real computeMixedDerivative(
00124 const BaseFab<Real> & a_phic,
00125 int a_ivar,
00126 const IntVect& a_ivin,
00127 Real a_dx) const;
00128
00130 QuadCFStencil();
00131
00133 ~QuadCFStencil();
00134
00136 QuadCFStencil(
00137 const Box& a_fine_domain,
00138 const Box& a_grid,
00139 const DisjointBoxLayout& a_fineBoxes,
00140 const DisjointBoxLayout& a_coarBoxes,
00141 int a_refRatio,
00142 int a_direction,
00143 Side::LoHiSide a_hiorlo);
00144
00146 QuadCFStencil(
00147 const ProblemDomain& a_fine_domain,
00148 const Box& a_grid,
00149 const DisjointBoxLayout& a_fineBoxes,
00150 const DisjointBoxLayout& a_coarBoxes,
00151 int a_refRatio,
00152 int a_direction,
00153 Side::LoHiSide a_hiorlo);
00154
00156 void define(
00157 const Box& a_fine_domain,
00158 const Box& a_grid,
00159 const DisjointBoxLayout& a_fineBoxes,
00160 const DisjointBoxLayout& a_coarBoxes,
00161 int a_refRatio,
00162 int a_direction,
00163 Side::LoHiSide a_hiorlo);
00164
00166 void define(
00167 const ProblemDomain& a_fine_domain,
00168 const Box& a_grid,
00169 const DisjointBoxLayout& a_fineBoxes,
00170 const DisjointBoxLayout& a_coarBoxes,
00171 int a_refRatio,
00172 int a_direction,
00173 Side::LoHiSide a_hiorlo);
00174
00176
00178
00181 bool isDefined() const;
00182
00184
00187 bool isEmpty() const
00188 {
00189 assert(m_baseCFS.isDefined());
00190 return m_baseCFS.isEmpty();
00191 }
00192
00194
00196 const IntVectSet& getFineIVS() const
00197 {
00198 assert(m_baseCFS.isDefined());
00199 return m_baseCFS.getFineIVS();
00200 }
00201
00203
00205 const IntVectSet& getCoarIVS() const
00206 {
00207 assert(m_baseCFS.isDefined());
00208 return m_baseCFS.getCoarIVS();
00209 }
00210
00211
00212 protected:
00213
00214
00215 bool m_isDefined;
00216
00217
00218 int m_direction;
00219
00221
00227 IntVectSet m_ivsStandard;
00228
00230
00234 IntVectSet m_ivsQuadd;
00235
00242
00243
00247 BaseFab<DerivStencil> m_mixedSten;
00248
00250
00254 BaseFab<DerivStencil> m_second[SpaceDim];
00255
00257
00261 BaseFab<DerivStencil> m_firstD[SpaceDim];
00262
00264
00268 BaseFab<bool> m_dropOrd;
00269
00271 CFStencil m_baseCFS;
00272
00273
00274 private:
00275
00276
00277
00278 void setDefaultValues();
00279
00280
00281
00282
00283 void addFabToSten(const BaseFab<Real> & fabin_a,
00284 DerivStencil& sten_a);
00285
00286
00287 void operator= (const QuadCFStencil& cfs_in)
00288 {
00289 }
00290
00291
00292 QuadCFStencil(const QuadCFStencil& cfs_in)
00293 {
00294 }
00295
00296 };
00297
00298 #endif