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
00033
00034
00035 #ifndef __DC3DT4_H
00036 #define __DC3DT4_H
00037
00038
00039 #include "Equa_Therm.h"
00040 #include "LocalMatrix.h"
00041 #include "Triang3.h"
00042 #include "Tetra4.h"
00043
00044 namespace OFELI {
00045
00062 class DC3DT4 : public Equa_Therm<double,4,4,3,3>
00063 {
00064
00065 public :
00066
00069 DC3DT4()
00070 {
00071 _tetra = NULL;
00072 _triang = NULL;
00073 #ifdef _OFELI_DEBUG
00074 std::clog << "An instance of class DC3DT4 is constructed.\n";
00075 std::clog << "File : " << __FILE__ << ", Line : " << __LINE__ << endl;
00076 #endif
00077 }
00078
00081 DC3DT4(const Element *el);
00082
00085 DC3DT4(const Side *sd);
00086
00092 DC3DT4(const Element *el, const Vect<double> &u, double time=0.);
00093
00099 DC3DT4(const Side *sd, const Vect<double> &u, double time=0.);
00100
00113 DC3DT4(const Element *el, const Vect<double> &u, double time, double deltat, int scheme);
00114
00127 DC3DT4(const Side *sd, const Vect<double> &u, double time, double deltat, int scheme);
00128
00130 ~DC3DT4();
00131
00134 void LCapacity(double coef) { LCapacityToLHS(coef); LCapacityToRHS(coef); }
00135
00138 void LCapacityToLHS(double coef=1);
00139
00142 void LCapacityToRHS(double coef=1);
00143
00146 void Capacity(double coef=1);
00147
00150 void Diffusion(double coef=1);
00151
00157 void Diffusion(const DMatrix<double> &diff, double coef=1);
00158
00163 void DiffusionToRHS(double coef=1);
00164
00169 void Convection(double coef=1) { coef = 1; }
00170
00175 void Convection(const Point<double> &v, double coef=1);
00176
00182 void Convection(const Vect<Point<double> > &v, double coef=1);
00183
00189 void RHS_Convection(const Point<double> &v, double coef=1.);
00190
00196 void BodyRHS(UserData<double> &ud, double coef=1);
00197
00203 void BodyRHS(const Vect<double> &b, int opt=LOCAL_ARRAY);
00204
00210 void BoundaryRHS(UserData<double> &ud, double coef=1);
00211
00218 void BoundaryRHS(const Vect<double> &b, int opt=LOCAL_ARRAY);
00219
00222 void BoundaryRHS(double flux);
00223
00225 Point<double> Flux() const;
00226
00229 Point<double> Grad(const Vect<double> &u) const;
00230
00236 void Periodic(double coef=1.e20);
00237
00238 private :
00239
00240 Tetra4 *_tetra;
00241 Triang3 *_triang;
00242 double _c24;
00243 Point<double> _grad;
00244 };
00245
00246 }
00247
00248 #endif