#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <math.h>
class Q8 {
public:
int NN, NF, NE, KU, KV, KRX, KRY, KQ, LK;
int JEW[9], JLL[17], JE[9][501], JD[3006], KPQ[3][50], JRX[50], JRY[50], JU[50], JV[50];
double H[3+1], D[3+1], U[3007], FF[17], FS[6][6][9], FC[6][6][9], FA[6][6][9], B[5][17], C[5][17], XO[1504],
YO[1504], X[50],Y[50],SK[5000], PQ[5][50], RX[50], RY[50], US[50], VS[50],EK[137];
double PO, EO, RU, XC, XA, YC, YA, YN, QQ, VY, RPM;
public:
/**
* calculate
*/
void calculate() {
NF = NN + NN; //NN-节点个数 NF-节点位移(载荷)个数
//弹性矩阵[D]
if(D[0]==0){
D[1] = EO / (1.0 - PO * PO);
D[2] = D[1] * PO;
D[3] = D[1] * (1.0 - PO) / 2;
}
if(D[0]==2){
D[1] = EO * (1.0 - PO) / (1.0 + PO) / (1.0 - PO - PO);
D[2] = D[1] * PO / (1.0 - PO);
D[3] = D[1] * (1.0 - PO - PO) / (1.0 - PO) / 2;
}
SKDD();
NCNA();
VY = RU * (3.1415926 * RPM / 30) / 9.80;
if(H[0]==2){
H[1]=1;
H[2]=1;
H[3]=1;
}
if(H[0]==3){
H[1] = 5.0 / 9.0;
H[2] = 8.0 / 9.0;
H[3] = H[1];
}
//初始化矩阵
for(int i=0;i<=NF;i++){
U[i]=0;
}
for (i = 0; i <=LK; i++) {
SK[i]=0;
}
for (i = 1; i <= NE; i++) {
int m, l1, l2;
for (int j = 1; j <= 8; j++) {
m = JE[j][i];
l1 = j + j;
l2 = l1 - 1;
JLL[l2] = m + m - 1;
JLL[l1] = m + m;
}
FEKP(i);
SKKE();
}
RIGHT();
for (i = 1; i <= KU; i++) {
FIXD(2 * JU[i] - 1, US[i]);
}
if (KV != 0) {
for (int j = 1; j <=KV; j++) {
FIXD(2 * JV[j], VS[j]);
}
}
solve();
}
/**
* XYCA
*/
void XYCA(int i, int j,int n) {
double R, S, F, D;
int L;
XC = 0;
XA = 0;
YC = 0;
YA = 0;
YN = 0;
for (int k = 1; k <= 8; k++) {
QQ = FC[i][j][k];
R = FA[i][j][k];
S = FS[i][j][k];
L = JE[k][n];
F = XO[L];
D = YO[L];
YN += S * D;
XC += QQ * F;//********J(2,1)********//
XA += R * F;//*********J(1,1)********//
YC += QQ * D;//********J(2,2)********//
YA += R * D;//*********J(1,2)********//
}
}
/**
* SKDD
*/
void SKDD() {
int L, M;
for (int i = 1; i <= NN; i++) {
JD[2 * i] = NN;
}
for (i = 1; i <= NE; i++) {
for (int j = 1; j <= 8; j++) {
JEW[j] = JE[j][i];
}
L = JEW[8];
for (j = 1; j <= 7; j++) {
if (JEW[j] < L)
L = JEW[j];
}
for (j = 1; j <= 8; j++) {
M = JEW[j];
if (L < JD[2 * M])
JD[2 * M] = L;
}
}
JD[0]=0;
JD[1] = 1;
JD[2] = 3;
for (i = 2; i <= NN; i++) {
M = (i - JD[2 * i]) * 2;
JD[2 * i - 1] = JD[2 * i - 2] + M + 1;
JD[2 * i] = JD[2 * i - 1] + M + 2;
}
LK = JD[NF];
}
/**
* NCNA
*/
void NCNA() {
double XX[6];
double A, C;
XX[0] = 0;
XX[3] = 0;
XX[4] = 1;
XX[5]=-1;
if(H[0]==2){
XX[1]=1/sqrt(3);
XX[2]=-XX[1];
}
if(H[0]==3){
XX[3] = sqrt(0.6);
XX[1]=-XX[3];
XX[2] = 0;
}
for (int i = 1; i <6; i++) {
C = XX[i];
for (int j = 1; j <6; j++) {
A = XX[j];
FS[i][j][1] = (1 + C) * (1 + A) * (C + A - 1) / 4;
FS[i][j][2] = (1 + A) * (1 - C * C) / 2;
FS[i][j][3] = (1 - C) * (1 + A) * (A - C - 1) / 4;
FS[i][j][4] = (1 - C) * (1 - A * A) / 2;
FS[i][j][5] = (1 - C) * (1 - A) * ( -C - A - 1) / 4;
FS[i][j][6] = (1 - A) * (1 - C * C) / 2;
FS[i][j][7] = (1 + C) * (1 - A) * (C - A - 1) / 4;
FS[i][j][8] = (1 + C) * (1 - A * A) / 2;
FS[i][j][0] = 0;
FC[i][j][1] = (1 + A) * (C + C + A) / 4;
FC[i][j][2] = (1 + A) * ( -C);
FC[i][j][3] = (1 + A) * (C + C - A) / 4;
FC[i][j][4] = (A * A - 1) / 2;
FC[i][j][5] = (1 - A) * (C + C + A) / 4;
FC[i][j][6] = (A - 1) * C;
FC[i][j][7] = (1 - A) * (C + C - A) / 4;
FC[i][j][8] = (1 - A * A) / 2;
FC[i][j][0] = 0;
FA[i][j][1] = (1 + C) * (C + A + A) / 4;
FA[i][j][2] = (1 - C * C) / 2;
FA[i][j][3] = (1 - C) * (A + A - C) / 4;
FA[i][j][4] = A * (C - 1);
FA[i][j][5] = (1 - C) * (C + A + A) / 4;
FA[i][j][6] = (C * C - 1) / 2;
FA[i][j][7] = (1 + C) * (A + A - C) / 4;
FA[i][j][8] = -A * (1 + C);
FA[i][j][0] = 0;
}
}
}
/**
* FEKP
*/
void FEKP(int n) {
double DTJ, F, Q, W, Z, R, FIX, FIY;
int M, L, kk;
for (int i = 0; i <=136; i++) {
EK[i] = 0;
}
for (i = 0; i <=NF; i++) {
FF[i] = 0;
}
for (i = 1; i <= H[0]; i++) {
for (int j = 1; j <= H[0]; j++) {
XYCA(i,j,n);
DTJ = XC * YA - XA * YC;
F = VY;
Q = DTJ * H[i] * H[j];
if(D[0]==2){
F*=YN;
Q*=YN;
}
for (int k = 1; k <= 8; k++) {
M = k + k;
L = M - 1;
W = FC[i][j][k];
Z = FA[i][j][k];
FIX = (YA * W - YC * Z) / DTJ;
FIY = (XC * Z - XA * W) / DTJ;
B[1][L] = FIX;
B[2][L] = 0;
B[1][M] = 0;
B[2][M] = FIY;
C[1][L] = D[1] * FIX;
C[2][L] = D[2] * FIX;
if(D[0]==0){
R = FS[i][j][k];
B[3][L] = FIY;
B[4][L] = 0;
B[3][M] = FIX;
B[4][M] = 0;
C[1][M] = D[2] * FIY;
C[2][M] = D[1] * FIY ;
C[3][L] = D[3] * FIY;
C[4][L] = 0;
C[3][M] = D[3] * FIX;
C[4][M] = 0;
FF[M] += F * Q * R;
}
if(D[0]==2){
R = FS[i][j][k] / YN;
B[3][L] = 0;
B[4][L] = FIY;
B[3][M] = R;
B[4][M] = FIX;
C[1][M] = D[2] * (FIY + R);
C[2][M] = D[1] * FIY + D[2] * R;
C[3][L] = C[2][L];
C[4][L] = D[3] * FIY;
C[3][M] = D[1] * R + D[2] * FIY;
C[4][M] = D[3] * FIX;
FF[M] += F * Q * R * YN;
}
}
for (k = 1; k <= 16; k++) {
kk = k * (k - 1) / 2;
for (int ii = 1; ii <= k; ii++) {
Z = 0;
for (int jj = 1; jj <= 4; jj++) {
Z += B[jj][k] * C[jj][ii];
}
EK[kk+ii]+= Z * Q;
}
}
}
}
for (i = 1; i <= 16; i++) {
M = JLL[i];
U[M] += FF[i];
}
}
/**
* SKKE
*/
void SKKE() {
int IW, JQ, KR, L;
for (int i = 1; i <= 16; i++) {
IW = JLL[i];
L = i * (i - 1) / 2;
for (int j = 1; j <= i; j++) {
JQ = JLL[j];
没有合适的资源?快使用搜索试试~ 我知道了~
CPP.rar_c program civil_有限元平面
共1个文件
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 169 浏览量
2022-09-14
18:37:32
上传
评论
收藏 5KB RAR 举报
温馨提示
标题中的"CPP.rar_c program civil_有限元平面"暗示了这是一个关于C++编程语言的压缩文件,内容聚焦于土木工程领域,特别是涉及到有限元分析的平面问题。有限元方法是一种数值计算方法,广泛应用于结构力学、流体力学等领域的工程问题求解。 在描述中提到,“C++源程序,平面有限元计算源代码,适合科研金和验算,非常方便”,这表明压缩包内包含的C++源代码是用于实现平面有限元计算的软件工具。这样的代码对于进行科学研究或工程验证是非常有价值的,因为它可以快速准确地计算结构的受力和变形状态。 标签“c_program_civil”和“有限元平面”进一步确认了这个项目的主题,即这是一个C++编写的土木工程软件,其核心功能是处理二维有限元分析。 在压缩包内的文件"C++.txt"可能包含了完整的源代码或者对代码的详细注释和说明。通常,源代码文件会包含函数定义、数据结构、算法实现等相关内容。对于有限元平面问题,可能包括网格生成、元素类型定义(如线性三角形或矩形元素)、荷载和边界条件的输入处理、刚度矩阵的组装、求解线性系统以及后处理(如应力、位移的可视化)等步骤。 学习和理解这段源代码,读者可以深入理解有限元法的基本原理和C++编程技巧。例如,如何用C++实现向量和矩阵操作、如何利用迭代方法求解线性方程组、如何优化内存管理以提高计算效率等。此外,通过阅读和分析代码,工程师可以定制化自己的计算程序,针对特定的工程问题进行高效求解。 对于初学者,这是一个很好的实践机会,可以结合理论知识和实际编程,提升解决问题的能力。而对于经验丰富的开发人员,这个代码库可以作为参考,了解不同的实现策略和优化技术。这个资源对于教育、研究和工程实践都是宝贵的工具。
资源详情
资源评论
资源推荐
收起资源包目录
CPP.rar (1个子文件)
C++.txt 17KB
共 1 条
- 1
御道御小黑
- 粉丝: 73
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0