数值传热学CMAC算法源程序代码.docx
《数值传热学CMAC算法源程序代码.docx》由会员分享,可在线阅读,更多相关《数值传热学CMAC算法源程序代码.docx(25页珍藏版)》请在冰豆网上搜索。
![数值传热学CMAC算法源程序代码.docx](https://file1.bdocx.com/fileroot1/2022-10/11/47d2902e-d799-41fa-b13c-5b0c95623248/47d2902e-d799-41fa-b13c-5b0c956232481.gif)
数值传热学CMAC算法源程序代码
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.IO;
usingSystem.Threading;
usingSystem.Collections;
usingZedGraph;
usingZedGraph.Web;
usingSystem.Drawing.Imaging;
usingExcel=Microsoft.Office.Interop.Excel;
namespaceCMAC
{
publicpartialclassForm_CAMC:
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{
for(j=0;j{
P[i,j]=0.0;
}
}
for(i=0;i{
for(j=0;j{
P1[i,j]=0.0;
}
}
for(i=0;i{
for(j=0;j{
U[i,j]=0.0;
}
}
for(i=0;i{
for(j=0;j{
V[i,j]=0.0;
}
}
for(i=0;i{
for(j=0;j{
U1[i,j]=0.0;
}
}
for(i=0;i{
for(j=0;j{
V1[i,j]=0.0;
}
}
for(i=0;i{
for(j=0;j{
U11[i,j]=0.0;
}
}
for(i=0;i{
for(j=0;j{
V11[i,j]=0.0;
}
}
for(i=0;i{
for(j=0;j{
B[i,j]=0.0;
}
}
#endregion
#region//坐标初始化
//网格坐标初始化
for(i=0;i{
XX[i]=DX*i;//网格x坐标
}
for(j=0;j{
YY[j]=DY*j;//网格y坐标
}
//压力p控制点坐标初始化
XP[0]=0.0;//压力边界点x坐标
XP[M]=1.0;
for(i=1;i{
XP[i]=(XX[i-1]+XX[i])/2.0;//压力内点x坐标
}
YP[0]=0.0;//压力边界点y坐标
YP[N]=1.0;
for(j=1;j{
YP[j]=(YY[j-1]+YY[j])/2.0;//压力内点y坐标
}
//速度u控制点坐标初始化
for(i=0;i{
XU[i]=XP[i];//速度u控制点x坐标
}
for(j=0;j{
YU[j]=YP[j];//速度u控制点y坐标
}
//速度v控制点坐标初始化
for(i=0;i{
XV[i]=XP[i];//速度v控制点x坐标
}
for(j=0;j{
YV[j]=YP[j];//速度v控制点y坐标
}
#endregion
#region//边界条件
for(j=0;j{
U[0,j]=0.0;//为速度u的W、E边界赋初值。
U[M,j]=0.0;
}
for(i=0;i{
U[i,0]=0.0;//为速度u的N、S边界赋初值。
U[i,N]=1.0;
}
for(j=0;j{
V[0,j]=0.0;//为速度v的W、E边界赋初值。
V[M,j]=0.0;
}
for(i=0;i{
V[i,0]=0.0;//为速度v的N、S边界赋初值。
V[i,N]=0.0;
}
#endregion
#region//求解过程
for(DA=1;DA<=20000;DA++)//外层循环
{
for(i=0;i{
for(j=0;j{
U1[i,j]=U[i,j];
}
}
for(i=0;i{
for(j=0;j{
V1[i,j]=V[i,j];
}
}
#region//求解尖括号U
//求解U的动量方程中对流相的第一项,x方向,DUX1(非邻边界的内节点)
for(i=2;i{
for(j=1;j{
DUX1[i,j]=U[i,j]*(U[i+1,j]-U[i-1,j])/(2.0*DX);
}
}
//求解边界邻点
for(j=1;j{
//左边界邻点
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-