![]() |
00001 // Copyright (C) 2003 Fredrik Bengzon and Johan Jansson. 00002 // Licensed under the GNU GPL Version 2. 00003 00004 #ifndef __ELASTICITYSTATIONARY_H 00005 #define __ELASTICITYSTATIONARY_H 00006 00007 #include <dolfin/PDE.h> 00008 00009 namespace dolfin { 00010 00011 class ElasticityStationary : public PDE { 00012 public: 00013 00014 ElasticityStationary(Function::Vector& source, 00015 Function::Vector& uprevious, 00016 Function::Vector& wprevious) : 00017 PDE(3, 3), f(3), up(3), wp(3) 00018 { 00019 add(f, source); 00020 add(up, uprevious); 00021 add(wp, wprevious); 00022 } 00023 00024 real lhs(ShapeFunction::Vector& u, ShapeFunction::Vector& v) 00025 { 00026 real E = 1.0; 00027 real nu = 0.3; 00028 00029 real lambda = nu * E / ((1 + nu) * (1 - 2 * nu)); 00030 real mu = E / (2 * (1 + nu)); 00031 00032 ElementFunction 00033 epsilon00, epsilon01, epsilon02, 00034 epsilon10, epsilon11, epsilon12, 00035 epsilon20, epsilon21, epsilon22; 00036 00037 ElementFunction 00038 epsilonv00, epsilonv01, epsilonv02, 00039 epsilonv10, epsilonv11, epsilonv12, 00040 epsilonv20, epsilonv21, epsilonv22; 00041 00042 ElementFunction 00043 sigma00, sigma01, sigma02, 00044 sigma10, sigma11, sigma12, 00045 sigma20, sigma21, sigma22; 00046 00047 epsilon00 = u(0).ddx(); 00048 epsilon01 = 0.5 * (u(0).ddy() + u(1).ddx()); 00049 epsilon02 = 0.5 * (u(0).ddz() + u(2).ddx()); 00050 epsilon10 = 0.5 * (u(1).ddx() + u(0).ddy()); 00051 epsilon11 = u(1).ddy(); 00052 epsilon12 = 0.5 * (u(1).ddz() + u(2).ddy()); 00053 epsilon20 = 0.5 * (u(2).ddx() + u(0).ddz()); 00054 epsilon21 = 0.5 * (u(2).ddy() + u(1).ddz()); 00055 epsilon22 = u(2).ddz(); 00056 00057 epsilonv00 = v(0).ddx(); 00058 epsilonv01 = 0.5 * (v(0).ddy() + v(1).ddx()); 00059 epsilonv02 = 0.5 * (v(0).ddz() + v(2).ddx()); 00060 epsilonv10 = 0.5 * (v(1).ddx() + v(0).ddy()); 00061 epsilonv11 = v(1).ddy(); 00062 epsilonv12 = 0.5 * (v(1).ddz() + v(2).ddy()); 00063 epsilonv20 = 0.5 * (v(2).ddx() + v(0).ddz()); 00064 epsilonv21 = 0.5 * (v(2).ddy() + v(1).ddz()); 00065 epsilonv22 = v(2).ddz(); 00066 00067 sigma00 = lambda * (u(0).ddx() + u(1).ddy() + u(2).ddz()) + 00068 2 * mu * epsilon00; 00069 sigma01 = 2 * mu * epsilon01; 00070 sigma02 = 2 * mu * epsilon02; 00071 sigma10 = 2 * mu * epsilon10; 00072 sigma11 = lambda * (u(0).ddx() + u(1).ddy() + u(2).ddz()) + 00073 2 * mu * epsilon11; 00074 sigma12 = 2 * mu * epsilon12; 00075 sigma20 = 2 * mu * epsilon20; 00076 sigma21 = 2 * mu * epsilon21; 00077 sigma22 = lambda * (u(0).ddx() + u(1).ddy() + u(2).ddz()) + 00078 2 * mu * epsilon22; 00079 00080 return 00081 (sigma00 * epsilonv00 + sigma01 * epsilonv01 + sigma02 * epsilonv02 + 00082 sigma10 * epsilonv10 + sigma11 * epsilonv11 + sigma12 * epsilonv12 + 00083 sigma20 * epsilonv20 + sigma21 * epsilonv21 + sigma22 * epsilonv22) 00084 * dx; 00085 00086 } 00087 00088 real rhs(ShapeFunction::Vector& v) 00089 { 00090 return (f(0) * v(0) + f(1) * v(1) + f(2) * v(2)) * dx; 00091 } 00092 00093 private: 00094 ElementFunction::Vector f; // Source term 00095 ElementFunction::Vector up; // Displacement value at left end-point 00096 ElementFunction::Vector wp; // Velocity value at left end-point 00097 }; 00098 00099 } 00100 00101 #endif
Documentation automatically generated with Doxygen on 10 Sep 2004.