034_Structural_Transient_In_Matlab结构动力学问题求解

news2024/11/6 18:18:38

在这里插入图片描述

结构动态问题

在这里插入图片描述

问题描述

我们试着给前面已经做过的问题上加一点有趣的东西。

  • 结构静力学求解

当时求解这个问题,在最外面的竖直切面加载了一个静态的固定的力。下面我们试试看在上方的表面增加一个脉冲压力载荷。

采用统一的有限元框架,定义问题,几何体已经出现过一次。

%% Rectangular Pressure Pulse on Boundary

% Create a model and include the bracket geometry.
model = femodel(AnalysisType="structuralTransient", ...
    Geometry="BracketWithHole.stl");

pdegplot(model.Geometry, 'FaceLabels', 'on', 'FaceAlpha', 0.5);

在这里插入图片描述

材料特性设置。

% Specify Young's modulus, Poisson's ratio, and mass density.
model.MaterialProperties = ...
    materialProperties(YoungsModulus=200e9, ...
    PoissonsRatio=0.3, MassDensity=7800);

边界与加载

边界条件

首先是固定表面,我们把最大的竖直表面固定起来。

% Specify that face 4 is a fixed boundary.
model.FaceBC(4) = faceBC(Constraint="fixed");

注意,我们这里设置边界条件的函数,由小写字母开头,而设置好的边界条件的变量,首字母是大写的。通过在faceBC中的Name=Value可以设置边界条件的值。

可以查看faceBC的帮助。

help faceBC
 faceBC - Boundary conditions on geometry face
    A faceBC object specifies the type of boundary condition on a face of a
    geometry.

    创建
      语法
        model.FaceBC(FaceID) = faceBC(Name=Value)

      输入参数
        FaceID - Face IDs
          vector of positive integers

    属性
      Constraint - Standard structural boundary constraints
        "fixed"
      XDisplacement - x-component of enforced displacement
        real number | function handle
      YDisplacement - y-component of enforced displacement
        real number | function handle
      ZDisplacement - z-component of enforced displacement
        real number | function handle
      Temperature - Temperature boundary condition
        real number | function handle
      Voltage - Voltage
        real number | function handle
      ElectricField - Electric field
        column vector | function handle
      MagneticField - Magnetic field
        column vector | function handle
      MagneticPotential - Magnetic potential
        real number | column vector | function handle
      FarField - Absorbing region
        farFieldBC object

    示例
      openExample('pde/FixedBoundariesExample')
      openExample('pde/BoundaryConditionsFor3DHarmonicElectromagneticAnalysisExample')

    另请参阅 femodel, fegeometry, farFieldBC, edgeBC, vertexBC, cellLoad,
      faceLoad, edgeLoad, vertexLoad

    已在 R2023a 中的 Partial Differential Equation Toolbox 中引入
    faceBC 的文档
       doc faceBC



接下来就是这个比较难的脉冲加载。

加载的设置方法,类似于边界条件的设置。可以设置不同的选择,例如,对于结构问题:

  • Pressure:垂直于面的压力载荷,单位为Pa
  • SurfaceTraction:表面载荷,力,单位为N
% Apply a rectangular pressure pulse on face 7 in the direction normal to the face.
pressurePulse = @(location,state) ...
    rectangularLoad(10^5,location,state,[0.0 0.002]);
model.FaceLoad(7) = faceLoad(Pressure=pressurePulse);

这里的问题,脉冲载荷如何实现?

脉冲加载

faceLoad函数的Name=Value中,值可以采取多种形式,主要我们用到的是数值和函数。

当这里使用一个函数是, 对函数的输入和输出有固定的要求。

  • 输入1:位置,一般称为location
  • 输入2: 状态
function value = loadFucntion(location, state)

end

这个函数的两个参数分别是位置和状态,是两个结构体,其具体内容如下:

  • location — 结构体,包含以下字段::
    • location.x — x坐标,是一个点或者若干个点
    • location.y — y坐标,是一个点或者若干个点
    • location.z — z坐标,是一个点或者若干个点
    • location.nx — 法向量的x分量,是一个点的或者若干个点的
    • location.ny — 法向量的y分量,是一个点的或者若干个点的
    • location.nz — 法向量的z分量,是一个点的或者若干个点的
  • state — 对于非线性问题和动态问题才有意义,包括以下字段的结构体:
    • state.u — 对应与location中定义点的状态变量(对于结构问题,就是位移)
    • state.ux — 估计的导数x分量
    • state.uy — 估计的导数y分量
    • state.uz — 估计的导数y分量
    • state.time — 时间
    • state.frequency — 频率
    • state.NormFluxDensity — 非线性磁场问题才需要的参数

