0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于六面体单元热应力问题的Matlab有限元编程求解

8XCt_sim_ol 来源:仿真秀App 作者:SimPC 2022-11-17 11:10 次阅读

导读:上一篇《弹性地基梁matlab有限元编程,以双排桩支护结构计算为例》引起了Matlab有限元编程学习者的共鸣。今天我想和大家讨论一下热应力问题(六面体单元)matlab有限元编程问题。

本案例主要介绍热应力问题的matlab有限元编程及原理。热应力也叫温度应力,后文提到的热应变也叫温度应变。这里需要与传热问题的有限元分析进行区分:可以认为传热分析是进行热应力分析的前提条件,通过传热分析来确定温度场,在获得温度场的基础上,计算所产生的热应力。所以本文为阐述热应力问题前提是假定温度场是已知的,我们并不关心温度场是如何得到的,那是热传导要解决的问题,在这个已知的温度场作用下,由于热胀冷缩会产生响应的热应变进而产生热应力,如何求解这个热应力,这就是我们这次课程要解决的问题。

如图1所示,本案例的分析对象为一个两端固定约束的四棱柱受不同方向的热应变作用下产生的应力应变,在用有限元方法求解热应力问题时,温度作用可以等效为一个节点载荷进行求解,因此热应力问题本质上还是一个固体力学问题的有限元求解,而我们刚才提到的传热问题的有限元求解其实是在求解傅里叶传热偏微分方程,其与固体力学偏微分方程是完全不同的两套理论。

因此,本文首先重点讲解的温度作用产生的节点等效温度荷载有限元列式的推导,六面体单元刚度矩阵、雅各比矩阵、应变矩阵有限元列式的推导,温度应力应变的后处理有限元列式,此外还包括上述有限元列式对应的matlab代码实现过程。

54219788-659d-11ed-8abf-dac502259ad0.png

图1 两端固定约束的四棱柱受单位热应变作用下的应力

假定通过传热分析我们可以得到,相对于原来状态温度升高了544361ba-659d-11ed-8abf-dac502259ad0.png,对于各向同性材料,温度升高545cbde0-659d-11ed-8abf-dac502259ad0.png会产生一个均匀的应变(通俗地讲,就是热胀冷缩原理,物体会发生膨胀),应变大小与材料的线膨胀系数54760660-659d-11ed-8abf-dac502259ad0.png有关,54760660-659d-11ed-8abf-dac502259ad0.png表示材料在单位温度升高所引起的长度的变化值,一般情况下,在一定范围内可以假定线膨胀系数为常数。若物体能够自由变形,则由温度变化引起的应变不会产生应力。温度应变一般被表示为初应变的形式

54a81c7c-659d-11ed-8abf-dac502259ad0.png    (1)

对应的应力-应变关系为

54b9e0ec-659d-11ed-8abf-dac502259ad0.png        (2)

接下来将公式(2)的应力应变关系代入到有限元分析列式中,利用虚功原理进行推导。其中虚应力和虚应变场函数的有限元列式如下式

54d6ee6c-659d-11ed-8abf-dac502259ad0.png           (3)

将公式(2)利用虚功原理,可得到下述虚功方程

54eec794-659d-11ed-8abf-dac502259ad0.png      (4)

将公式(3)代入公式(4)所示的虚功方程中,并对其进行简化处理,可以得到

55002d40-659d-11ed-8abf-dac502259ad0.png    (5)

因为虚位移存在任意性,因此可以除掉公式(5)中的虚位移,进而得到

553e89a0-659d-11ed-8abf-dac502259ad0.png     (6)

其中Ke为刚度矩阵,表达式为

555513f0-659d-11ed-8abf-dac502259ad0.png       (7)

556e1a08-659d-11ed-8abf-dac502259ad0.png为单元节点载荷,表达式为

558662b6-659d-11ed-8abf-dac502259ad0.png      (8)

为等效温度载荷,是由热应力引起的节点处等效温度载荷,表达式为

