033_Structure_Static_In_Matlab求解结构静力学问题两套方法

在这里插入图片描述

结构静力学问题

静力学问现在是已经很简单的问题,在材料各向同性的情况下,对于弹性固体材料,很容易通过有限元求解。特别是线弹性问题,方程的矩阵形式可以很容易的写出(准确得说是很容易通过有限元表达),然后通过求解线性方程组得到结果。

基本上,求解的就是如下形式的方程:

m ∂ 2 u ∂ t 2 + d ∂ u ∂ t − ∇ ⋅ ( c ∇ u ) + a u = f m \frac{\partial^2 u}{\partial t^2} + d \frac{\partial u}{ \partial t} - \nabla \cdot (c \nabla u) + a u = f mt22u+dtu(cu)+au=f

其中, m m m是质量矩阵, c c c是阻尼矩阵, a a a是刚度矩阵, f f f是外力矩阵, u u u是不同问题中的因变量,结构问题中是位移,热传导问题中是温度,电磁场问题中是电势。而方程中的 d d d只有在时变问题中才会出现,是一个时间相关的粘性系数。

当然,当方程的变量有多个时,方程就可以写成矢量的形式:

m ∂ 2 u ∂ t 2 + d ∂ u ∂ t − ∇ ⋅ ( c ⊗ ∇ u ) + a u = f \mathbf{m} \frac{\partial^2 \mathbf{u}}{\partial t^2} + \mathbf{d} \frac{\partial\mathbf{u}}{\partial t} - \nabla \cdot (\mathbf{c} \otimes \nabla \mathbf{u}) + \mathbf{a} \mathbf{u} = \mathbf{f} mt22u+dtu(cu)+au=f

相应的系数就变成矩阵或者向量,式中的 ⊗ \otimes 也就是张量积或者叫克罗内克积、Kronecker乘积。

接下来我们先介绍下传统方式的求解结构静力学问题,然后介绍新的统一模型的求解方式。

Matlab PDE Toolbox传统形式

这个工具箱最早的时候就实现了固体结构静力学、热传导、电磁场等问题的求解。

工具箱把不同领域的问题分成了不同的模型,采用同一个接口createpde来创建模型。这个接口的第一个参数是模型的名字,根据名称返回不同的模型对象。

  • structural:结构问题
  • thermal:热传导问题
  • electromagnetic:电磁场问题

每种问题,又包含了若干不同的分析类型,就拿结构问题来说,有:

"static-solid" | "static-planestress" | "static-planestrain" | "static-axisymmetric" | "transient-solid" | "transient-planestress" | "transient-planestrain" | "transient-axisymmetric" | "modal-solid" | "modal-planestress" | "modal-planestrain" | "modal-axisymmetric" | "frequency-solid" | "frequency-planestress" | "frequency-planestrain" | "frequency-axisymmetric"

首先,我们创建一个结构模型。

% 创建PDE模型
model = createpde('structural', 'static-solid');model
model = StructuralModel - 属性:AnalysisType: "static-solid"Geometry: []MaterialProperties: []BodyLoads: []BoundaryConditions: []ReferenceTemperature: []SuperelementInterfaces: []Mesh: []SolverOptions: [1x1 pde.PDESolverOptions]

这个StructuralModel对象中,有各种属性,可以很容易的猜出其含义。比如MaterialProperties就是材料属性,BodyLoads就是体力,BoundaryLoads就是边界力,BoundaryConditions就是边界条件。

下面我们找一个最简单的问题,就是一个悬臂梁的问题,然后求解。

% 定义几何
gm = multicuboid(15, 1, 1);
model.Geometry = gm;
% 几何模型
figure
pdegplot(model, 'FaceLabels', 'on', 'FaceAlpha', 0.5);
title('Geometry with Face Labels - Domain Specific Modeling');

在这里插入图片描述

我们这里专门把面的编号写出来,方便后面的边界条件的设置。

材料特性都是瞎写的。

