1、数值传热学CMAC算法源程序代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using System.Threading;using System.Collections;using ZedGraph;using ZedGraph.Web;using System.Drawing.Imaging
2、;using Excel = Microsoft.Office.Interop.Excel;namespace CMAC public partial class Form_CAMC : Form public Form_CAMC() InitializeComponent(); private void btn_js_Click(object sender, EventArgs e) int M = 41;/x方向网格数 int N = 41;/y方向网格数 /定义数组 double, P = new doubleM + 1, N + 1;/压力p值 double, P1 = new dou
3、bleM + 1, N + 1;/计算过程中的p值,用于过渡 double, U = new doubleM + 1, N + 1;/速度u,v的值(这里存储值的方式是以定位网格线来存储,与我们通常用的行和列刚好相反,请特别注意!) double, V = new doubleM + 1, N + 1; double, U1 = new doubleM + 1, N + 1;/计算过程中的u,v值,用于过渡 double, V1 = new doubleM + 1, N + 1; double, U11 = new doubleM + 1, N + 1;/记录尖括号的u值 double, V1
4、1 = new doubleM + 1, N + 1;/记录尖括号的v值 double XX = new doubleM;/网格x坐标 double YY = new doubleN;/网格y坐标 double XP = new doubleM + 1;/压力p控制点x坐标 double YP = new doubleN + 1;/压力p控制点y坐标 double XU = new doubleM + 1;/速度u控制点x坐标 double YU = new doubleN + 1;/速度u控制点y坐标 double XV = new doubleM + 1;/速度v控制点x坐标 double
5、 YV = new doubleN + 1;/速度v控制点y坐标 double, DUX1 = new doubleM + 1, N + 1;/U的动量方程中对流相的第一项,x方向 double, DUX2 = new doubleM + 1, N + 1;/U的动量方程中对流相的第二项,y方向 double, KSX1 = new doubleM + 1, N + 1;/U动量方程扩散相的全部(两相一起) double, KSX2 = new doubleM + 1, N + 1; double, DVY1 = new doubleM + 1, N + 1;/V的动量方程中对流相的第一项,x
6、方向 double, DVY2 = new doubleM + 1, N + 1;/V的动量方程中对流相的第二项,y方向 double, KSY1 = new doubleM + 1, N + 1;/V动量方程扩散项的第一项 double, KSY2 = new doubleM + 1, N + 1;/V动量方程扩散项的第二项 double AP, AE, AW, AS, AN;/压力泊松方程系数 double, B = new doubleM + 1, N + 1;/压力方程源项 double T, DT, DX, DY;/定义时间、时间步长、x方向步长、y方向步长 int i, j, IN
7、T_P; int DA;/外部循环次数 int K;/求解压力方程的循环次数 double RE = 100.0;/雷诺数 double X = 1.0;/方腔长度 double Y = 1.0;/方腔高度 double ERRP = 0.0;/压力P残差 double ERRU = 0.0;/速度U残差 double ERRV = 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
8、 = 0; j N + 1; j+) Pi, j = 0.0; for (i = 0; i M + 1; i+) for (j = 0; j N + 1; j+) P1i, j = 0.0; for (i = 0; i M + 1; i+) for (j = 0; j N + 1; j+) Ui, j = 0.0; for (i = 0; i M + 1; i+) for (j = 0; j N + 1; j+) Vi, j = 0.0; for (i = 0; i M + 1; i+) for (j = 0; j N + 1; j+) U1i, j = 0.0; for (i = 0; i
9、M + 1; i+) for (j = 0; j N + 1; j+) V1i, j = 0.0; for (i = 0; i M + 1; i+) for (j = 0; j N + 1; j+) U11i, j = 0.0; for (i = 0; i M + 1; i+) for (j = 0; j N + 1; j+) V11i, j = 0.0; for (i = 0; i M + 1; i+) for (j = 0; j N + 1; j+) Bi, j = 0.0; #endregion #region/坐标初始化 /网格坐标初始化 for (i = 0; i M; i+) XX
10、i = DX * i;/网格x坐标 for (j = 0; j N; j+) YYj = DY * j;/网格y坐标 /压力p控制点坐标初始化 XP0 = 0.0;/压力边界点x坐标 XPM = 1.0; for (i = 1; i M; i+) XPi = (XXi - 1 + XXi) / 2.0;/压力内点x坐标 YP0 = 0.0;/压力边界点y坐标 YPN = 1.0; for (j = 1; j N; j+) YPj = (YYj - 1 + YYj) / 2.0;/压力内点y坐标 /速度u控制点坐标初始化 for (i = 0; i M + 1; i+) XUi = XPi;/速
11、度u控制点x坐标 for (j = 0; j N + 1; j+) YUj = YPj;/速度u控制点y坐标 /速度v控制点坐标初始化 for (i = 0; i M + 1; i+) XVi = XPi;/速度v控制点x坐标 for (j = 0; j N + 1; j+) YVj = YPj;/速度v控制点y坐标 #endregion #region/边界条件 for (j = 0; j N + 1; j+) U0, j = 0.0;/为速度u的W、E边界赋初值。 UM, j = 0.0; for (i = 0; i M + 1; i+) Ui, 0 = 0.0;/为速度u的N、S边界赋初
12、值。 Ui, N = 1.0; for (j = 0; j N + 1; j+) V0, j = 0.0;/为速度v的W、E边界赋初值。 VM, j = 0.0; for (i = 0; i M + 1; i+) Vi, 0 = 0.0;/为速度v的N、S边界赋初值。 Vi, N = 0.0; #endregion #region/求解过程 for (DA = 1; DA = 20000; DA+)/外层循环 for (i = 0; i M + 1; i+)/将U的值赋值给U1 for (j = 0; j N + 1; j+) U1i, j = Ui, j; for (i = 0; i M +
13、 1; i+)/将V的值赋值给V1 for (j = 0; j N + 1; j+) V1i, j = Vi, j; #region/求解尖括号U /求解U的动量方程中对流相的第一项,x方向,DUX1(非邻边界的内节点) for (i = 2; i M - 1; i+) for (j = 1; j N; j+) DUX1i, j = Ui, j * (Ui + 1, j - Ui - 1, j) / (2.0 * DX); /求解边界邻点 for (j = 1; j N; j+) /左边界邻点 DUX11, j = U1, j * (-4.0 * U0, j + 3.0 * U1, j + U2, j) / (3.0 * DX); /右边界邻点 DUX1M - 1, j = UM - 1, j * (4.0 * UM, j - 3.0 * UM - 1, j - UM -
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1