559985a8-659d-11ed-8abf-dac502259ad0.png        (9)

因此,对于温度应力问题,核心就是求解等效温度载荷。因为公式中包含了B矩阵,即应变矩阵,对于六面体单元应变矩阵的推导过程如下图所示。

55c7b7de-659d-11ed-8abf-dac502259ad0.png

图1 应变矩阵与刚度矩阵的推导公式

基于图1所示的应变矩阵的推导过程,公式(9)中等效温度载荷对应的matlab代码如下所示,此外本段代码同样包含了单元刚度矩阵的编程实现,因为等效温度载荷和单元刚度矩阵的求解公式中均有B矩阵和D矩阵参与。

for X=1:2
for Y=1:2
for Z=1:2
GP1=GaussCoordinate(X); GP2=GaussCoordinate(Y); GP3=GaussCoordinate(Z); %高斯点坐标
% 计算形函数对总体坐标的导数(NDerivative)及雅可比矩阵行列式(JacobiDET)
[~,NDerivative, JacobiDET] = ShapeFunction([GP1 GP2 GP3], ElementNodeCoordinate);
Coefficient=GaussWeight(X)*GaussWeight(Y)*GaussWeight(Z)*JacobiDET;
%计算B矩阵  利用形函数对总体坐标的导数(NDerivative)对B进行计算
B=zeros(6,24);
for I=1:8
COL=(I-1)*3+1:(I-1)*3+3;
B(:,COL)=[NDerivative(1,I) 0         0;
0         NDerivative(2,I) 0;
0         0         NDerivative(3,I);
NDerivative(2,I) NDerivative(1,I) 0;
0         NDerivative(3,I) NDerivative(2,I);
NDerivative(3,I) 0         NDerivative(1,I)];
end
Ke=Ke+Coefficient*B'*D*B;  %叠加刚度阵
P_dT=P_dT+Coefficient*B'*D*epsilon0; %等效温度荷载
end
end
end

上述代码中,求解雅各比矩阵行列式和形函数导数的ShapeFunction函数的matlab代码如下所示:

function [N,NDerivative,JacobiDET] = ShapeFunction(GaussPoint,ElementNodeCoordinate)
%等参元坐标  每一列代表一个点的坐标
ParentNodes=[-1 1  1 -1 -1  1  1 -1;
-1 -1  1  1 -1 -1  1  1;
-1 -1 -1 -1  1  1  1  1];
N=zeros(8,1); %初始化形函数矩阵8*1
ParentNDerivative=zeros(3,8);%初始化形函数对局部坐标的导数矩阵3*8
%计算形函数及形函数对局部坐标导数
for I=1:8
XPoint = ParentNodes(1,I);
YPoint = ParentNodes(2,I);
ZPoint = ParentNodes(3,I);
ShapePart = [1+GaussPoint(1)*XPoint 1+GaussPoint(2)*YPoint 1+GaussPoint(3)*ZPoint];  %定义中间变量
N(I) = 0.125*ShapePart(1)*ShapePart(2)*ShapePart(3);
ParentNDerivative(1,I) = 0.125*XPoint*ShapePart(2)*ShapePart(3);
ParentNDerivative(2,I) = 0.125*YPoint*ShapePart(1)*ShapePart(3);
ParentNDerivative(3,I) = 0.125*ZPoint*ShapePart(1)*ShapePart(2);
end
Jacobi = ParentNDerivative*ElementNodeCoordinate;%计算雅可比矩阵
JacobiDET = det(Jacobi);%计算雅可比行列式
JacobiINV=inv(Jacobi);%对雅可比行列式求逆
NDerivative=JacobiINV*ParentNDerivative;%利用雅可比行列式的逆计算形函数对结构坐标的导数3*8
end