% 指定材料属性
structuralProperties(model, 'YoungsModulus', 210E9, 'PoissonsRatio', 0.3, 'MassDensity', 7800);

接下来就是产生网格,然后求解。

% 生成网格
generateMesh(model, 'Hmax', 0.2);

网格的最大边长设为0.1,这个值是可以调整的,这个值越小,网格越密,计算结果越精确,但是计算量也越大。

% 绘制网格
figure
pdeplot3D(model);
title('Mesh with Hmax = 0.2');

在这里插入图片描述

边界条件,我们把梁的右边固定,左边施加一个力。还记得加上重力的影响。看到我们这个力是一个向量,斜向下拉。

% 应用边界条件
structuralBC(model, 'Face', 3, 'Constraint', 'fixed');
structuralBoundaryLoad(model, 'Face', 5, 'SurfaceTraction', [0; -1E5; -1E5]);% 重力
structuralBodyLoad(model, 'GravitationalAcceleration', [0; 0; -9.81]);

调用函数solve求解。

% 求解PDE
result = solve(model);

首先我们可以绘制整体的位移大小,基本上,就是经典的悬臂梁的感觉。不过,1米的悬臂梁还是很强很强的……

% 后处理结果
pdeplot3D(model, 'ColorMapData', result.Displacement.Magnitude);title('Displacement Magnitude - Static Analysis - Domain Specific Modeling');

在这里插入图片描述

当然我们还可以计算应力,然后绘制应力的分布,应力集中的方式也很明显。

vonMisesStress = result.VonMisesStress;
pdeplot3D(model, 'ColorMapData', vonMisesStress);title('VonMisesStress-Structural Static-Domain Specific Model');

在这里插入图片描述

统一求解框架

从2023a开始,Matlab开始引入了一个统一的求解框架来替代传统的各个专业的模型。这与工业软件的大的趋势也是一致的,多学科融合、数字化双创等等。

利用统一个数模、或者同一套网格,来求解不同的问题,这样可以减少重复工作,提高效率。

这个框架入口,就是femodel。就上面的悬臂梁问题,我们可以用这个框架来求解。

model = femodel(AnalysisType = "structuralStatic", Geometry = gm);model
model = 1x1 femodel arrayProperties for analysis type: structuralStaticAnalysisType: "structuralStatic"Geometry: [1x1 fegeometry]MaterialProperties: [0x1 materialProperties]Boundary ConditionsFaceBC: [0x6 faceBC]EdgeBC: [0x12 edgeBC]VertexBC: [0x8 vertexBC]LoadsCellLoad: [0x1 cellLoad]FaceLoad: [0x6 faceLoad]EdgeLoad: [0x12 edgeLoad]VertexLoad: [0x8 vertexLoad]Other ParametersReferenceTemperature: []SolverOptions: [1x1 pde.PDESolverOptions]Show <a href="matlab:if exist('model','var'), displayAllProperties(model); else, disp('无法显示变量 model 的属性,因为该变量不再存在。'), end">所有属性</a>

这个对象也没有什么特别的,其属性也很容易从名字看出内容。

绘制模型的函数一点都没变……也能够认识这个对象

pdegplot(model, FaceLabels='on', FaceAlpha=0.5);
title('Geometry with Face Labels Displayed - femodel');

在这里插入图片描述

设置材料属性,采用了属性赋值的形式,并提供了一个新的函数materialProperties来设置材料属性。

划分网格的函数没有改变,唯一变化的时候必须把模型对象传递出去,不会直接在位修改输入参数的属性,这说明这个对象并不是handle对象。

最后,产生的网格记录在了model.Geometry.Mesh中,这个对象是一个FEMesh对象,这个对象也是一个新的对象,用来表示网格。

model.MaterialProperties = materialProperties('YoungsModulus', 210E9, 'PoissonsRatio', 0.3, 'MassDensity', 7800);
model = generateMesh(model);
pdeplot3D(model.Geometry.Mesh);model.Geometry.Meshtitle('Mesh with default parameters - femodel');
ans = FEMesh - 属性:Nodes: [3x1267 double]Elements: [10x600 double]MaxElementSize: 0.6027MinElementSize: 0.3013MeshGradation: 1.5000GeometricOrder: 'quadratic'

