基础类表示的是在有限元计算过程中必要通用的类。
1、Point2D
表示的是二维节点,是组成二维有限元单元的节点。
1.1、public function
1.1.1、构造函数与析构函数
构造函数用来初始化point2D的基本信息,析构函数用来释放内存
Point2D.h声明函数
//***********************构造函数析构函数***********************//
/*
函数名称: 无参构造函数
*/
Point2D();/*
函数名称: 二维节点有参构造函数,初始化节点基本信息,二维杆单元适用
id: 节点ID,作为区分不同节点的唯一标识
x: 节点x坐标
y: 节点y坐标
*/
Point2D(int id, double x, double y);/*
函数名称: 二维节点有参构造函数,初始化节点基本信息,二维梁单元适用
id: 节点ID,作为区分不同节点的唯一标识
x: 节点x坐标
y: 节点y坐标
alphaz: z方向角度坐标(按照右手定则,转动方向在xy平面)
*/
Point2D(int id, double x, double y, double alphaz);/*
函数名称: 析构函数
*/
~Point2D();
Point2D.cpp函数实现
//***********************构造函数析构函数***********************//
Point2D::Point2D()
{}Point2D::Point2D(int id, double x, double y)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_theatz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_Mz = 0.0;
}Point2D::Point2D(int id, double x, double y, double alphaz)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_alphaz = alphaz;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_Mz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_theatz = 0.0;
}Point2D::~Point2D()
{}
1.1.2、设置属性函数
用来设置有限元计算中表现在节点上的物理量,比如位置、位移、应力、应变。
Point2D.h声明函数
//*************************设置属性接口*************************//
/*
函数名称: 设置初始化节点基本信息,二维杆单元适用
id: 节点ID,作为区分不同节点的唯一标识
x: 节点x坐标
y: 节点y坐标
*/
void SetPoint(int id, double x, double y);/*
函数名称: 设置初始化节点基本信息,二维梁单元适用
id: 节点ID,作为区分不同节点的唯一标识
x: 节点x坐标
y: 节点y坐标
alphaz: z方向角度坐标(按照右手定则,转动方向在xy平面)
*/
void SetPoint(int id, double x, double y, double alphaz);/*
函数名称: 设置点x、y坐标
x: 节点x坐标
y: 节点y坐标
*/
void SetCoord(double x, double y);/*
函数名称: 设置点x、y、alphaz坐标
x: 节点x坐标
y: 节点y坐标
alphaz: z方向角度坐标(按照右手定则,转动方向在xy平面)
*/
void SetCoord(double x, double y, double alphaz);/*
函数名称: 设置节点ID
id: 节点ID,作为区分不同节点的唯一标识
*/
void SetID(int id);/*
函数名称: 设置外载力 x、y方向
fx: 节点x方向力外载
fy: 节点y方向力外载
*/
void SetF(double fx, double fy);/*
函数名称: 设置外载力 x方向
fx: 节点x方向力外载
*/
void SetFx(double fx);/*
函数名称: 设置外载力 y方向
fy: 节点y方向力外载
*/
void SetFy(double fy);/*
函数名称: 设置外载弯矩 z方向
mz: 节点z方向弯矩外载(遵守右手定则)
*/
void SetMz(double mz);/*
函数名称: 设置节点x、y方向位移
u: 节点x方向位移
v: 节点y方向位移
*/
void SetDistance(double u, double v);/*
函数名称: 设置节点x方向线位移
u: 节点x方向位移
*/
void SetU(double u);/*
函数名称: 设置节点y方向线位移
v: 节点y方向位移
*/
void SetV(double v);/*
函数名称: 设置节点z方向转角位移
theatZ: 节点z方向转角位移(遵守右手定则)
*/
void SetTheatZ(double theatZ);/*
函数名称: 设置节点x方向正应力
sigamax: 节点x方向正应力(依附于单元局部坐标系)
*/
void SetSigamaX(double sigamax);/*
函数名称: 设置节点x方向正应变
epsilonx: 节点x方向正应变(依附于单元局部坐标系)
*/
void SetEpsilonX(double epsilonx);
Point2D.cpp函数实现
//*************************设置属性接口*************************//
//设置点 id, xy坐标
void Point2D::SetPoint(int id, double x, double y)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_theatz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_Mz = 0.0;
}void Point2D::SetPoint(int id, double x, double y, double alphaz)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_alphaz = alphaz;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_Mz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_theatz = 0.0;
}//设置点xy坐标
void Point2D::SetCoord(double x, double y)
{this->m_x = x;this->m_y = y;
}void Point2D::SetCoord(double x, double y, double alphaz)
{this->m_x = x;this->m_y = y;this->m_alphaz = alphaz;
}//设置id
void Point2D::SetID(int id)
{this->ID = id;
}//设置力约束
void Point2D::SetF(double fx, double fy)
{this->m_Fx = fx;this->m_Fy = fy;
}void Point2D::SetFx(double fx)
{this->m_Fx = fx;
}void Point2D::SetFy(double fy)
{this->m_Fy = fy;
}void Point2D::SetMz(double mz)
{this->m_Mz = mz;
}//设置位移约束
void Point2D::SetDistance(double u, double v)
{this->m_u = u;this->m_v = v;
}void Point2D::SetU(double u)
{this->m_u = u;
}void Point2D::SetV(double v)
{this->m_v = v;
}void Point2D::SetTheatZ(double theatZ)
{this->m_theatz = theatZ;
}//设置节点应力
void Point2D::SetSigamaX(double sigamax)
{this->m_SigamaX = sigamax;
}//设置节点应变
void Point2D::SetEpsilonX(double epsilonx)
{this->m_EpsilonX = epsilonx;
}
1.1.3、获取属性函数
用来获取有限元计算中表现在节点上的物理量,比如位置、位移、应力、应变。
Point2D.h声明函数
//*************************获取属性接口*************************//
/*
函数名称: 获取x坐标
*/
double GetX();/*
函数名称: 获取y坐标
*/
double GetY();/*
函数名称: 获取alpha坐标
*/
double GetAlphaZ();/*
函数名称: 获取id
*/
int GetID();/*
函数名称: 获取x方向受力
*/
double GetFx();/*
函数名称: 获取y方向受力
*/
double GetFy();/*
函数名称: 获取z方向弯矩
*/
double GetMz();/*
函数名称: 获取x方向位移
*/
double GetU();/*
函数名称: 获取y方向位移
*/
double GetV();/*
函数名称: 获取z方向转角
*/
double GetTheatZ();/*
函数名称: 获取节点应力
*/
double GetSigamaX();/*
函数名称: 获取节点应变
*/
double GetEpsilonX();
Point2D.cpp函数实现
//获取x坐标
double Point2D::GetX()
{return this->m_x;
}//获取y坐标
double Point2D::GetY()
{return this->m_y;
}//获取alpha坐标
double Point2D::GetAlphaZ()
{return this->m_alphaz;
}//获取id
int Point2D::GetID()
{return this->ID;
}//获取x方向受力
double Point2D::GetFx()
{return this->m_Fx;
}//获取y方向受力
double Point2D::GetFy()
{return this->m_Fy;
}double Point2D::GetMz()
{return this->m_Mz;
}//获取x方向位移
double Point2D::GetU()
{return this->m_u;
}//获取y方向位移
double Point2D::GetV()
{return this->m_v;
}double Point2D::GetTheatZ()
{return this->m_theatz;
}//获取节点应力
double Point2D::GetSigamaX()
{return this->m_SigamaX;
}//获取节点应变
double Point2D::GetEpsilonX()
{return this->m_EpsilonX;
}
1.2、private variable
int ID; //节点IDdouble m_x; //节点X坐标
double m_y; //节点Y坐标
double m_alphaz; //节点Z方向转角坐标(初始转角)double m_u; //节点X方向位移
double m_v; //节点Y方向位移
double m_theatz; //节点Z方向转角double m_Fx; //节点X方向受力
double m_Fy; //节点Y方向受力
double m_Mz; //节点Z方向弯矩double m_SigamaX; //节点x方向正应力(依附于单元局部坐标系)
double m_EpsilonX; //节点x方向正应变(依附于单元局部坐标系)
1.3、全部源码
Point2D.h声明函数
//2d点单元
class Point2D
{
public://***********************构造函数析构函数***********************///*函数名称: 无参构造函数*/Point2D();/*函数名称: 二维节点有参构造函数,初始化节点基本信息,二维杆单元适用id: 节点ID,作为区分不同节点的唯一标识x: 节点x坐标y: 节点y坐标*/Point2D(int id, double x, double y);/*函数名称: 二维节点有参构造函数,初始化节点基本信息,二维梁单元适用id: 节点ID,作为区分不同节点的唯一标识x: 节点x坐标y: 节点y坐标alphaz: z方向角度坐标(按照右手定则,转动方向在xy平面)*/Point2D(int id, double x, double y, double alphaz);/*函数名称: 析构函数*/~Point2D();//*************************设置属性接口*************************///*函数名称: 设置初始化节点基本信息,二维杆单元适用id: 节点ID,作为区分不同节点的唯一标识x: 节点x坐标y: 节点y坐标*/void SetPoint(int id, double x, double y);/*函数名称: 设置初始化节点基本信息,二维梁单元适用id: 节点ID,作为区分不同节点的唯一标识x: 节点x坐标y: 节点y坐标alphaz: z方向角度坐标(按照右手定则,转动方向在xy平面)*/void SetPoint(int id, double x, double y, double alphaz);/*函数名称: 设置点x、y坐标x: 节点x坐标y: 节点y坐标*/void SetCoord(double x, double y);/*函数名称: 设置点x、y、alphaz坐标x: 节点x坐标y: 节点y坐标alphaz: z方向角度坐标(按照右手定则,转动方向在xy平面)*/void SetCoord(double x, double y, double alphaz);/*函数名称: 设置节点IDid: 节点ID,作为区分不同节点的唯一标识*/void SetID(int id);/*函数名称: 设置外载力 x、y方向fx: 节点x方向力外载fy: 节点y方向力外载*/void SetF(double fx, double fy);/*函数名称: 设置外载力 x方向fx: 节点x方向力外载*/void SetFx(double fx);/*函数名称: 设置外载力 y方向fy: 节点y方向力外载*/void SetFy(double fy);/*函数名称: 设置外载弯矩 z方向mz: 节点z方向弯矩外载(遵守右手定则)*/void SetMz(double mz);/*函数名称: 设置节点x、y方向位移u: 节点x方向位移v: 节点y方向位移*/void SetDistance(double u, double v);/*函数名称: 设置节点x方向线位移u: 节点x方向位移*/void SetU(double u);/*函数名称: 设置节点y方向线位移v: 节点y方向位移*/void SetV(double v);/*函数名称: 设置节点z方向转角位移theatZ: 节点z方向转角位移(遵守右手定则)*/void SetTheatZ(double theatZ);/*函数名称: 设置节点x方向正应力sigamax: 节点x方向正应力(依附于单元局部坐标系)*/void SetSigamaX(double sigamax);/*函数名称: 设置节点x方向正应变epsilonx: 节点x方向正应变(依附于单元局部坐标系)*/void SetEpsilonX(double epsilonx);//*************************获取属性接口*************************///*函数名称: 获取x坐标*/double GetX();/*函数名称: 获取y坐标*/double GetY();/*函数名称: 获取alpha坐标*/double GetAlphaZ();/*函数名称: 获取id*/int GetID();/*函数名称: 获取x方向受力*/double GetFx();/*函数名称: 获取y方向受力*/double GetFy();/*函数名称: 获取z方向弯矩*/double GetMz();/*函数名称: 获取x方向位移*/double GetU();/*函数名称: 获取y方向位移*/double GetV();/*函数名称: 获取z方向转角*/double GetTheatZ();/*函数名称: 获取节点应力*/double GetSigamaX();/*函数名称: 获取节点应变*/double GetEpsilonX();private:int ID; //节点IDdouble m_x; //节点X坐标double m_y; //节点Y坐标double m_alphaz; //节点Z方向转角坐标(初始转角)double m_u; //节点X方向位移double m_v; //节点Y方向位移double m_theatz; //节点Z方向转角double m_Fx; //节点X方向受力double m_Fy; //节点Y方向受力double m_Mz; //节点Z方向弯矩double m_SigamaX; //节点x方向正应力(依附于单元局部坐标系)double m_EpsilonX; //节点x方向正应变(依附于单元局部坐标系)
};
Point2D.cpp函数实现
#include "Point.h"//************************************point2D*********************************//
//***********************构造函数析构函数***********************//
Point2D::Point2D()
{}Point2D::Point2D(int id, double x, double y)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_theatz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_Mz = 0.0;
}Point2D::Point2D(int id, double x, double y, double alphaz)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_alphaz = alphaz;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_Mz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_theatz = 0.0;
}Point2D::~Point2D()
{}//*************************设置属性接口*************************//
//设置点 id, xy坐标
void Point2D::SetPoint(int id, double x, double y)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_theatz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_Mz = 0.0;
}void Point2D::SetPoint(int id, double x, double y, double alphaz)
{this->ID = id;this->m_x = x;this->m_y = y;this->m_alphaz = alphaz;this->m_Fx = 0.0;this->m_Fy = 0.0;this->m_Mz = 0.0;this->m_u = 0.0;this->m_v = 0.0;this->m_theatz = 0.0;
}//设置点xy坐标
void Point2D::SetCoord(double x, double y)
{this->m_x = x;this->m_y = y;
}void Point2D::SetCoord(double x, double y, double alphaz)
{this->m_x = x;this->m_y = y;this->m_alphaz = alphaz;
}//设置id
void Point2D::SetID(int id)
{this->ID = id;
}//设置力约束
void Point2D::SetF(double fx, double fy)
{this->m_Fx = fx;this->m_Fy = fy;
}void Point2D::SetFx(double fx)
{this->m_Fx = fx;
}void Point2D::SetFy(double fy)
{this->m_Fy = fy;
}void Point2D::SetMz(double mz)
{this->m_Mz = mz;
}//设置位移约束
void Point2D::SetDistance(double u, double v)
{this->m_u = u;this->m_v = v;
}void Point2D::SetU(double u)
{this->m_u = u;
}void Point2D::SetV(double v)
{this->m_v = v;
}void Point2D::SetTheatZ(double theatZ)
{this->m_theatz = theatZ;
}//设置节点应力
void Point2D::SetSigamaX(double sigamax)
{this->m_SigamaX = sigamax;
}//设置节点应变
void Point2D::SetEpsilonX(double epsilonx)
{this->m_EpsilonX = epsilonx;
}//获取x坐标
double Point2D::GetX()
{return this->m_x;
}//获取y坐标
double Point2D::GetY()
{return this->m_y;
}//获取alpha坐标
double Point2D::GetAlphaZ()
{return this->m_alphaz;
}//获取id
int Point2D::GetID()
{return this->ID;
}//获取x方向受力
double Point2D::GetFx()
{return this->m_Fx;
}//获取y方向受力
double Point2D::GetFy()
{return this->m_Fy;
}double Point2D::GetMz()
{return this->m_Mz;
}//获取x方向位移
double Point2D::GetU()
{return this->m_u;
}//获取y方向位移
double Point2D::GetV()
{return this->m_v;
}double Point2D::GetTheatZ()
{return this->m_theatz;
}//获取节点应力
double Point2D::GetSigamaX()
{return this->m_SigamaX;
}//获取节点应变
double Point2D::GetEpsilonX()
{return this->m_EpsilonX;
}
写在后面:
Point2D类并没有进行计算,只是对数据做了赋值与传递,但它是有限元最基础的部分,后续的单元组成、网格划分、后处理都需要对节点进行大量操作,所以构建好节点类是十分关键的。