一般热 & 热力计算

1.1 管道设备的热应力现象

在工业生产制造中,管道是最常见的设备之一。管道内壁与外壁的温差导致管道壁产生热应力,可能加速管道老化等问题,缩短使用寿命。

我们可以通过Code_Aster进行有限元分析来预测管道的温度场和应力场分布,实现对设备更有针对性的维护。

1.2 举例:热平衡状态的圆管

对无限长管的内外表面施加固定的温度,求壁厚方向的温度场。

1.2.1 热计算详解

(1)可采用的计算模型:

AFFE_MODELE (… PHENOMENE = 'THERMIQUE'

                     … MODELISATION = 'XXXX'))

模型类型MODELISATION根据几何维度、对称性、单元类型的不同可以为:

  • 3D / AXIS / PLAN
  • 3D_DIAG / AXIS_DIAG / PLAN_DIAG
  • COQUE / COQUE_AXIS / COQUE_PLAN

Tips

温度剧烈变化(如热冲击)时,推荐使用矩阵对角化的物理模型,即*_DIAG;

在2D模型中,可将一个二次单元分割成两个一次单元。

(2)材料的定义:

DEFI_MATERIAU,至少包含以下参数:

  • λ,热导率(W/m/°C) 
  • ρCP,密度比热容(J/(m3·°C))

3种主要的材料特性定义方式:

  • THER:线性各向同性
  • THER_ORTH:线性正交异性,从3个方向上定义热导率λ
  • THER_NL :非线性,需要定义温度相关的各参数如λ(T),ρCP(T),β(T)

(3)边界条件的定义:

AFFE_CHAR_THER or AFFE_CHAR_THER_F

第一类边界条件(Dirichlet):

>> 时间和空间为变量的温度函数

  • TEMP_IMPO

>> 节点温度之间的线性关系

  • LIAISON_DDL
  • LIAISON_GROUP
  • LIAISON_MAIL

第二类边界条件(Neumann):

>> 自然对流(Fourier定律)

  • EXCHANGE

>> 壁面间的对流换热

  • EXCHANGE_PAROI

>> 法向热流:常数或温度和空间相关的函数

  • FLUX_REP

>> 非线性法向热流:温度相关的函数

  • FLUX_NL;RAYONNEMENT

>> 热源

  • SOURCE

(4)求解器设置:

  • THER_LINEAIRE 线性 
  • THER_NON_LINE 非线性(在非线性计算中通常使用Newton迭代方法)

常用参数:

>> 稳态计算的结果

  • STATIONNAIRE = 'OUI'

>> 温度常数

  • VALE = T0

>> 已知的温度场

  • CHAM_NO = (CREA_CHAMP的结果)

>> 另一热计算的结果

  • 结果 EVOL_THER = result
  • 目标时间步NUME_ORDRE;时刻INST

(5)θ-方法进行时间离散:

  • θ = 0.57, 默认值,通常能够得到较好的计算结果
  • PARM_THETA 可用于θ值的修改

(6)时间步和空间(网格)的一致性:

根据材料的物性和网格的精细程度,决定时间步长,推荐:

(7)如果有必要,可修改计算收敛速度:

更新切线矩阵的频率——REAC_ITER

线搜索的准则——RESI_LINE_RELA / ITER_LINE_MAXI

收敛的准则——迭代次数ITER_GLOB_MAXI,残差RESI_GLOB_RELA

(8)结果的输出:

  • THER_LINEAIRE 线性
  • THER_NON_LINE 非线性

求解器输出结果仅包含节点上的温度,需要利用温度场推导热流场:

>> CALC_CHAMP

  • FLUX_ELGA
  • FLUX_ELNO
  • FLUX_NOEU

此外,

  • IMPR_RESU 输出包括目标物理场信息的网格
  • RECU_FONCTION/TABLEAU 提取目标节点的物理场为表格
  • IMPR_FONCTION/TABLEAU 输出表格或图表文件

1.2.2 热应力计算详解