在这里插入图片描述

设置边界条件的方式也略有不同,从调用函数修改为了属性赋值的方式。我们可以看到,边界条件变成了一个数组。

  • FaceBC:面的边界条件,对应faceBC对象/函数
  • EdgeBC:边的边界条件,对应edgeBC对象/函数
  • VertexBC:点的边界条件,对应vertexBC对象/函数

载荷条件、初值条件等等也是类似的。

从这三个对象的数组,也可以看到模型包含面、线、点三种对象的数目。当然,设置边界条件的时候,也是按照这个顺序来设置的。

当然,载荷有一个体积载荷,对应CellLoad属性和cellLoad对象/函数。

model.FaceBC(3) = faceBC(Constraint='fixed');model.FaceLoad(5) = faceLoad(SurfaceTraction=[0; -1E5; -1E5]);model.CellLoad = cellLoad(Gravity=[0; 0; -9.81]);

当然,我们如果对于Matlab结构数组的操作比较熟悉,也可以对多个对象进行操作,比如设置多个边界条件。

比如面边界,经过我们设置之后,可以看到:

model.FaceBC
ans = 1x6 faceBC arrayProperties for analysis type: structuralStaticIndex    Constraint    XDisplacement    YDisplacement    ZDisplacement1          []             []               []               []      2          []             []               []               []      3        fixed            []               []               []      4          []             []               []               []      5          []             []               []               []      6          []             []               []               []      Show <a href="matlab:if exist('ans','var'), displayAllProperties(ans); else, disp('无法显示变量 ans 的属性,因为该变量不再存在。'), end">所有属性</a>
model.FaceBC(2:4) = faceBC(Constraint='fixed');model.FaceBC
ans = 1x6 faceBC arrayProperties for analysis type: structuralStaticIndex    Constraint    XDisplacement    YDisplacement    ZDisplacement1          []             []               []               []      2        fixed            []               []               []      3        fixed            []               []               []      4        fixed            []               []               []      5          []             []               []               []      6          []             []               []               []      Show <a href="matlab:if exist('ans','var'), displayAllProperties(ans); else, disp('无法显示变量 ans 的属性,因为该变量不再存在。'), end">所有属性</a>

这样就很容易的设置了多个边界条件。

接下来就是基本一样的求解过程,调用solve函数,然后绘制结果。

% 先把面边界条件设回去,不然三个面被固定,结果会很好玩的
model.FaceBC([2, 4]) = faceBC();ret = solve(model);pdeplot3D(model.Geometry.Mesh, ColorMapData=ret.Displacement.Magnitude);
title('Displacement Magnitude-Structural Static-femodel');

在这里插入图片描述

vonMisesStress = ret.VonMisesStress;pdeplot3D(model.Geometry.Mesh, ColorMapData=vonMisesStress);title('VonMisesStress-Structural Static-femodel');

在这里插入图片描述

总的来说,统一接口的方式,也并没有什么大的不同之处。我感觉可能会让共享数模来分析不同学科的交叉问题会更加直观一些。当然,后面再学习的时候,建议还是直接从femodel开始,因为这个是未来的发展方向。

虽然,资料确实比较少,例子也还有好多没有调整过来。

总结

求解静力学问题,求解过程和结果都没有什么让人惊喜的地方。

下面,在讨论一个周期加载的问题,这个问题是一个动力学问题。

我们就直接用统一建模框架来做。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/884519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rnn/lstm 项目实战

tip:本项目用到的数据和代码在https://pan.baidu.com/s/1Cw6OSSWJevSv7T1ouk4B6Q?pwdz6w2 1. RNN : 预测股价 任务&#xff1a;基于zgpa_train.csv数据,建立RNN模型,预测股价 1.完成数据预处理&#xff0c;将序列数据转化为可用于RNN输入的数据 2.对新数据zgpa_test.csv进…