对于我们想要求解的脉冲压力载荷问题,我们定义一个方波脉冲,这个方波脉冲的参数包括:

  1. load,载荷大小
  2. T,载荷时间,一个数组,包含两个时间点,分别是载荷开始和结束的时间
function Tn = rectangularLoad(load,location,state,T)
if isnan(state.time)
    Tn = NaN*(location.nx);
    return
end
if isa(load,"function_handle")
    load = load(location,state);
else
    load = load(:);
end
% Two time-points that define a rectangular pulse
T1 = T(1); % Start time
T2 = T(2); % End time

% Determine multiplicative factor for the specified time.
TnTrap = max([(state.time - T1)*(T2 - state.time)/ ...
    abs((state.time - T1)*(T2 - state.time)),0]);
Tn = load.* TnTrap;
end

最后这个TnTrap是一个方波函数,其值在T1T2之间为1,其他地方为0。

因为这里我们是一个时变问题,所以用到了state.time,这个是时间。

现在回到我们的设置中:

pressurePulse = @(location,state) ...
    rectangularLoad(10^5,location,state,[0.0 0.002]);

我们用上面方波函数定义了一个载荷函数,大小为 1 0 5 10^5 105,载荷时间为0到0.002s。

求解

接下来就是网格和求解。

% Generate a mesh and assign it to the model.
model = generateMesh(model);

% pdemesh(model);

% 也可以是

pdeplot3D(model.Geometry.Mesh);


在这里插入图片描述

求解要针对一个时间序列,这里我们设置时间序列为0到0.01s,取100个点。尽量分辨脉冲的宽度0.002s。

% Solve the problem.
result = solve(model,linspace(0,0.01,100));

可视化

前面我们利用pdeplot3D函数进行可视化,这个函数可以把求解的结果映射到网络结构上,对点、线、面进行着色。在前面两个结构静力学的例子中都得到应用。

这里,因为是一个动态问题,我们实际更想要更好地理解在动态载荷下,结构是如何发生变形和位移的。

这里我们就要介绍一个新的函数pdeviz,这个函数提供了更多的可视化功能,可以对结构的变形、位移、应力、应变等进行可视化。

另外,在动态问题的结果中,我们看看,结果包含了哪些内容:

result
result = 

  TransientStructuralResults - 属性:

     Displacement: [1x1 FEStruct]
         Velocity: [1x1 FEStruct]
     Acceleration: [1x1 FEStruct]
    SolutionTimes: [0 1.0101e-04 2.0202e-04 3.0303e-04 4.0404e-04 5.0505e-04 6.0606e-04 7.0707e-04 8.0808e-04 ... ] (1x100 double)
             Mesh: [1x1 FEMesh]


那么我们要用应力来着色,还需要用到一系列专门给输出利用的函数,这些函数都用evaluate开头。

  • evaluateStress 动态结构问题的应力评估
  • evaluateStrain 动态结构问题的应变评估
  • evaluateVonMisesStress 动态结构问题的von Mises应力评估

此外,还有下面的几个函数:

  • evaluateReaction 评估边界的反作用力
  • evaluatePrincipalStress 评估节点位置的主应力
  • evaluatePrincipalStrain 评估节点位置的主应变

有上述函数的帮助,我们可以构造一个动态过程的可视化。

fn = "structuralDyanmicLoad-viz.gif";
if isfile(fn)
    delete(fn)
end


vmStress = evaluateVonMisesStress(result);

v = pdeviz(model.Geometry.Mesh);
v.MeshVisible = "off";
v.AxesVisible = "on";
v.DeformationScaleFactor = 10;

for i = 2:numel(result.SolutionTimes)
    % pdeplot3D(result.Mesh, ColorMapData=result.Displacement.uz(:,i))
    title(sprintf("Time: %.5f s",result.SolutionTimes(i)))
    
    v.NodalData = vmStress(:, i);
    v.DeformationData = ...
        struct('ux', result.Displacement.ux(:, i), ...
            'uy', result.Displacement.uy(:, i), ...
            'uz', result.Displacement.uz(:, i));    
    
    % specificy fixed color limits
    clim([0, 1e8])
    
    exportgraphics(gcf, fn, Append=true, Resolution=80)
end

在这里插入图片描述

当然这里的位移是进行整体放大的,v.DeformationScaleFactor = 10;,这个可以调整。

完整代码

完整的代码如下:

%% Rectangular Pressure Pulse on Boundary

