精华内容
下载资源
问答
  • 背景:这是本学期凝固实验课的实验之一。这节课有两个数值模拟实验,第一个是二维...简要说明:二维稳态传热、常物性、第一类边界条件、无内热源、网格的划分计算原理概述直角坐标系内二维导热过程温度场控制微分...

    背景:这是本学期凝固实验课的实验之一。这节课有两个数值模拟实验,第一个是二维常物性的,只有一种介质。而第二个实验是模拟凝固过程,稍微复杂一些。这篇文章是针对第一个实验写的,实验书上是按照显示差分进行的,这里改为隐式差分以便于计算。由于本人不是学CS的,因此代码的质量可能不是很高。

    简要说明:

    二维非稳态传热、常物性、第一类边界条件、无内热源、

    网格的划分

    计算原理概述

    直角坐标系内二维导热过程温度场控制微分方程:

    若时间项采用向后差分,空间项采用中心差分,则方程可离散为:

    ​,则上式可简化为:

    整理可得:

    通过隐式差分,该问题转化成线性方程组的求解问题。只需要给出系数矩阵A和此时刻的温度​即可求出下一时刻的温度分布。 由于该线性方程组有一定有确切的解,因此其系数矩阵A一定为满秩的方阵,基于此可以选择LU分解法来快速求解该方程组。

    为了方便计算机内的存储与计算,将某时刻各点的温度存储在一个列向量中T中,具体的存储方式为

    不妨假设在划分网格的时候X轴方向一共有cols个格点,Y轴方向一共有rows个格点。 由于在C++语言中,数组的下标都是从0开始的,因此有以下的关系:

    为了方便表示,定义一个的函数,且始终满足​,则系数矩阵A满足以下关系:

    为了方便表示,定义一个的函数indexof(i,j),且始终满足indexof(i,j) = (j-1)*cols+i-1,则系数矩阵A满足以下关系:

    当然,以上的表达式仅仅只考虑了差分方程,而没有考虑边界条件。

    对于边界点(即i=1或i=cols或j=1或j=rows的点),应满足:

    此时系数矩阵A已经得到了,就可以根据初始温度场向后迭代计算了。由于LU分解以及其解方程的原理较复杂,因此这里不重新写了,而是直接使用一个名为Eigen的C++矩阵计算库来完成此过程。

    程序

    整个程序主要由以下部分组成index.hpp 实现上文中的indexof函数

    parameter.hpp 保存、计算以及传递模拟时需要的参数

    engine.h engine.cpp 调用Eigen库进行数值模拟

    record.hpp 存储计算结果

    plot.h plot.cpp 计算结果的绘制

    widget.h widget.cpp widget.ui 主程序的绘制

    main.cpp 程序的入口

    Eigen线性代数运算库、Qwt绘图库以及Qt界面库

    为了节省篇幅,这里只给出与计算有关的代码(前3项)

    index.hpp

    #ifndef INDEX_HPP#define INDEX_HPP#include

    inline int indexOf(int i,int j,int cols){

    return (j-1)*cols+i-1;

    }

    inline std::pair positionOf(int index,int cols){

    //ret.first = i, ret.second = j //i和j从1开始 return std::make_pair(index%cols+1,index/cols+1);

    }

    #endif// INDEX_HPP

    parameter.hpp

    #ifndef PARAMETER_HPP#define PARAMETER_HPP#include

    struct Parameter{

    int xNums,yNums,stop;

    //分别为:x方向上格点数、y方向上格点数、计算多少个时间步长的时候停下来 double t0,tw,a,dt,dx,dy,l1,l2,rx,ry;

    //分别为:初始温度、边界温度(第一类边界条件)、热扩散系数、时间步长 //x方向网格步长、y方向网格步长、x方向总长度、y方向总长度、x方向网格傅里叶数、y方向网格傅里叶数 Parameter() = default;

    Parameter(double t0,double tw,double a,

    double dt,double l1,double dx,int stop){

    init(t0,tw,a,dt,l1,dx,stop);

    }

    Parameter(double t0,double tw,double a,double dt,

    double l1,double l2,double dx,double dy, int stop){

    init(t0,tw,a,dt,l1,l2,dx,dy,stop);

    }

    inline void init(double t0,double tw,double a,

    double dt,double l1,double dx, int stop){

    init(t0,tw,a,dt,l1,l1,dx,dx,stop);

    }

    inline void init(double t0,double tw,double a,double dt,

    double l1,double l2,double dx,double dy,int stop){

    this->t0 = t0;

    this->tw = tw;

    this->a = a;

    this->dt = dt;

    this->l1 = l1;

    this->l2 = l2;

    this->dx = dx;

    this->dy = dy;

    this->stop = stop;

    this->rx = (a*dt)/(dx*dx);

    this->ry = (a*dt)/(dy*dy);

    this->xNums = qRound(l1/dx)+1;

    this->yNums = qRound(l2/dx)+1;

    }

    };

    #endif// PARAMETER_HPP

    engine.h

    #ifndef ENGINE_H#define ENGINE_H

    #include #include #include #include #include #include using namespace Eigen;

    class Engine : public QObject

    {

    Q_OBJECT

    public:

    explicit Engine(QObject *parent = nullptr);

    signals:

    //准备好开始计算的信号 void prepared(bool ok);

    //计算完成的信号 void finished(bool ok);

    //完成一步计算的信号,通知主程序当前计算状态、步数、计算结果 void stepFinished(bool ok, int curStep, QVector data);

    public slots:

    //初始化 void init();

    //计算下一时刻温度场 void next();

    //反初始化 void unInit();

    //将计算结果复位 void jumpToStart();

    //进行计算前的准备 void prepare(bool ok);

    //设置模拟参数 void setParameter(const Parameter parm);

    private:

    //记录是否初始化 bool m_prepared;

    //现在计算到什么时候了 int m_currentStep;

    //存储模拟参数 Parameter m_parm;

    //存储温度场 VectorXd m_tFirst,m_tSecond;

    //LU求解器 SparseLU> m_lu;

    //初始化模拟参数 bool initLUSolver();

    //将计算结果从Eigen::VectorXd中复制到QVector容器中 void copyToQVector(const VectorXd vec, QVector & qvec);

    };

    #endif// ENGINE_H

    engine.cpp

    #include "engine.h"

    void Engine::init(){

    jumpToStart();

    bool ret = initLUSolver();

    m_prepared = ret;

    QString output = ret?"初始化成功":"初始化失败,请检查参数";

    qDebug()<

    emit prepared(ret);

    }

    void Engine::jumpToStart(){

    int rows = m_parm.yNums;int cols = m_parm.xNums;

    if(rows*cols<=0){

    return ;

    }

    m_currentStep = 1;

    m_tFirst.resize(rows*cols);

    m_tSecond.resize(rows*cols);

    m_tFirst.fill(m_parm.t0);

    m_tSecond.fill(m_parm.t0);

    auto mat = MatrixXd::Map(&m_tFirst[0],rows,cols);

    mat.row(0).fill(m_parm.tw);

    mat.row(rows-1).fill(m_parm.tw);

    mat.col(0).fill(m_parm.tw);

    mat.col(cols-1).fill(m_parm.tw);

    }

    bool Engine::initLUSolver(){

    int rows = m_parm.yNums;int cols = m_parm.xNums;

    double onePlusTwoR=1+2*(m_parm.rx+m_parm.ry);

    MatrixXd A(MatrixXd::Identity(rows*cols,rows*cols));

    for(int j=2;j

    for(int i=2;i

    int index = indexOf(i,j,cols);

    A(index,index) = onePlusTwoR;

    A(index,indexOf(i-1,j,cols)) = -m_parm.rx;

    A(index,indexOf(i+1,j,cols)) = -m_parm.rx;

    A(index,indexOf(i,j-1,cols)) = -m_parm.ry;

    A(index,indexOf(i,j+1,cols)) = -m_parm.ry;

    }

    }

    m_lu.compute(A.sparseView());

    return m_lu.info()==Success;

    }

    void Engine::next(){

    if(!m_prepared){

    qDebug()<

    emit finished(false);

    return;

    }

    if(m_currentStep>m_parm.stop){

    qDebug()<

    emit finished(true);

    return;

    }

    m_tSecond = m_lu.solve(m_tFirst);

    m_tFirst = m_tSecond;

    copyToQVector(m_tSecond,m_cache);

    emit stepFinished(m_lu.info()==Success,m_currentStep,m_cache);

    m_currentStep ++;

    }

    Engine::Engine(QObject *parent) : QObject(parent)

    {

    }

    void Engine::prepare(bool ok){

    if(ok){

    init();

    }else{

    unInit();

    }

    }

    void Engine::unInit(){

    m_prepared = false;

    emit prepared(false);

    }

    void Engine::setParameter(Parameter parm){

    m_parm = parm;

    }

    void Engine::copyToQVector(const VectorXd vec, QVector & qvec){

    qvec.clear();

    if (vec.rows()!=qvec.size()){

    qvec.resize(vec.rows());

    }

    VectorXd::Map(&(qvec[0]),qvec.size()) = vec;

    }

    实验结果

    之后的结果均是再以下参属下计算得到的

    一分钟时的温度场:

    中心点的温度变化曲线:

    程序运行截图

    展开全文
  • 根据能量守恒定律和傅立叶定律,采用有限体积法对二维稳态平面温度场进行求解,合理地确定控制体的大小,建立了平面稳态温度场问题的线性方程组及其离散模型。结果表现了平面温度场三角形单元变分计算公式的实际物理...
  • 用有限差分法和 Matlab 计算二维热加工温度场分析 Eg1 薄板焊接过程温度场分析 取焊件的一半为模型进行离散化起始点为 o 点以后以 v 速度沿 x 轴运动 根据题意为二维稳态导热二维稳态导热方程为 2 2 1 T T T Q 2...
  • 的空气接触,试分析物体的温度场的变化过程。首先,物体与高温表面靠近部分的温度很快上升,而其余部分仍保持原来的t0。如图中曲线HBD,随时间的推移,由于物体导热温度变化波及范围扩大,到某一时间后,右侧表面...

    的空气接触,试分

    析物体的温度场的变化过程。

    首先,物体与高温表面靠近部分的温度很快上升,而其余部分仍

    保持原来的

    t 0

    如图中曲线

    HBD

    ,随时间的推移,由于物体导热温度变化波及范

    围扩大,到某一时间后,右侧表面温度也逐渐升高,如图中曲线

    HCD

    HE

    HF

    最后,当时间达到一定值后,温度分布保持恒定,如图中曲线

    HG

    (若

    λ

    =const

    ,则

    HG

    是直线)。

    由此可见,上述非稳态导热过程中,存在着右侧面参与换热与不参

    与换热的两个不同阶段。

    (

    1

    )第一阶段(右侧面不参与换热)

    温度分布显现出部分为非稳态导热规律控制区和部分为初始温度区的混合分布,即:在此阶段物体温

    度分布受

    t

    分布的影响较大,此阶段称非正规状况阶段。

    (

    2

    )第二阶段,(右侧面参与换热)

    当右侧面参与换热以后,物体中的温度分布不受

    to

    影响,主要取决于边界条件及物性,此时,非稳

    态导热过程进入到正规状况阶段。正规状况阶段的温度变化规律是本章讨论的重点。

    2

    )二类非稳态导热的区别:前者存在着有区别的两个不同阶段,而后者不存在。

    3

    、特点;

    非稳态导热过程中,在与热流量方向相垂直的不同截面上热流量不相等,这是非稳态导热区别于稳态

    导热的一个特点。

    展开全文
  • 介绍了激光重熔、熔粗温度场的研究现状,叙述了较为典型的二维、三维的稳态和非稳态传热模型,分析比较了从该模型出发所得到的结果与实际情况间的差异。根据已有研究所得到的结论,简要讨论了影响模型建立的几个主要...
  • 在fluent平台上建立雾化气体的二维稳态模型,模拟了雾化气体淬火设备内流场和工件温度场的分布,以及淬火过程流体类型和流体速度对试件冷却速度的影响,并研究了工件在淬火区内的放置位置对工件冷却曲线的影响。...
  • 数值研究提出了在差热腔中的二维自然对流问题。 使用Navier-Stokes方程和热的涡流函数公式求解了控制这种非稳态流动现象的方程。 将获得的结果与文献结果进行比较,从而有可能验证这种方法。 在这项工作中,我们研究...
  • 为了解煤炭地下气化的发展过程及影响因素,以平面二维地下气化区为模拟对象,研究了水平煤层地下气化过程中渗流传热传质与燃烧气化反应耦合过程的特征,建立多孔介质非稳态渗流传递与化学反应相互作用的二维数学模型。...
  • 针对0.1 mm厚医用聚对苯甲酸乙酯(PET)薄膜与0.1 mm厚薄钛板之间的激光透射连接试验,利用商业化软件ANSYS,使用APDL语言编程实现超高斯型热源的动态加载,建立了一个三热传导模型,使用有限元法求得连接过程中温度...
  • 我们研究了在管道中流动的可耗散流体的自然对流换热问题,该流体的壁由多孔材料组成,并建立了以二维非线性系统表示的数学模型偏微分方程,描述了流体通过水平管的流动行为,以及在管内以及垂直磁场作用下管内温度在...
  • 基于焓方法发展的二维轴对称数学模型,考虑了激光束能量的时间和空间分布以及材料的变热物性影响,模拟了激光加工中材料的传热和相变过程,并分别计算了高斯光束及平面圆形光束作用于纯铁时材料内部的气液及固液界面随...
  • 东大2006—2007学年第二学期期末考试《传热学》试题(A卷)答案一、填空题(每空1分,共20分)1、某物体温度分布的表达式为t=f(x ,y,τ),此温度场二维(几维)、非稳态(稳态或非稳态)温度场。2、当等温线图上每两条相邻...

    东大2006—2007学年第二学期期末考试

    《传热学》试题(A卷)答案

    一、填空题(每空1分,共20分)

    1、某物体温度分布的表达式为t=f(x ,y,τ),此温度场为二维(几维)、非稳态(稳态或非稳态)温度场。

    2、当等温线图上每两条相邻等温线的温度间隔相同时,等温线的疏密可以直观地反映出不同区域导热热流密度的相对大小。

    3、导热微分方程式是根据能量守恒定律和傅里叶定律建立起来的导热物体中的温度场应当满足的数学表达式。

    4、工程上常采用肋片来强化传热。

    5、换热器传热计算的两种方法是平均温差法和效能-传热单元数法。

    6、由于流动起因的不同,对流换热可以区别为强制对流换热与自然对流换热。

    7、固体表面附近流体温度发生剧烈变化的薄层称为温度边界层或热边界层,其厚度定义为以过余温度为来流过余温度的99%处。

    8、判断两个现象相似的条件是:同名的已定特征数相等;单值性条件相似。

    9、凝结有珠状凝结和膜状凝结两种形式,其中珠状凝结有较大的换热强度,工程上常用的是膜状凝结。

    10、遵循兰贝特定律的辐射,数值上其辐射力等于定向辐射强度的π倍。

    11、单位时间内投射到表面的单位面积上总辐射能为投入辐射,单位时间内离开表面单位面积的总辐射能为该表面的有效辐射,后者包括表面的自身辐射和投入辐射被反射的部分。

    二、选择题(每题2分,共16分)

    1、下列说法不正确的是(D )

    A、辐射换热不依赖物体的接触而进行热量传递;

    B、辐射换热过程伴随着能量形式的两次转化;

    C、一切物体只要其温度T>0K,都会不断地发射热射线;

    D、辐射换热的大小与物体温度差的四次方成正比。

    2、大平板采用集总参数法的判别条件是(C)

    A.Bi>0.1 B.Bi=1

    C.Bi<0.1 D.Bi=0.1

    展开全文
  • 有限元分析

    2012-05-31 14:21:02
    Ansoft公司的Maxwell 是一...包括静电场、静磁场、时变电场,时变磁场,涡流场、瞬态场和温度场计算等,可以用来分析电机、传感器、变压器、永磁设备、激励器等电磁装置的静态、稳态、瞬态、正常工况和故障工况的特性。
  • 第15章 球面与外界换热的各向异性球带面稳态温度场方程——参数复数球多项式与参数复数球面函数 第16章 各向异性球带面稳态热传导方程——缔合复数球多项式与缔合复数球面函数 第17章 表面与外界换热的各向异-眭球带...
  • 为研究梯形巷道围岩散热的特点,依据能量守恒定律,建立二维稳态导热积分方程,运用有限体积法分别建立内部节点和边界节点的热平衡方程,采用VB语言编写围岩温度场及散热量数值计算程序,并通过一个实例进行数值分析....
  • Ansoft Maxwell教程

    2018-05-10 17:50:22
    它包括电场、静磁场、涡流场、瞬态场和温度场分析模块,可以用来分析电机、传感器、变压器、永磁设备、激励器等电磁装置的静态、稳态、瞬态、正常工况和故障工况的特性。它所包含的自上而下执行的用户界面、领先的...
  • 湖泊与水库水质模型

    2018-11-19 18:40:40
    湖库环流二维稳态混合衰减模型 湖库水质模型通用软件简介 对深度较深的湖泊水库,因其流速小,紊动掺混能力小,由春季始,气温升高,日照增强,入湖水温比湖库水温相对较高,而从湖表进入,使湖表水温在夏末达到...
  • 碰撞器和共形界面

    2020-04-29 19:11:11
    我们计算反射和透射能量的通量,从而定义了相关二维共形理论之间的界面透明度的精确度量。 如果最大的对称代数是维拉索罗,我们发现反射系数和透射系数与初始状态的细节无关,并且在中心电荷和位移算子的两点函数...
  • Thermal2D用Dirichlet和Neumann条件求解Poisson方程,以解决二维域中的稳态传热问题。 呈现为结果: 温度分布 热通量分布 Thermal2DTransient与上述应用程序相同,但针对不稳定的问题,提出了所有时间步的解决方案...
  • 在本文中,我们讨论了这种情况与弱重力猜想之间的关系,并进一步发展了二维宇宙学的细节。 我们提供了dS温度的大量解释,即加速观察者乘坐气泡时遇到的Unruh温度。 三维物质的源头来自散装的弦云,我们研究了粒子...
  • 在鼻半径达到无穷大和外部涡度为零的极限时,二维平面滞止点流的精确解被完全恢复。 另外,可以看出,旋转曲面的停滞点附近的速度与静止曲面的停滞点附近的速度相同,其外部涡度等于旋转速度的两倍。 该实现...
  • 起振时间可由电路参数整定稳定度受振荡器类型温度和电压等参数影响复位电 路的可靠性。 复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定 后,撤销复位信号。为可靠起见,电源稳定后还要经一定的...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

二维稳态温度场