00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _NEUMANNPOISSONDOMAINBC_H_
00012 #define _NEUMANNPOISSONDOMAINBC_H_
00013
00014 #include "RefCountedPtr.H"
00015
00016 #include "BaseDomainBC.H"
00017 #include "BaseBCValue.H"
00018 #include "NamespaceHeader.H"
00019
00020 class NeumannPoissonDomainBC: public BaseDomainBC
00021 {
00022 public:
00023 NeumannPoissonDomainBC();
00024
00025 virtual ~NeumannPoissonDomainBC();
00026
00027 virtual void setValue(Real a_value);
00028
00030
00036 virtual int whichBC(int a_idir,
00037 Side::LoHiSide a_side)
00038 {
00039 return 0;
00040 };
00041
00042 virtual void setFunction(RefCountedPtr<BaseBCValue> a_flux);
00043
00044 virtual void getFaceFlux(BaseFab<Real>& a_faceFlux,
00045 const BaseFab<Real>& a_phi,
00046 const RealVect& a_probLo,
00047 const RealVect& a_dx,
00048 const int& a_idir,
00049 const Side::LoHiSide& a_side,
00050 const DataIndex& a_dit,
00051 const Real& a_time,
00052 const bool& a_useHomogeneous);
00053
00055
00058 virtual void getFaceFlux(Real& a_faceFlux,
00059 const VolIndex& a_vof,
00060 const int& a_comp,
00061 const EBCellFAB& a_phi,
00062 const RealVect& a_probLo,
00063 const RealVect& a_dx,
00064 const int& a_idir,
00065 const Side::LoHiSide& a_side,
00066 const DataIndex& a_dit,
00067 const Real& a_time,
00068 const bool& a_useHomogeneous);
00069
00071
00075 virtual void getFaceGradPhi(Real& a_faceFlux,
00076 const FaceIndex& a_face,
00077 const int& a_comp,
00078 const EBCellFAB& a_phi,
00079 const RealVect& a_probLo,
00080 const RealVect& a_dx,
00081 const int& a_idir,
00082 const Side::LoHiSide& a_side,
00083 const DataIndex& a_dit,
00084 const Real& a_time,
00085 const bool& a_useAreaFrac,
00086 const RealVect& a_centroid,
00087 const bool& a_useHomogeneous);
00088
00090
00095 virtual void getFaceVel(Real& a_faceFlux,
00096 const FaceIndex& a_face,
00097 const EBFluxFAB& a_vel,
00098 const RealVect& a_probLo,
00099 const RealVect& a_dx,
00100 const int& a_idir,
00101 const int& a_icomp,
00102 const Real& a_time,
00103 const Side::LoHiSide& a_side,
00104 const bool& a_doDivFreeOutflow);
00105
00106 private:
00107 bool m_onlyHomogeneous;
00108 bool m_isFunction;
00109
00110 Real m_value;
00111 RefCountedPtr<BaseBCValue> m_flux;
00112 };
00113
00114 class NeumannPoissonDomainBCFactory: public BaseDomainBCFactory
00115 {
00116 public:
00117 NeumannPoissonDomainBCFactory();
00118
00119 virtual ~NeumannPoissonDomainBCFactory();
00120
00121 virtual void setValue(Real a_value);
00122
00123 virtual void setFunction(RefCountedPtr<BaseBCValue> a_flux);
00124
00125 virtual NeumannPoissonDomainBC* create(const ProblemDomain& a_domain,
00126 const EBISLayout& a_layout,
00127 const RealVect& a_dx);
00128 private:
00129 bool m_onlyHomogeneous;
00130 bool m_isFunction;
00131
00132 Real m_value;
00133 RefCountedPtr<BaseBCValue> m_flux;
00134 };
00135
00136 #include "NamespaceFooter.H"
00137 #endif