Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members

ElasticityStationary.h

Go to the documentation of this file.
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.