平面结构受热与放热相互平衡时,结构温度不再随时间而改变,平面内的温度只是坐标的函数。

力学计算中使用的网格可以不同于热学计算中使用的网格:

  • 线性单元适用于热学计算,但在力学计算中精度较差,使用二阶单元网格更佳
  • 热学和力学计算关注的计算网格区域不同,因此网格精细化区域不同
  • 若使用不同的网格,需要投影温度场 PROJ_CHAMP

当网格相同时,将热计算温度场导入应力场计算:

AFFE_MATERIAU (...     AFFE_VARC=_F(    NOM_VARC= 'TEMP',

                                                                        EVOL= 热计算的温度场结果, 

                                                                        VALE_REF= 20. ) ...)

温度场的投影(网格不同):

mesh_th = LIRE_MAILLAGE(…)

model_t1 = AFFE_MODELE(...)

mat_th = DEFI_MATERIAU(...)

field_th = AFFE_MATERIAU(...)

bc_th = AFFE_CHAR_THER(...)

resu_th = THER_LINEAIRE(...)

当我们需要使用另外一套网格计算力学时:

#读取网格
mesh_me = LIRE_MAILLAGE(…)

#在新网格上定义热计算模型
model_t2 = AFFE_MODELE(MAILLAGE= mesh_me,
                       AFFE=_F(TOUT='OUI',
                               PHENOMENE='THERMIQUE',
                               MODELISATION='AXIS',),)

#投影温度场
project = PROJ_CHAMP(RESULTAT= resu_th ,
                     MODELE_1= model_t1,
                     MODELE_2= model_t2,)

热平衡状态圆管

#在新网格上定义力学计算模型
model_m1 = AFFE_MODELE(MAILLAGE= mesh_me ,
                       AFFE=_F(       TOUT='OUI',
                                      PHENOMENE='MECANIQUE',
                                      MODELISATION='AXIS',),)

#定义考虑热膨胀的材料模型
mat_me = DEFI_MATERIAU(ELAS=_F(
                             E=2.1e11,
                             NU=0.2,
                             ALPHA=12e-6,),)

#将力学模型装配到新网格上
field_me = AFFE_MATERIAU(
               MAILLAGE=mesh_me,
               AFFE=_F(      TOUT='OUI',
                             MATER=mat_me,),
               AFFE_VARC=_F(TOUT='OUI',
                            NOM_VARC='TEMP',
                            EVOL=project,
                            VALE_REF=20,),)

#定义边界条件
bc_meca =AFFE_CHAR_MECA(MODELE= model_m1,
               DDL_IMPO=_F(GROUP_NO='FACEB',
                     DX=0,
                     DY=0,),)

#静力学求解设置
resu_meca = MECA_STATIQUE(MODELE= model_m1,
              CHAM_MATER= field_me,
              EXCIT=_F(CHARGE= bc_meca,),)

#输出结果
 IMPR_RESU(...)

自定义热源

2.1 举例:金属圆盘的点热源辐照

使用点热源,对金属圆盘进行加热后冷却,求温度场的分布情况。

(1)计算模型和材料模型的定义:

(2)创建表征激光热源产生的热流的函数:

# 用公式表征激光的热流分布
A = 5e6
S = 0.0138
F = FORMULE(NOM_PARA = 'X',
            VALE = "(A + EXP(-X**2/S**2))")

## 对公式先进行离散化并插值计算
## 生成表格(X,F(X))

# 定义表格的X一栏
LISTR = DEFI_LIST_REEL(DEBUT  =  0.,
              INTERVALLE=_F( JUSQU_A = 0.04,
                             NOMBRE = 100, ) ,)

# 计算表格的X一栏对应的F(X)值
FF = CALC_FONC_INTERP(FONCTION = F,
                     LIST_PARA = LISTR,
                     PROL_DROITE = 'LINEAIRE',
                     PROL_GAUCHE = 'LINEAIRE'       )

# 外界温度
T_EXT = DEFI_CONSTANTE(VALE=20., )

