00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _DIRICHLETPOISSONDOMAINBC_H_
00012 #define _DIRICHLETPOISSONDOMAINBC_H_
00013
00014 #include "RefCountedPtr.H"
00015 #include "BaseDomainBC.H"
00016 #include "BaseBCValue.H"
00017 #include "NamespaceHeader.H"
00018
00019
00021
00023 class DirichletPoissonDomainBC: public BaseDomainBC
00024 {
00025 public:
00027
00029 DirichletPoissonDomainBC();
00030
00032
00034 virtual ~DirichletPoissonDomainBC();
00035
00037
00039 virtual void setValue(Real a_value);
00040
00042
00044 virtual void setFunction(RefCountedPtr<BaseBCValue> a_func);
00045
00047
00053 virtual int whichBC(int a_idir,
00054 Side::LoHiSide a_side)
00055 {
00056 return 1;
00057 };
00058
00060
00062 virtual void setEBOrder(int a_ebOrder);
00063
00065
00067 virtual void getFaceFlux(BaseFab<Real>& a_faceFlux,
00068 const BaseFab<Real>& a_phi,
00069 const RealVect& a_probLo,
00070 const RealVect& a_dx,
00071 const int& a_idir,
00072 const Side::LoHiSide& a_side,
00073 const DataIndex& a_dit,
00074 const Real& a_time,
00075 const bool& a_useHomogeneous);
00076
00078
00081 virtual void getFaceFlux(Real& a_faceFlux,
00082 const VolIndex& a_vof,
00083 const int& a_comp,
00084 const EBCellFAB& a_phi,
00085 const RealVect& a_probLo,
00086 const RealVect& a_dx,
00087 const int& a_idir,
00088 const Side::LoHiSide& a_side,
00089 const DataIndex& a_dit,
00090 const Real& a_time,
00091 const bool& a_useHomogeneous);
00093
00097 virtual void getFaceGradPhi(Real& a_faceFlux,
00098 const FaceIndex& a_face,
00099 const int& a_comp,
00100 const EBCellFAB& a_phi,
00101 const RealVect& a_probLo,
00102 const RealVect& a_dx,
00103 const int& a_idir,
00104 const Side::LoHiSide& a_side,
00105 const DataIndex& a_dit,
00106 const Real& a_time,
00107 const bool& a_useAreaFrac,
00108 const RealVect& a_centroid,
00109 const bool& a_useHomogeneous);
00110
00112
00116 virtual void getFaceVel(Real& a_faceFlux,
00117 const FaceIndex& a_face,
00118 const EBFluxFAB& a_vel,
00119 const RealVect& a_probLo,
00120 const RealVect& a_dx,
00121 const int& a_idir,
00122 const int& a_icomp,
00123 const Real& a_time,
00124 const Side::LoHiSide& a_side,
00125 const bool& a_doDivFreeOutflow);
00126
00127
00128 private:
00129 bool m_onlyHomogeneous;
00130 bool m_isFunctional;
00131
00132 Real m_value;
00133 RefCountedPtr<BaseBCValue> m_func;
00134
00135 int m_ebOrder;
00136 };
00137
00138 class DirichletPoissonDomainBCFactory: public BaseDomainBCFactory
00139 {
00140 public:
00142
00144 DirichletPoissonDomainBCFactory();
00145
00147
00149 virtual ~DirichletPoissonDomainBCFactory();
00150
00152
00154 virtual DirichletPoissonDomainBC* create(const ProblemDomain& a_domain,
00155 const EBISLayout& a_layout,
00156 const RealVect& a_dx);
00157
00159
00161 virtual void setValue(Real a_value);
00162
00164
00166 virtual void setFunction(RefCountedPtr<BaseBCValue> a_func);
00167
00169
00171 virtual void setEBOrder(int a_ebOrder);
00172
00173 private:
00174 bool m_onlyHomogeneous;
00175 bool m_isFunctional;
00176
00177 Real m_value;
00178 RefCountedPtr<BaseBCValue> m_func;
00179
00180 int m_ebOrder;
00181 };
00182 #include "NamespaceFooter.H"
00183 #endif