本篇讨论有限元中最基本的两个类, 节点类和单元类:
节点类首先需要基本的坐标信息,还需要节点位移、荷载、约束等信息,
节点类代码如下:
#ifndef MVNODE_H
#define MVNODE_H
#include "vector"
using namespace std;
class MVNode
{
public:
MVNode();
virtual ~MVNode();
inline int GetCodeNum(int iPos) const;
inline int getDOF() const;
inline vector <double> getDispVector() const;
inline double GetX() const;
inline double GetY() const;
inline double GetZ() const;
int GetNum() const;
void SetData(int n,
double x, double y, double z, int iDOF);
void setDspVct(double displacement, int iPos);
void Init();
void Draw();
private:
int m_iNodeNum;
double m_dX,m_dY,m_dZ;
vector <double> m_dDispVector;
int m_iDOF;
int m_iConnectElementNum;
};
#endif
单元类需要单元属性、材料、节点连接等信息,
单元类代码如下:
#ifndef MVELEMENT_H
#define MVELEMENT_H
#include "MVNode.h"
#include "MVDrawBox.h"
class MVElement
{
public:
MVElement();
virtual ~MVElement();
int GetNodeDOF();
inline int GetDimension() const;
inline vector <MVNode *> GetNodePointerVector() const;
int getCMNum() const;
int getPrpNum() const;
int GetNum() const;
inline int GetNodeAmount() const;
vector <int> GetNodeNumVector();
void SetNode(int NodeNum);
void SetNum(int iElmNum);
void SetNodePointer(MVNode * pNode);
virtual void Init();
virtual void draw(){}
virtual void ReadEleResult(istream &ifile){}//读入单元解
virtual void ReturnMaxMQy(double *_maxM,double *_maxQ,double *_maxy){}
virtual void DrawNaxis(){}
virtual void DrawShear(){}
virtual void DrawMoment(){}
virtual void DrawElement(){}
virtual void DrawDeformation(){}
virtual void DrawNodeContour(int item){}
virtual void DrawNodeCloud(int item,int subitem){}
virtual void DrawEleContour(int item){}
protected:
int m_iNodeAmount;
int m_iElmNum;
int m_iCMNum;
int m_iDOF;
int m_iElmDmm;
vector <int> m_NodeNumVector;
vector <MVNode *> m_pNodePointerVector;
vector<double> m_dEleResult;
};
#endif
参考:
1 MyFEM程序
2 SFea程序
评论