00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef _edgeGhostBC_H_
00033 #define _edgeGhostBC_H_
00034
00035 #include "GhostBC.H"
00036
00037 #include "NoOpBC.H"
00038
00040
00044 class BoxEdgeBC: public BoxGhostBC
00045 {
00046 public:
00048 virtual ~BoxEdgeBC();
00049
00051 BoxEdgeBC();
00052
00054 BoxEdgeBC(int a_dir, Side::LoHiSide a_sd);
00055
00057 BoxEdgeBC(int a_dir, Side::LoHiSide a_sd, const Interval& a_comps);
00058
00060 BoxEdgeBC(int a_dir, Side::LoHiSide a_sd, const Interval& a_comps,
00061 IndexType& a_ixtype);
00062
00064 const IndexType& ixType() const;
00065
00067 void ixType(const IndexType& a_ixType);
00068
00069
00070 protected:
00071
00073 virtual BoxGhostBC* new_boxghostbc() const;
00074
00076 void define(int a_dir, Side::LoHiSide a_sd);
00077
00079 void define(int a_dir, Side::LoHiSide a_sd, const Interval& a_comps);
00080
00082 void define(int a_dir, Side::LoHiSide a_sd, const Interval& a_comps,
00083 IndexType& a_ixtype);
00084
00086 virtual void
00087 applyInhomogeneousBCs(FArrayBox& a_state,
00088 const ProblemDomain& a_domain,
00089 Real a_dx) const;
00091 virtual void
00092 applyHomogeneousBCs(FArrayBox& a_state,
00093 const ProblemDomain& a_domain,
00094 Real a_dx) const;
00095
00097 virtual void
00098 fillBCValues(FArrayBox& a_neumfac,
00099 FArrayBox& a_dircfac,
00100 FArrayBox& a_inhmval,
00101 Real a_dx,
00102 const ProblemDomain& a_domain) const;
00103
00104
00106 virtual void
00107 applyInhomogeneousBCs(FArrayBox& a_state,
00108 const Box& a_domain,
00109 Real a_dx) const;
00111 virtual void
00112 applyHomogeneousBCs(FArrayBox& a_state,
00113 const Box& a_domain,
00114 Real a_dx) const;
00115
00117 virtual void
00118 fillBCValues(FArrayBox& a_neumfac,
00119 FArrayBox& a_dircfac,
00120 FArrayBox& a_inhmval,
00121 Real a_dx,
00122 const Box& a_domain) const;
00123
00125 virtual void
00126 applyBCs(const Box& a_bcbox,
00127 FArrayBox& a_state,
00128 const FArrayBox& a_neumfac,
00129 const FArrayBox& a_dircfac,
00130 const FArrayBox& a_inhmval,
00131 Real a_dx) const;
00132
00133
00134 private:
00135 BoxEdgeBC(const BoxEdgeBC&) {;}
00136 virtual void operator=(const BoxEdgeBC&) {;}
00137
00138 IndexType m_ix_type;
00139
00140 };
00141
00142
00144
00146 class edgeDirichletBC : public BoxEdgeBC
00147 {
00148 public:
00149 friend class DomainGhostBC;
00150
00152 ~edgeDirichletBC();
00153
00155 edgeDirichletBC();
00156
00158 edgeDirichletBC(int a_dir, Side::LoHiSide a_sd);
00159
00161 edgeDirichletBC(int a_dir, Side::LoHiSide a_sd, const Interval& a_comps);
00162
00164 void setBCVal(const Real a_bcVal);
00165
00167 Real BCVal() const;
00168
00169 protected:
00170 virtual void
00171 fillBCValues(FArrayBox& a_neumfac,
00172 FArrayBox& a_dircfac,
00173 FArrayBox& a_inhmval,
00174 Real a_dx,
00175 const ProblemDomain& a_domain) const;
00176
00177
00178 virtual void
00179 fillBCValues(FArrayBox& a_neumfac,
00180 FArrayBox& a_dircfac,
00181 FArrayBox& a_inhmval,
00182 Real a_dx,
00183 const Box& a_domain) const;
00184
00186 virtual BoxGhostBC* new_boxghostbc() const;
00187
00189 Real m_bcVal;
00190
00191
00192 private:
00193 edgeDirichletBC(const edgeDirichletBC& dirin) {;}
00194 void operator=(const edgeDirichletBC& dirin) {;}
00195 };
00196
00197
00198 #endif
00199
00200
00201