数值传热学CMAC算法源程序代码Word文件下载.docx
《数值传热学CMAC算法源程序代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《数值传热学CMAC算法源程序代码Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
![数值传热学CMAC算法源程序代码Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-10/11/47d2902e-d799-41fa-b13c-5b0c95623248/47d2902e-d799-41fa-b13c-5b0c956232481.gif)
Form
{
publicForm_CAMC()
InitializeComponent();
}
privatevoidbtn_js_Click(objectsender,EventArgse)
intM=41;
//x方向网格数
intN=41;
//y方向网格数
//定义数组
double[,]P=newdouble[M+1,N+1];
//压力p值
double[,]P1=newdouble[M+1,N+1];
//计算过程中的p值,用于过渡
double[,]U=newdouble[M+1,N+1];
//速度u,v的值(这里存储值的方式是以定位网格线来存储,与我们通常用的行和列刚好相反,请特别注意!
)
double[,]V=newdouble[M+1,N+1];
double[,]U1=newdouble[M+1,N+1];
//计算过程中的u,v值,用于过渡
double[,]V1=newdouble[M+1,N+1];
double[,]U11=newdouble[M+1,N+1];
//记录尖括号的u值
double[,]V11=newdouble[M+1,N+1];
//记录尖括号的v值
double[]XX=newdouble[M];
//网格x坐标
double[]YY=newdouble[N];
//网格y坐标
double[]XP=newdouble[M+1];
//压力p控制点x坐标
double[]YP=newdouble[N+1];
//压力p控制点y坐标
double[]XU=newdouble[M+1];
//速度u控制点x坐标
double[]YU=newdouble[N+1];
//速度u控制点y坐标
double[]XV=newdouble[M+1];
//速度v控制点x坐标
double[]YV=newdouble[N+1];
//速度v控制点y坐标
double[,]DUX1=newdouble[M+1,N+1];
//U的动量方程中对流相的第一项,x方向
double[,]DUX2=newdouble[M+1,N+1];
//U的动量方程中对流相的第二项,y方向
double[,]KSX1=newdouble[M+1,N+1];
//U动量方程扩散相的全部(两相一起)
double[,]KSX2=newdouble[M+1,N+1];
double[,]DVY1=newdouble[M+1,N+1];
//V的动量方程中对流相的第一项,x方向
double[,]DVY2=newdouble[M+1,N+1];
//V的动量方程中对流相的第二项,y方向
double[,]KSY1=newdouble[M+1,N+1];
//V动量方程扩散项的第一项
double[,]KSY2=newdouble[M+1,N+1];
//V动量方程扩散项的第二项
doubleAP,AE,AW,AS,AN;
//压力泊松方程系数
double[,]B=newdouble[M+1,N+1];
//压力方程源项
doubleT,DT,DX,DY;
//定义时间、时间步长、x方向步长、y方向步长
inti,j,INT_P;
intDA;
//外部循环次数
intK;
//求解压力方程的循环次数
doubleRE=100.0;
//雷诺数
doubleX=1.0;
//方腔长度
doubleY=1.0;
//方腔高度
doubleERRP=0.0;
//压力P残差
doubleERRU=0.0;
//速度U残差
doubleERRV=0.0;
//速度V残差
T=0;
//时间
DT=0.0001;
//时间步长
DX=X/(M-1);
//x方向步长
DY=Y/(N-1);
//y方向步长
#region//初始化变量
for(i=0;
i<
M+1;
i++)
for(j=0;
j<
N+1;
j++)
P[i,j]=0.0;
P1[i,j]=0.0;
U[i,j]=0.0;
V[i,j]=0.0;
U1[i,j]=0.0;
V1[i,j]=0.0;
U11[i,j]=0.0;
V11[i,j]=0.0;
B[i,j]=0.0;
#endregion
#region//坐标初始化
//网格坐标初始化
M;
XX[i]=DX*i;
N;
YY[j]=DY*j;
//压力p控制点坐标初始化
XP[0]=0.0;
//压力边界点x坐标
XP[M]=1.0;
for(i=1;
XP[i]=(XX[i-1]+XX[i])/2.0;
//压力内点x坐标
YP[0]=0.0;
//压力边界点y坐标
YP[N]=1.0;
for(j=1;
YP[j]=(YY[j-1]+YY[j])/2.0;
//压力内点y坐标
//速度u控制点坐标初始化
XU[i]=XP[i];
YU[j]=YP[j];
//速度v控制点坐标初始化
XV[i]=XP[i];
YV[j]=YP[j];
#region//边界条件
U[0,j]=0.0;
//为速度u的W、E边界赋初值。
U[M,j]=0.0;
U[i,0]=0.0;
//为速度u的N、S边界赋初值。
U[i,N]=1.0;
V[0,j]=0.0;
//为速度v的W、E边界赋初值。
V[M,j]=0.0;
V[i,0]=0.0;
//为速度v的N、S边界赋初值。
V[i,N]=0.0;
#region//求解过程
for(DA=1;
DA<
=20000;
DA++)//外层循环
i++)//将U的值赋值给U1
U1[i,j]=U[i,j];
i++)//将V的值赋值给V1
V1[i,j]=V[i,j];
#region//求解尖括号U
//求解U的动量方程中对流相的第一项,x方向,DUX1(非邻边界的内节点)
for(i=2;
M-1;
DUX1[i,j]=U[i,j]*(U[i+1,j]-U[i-1,j])/(2.0*DX);
//求解边界邻点
//左边界邻点
DUX1[1,j]=U[1,j]*(-4.0*U[0,j]+3.0*U[1,j]+U[2,j])/(3.0*DX);
//右边界邻点
DUX1[M-1,j]=U[M-1,j]*(4.0*U[M,j]-3.0*U[M-1,j]-U[M-