jenkins 构建报错 mvn: command not found

首先安装过 maven&#xff0c;并且配置过环境变量 win r ,输入 cmd 键入 mvn -v 出现上图输出&#xff0c;则证明安装成功。 原因 jenkins 没有 maven 配置全局属性, 导致无法找到 mvn 命令。 解决方案 找到全局属性&#xff0c;点击新增&#xff0c;配置 MAVEN_HOME 路…

轮廓图【HTML+CSS+JavaScript】

给大家分享一个很好看的轮播图&#xff0c;这个也是之前看到别人写的效果感觉很好看&#xff0c;所以后面也自己实现了一下&#xff0c;在这里分享给大家&#xff0c;希望大家也可以有所收获 轮播图效果&#xff1a; 视频效果有点浑浊&#xff0c;大家凑合着看&#xff0c;大家…

ChatGPT变AI搜索引擎!以后还需要谷歌吗?

前言 在北京时间11月1日凌晨&#xff0c;正值ChatGPT两岁生日之际&#xff0c;OpenAI宣布推出最新的人工智能搜索体验&#xff01;具备实时网络功能&#xff01;与 Google 展开直接竞争。 ChatGPT搜索的推出标志着ChatGPT成功消除了即时信息这一最后的短板。 这项新功能可供 …

Netty 组件介绍 - ByteBuf

直接内存&堆内存 ByteBuf buffer ByteBufAllocator.DEFAULT.heapBuffer(10);ByteBuf byteBuf ByteBufAllocator.DEFAULT.directBuffer(10); 组成 ByteBuf维护了两个不同的索引&#xff0c;一个用于读取&#xff0c;一个用于写入。 写入 内存回收 堆内存使用的是JVM内…

都快2025年了,来看看哪个编程语言才是时下热门吧

早上好啊&#xff0c;大佬们&#xff0c;今天咱们不讲知识&#xff0c;今天我们来看看时下热门的编程语言都是哪些&#xff0c;大佬们又都是在学哪些语言呢。 最近一些朋友和我在讨论哪个编程语言是现在 最好用 最厉害 的编程语言。 有人说&#xff0c;Python简单好用&#xf…

【雷达信号数据集】雷达脉冲活动分段的多级学习算法【附下载链接】

摘要 无线电信号识别是电子战中的一项重要功能。电子战系统需要精确识别和定位雷达脉冲活动&#xff0c;以产生有效的对抗措施。尽管这些任务很重要&#xff0c;但基于深度学习的雷达脉冲活动识别方法在很大程度上仍未得到充分探索。虽然之前已经探索了用于雷达调制识别的深度…

vscode php Launch built-in server and debug, PHP内置服务xdebug调试,自定义启动参数配置使用示例

在vscode中&#xff0c;当我们安装了插件 PHP Debug&#xff08;xdebug.php-debug&#xff09;或者 xdebug.php-pack 后 我们通过内置默认的 php xdebug配置启动php项目后&#xff0c;默认情况下我们在vscode中设置断点是不会生效的&#xff0c;因为我们的内置php服务默认启动时…

(二 上)VB 2010 设计初步

目录 一、常用类应用 1.Console类控制台 2.窗体基本控件 二、面向对象程序设计 1.类和对象 2.对象的属性、方法、事件属 1.属性 2.方法 3.事件、事件过程 1.事件 2.事件过程 3.对象浏览器 三、.NET类库与命名空间 1.命名空间 常用命名空间 1.System命名空间 2.…

[CARLA系列--01]CARLA 0.9.15 在Windows下的安装教程(一)

Carla是一款开源的自动驾驶仿真器&#xff0c;它基本可以用来帮助训练自动驾驶的所有模块&#xff0c;包括感知系统&#xff0c;Localization, 规划系统等等.Carla这个产品目前已经更新到了最新的0.9.15版本,目前遇到好多人在windows系统上如何安装可编辑版的Carla遇到了好多问…