# 对流换热系数
H = DEFI_CONSTANTE(VALE=5, )

(3)加热和冷却过程热边界条件的定义:

# 边界上的热交换(加热过程,30s)
thload1  =  AFFE_CHAR_THER_F(  MODELE=mymodl,
                               FLUX_REP =_F( GROUP_MA = 'LBC', FLUN = FF,),
                               ECHANGE =_F( GROUP_MA = ('BAS','HAUT','COTE',),
                                            COEF_H = H,
                                            TEMP_EXT = T_EXT,  )   )

# 边界上的热交换(冷却过程)
thload2 =  AFFE_CHAR_THER_F ( MODELE = mymodl,
                              ECHANGE=_F( 
                                 GROUP_MA =('LBC', 'HAUT', 'COTE', 'BAS',),
                                 COEF_H = H,
                                 TEMP_EXT = T_EXT , ),)

(4)计算设置:

# 时间步设置
LISTT  =  DEFI_LIST_REEL( DEBUT=0.,
                          INTERVALLE=_F(JUSQU_A = 150.,
                                        NOMBRE = 300, ) )

# 计算加热过程(30s)
temper = THER_LINEAIRE( MODELE = mymodl,
                        CHAM_MATER = mymat,
                        EXCIT = _F( CHARGE = thload1,),
                        INCREMENT = _F(  LIST_INST = LISTT,
                                         INST_FIN = 30,),
                        ETAT_INIT = _F(  VALE = 20.0,) )

# 计算冷却过程
temper = THER_LINEAIRE( reuse = temper ,
                     MODELE = mymodl,
                     CHAM_MATER = mymat,
                     PARM_THETA = 0.60,
                     EXCIT  = _F( CHARGE = thload2, ),
                     INCREMENT = _F( LIST_INST = LISTT ,
                                   INST_INIT = 30,),
                     ETAT_INIT = _F(    EVOL_THER = temper ,))

#输出结果
IMPR_RESU(...)
FIN ( )

(5)结果示意图:

自定义温度场 & 其他应用

3.1 自定义温度场的热应力计算

当我们知道圆管周向温度场分布的解析解时:

可以定义函数如下:

T0 = FORMULE(VALE = '40-log(X/20)*(40-15)/log(21/20)',
             NOM_PARA = ('X',),)

fT0 = CREA_CHAMP(    TYPE_CHAM = 'NOEU_TEMP_F',
                     OPERATION = 'AFFE',
                     MAILLAGE = memesh,
                     AFFE = _F(     TOUT = 'OUI',
                                    NOM_CMP = 'TEMP',
                                    VALE_F = T0,),)

thresu = CREA_RESU(OPERATION = 'AFFE',
                   TYPE_RESU = 'EVOL_THER',
                   NOM_CHAM = 'TEMP',
                   AFFE = _F(CHAM_GD=fT0,
                             INST = 0,),)

# 力学计算
Memodl = AFFE_MODELE(...)
steel = DEFI_MATERIAU(...)
memat = AFFE_MATERIAU(MAILLAGE=memesh,
                      AFFE=_F( TOUT='OUI',
                               MATER=steel,),
                      AFFE_VARC=_F(TOUT = 'OUI',
                                   NOM_VARC = 'TEMP',
                                   EVOL= resproj,
                                   VALE_REF = 20,),)
meload = AFFE_CHAR_MECA(...)
meresu = MECA_STATIQUE(...)

#输出结果
IMPR_RESU(...)

3.2 其他应用

3.2.1 混凝土

步骤1:混凝土的热计算和水化热计算(温度场)

温度分布云图

步骤2:混凝土的含水量计算

含水量分布云图

步骤3:混凝土收缩的力学计算(应力场)

应力分布云图

3.2.2 冶金学

在计算温度场后,还可以 :

  • 计算移动的非线性传热(如焊接) : THER_NON_LINE_MO
  • 被动换热(焊接):AFFE_CHAR_THER (...CONVECTION...)
  • 计算材料的硬化,相变:CALC_META

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