单元刚度矩阵和等效温度载荷求得之后,将其装配到整体刚度矩阵和荷载向量中通过高斯消去法实现节点位移的求解,求解之后的节点位移按照下图中的后处理流程和对应的公式,即可求解得到高斯积分点处的应力应变值,需要注意的是如公式(2)所示单元应力的求解公式中包含了温度应变;下一步再通过插值函数矩阵将高斯积分点处的应力应变插值到每个节点再进行磨平处理,即可得到节点的应力应变。具体matlab实现代码如下所示:

InterpolationMatrix=zeros(8,8);%求解节点应力应变的插值矩阵
%循环高斯点
for X=1:2
for Y=1:2
for Z=1:2  
E1=GaussCoordinate(X); E2=GaussCoordinate(Y); E3=GaussCoordinate(Z);
GaussPointNumber = GaussPointNumber + 1;
% 计算局部坐标下的形函数及形函数导数
[N,NDerivative, ~] = ShapeFunction([E1 E2 E3], ElementNodeCoordinate);
ElementNodeDisplacement=U(ElementNodeDOF);
ElementNodeDisplacement=reshape(ElementNodeDisplacement,Dof,8);
% 计算高斯点应变 GausspointStrain3_3 3*3的应变矩阵
GausspointStrain3_3=ElementNodeDisplacement*NDerivative’;%3*8  8*3
%把高斯点应变矩阵改写成6*1
GausspointStrain=[GausspointStrain3_3(1,1) GausspointStrain3_3(2,2) GausspointStrain3_3(3,3)…  
GausspointStrain3_3(1,2)+GausspointStrain3_3(2,1)…
GausspointStrain3_3(2,3)+GausspointStrain3_3(3,2) …
GausspointStrain3_3(1,3)+GausspointStrain3_3(3,1)]';
% 计算高斯点应力
GausspointStress = D*GausspointStrain-D*epsilon0;%总应变-温度应变
GaussStrain(:,GaussPointNumber)=GausspointStrain;
GaussStress(:,GaussPointNumber)=GausspointStress;
InterpolationMatrix(K,:)=N;
K=K+1;
end
end
end
%求得节点应力应变
Temp1=InterpolationMatrix(GaussStrain(1:6,GaussPointNumber-7:GaussPointNumber)');
NodeStrain(1:6,INODE+1:INODE+8)=Temp1';
Temp2=InterpolationMatrix(GaussStress(1:6,GaussPointNumber-7:GaussPointNumber)');
NodeStress(1:6,INODE+1:INODE+8)=Temp2';

上述便是热应力问题的整个求解过程,以一个两端固定约束的四棱柱为例,其在不同单位热应变的作用下的求解结果如下图所示

56307800-659d-11ed-8abf-dac502259ad0.png

以上就是笔者本期要分享的内容。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    182

    文章

    2963

    浏览量

    230128
  • 编程
    +关注

    关注

    88

    文章

    3587

    浏览量

    93577
  • 热应力
    +关注

    关注

    0

    文章

    9

    浏览量

    10783

原文标题:基于六面体单元热应力问题的Matlab有限元编程求解

文章出处:【微信号:sim_ol,微信公众号:模拟在线】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【PDF】matlab有限元法计算分析程序编写

    【PDF】matlab有限元法计算分析程序编写附件:
    发表于 02-28 11:04

    MATLAB有限元分析与应用

    有限元分析和应用。另外,本书还提供了大量免费资源。 第1章引言 1.1有限元方法的步骤 1.2用于有限元分析的MATLAB函数 1.3MATLAB
    发表于 02-28 11:07

    封装中的界面热应力分析

    电子封装集成度的不断提高,集成电路的功率容量和发热量也越来越高,封装体内就 产生了越来越多的温度分布以及热应力问题 文章建立了基板一粘结层一硅芯片热应力分析有限元模。利用有限元法分析
    发表于 02-01 17:19

    有限元仿真分析软件的三种算法模型格式介绍

    ;另一方它对使用者要求较高,需要有”编程”的知识;  “纯文本格式”  大部分有限元软件都提供纯文本格式,www.featech.com.cn如Nastran的.bdf文件、Abaqus的.inp文件等
    发表于 07-07 17:18

    有限元法的原理

    1有限元法原理有限元法是以变分原理为基础的一种数值计算方法。把所要求解的边值问题转化为相应的变分问题,利用剖分、插值和离散化,把变分问题转化为普通多元函数的极值问题,得到一组多元代数方程组,
    发表于 09-06 08:08

    OptiMode:矢量有限元法-精度及优势

    的主要原因之一是其近似几何的方式。ADI和FD采用小矩形进行折射率采样,这导致了对角线或曲线的阶梯式近似。理论上,矩形晶可以缩小至阶梯式以进行一个很好的近似,但在实践中它仍然会导致相当大的误差。有限元
    发表于 10-22 09:17

    求解时步有限元系统方程的改进非线性算法_刘慧娟

    求解时步有限元系统方程的改进非线性算法_刘慧娟
    发表于 01-08 13:58 1次下载

    不可压缩Navier-Stokes方程并行谱有限元求解

    针对不可压缩Navier-Stokes( N-S)方程求解过程中的有限元法存在计算网格量大、收敛速度慢的缺点,提出了基于面积坐标的三角网格剖分谱有限元法( TSFEM)并进一步给出了利用OpenMP
    发表于 12-07 10:32 0次下载
    不可压缩Navier-Stokes方程并行谱<b class='flag-5'>有限元</b>法<b class='flag-5'>求解</b>

    n型结构膜盘联轴器型设计与有限元分析

    针对膜盘联轴器型设计和型在不同类型载荷下的应力分布等问题,将有限元分析技术应用到膜盘联轴器设计中。提出了一种以n型结构连接的双膜盘结构膜盘联轴器。根据等强度近似理论设计了膜盘型
    发表于 03-16 14:09 1次下载

    如何使用Matlab进行有限元分析和硬盘的选购与使用资料说明

    介绍了Matlab 语言特点,给出了Matlab 环境下实现有限元的步骤。并以一个具体实例说明如何使用Matlab 进行有限元分析。使用该方
    发表于 07-24 16:27 5次下载
    如何使用<b class='flag-5'>Matlab</b>进行<b class='flag-5'>有限元</b>分析和硬盘的选购与使用资料说明

    六面体网格生成和优化的研究综述

    文中总结了近十几年来六面体网格生成和优化的研究进展。首先概述六面体网格生成的研究进展,将其归为整体生成方法和基于模型分解的生成方法2类,并指出各类方法的优缺点;然后概述六面体网格优化的研究现状包括几何优化和拓扑优化;最后阐述
    发表于 04-27 15:21 6次下载
    <b class='flag-5'>六面体</b>网格生成和优化的研究综述

    六面体网格复杂层插入操作的优化设计

    拓扑操作在六面体网格生成、编辑和优化中至关重要,而层操作是最直接有效、应用最广泛的拓扑修改操作,其中以层插入操作最为关键和复杂。针对现有的层插入操作仍无法有效地处理自相交、自贴合、多层整体生成等
    发表于 04-27 15:25 9次下载
    <b class='flag-5'>六面体</b>网格复杂层插入操作的优化设计

    使用MATLAB有限元建模材料

    使用MATLAB有限元建模材料说明。
    发表于 05-27 09:39 0次下载

    基于Matlab有限元编程的变截面悬臂梁分析

    近日我注册并认证了仿真秀专栏,将在仿真秀官网和App给平台用户带来Matlab有限元编程、复杂函数拟合和matlab绘图相关内容。此外还会带来隔震建筑Abaqus建模仿真分析等内容。本
    的头像 发表于 09-08 11:11 3890次阅读

    如何用matlab实现针对四面体单元划分的三维结构进行有限元编程

    主要内容涉及四面体单元有限元基本理论的推导,主要是单元刚度矩阵的推导,此外还包括等参单元和Hammer数值积分以及三维问题的后处理计算。
    的头像 发表于 10-12 18:11 6093次阅读