禾川HCQ1控制器程序编译报错如何解决

1、第一次打开用户程序 2、提示库未安装 3、安装库文件 4、脉冲轴库未安装 5、没有错误 去禾川自动化官网,把可以安装的包和库都安装下,程序编译就没有错误了。 6、下载相关包文件

ubuntu20安装opencv3.2记录

系统环境 ubuntu20安装了ros-noetic&#xff0c;所以系统默认装了opencv4.2.0&#xff0c;但是跑fastlivo推荐的是opencv3.2.0&#xff0c;而且海康相机别人写的ros驱动&#xff08;海康相机ros驱动&#xff09;也是需要opencv3.2.0&#xff0c;最终还是选择安装多版本的openc…

基于NVIDIA NIM平台实现盲人过马路的demo(一)

前言:利用NVIDIA NIM平台提供的大模型进行编辑,通过llama-3.2-90b-vision-instruct模型进行初步的图片检测 step1: 部署大模型到本地,引用所需要的库 import os import requests import base64 import cv2 import time from datetime import datetimestep2: 观看官方使用文…

MATLAB下的四个模型的IMM例程(CV、CT左转、CT右转、CA四个模型),附源代码可复制

文章目录 基于IMM算法的目标跟踪概述源代码运行结果代码结构与功能1. 初始化2. 仿真参数设置3. 模型参数设置4. 生成量测数据5. IMM算法初始化6. IMM迭代7. 绘图8. 辅助函数总结基于IMM算法的目标跟踪 概述 该MATLAB代码实现了基于交互式多模型(IMM)算法的目标跟踪,旨在估…

Netty 组件介绍 - Future Promise

在异步处理时&#xff0c;经常用到这两个接口 netty 中的 Future 继承 jdk 中的 FutuFuture&#xff0c;而Promise 又对 netty Future 进行了扩展。 idk Future 只能同步等待任务结束&#xff08;或成功或失败)才能得到结果netty Future 可以同步等待任务结束得到结也可以异…

ai数字人分身123口播克隆数字人小程序源码_博纳软云

功能配置 一、用户 用户管理小黑屋用户反馈登录设置短信参数 二、作品 视频作品背景音乐库背景音乐分类 三、形象分身 上传记录视频要求参数配置 四、声音克隆 克隆记录参数配置声音要求文案示例 五、AI文案 生成记录创作模型模型分类Al配置 六、充值 充值订单积分套…

Elasticsearch Interval 查询:为什么它们是真正的位置查询,以及如何从 Span 转换

作者&#xff1a;来自 Elastic Mayya Sharipova 解释 span 查询如何成为真正的位置查询以及如何从 span 查询过渡到它们。 长期以来&#xff0c;Span 查询一直是有序和邻近搜索的工具。这些查询对于特定领域&#xff08;例如法律或专利搜索&#xff09;尤其有用。但相对较新的 …

软件测试模型

软件测试模型是在软件开发过程中&#xff0c;用于指导软件测试活动的一系列方法和框架。这些模型帮助测试团队确定何时进行测试、测试什么以及如何测试&#xff0c;从而确保软件的质量和稳定性。 一 V模型 V模型是一种经典的软件测试模型,它由瀑布研发模型演变而来的测试模型…

Tiling与流水线技术小结

文章目录 Tiling技术Loop TilingAI推理中的Tiling 参考 流水线技术指令周期 参考 Tiling技术 Tiling&#xff08;平铺&#xff09;是一种将大的问题或数据集分解为较小的子问题或子数据集的技术&#xff0c;目的是提高数据局部性和缓存利用率&#xff0c;从而提升程序性能。 在…

Pinia-状态管理

Pinia-状态管理 特点&#xff1a; 1. 轻量和模块化 Pinia 是一个轻量级的状态管理库&#xff0c;支持模块化管理&#xff0c;即可以将应用的状态分成多个 store 以实现更好的组织。使用 Pinia&#xff0c;可以定义多个 store&#xff0c;每个 store 都是一个独立的模块&#x…