加热炉板坯温度场数值模拟(二维,第三类边界条件)

35 篇文章 1 订阅

加热炉板坯温度场数值模拟(二维,第三类边界条件)
在这里插入图片描述
在这里插入图片描述

现场热像仪只能监测板坯的表面温度,不能监测板坯内部温度。利用数值模拟机理建模模拟板坯加热过程,通过建模,计算出板坯的温度分布,对工艺改造提出建设性建议。
请添加图片描述
图与思路(摘自计算传热学大叔)

相关参数(摘自《步进式加热炉板坯温度场数值模拟》)

#include "stdafx.h"
//x方向控制体的个数
#define N 11
//y方向控制体的个数
#define M 5

//时间间隔
#define dtime 1
//最大时间步
#define maxtstep  int(21.43 * 60 + 0.5)

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

int _tmain(int argc, _TCHAR *argv[])
{
	ofstream file;
	file.open("Temperature.txt", ios::out | ios::trunc);
	file << fixed;
	double length,height; 
	double Tleft,Tright,Tbottom,Tup; 
	double Tmiddle; 
	double den, c, k;//物质密度,比热,导热系数
	double s;//热源
	double h;//对流换热系数
	double dx,dy;
	//左右边界2个体积为零的控制体和中间N个控制体
	//上下边界2个体积为零的控制体和中间M个控制体
	double Tinitial[N+2][M+2], T[N+2][M+2];
	double ae0[N+2][M+2], aw0[N+2][M+2], an0[N+2][M+2], as0[N+2][M+2], ap0[N+2][M+2], ap1[N+2][M+2], b[N+2][M+2];//系数
	int i,j;
	//加热炉内板坯尺寸15*1.123*0.135
	//将钢坯沿加热炉纵向取截面,即只考虑钢坯温度随宽度和厚度方向的变化
	length = 1.123; 
	height = 0.135;
	Tleft = 1150; 
	Tright = 1150;
	Tbottom = 1150;
	Tup = 1150;
	Tmiddle = 930;
	den = 7840;
	c = 465;
	k = 28.5;
	s = 0;
	h = 375; //换热系数
	dx = length / N; 
	dy = height / M;
	//中间控制体
	for (i = 2; i < N;i++) for (j = 2; j < M;j++)
	{
		ae0[i][j] = k * dy / dx; //右侧网格
		aw0[i][j] = k * dy / dx; //左侧网格
		an0[i][j] = k * dx / dy; //上侧网格
		as0[i][j] = k * dx / dy; //下侧网格
		ap0[i][j] = den * c * dx * dy / dtime - ae0[i][j] - aw0[i][j] - an0[i][j] - as0[i][j];
		ap1[i][j] = ap0[i][j] + ae0[i][j] + aw0[i][j] + an0[i][j] + as0[i][j];
		b[i][j] = s * dx * dy;
	}
	//边界控制体
	i = 1;//左侧网格
	for (j = 2; j < M;j++)
	{
		ae0[i][j] = k * dy / dx; //
		aw0[i][j] = 1/(1/(k * dy / (dx / 2))+1/h); 
		an0[i][j] = k * dx / dy;
		as0[i][j] = k * dx / dy;
		ap0[i][j] = den * c * dx * dy / dtime - ae0[i][j] - aw0[i][j] - an0[i][j] - as0[i][j];
		ap1[i][j] = ap0[i][j] + ae0[i][j] + aw0[i][j] + an0[i][j] + as0[i][j];
		b[i][j] = s * dx * dy;
	}
	i = N;//右侧网格
	for (j = 2; j < M;j++)
	{
		ae0[i][j] = 1/(1/(k * dy / (dx / 2))+1/h); 
		aw0[i][j] = k * dy / dx; 
		an0[i][j] = k * dx / dy;
		as0[i][j] = k * dx / dy;
		ap0[i][j] = den * c * dx * dy / dtime - ae0[i][j] - aw0[i][j] - an0[i][j] - as0[i][j];
		ap1[i][j] = ap0[i][j] + ae0[i][j] + aw0[i][j] + an0[i][j] + as0[i][j];
		b[i][j] = s * dx * dy;
	}
	j = 1;//下侧网格
	for (i = 2; i < N;i++)
	{
		ae0[i][j] = k * dy / dx; 
		aw0[i][j] = k * dy / dx; 
		an0[i][j] = k * dx / dy;
		as0[i][j] = 1/(1/(k * dx / (dy / 2))+1/h);
		ap0[i][j] = den * c * dx * dy / dtime - ae0[i][j] - aw0[i][j] - an0[i][j] - as0[i][j];
		ap1[i][j] = ap0[i][j] + ae0[i][j] + aw0[i][j] + an0[i][j] + as0[i][j];
		b[i][j] = s * dx * dy;
	}
	j = M;//上侧网格
	for (i = 2; i < N;i++)
	{
		ae0[i][j] = k * dy / dx; 
		aw0[i][j] = k * dy / dx; 
		an0[i][j] = 1/(1/(k * dx / (dy / 2))+1/h);
		as0[i][j] = k * dx / dy;
		ap0[i][j] = den * c * dx * dy / dtime - ae0[i][j] - aw0[i][j] - an0[i][j] - as0[i][j];
		ap1[i][j] = ap0[i][j] + ae0[i][j] + aw0[i][j] + an0[i][j] + as0[i][j];
		b[i][j] = s * dx * dy;
	}
	i = 1,j = 1;//左下
	{
		ae0[i][j] = k * dy / dx; 
		aw0[i][j] = 1/(1/(k * dy / (dx / 2))+1/h); 
		an0[i][j] = k * dx / dy;
		as0[i][j] = 1/(1/(k * dx / (dy / 2))+1/h);
		ap0[i][j] = den * c * dx * dy / dtime - ae0[i][j] - aw0[i][j] - an0[i][j] - as0[i][j];
		ap1[i][j] = ap0[i][j] + ae0[i][j] + aw0[i][j] + an0[i][j] + as0[i][j];
		b[i][j] = s * dx * dy;
	}
	i = 1,j = M;//右下
	{
		ae0[i][j] = k * dy / dx; 
		aw0[i][j] = 1/(1/(k * dy / (dx / 2))+1/h); 
		an0[i][j] = 1/(1/(k * dx / (dy / 2))+1/h);
		as0[i][j] = k * dx / dy;
		ap0[i][j] = den * c * dx * dy / dtime - ae0[i][j] - aw0[i][j] - an0[i][j] - as0[i][j];
		ap1[i][j] = ap0[i][j] + ae0[i][j] + aw0[i][j] + an0[i][j] + as0[i][j];
		b[i][j] = s * dx * dy;
	}
	i = N,j = 1;//
	{
		ae0[i][j] = 1/(1/(k * dy / (dx / 2))+1/h); 
		aw0[i][j] = k * dy / dx; 
		an0[i][j] = k * dx / dy;
		as0[i][j] = 1/(1/(k * dx / (dy / 2))+1/h);
		ap0[i][j] = den * c * dx * dy / dtime - ae0[i][j] - aw0[i][j] - an0[i][j] - as0[i][j];
		ap1[i][j] = ap0[i][j] + ae0[i][j] + aw0[i][j] + an0[i][j] + as0[i][j];
		b[i][j] = s * dx * dy;
	}
	i = N,j = M;
	{
		ae0[i][j] = 1/(1/(k * dy / (dx / 2))+1/h); 
		aw0[i][j] = k * dy / dx; 
		an0[i][j] = 1/(1/(k * dx / (dy / 2))+1/h);
		as0[i][j] = k * dx / dy;
		ap0[i][j] = den * c * dx * dy / dtime - ae0[i][j] - aw0[i][j] - an0[i][j] - as0[i][j];
		ap1[i][j] = ap0[i][j] + ae0[i][j] + aw0[i][j] + an0[i][j] + as0[i][j];
		b[i][j] = s * dx * dy;
	}
	//初始条件
	for (i = 1; i <= N; i++) for (j = 1; j <= M; j++)
	{
		Tinitial[i][j] = Tmiddle;
	}
	//边界条件
	//左侧虚拟控制体
	i = 0; 
	for (j = 1; j <= M; j++) Tinitial[i][j] = Tleft;
	//右侧虚拟控制体
	i = N+1; 
	for (j = 1; j <= M; j++) Tinitial[i][j] = Tright;
	//下侧虚拟控制体
	j = 0; 
	for (i = 1; i <= N; i++) Tinitial[i][j] = Tbottom;
	//上侧虚拟控制体
	j = M+1; 
	for (i = 1; i <= N; i++) Tinitial[i][j] = Tup;
	for (int tstep = 1; tstep <= maxtstep; tstep++)
	{
		//cout << tstep << '\t';
		for (j = 1; j <= M; j++) for (i = 1; i <= N; i++)  
		{
			T[i][j] = (ae0[i][j] * Tinitial[i + 1][j] + aw0[i][j] * Tinitial[i - 1][j] + 
				       an0[i][j] * Tinitial[i][j + 1] + as0[i][j] * Tinitial[i][j - 1] +
				       ap0[i][j] * Tinitial[i][j] + b[i][j]) / ap1[i][j];
			//cout << setprecision(5) << T[i][j] << '\t';
			cout << setprecision(5) << i<< '\t';
			cout << setprecision(5) << j<< '\t';
		}
		//cout << '\n';
		for (j = 1; j <= M; j++) for (i = 1; i <= N; i++)  
		{
			file << setprecision(5) << T[i][j] << '\t';
		}
		file << '\n';
		for (j = 1; j <= M; j++) for (i = 1; i <= N; i++)  
		{
			Tinitial[i][j] = T[i][j];
		}
	}
	return 0;
}

第三类边界条件运行结果
请添加图片描述
如果 1/h = 0;第三类边界条件变成了第一类边界条件。
在机理建模的过程中,参考了“B站计算传热学大叔”和“步进式加热炉板坯温度场数值模拟”的内容。
这篇博文的正确性需要考证,希望大家在这里指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨铮...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值