% Create a model and include the bracket geometry.
model = femodel(AnalysisType="structuralTransient", ...
    Geometry="BracketWithHole.stl");

% Specify Young's modulus, Poisson's ratio, and mass density.
model.MaterialProperties = ...
    materialProperties(YoungsModulus=200e9, ...
    PoissonsRatio=0.3, MassDensity=7800);

% Specify that face 4 is a fixed boundary.
model.FaceBC(4) = faceBC(Constraint="fixed");

% By default, both the initial displacement and velocity are set to 0.

% Apply a rectangular pressure pulse on face 7 in the direction normal to the face.
pressurePulse = @(location,state) ...
    rectangularLoad(10^5,location,state,[0.0 0.002]);
model.FaceLoad(7) = faceLoad(Pressure=pressurePulse);

% Generate a mesh and assign it to the model.
model = generateMesh(model,Hmax=0.05);

% Solve the problem.
result = solve(model,linspace(0,0.01,100));


fn = "structuralDyanmicLoad-viz.gif";
if isfile(fn)
    delete(fn)
end


vmStress = evaluateVonMisesStress(result);

v = pdeviz(model.Geometry.Mesh);
v.MeshVisible = "off";
v.AxesVisible = "on";
v.DeformationScaleFactor = 10;

for i = 2:numel(result.SolutionTimes)
    % pdeplot3D(result.Mesh, ColorMapData=result.Displacement.uz(:,i))
    title(sprintf("Time: %.5f s",result.SolutionTimes(i)))
    
    v.NodalData = vmStress(:, i);
    v.DeformationData = struct('ux', result.Displacement.ux(:, i), ...
        'uy', result.Displacement.uy(:, i), ...
        'uz', result.Displacement.uz(:, i));
    
    
    % specificy fixed color limits
    clim([0, 1e8])
    
    exportgraphics(gcf, fn, Append=true, Resolution=80)
end

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

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

相关文章

简单的 docker 部署ELK

简单的 docker 部署ELK 这是我的运维同事部署ELK的文档,我这里记录转载一下 服务规划 架构: Filebeat->kafka->logstash->ES kafka集群部署参照: kafka集群部署 部署服务程序路径/数据目录端口配置文件elasticsearch/data/elasticsearch9200/data/elas…

TortoiseSVN小乌龟下载安装(Windows11)

目录 TortoiseSVN 1.14.7工具下载安装 TortoiseSVN 1.14.7 工具 系统:Windows 11 下载 官网:https://tortoisesvn.subversion.org.cn/downloads.html如图选 TortoiseSVN 1.14.7 - 64 位 下载完成 安装 打开 next,next Browse&#xf…

Python实例:爱心代码

前言 在编程的奇妙世界里,代码不仅仅是冰冷的指令集合,它还可以成为表达情感、传递温暖的独特方式。今天,我们将一同探索用 Python 语言绘制爱心的神奇之旅。 爱心,这个象征着爱与温暖的符号,一直以来都在人类的情感世界中占据着特殊的地位。而通过 Python 的强大功能,…

ENSP RIP动态路由

RIP(距离矢量路由协议)以网络中所有链路的距离和矢量为依据计算最佳路径,是第一个动态路由协议。条数作为唯一的度量单位。默认开启水平分割(从一个路由接口学到的路由信息,便不在从这个接口发送出去)防止路…

Qt 练习做一个登录界面

练习做一个登录界面 效果 UI图 UI代码 <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Dialog</class><widget class"QDialog" name"Dialog"><property name"ge…

C++——priority_queue模拟实现过程中的优化

前言的前言&#xff1a; 大佬写博客给别人看&#xff0c;菜鸟写博客给自己看&#xff0c;我是菜鸟。 前言&#xff1a; 1.priority_queue&#xff08;优先队列&#xff09;的底层原理和堆极其相似&#xff0c;因此在模拟实现的过程中&#xff0c;主要借助堆的思想取完成&…

蓝桥杯真题——三角回文数(C语言)

问题描述 对于正整数 n, 如果存在正整数 k 使得 n123⋯kk(k1)2n123⋯kk(k1)/2​, 则 n 称为三角数。例如, 66066 是一个三角数, 因为 66066123⋯36366066123⋯363 。 如果一个整数从左到右读出所有数位上的数字, 与从右到左读出所有数位 上的数字是一样的, 则称这个数为回文数…

密码学知识点整理一:密码学概论

密码学是什么&#xff1f; 密码学是一门研究编制密码和破译密码的技术科学。 密码学&#xff0c;作为信息安全的核心技术之一&#xff0c;其重要性在于能够为信息传输提供安全保障&#xff0c;确保数据在存储或传输过程中的机密性、完整性与真实性不被破坏。从古至今&#x…

