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
00021
00023 class NeumannPoissonEBBC: public BaseEBBC
00024 {
00025 public:
00027
00029 virtual void define(const LayoutData<IntVectSet>& a_cfivs,
00030 const Real& a_factor)
00031 {
00032 ;
00033
00034 }
00035
00036 virtual void applyEBFlux(EBCellFAB& a_lphi,
00037 const EBCellFAB& a_phi,
00038 VoFIterator& a_vofit,
00039 const LayoutData<IntVectSet>& a_cfivs,
00040 const DataIndex& a_dit,
00041 const RealVect& a_probLo,
00042 const RealVect& a_dx,
00043 const Real& a_factor,
00044 const bool& a_useHomogeneous,
00045 const Real& a_time);
00047
00049 NeumannPoissonEBBC(const ProblemDomain& a_domain,
00050 const EBISLayout& a_layout,
00051 const RealVect& a_dx);
00052
00053
00054 virtual LayoutData<BaseIVFAB<VoFStencil> >* getFluxStencil(int ivar)
00055 {
00056 return NULL;
00057 }
00059
00061 virtual ~NeumannPoissonEBBC();
00062
00064
00066 virtual void setValue(Real a_value);
00067
00069
00074 virtual int whichBC()
00075 {
00076 return 0;
00077 };
00078
00080
00082 virtual void setFunction(RefCountedPtr<BaseBCValue> a_flux);
00083
00085
00088 virtual void getEBFlux(Real& a_flux,
00089 const VolIndex& a_vof,
00090 const LevelData<EBCellFAB>& a_phi,
00091 const LayoutData<IntVectSet>& a_cfivs,
00092 const DataIndex& a_dit,
00093 const RealVect& a_probLo,
00094 const RealVect& a_dx,
00095 const bool& a_useHomogeneous,
00096 const Real& a_time,
00097 const pair<int,Real>* a_cacheHint=0 );
00098
00099 public:
00100 bool m_onlyHomogeneous;
00101 bool m_isFunction;
00102
00103 Real m_value;
00104 RefCountedPtr<BaseBCValue> m_flux;
00105 };
00106
00108
00110 class NeumannPoissonEBBCFactory: public BaseEBBCFactory
00111 {
00112 public:
00114
00116 NeumannPoissonEBBCFactory();
00117
00119
00121 virtual ~NeumannPoissonEBBCFactory();
00122
00124
00126 virtual void setValue(Real a_value);
00127
00129
00131 virtual void setFunction(RefCountedPtr<BaseBCValue> a_flux);
00132
00134
00136 virtual NeumannPoissonEBBC* create(const ProblemDomain& a_domain,
00137 const EBISLayout& a_layout,
00138 const RealVect& a_dx,
00139 const IntVect* a_ghostCellsPhi=0,
00140 const IntVect* a_ghostCellsRhs=0);
00141
00142 private:
00143 bool m_onlyHomogeneous;
00144 bool m_isFunction;
00145
00146 Real m_value;
00147 RefCountedPtr<BaseBCValue> m_flux;
00148 };
00149
00150 #include "NamespaceFooter.H"
00151 #endif