00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _BASEDOMAINBC_H_
00012 #define _BASEDOMAINBC_H_
00013
00014 #include "LoHiSide.H"
00015 #include "RealVect.H"
00016 #include "FArrayBox.H"
00017
00018 #include "VolIndex.H"
00019 #include "EBCellFAB.H"
00020 #include "EBFaceFAB.H"
00021 #include "EBFluxFAB.H"
00022 #include "EBISLayout.H"
00023 #include "EBLevelGrid.H"
00024 #include "TensorCFInterp.H"
00025 #include "BaseBCFuncEval.H"
00026 #include "NamespaceHeader.H"
00027
00028
00029
00030
00031 class BaseDomainBC
00032 {
00033 public:
00034
00035
00036
00037 BaseDomainBC()
00038 {
00039 }
00040
00041
00042
00043
00044 virtual ~BaseDomainBC()
00045 {
00046 }
00047
00048
00049
00050
00051 virtual void getFaceFlux(BaseFab<Real>& a_faceFlux,
00052 const BaseFab<Real>& a_phi,
00053 const RealVect& a_probLo,
00054 const RealVect& a_dx,
00055 const int& a_idir,
00056 const Side::LoHiSide& a_side,
00057 const DataIndex& a_dit,
00058 const Real& a_time,
00059 const bool& a_useHomogeneous) = 0;
00060
00061
00062
00063 virtual void getFluxStencil( VoFStencil& a_stencil,
00064 const VolIndex& a_vof,
00065 const int& a_comp,
00066 const RealVect& a_dx,
00067 const int& a_idir,
00068 const Side::LoHiSide& a_side,
00069 const EBISBox& a_ebisBox)
00070 {
00071 a_stencil.clear();
00072 }
00073
00074 virtual void getFluxStencil( VoFStencil& a_stencil,
00075 const FaceIndex& a_face,
00076 const int& a_comp,
00077 const RealVect& a_dx,
00078 const int& a_idir,
00079 const Side::LoHiSide& a_side,
00080 const EBISBox& a_ebisBox)
00081 {
00082 a_stencil.clear();
00083 }
00084
00085
00086
00087
00088
00089
00090 virtual void getFaceFlux(Real& a_faceFlux,
00091 const VolIndex& a_vof,
00092 const int& a_comp,
00093 const EBCellFAB& a_phi,
00094 const RealVect& a_probLo,
00095 const RealVect& a_dx,
00096 const int& a_idir,
00097 const Side::LoHiSide& a_side,
00098 const DataIndex& a_dit,
00099 const Real& a_time,
00100 const bool& a_useHomogeneous) = 0;
00101
00102
00103
00104
00105
00106
00107
00108
00109 virtual bool isDirichletDom(const VolIndex& a_ivof,
00110 const VolIndex& a_jvof,
00111 const EBCellFAB& a_phi) const
00112 {
00113 MayDay::Error("BaseDomainBC:: isDirichletDom:: default implementation is invalid");
00114 return true;
00115 }
00116
00117
00118
00119
00120
00121
00122
00123 virtual void getInhomFaceFlux(Real& a_faceFlux,
00124 const VolIndex& a_vof,
00125 const int& a_comp,
00126 const EBCellFAB& a_phi,
00127 const RealVect& a_probLo,
00128 const RealVect& a_dx,
00129 const int& a_idir,
00130 const Side::LoHiSide& a_side,
00131 const DataIndex& a_dit,
00132 const Real& a_time)
00133 {
00134 MayDay::Error();
00135 }
00136
00137
00138
00139
00140
00141
00142 virtual void getFaceGradPhi(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 const bool& a_useHomogeneous) = 0;
00155
00156
00157 virtual void enforceFaceVel(LevelData<EBFluxFAB>& a_velocity,
00158 const DisjointBoxLayout& a_grids,
00159 const EBISLayout& a_ebisl,
00160 const ProblemDomain& a_domain,
00161 const RealVect& a_dx,
00162 const Real& a_time,
00163 const RealVect& a_origin);
00164
00165 virtual void enforceFaceVel(LevelData<EBFluxFAB>& a_velocity,
00166 const DisjointBoxLayout& a_grids,
00167 const EBISLayout& a_ebisl,
00168 const ProblemDomain& a_domain,
00169 const RealVect& a_dx,
00170 const Real& a_time,
00171 const RealVect& a_origin,
00172 const int& a_comp);
00173
00174
00175
00176
00177
00178
00179 virtual void getFaceVel(Real& a_faceFlux,
00180 const FaceIndex& a_vof,
00181 const EBFluxFAB& a_vel,
00182 const RealVect& a_probLo,
00183 const RealVect& a_dx,
00184 const int& a_idir,
00185 const int& a_icomp,
00186 const Real& a_time,
00187 const Side::LoHiSide& a_side)
00188 {
00189 MayDay::Error("getFaceVel called but not implemented");
00190 }
00191
00192 };
00193
00194
00195
00196 class BaseDomainBCFactory
00197 {
00198 public:
00199
00200
00201
00202 BaseDomainBCFactory()
00203 {
00204 }
00205
00206
00207
00208
00209 virtual ~BaseDomainBCFactory()
00210 {
00211 }
00212
00213
00214
00215
00216 virtual BaseDomainBC* create(const ProblemDomain& a_domain,
00217 const EBISLayout& a_layout,
00218 const RealVect& a_dx) = 0;
00219 };
00220
00221 #include "NamespaceFooter.H"
00222 #endif