51单片机教程(五)- LED灯闪烁

1 项目分析 让输入/输出口的P1.0或P1.0~P1.7连接的LED灯闪烁。 2 技术准备 1、C语言知识点 1 运算符 1 算术运算符 #include <stdio.h>int main(){// 算术运算符int a 13;int b 6;printf("%d\n", ab); printf("%d\n", a-b); printf("%…

Unity中实现伤害飘字或者提示飘字效果(DoTween实现版本)

&#xff01;&#xff01;&#xff01;在实现以下效果之前&#xff0c;一定要往项目中导入DoTween插件。 一、搭建测试场景 1、在场景中新建一个带有Text组件的游戏物体A&#xff0c;并把这个游戏物体A中Text组件的Color属性中alpha值为0&#xff0c;让文字在场景中隐藏。 …

其他节点使用kubectl访问集群,kubeconfig配置文件 详解

上述两种方式&#xff1a;可使用kubectl连接k8s集群。 $HOME/.kube/config 是config文件默认路径&#xff0c;要么直接定义环境变量&#xff0c;要么就直接把文件拷过去 config文件里面&#xff0c;定义了context&#xff0c;里面指定了用户和对应的集群信息&#xff1a; ku…

【vim文本编辑器gcc编译器gdb调试器】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、vimvim安装vim常用快捷键vim使用vimtutor zh文档 二、gcc编译器安装gcc工具编译源代码 三、gdb调试器gdb安装gdb常用指令gdb简单上手使用gdb的单步调试功能 总结…

陀螺仪BMI323驱动开发测试(基于HAL库SPI通信)

参考资料 编写代码 读取芯片ID void BMI160_Init(void) {uint16_t chipID BMI323_read(BMI160_REG_CHIP_ID);debug("BMI323芯片ID为0x%x;", chipID);if (chipID ! 0x43){debug("未检测到BMI323;");}elsedebug("检测到陀螺仪BMI323;");u8 buf_…

【MySQL初阶】--- MySQL在Ubuntu环境下安装

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; MySQL 本篇博客博主采用的是ubuntu 22.04的系统按照MySQL&#xff0c;且在root用户下安装。 &#x1f3e0; MySQL安装 1. 更新系统的软件包列表 sudo a…

Charles简单压力测试

1.接口请求次数&#xff0c;并发量&#xff0c;请求延迟时间均可配置 1.1选中需要进行测试的接口&#xff0c;鼠标右键选中【repeat advance】 2.设置并发参数 下面的图中&#xff0c;选择了1个接口&#xff0c;每次迭代中1个接口同时请求&#xff0c;迭代1000次&#xff08;…

【大模型LLM面试合集】大语言模型架构_chatglm系列模型

chatglm系列模型 1.ChatGLM 1.1 背景 主流的预训练框架主要有三种&#xff1a; autoregressive自回归模型&#xff08;AR模型&#xff09;&#xff1a;代表作GPT。本质上是一个left-to-right的语言模型。通常用于生成式任务&#xff0c;在长文本生成方面取得了巨大的成功&a…

从 vue 源码看问题 — 你知道 Hook Event 吗?

前言 在之前的几篇文章中&#xff0c;都有提到 vue 中调用生命周期钩子时是通过 callHook() 方法进行调用的&#xff0c;比如在初始化篇章中调用 beforeCreate 和 created 生命周期钩子方式如下: 那么接下来一起来了解下到底什么是 Hook Event &#xff1f; Hook Event 是什…

html练习2

实现下列图片的效果 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>* {margin: 0;padding: 0;}#menu {background-color: #0c0048;width: 100%;height: 50px;margin: auto;…

计算机视觉常用数据集Cityscapes的介绍、下载、转为YOLO格式进行训练

我在寻找Cityscapes数据集的时候花了一番功夫&#xff0c;因为官网下载需要用公司或学校邮箱邮箱注册账号&#xff0c;等待审核通过后才能进行下载数据集。并且一开始我也并不了解Cityscapes的格式和内容是什么样的&#xff0c;现在我弄明白后写下这篇文章&#xff0c;用于记录…

Java | Leetcode Java题解之第523题连续的子数组和

题目&#xff1a; 题解&#xff1a; class Solution {public boolean checkSubarraySum(int[] nums, int k) {int m nums.length;if (m < 2) {return false;}Map<Integer, Integer> map new HashMap<Integer, Integer>();map.put(0, -1);int remainder 0;fo…