FEBio  1.5.0
FEBio/FEPressureLoad.h
00001 #pragma once
00002 #include "FESurfaceLoad.h"
00003 
00004 //-----------------------------------------------------------------------------
00008 class FEPressureLoad : public FESurfaceLoad
00009 {
00010 public:
00011         struct LOAD
00012         {
00013                 double  s[4];           // nodal scale factors
00014                 int             lc;                     // load curve
00015 
00016                 LOAD() { s[0] = s[1] = s[2] = s[3] = 1.0; }
00017         };
00018 
00019 public:
00021         FEPressureLoad(FESurface* ps, bool blinear = false) : FESurfaceLoad(ps) { m_blinear = blinear; }
00022 
00024         void create(int n) { m_PC.resize(n); }
00025 
00027 /*      FEDomain* Clone()
00028         {
00029                 FEPressureLoad* ps = new FEPressureLoad(m_surf.GetMesh());
00030                 ps->m_PC = m_PC;
00031                 return ps;
00032         }
00033 */
00034 
00036         LOAD& PressureLoad(int n) { return m_PC[n]; }
00037 
00039         void StiffnessMatrix(FESolver* psolver);
00040 
00042         void Residual(FESolver* psolver, vector<double>& R);
00043 
00045         void Serialize(DumpFile& ar);
00046 
00047 protected:
00049         void PressureStiffness(FESurfaceElement& el, matrix& ke, vector<double>& tn);
00050 
00052         bool PressureForce(FESurfaceElement& el, vector<double>& fe, vector<double>& tn);
00053 
00055         bool LinearPressureForce(FESurfaceElement& el, vector<double>& fe, vector<double>& tn);
00056 
00057 protected:
00058         bool                    m_blinear;      
00059         vector<LOAD>    m_PC;           
00060 };