00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _NEUMANNPOISSONEBBC_H_
00012 #define _NEUMANNPOISSONEBBC_H_
00013
00014 #include "RefCountedPtr.H"
00015
00016 #include "BaseEBBC.H"
00017 #include "BaseBCValue.H"
00018 #include "NamespaceHeader.H"
00019
00020
00021
00022
00023 class NeumannPoissonEBBC: public BaseEBBC
00024 {
00025 public:
00026
00027
00028
00029 virtual void define(const LayoutData<IntVectSet>& a_cfivs,
00030 const Real& a_factor)
00031 {
00032 ;
00033
00034 }
00035
00036 void applyEBFluxPoint(const VolIndex& a_vof,
00037 EBCellFAB& a_lphi,
00038 const EBCellFAB& a_phi,
00039 VoFIterator& a_vofit,
00040 const LayoutData<IntVectSet>& a_cfivs,
00041 const DataIndex& a_dit,
00042 const RealVect& a_probLo,
00043 const RealVect& a_dx,
00044 const Real& a_factor,
00045 const bool& a_useHomogeneous,
00046 const Real& a_time);
00047
00048 virtual void applyEBFlux(EBCellFAB& a_lphi,
00049 const EBCellFAB& a_phi,
00050 VoFIterator& a_vofit,
00051 const LayoutData<IntVectSet>& a_cfivs,
00052 const DataIndex& a_dit,
00053 const RealVect& a_probLo,
00054 const RealVect& a_dx,
00055 const Real& a_factor,
00056 const bool& a_useHomogeneous,
00057 const Real& a_time);
00058
00059
00060
00061 NeumannPoissonEBBC(const ProblemDomain& a_domain,
00062 const EBISLayout& a_layout,
00063 const RealVect& a_dx);
00064
00065
00066 virtual LayoutData<BaseIVFAB<VoFStencil> >* getFluxStencil(int ivar)
00067 {
00068 return NULL;
00069 }
00070
00071
00072
00073 virtual ~NeumannPoissonEBBC();
00074
00075
00076
00077
00078 virtual void setValue(Real a_value);
00079
00080
00081
00082
00083
00084
00085
00086 virtual int whichBC()
00087 {
00088 return 0;
00089 };
00090
00091
00092
00093
00094 virtual void setFunction(RefCountedPtr<BaseBCValue> a_flux);
00095
00096
00097
00098
00099
00100 virtual void getEBFlux(Real& a_flux,
00101 const VolIndex& a_vof,
00102 const LevelData<EBCellFAB>& a_phi,
00103 const LayoutData<IntVectSet>& a_cfivs,
00104 const DataIndex& a_dit,
00105 const RealVect& a_probLo,
00106 const RealVect& a_dx,
00107 const bool& a_useHomogeneous,
00108 const Real& a_time,
00109 const pair<int,Real>* a_cacheHint=0 );
00110
00111 public:
00112 bool m_onlyHomogeneous;
00113 bool m_isFunction;
00114
00115 Real m_value;
00116 RefCountedPtr<BaseBCValue> m_flux;
00117
00118 static int s_comp;
00119 };
00120
00121
00122
00123
00124 class NeumannPoissonEBBCFactory: public BaseEBBCFactory
00125 {
00126 public:
00127
00128
00129
00130 NeumannPoissonEBBCFactory();
00131
00132
00133
00134
00135 virtual ~NeumannPoissonEBBCFactory();
00136
00137
00138
00139
00140 virtual void setValue(Real a_value);
00141
00142
00143
00144
00145 virtual void setFunction(RefCountedPtr<BaseBCValue> a_flux);
00146
00147 virtual void setData( RefCountedPtr<LevelData<BaseIVFAB<Real> > >& a_data)
00148 {
00149 m_data = a_data;
00150 m_dataBased = true;
00151 }
00152
00153
00154
00155
00156 virtual NeumannPoissonEBBC* create(const ProblemDomain& a_domain,
00157 const EBISLayout& a_layout,
00158 const RealVect& a_dx,
00159 const IntVect* a_ghostCellsPhi=0,
00160 const IntVect* a_ghostCellsRhs=0);
00161
00162 private:
00163 bool m_onlyHomogeneous;
00164 bool m_isFunction;
00165
00166 Real m_value;
00167 RefCountedPtr<BaseBCValue> m_flux;
00168
00169 RefCountedPtr<LevelData<BaseIVFAB<Real> > > m_data;
00170 bool m_dataBased;
00171 };
00172
00173 #include "NamespaceFooter.H"
00174 #endif