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
00026
00027
00028
00029
00030
00031 virtual ~NeumannPoissonDomainBC();
00032
00033 virtual void setValue(Real a_value);
00034
00035 virtual void setFunction(RefCountedPtr<BaseBCValue> a_flux);
00036
00037 virtual void getFaceFlux(BaseFab<Real>& a_faceFlux,
00038 const BaseFab<Real>& a_phi,
00039 const RealVect& a_probLo,
00040 const RealVect& a_dx,
00041 const int& a_idir,
00042 const Side::LoHiSide& a_side,
00043 const DataIndex& a_dit,
00044 const Real& a_time,
00045 const bool& a_useHomogeneous);
00046
00047
00048
00049
00050
00051 bool isDirichletDom(const VolIndex& a_ivof,
00052 const VolIndex& a_jvof,
00053 const EBCellFAB& a_phi) const
00054 {
00055 return false;
00056 }
00057
00058
00059
00060
00061 virtual void getFaceFlux(Real& a_faceFlux,
00062 const VolIndex& a_vof,
00063 const int& a_comp,
00064 const EBCellFAB& a_phi,
00065 const RealVect& a_probLo,
00066 const RealVect& a_dx,
00067 const int& a_idir,
00068 const Side::LoHiSide& a_side,
00069 const DataIndex& a_dit,
00070 const Real& a_time,
00071 const bool& a_useHomogeneous);
00072
00073 virtual void getInhomFaceFlux(Real& a_faceFlux,
00074 const VolIndex& a_vof,
00075 const int& a_comp,
00076 const EBCellFAB& a_phi,
00077 const RealVect& a_probLo,
00078 const RealVect& a_dx,
00079 const int& a_idir,
00080 const Side::LoHiSide& a_side,
00081 const DataIndex& a_dit,
00082 const Real& a_time);
00083
00084
00085
00086
00087
00088
00089 virtual void getFaceGradPhi(Real& a_faceFlux,
00090 const FaceIndex& a_face,
00091 const int& a_comp,
00092 const EBCellFAB& a_phi,
00093 const RealVect& a_probLo,
00094 const RealVect& a_dx,
00095 const int& a_idir,
00096 const Side::LoHiSide& a_side,
00097 const DataIndex& a_dit,
00098 const Real& a_time,
00099 const bool& a_useAreaFrac,
00100 const RealVect& a_centroid,
00101 const bool& a_useHomogeneous);
00102
00103
00104
00105
00106
00107
00108
00109 virtual void getFaceFluxGradPhi(Real& a_faceFlux,
00110 const FaceIndex& a_face,
00111 const int& a_comp,
00112 const EBCellFAB& a_phi,
00113 const RealVect& a_probLo,
00114 const RealVect& a_dx,
00115 const int& a_idir,
00116 const Side::LoHiSide& a_side,
00117 const DataIndex& a_dit,
00118 const Real& a_time,
00119 const bool& a_useAreaFrac,
00120 const RealVect& a_centroid,
00121 const bool& a_useHomogeneous);
00122
00123
00124
00125
00126 virtual void getInhomFaceGradPhi(Real& a_faceFlux,
00127 const FaceIndex& a_face,
00128 const int& a_comp,
00129 const EBCellFAB& a_phi,
00130 const RealVect& a_probLo,
00131 const RealVect& a_dx,
00132 const int& a_idir,
00133 const Side::LoHiSide& a_side,
00134 const DataIndex& a_dit,
00135 const Real& a_time,
00136 const bool& a_useAreaFrac,
00137 const RealVect& a_centroid);
00138
00139
00140
00141
00142 virtual void getInhomFaceFluxGradPhi(Real& a_faceFlux,
00143 const FaceIndex& a_face,
00144 const int& a_comp,
00145 const EBCellFAB& a_phi,
00146 const RealVect& a_probLo,
00147 const RealVect& a_dx,
00148 const int& a_idir,
00149 const Side::LoHiSide& a_side,
00150 const DataIndex& a_dit,
00151 const Real& a_time,
00152 const bool& a_useAreaFrac,
00153 const RealVect& a_centroid);
00154
00155
00156
00157
00158
00159
00160
00161 virtual void getFaceVel(Real& a_faceFlux,
00162 const FaceIndex& a_face,
00163 const EBFluxFAB& a_vel,
00164 const RealVect& a_probLo,
00165 const RealVect& a_dx,
00166 const int& a_idir,
00167 const int& a_icomp,
00168 const Real& a_time,
00169 const Side::LoHiSide& a_side);
00170
00171 private:
00172 bool m_onlyHomogeneous;
00173 bool m_isFunction;
00174
00175 Real m_value;
00176 RefCountedPtr<BaseBCValue> m_flux;
00177 };
00178
00179 class NeumannPoissonDomainBCFactory: public BaseDomainBCFactory
00180 {
00181 public:
00182 NeumannPoissonDomainBCFactory();
00183
00184 virtual ~NeumannPoissonDomainBCFactory();
00185
00186 virtual void setValue(Real a_value);
00187
00188 virtual void setFunction(RefCountedPtr<BaseBCValue> a_flux);
00189
00190 virtual NeumannPoissonDomainBC* create(const ProblemDomain& a_domain,
00191 const EBISLayout& a_layout,
00192 const RealVect& a_dx);
00193 private:
00194 bool m_onlyHomogeneous;
00195 bool m_isFunction;
00196
00197 Real m_value;
00198 RefCountedPtr<BaseBCValue> m_flux;
00199 };
00200
00201 #include "NamespaceFooter.H"
00202 #endif