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 __DC2DT3_H
00036 #define __DC2DT3_H
00037
00038
00039 #include "Equa_Therm.h"
00040 #include "Triang3.h"
00041 #include "Line2.h"
00042
00043 namespace OFELI {
00044
00060 class DC2DT3 : public Equa_Therm<double,3,3,2,2>
00061 {
00062
00063 public :
00064
00067 DC2DT3();
00068
00070 DC2DT3(const Element *el);
00071
00073 DC2DT3(const Side *sd);
00074
00080 DC2DT3(const Element *el, const Vect<double> &u, double time=0.);
00081
00094 DC2DT3(const Element *el, const Vect<double> &u, double time, double deltat, int scheme);
00095
00101 DC2DT3(const Side *sd, const Vect<double> &u, double time=0.);
00102
00115 DC2DT3(const Side *sd, const Vect<double> &u, double time, double deltat, int scheme);
00116
00117 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00119 DC2DT3(Mesh &mesh, Vect<double> &b, double &t, double &ts) : Equation<double,3,3,2,2>(mesh,b,t,ts) { }
00120 #endif
00121
00123 ~DC2DT3();
00124
00125 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00126
00127 #endif
00128
00130 int runOneStep();
00131
00133 int run() { return runOneStep(); }
00134
00136 void build();
00137
00140 void LCapacityToLHS(double coef=1);
00141
00144 void LCapacityToRHS(double coef=1);
00145
00148 void LCapacity(double coef) { LCapacityToLHS(coef); LCapacityToRHS(coef); }
00149
00152 void CapacityToLHS(double coef=1);
00153
00156 void CapacityToRHS(double coef=1);
00157
00160 void Capacity(double coef=1);
00161
00164 void Diffusion(double coef=1);
00165
00170 void Diffusion(const DMatrix<double> &diff, double coef=1);
00171
00175 void DiffusionToRHS(double coef=1);
00176
00181 void Convection(const Point<double> &v, double coef=1);
00182
00188 void Convection(const Vect<double> &v, double coef=1);
00189
00194 void Convection(double coef=1);
00195
00201 void ConvectionToRHS(const Point<double> &v, double coef=1);
00202
00207 void ConvectionToRHS(double coef=1);
00208
00211 void setVelocity(NodeVect<double> &v);
00212
00218 void BodyRHS(UserData<double> &ud, double coef=1);
00219
00225 void BodyRHS(const Vect<double> &b, int opt=LOCAL_ARRAY);
00226
00232 void BoundaryRHS(UserData<double> &ud, double coef=1);
00233
00236 void BoundaryRHS(double flux);
00237
00243 void BoundaryRHS(const Vect<double> &b, int opt=LOCAL_ARRAY);
00244
00250 void Periodic(double coef=1.e20);
00251
00252 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00254 double Energy(const Vect<double> &u, UserData<double> &ud);
00255 #endif
00256
00257 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00259 void EnerGrad(const Vect<double> &u, UserData<double> &ud, Vect<double> &g);
00260 #endif
00261
00263 Point<double> &Flux() const;
00264
00267 Point<double> &Grad(const LocalVect<double,3> &u) const;
00268
00272 Point<double> & Grad(const Vect<double> &u) const;
00273
00285 void setInput(int opt, Vect<double> &u);
00286
00287 protected :
00288 void ElementSet(const Element *el);
00289 void SideSet(const Side *sd);
00290
00291 private :
00292 Triang3 *_tr;
00293 Line2 *_ln;
00294 mutable Point<double> _f;
00295 Vect<double> _vx, _vy;
00296 };
00297
00298 }
00299
00300 #endif