兰亭集势网站模板,宿迁房产,做淘宝客进哪个网站,什么关键词可以搜到那种结构静力学问题
静力学问现在是已经很简单的问题#xff0c;在材料各向同性的情况下#xff0c;对于弹性固体材料#xff0c;很容易通过有限元求解。特别是线弹性问题#xff0c;方程的矩阵形式可以很容易的写出#xff08;准确得说是很容易通过有限元表达#xff09;在材料各向同性的情况下对于弹性固体材料很容易通过有限元求解。特别是线弹性问题方程的矩阵形式可以很容易的写出准确得说是很容易通过有限元表达然后通过求解线性方程组得到结果。
基本上求解的就是如下形式的方程 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 m∂t2∂2ud∂t∂u−∇⋅(c∇u)auf
其中 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} m∂t2∂2ud∂t∂u−∇⋅(c⊗∇u)auf
相应的系数就变成矩阵或者向量式中的 ⊗ \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);modelmodel StructuralModel - 属性:AnalysisType: static-solidGeometry: []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);modelmodel 1x1 femodel arrayProperties for analysis type: structuralStaticAnalysisType: structuralStaticGeometry: [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 hrefmatlab:if exist(model,var), displayAllProperties(model); else, disp(无法显示变量 model 的属性因为该变量不再存在。), end所有属性/a这个对象也没有什么特别的其属性也很容易从名字看出内容。
绘制模型的函数一点都没变……也能够认识这个对象
pdegplot(model, FaceLabelson, FaceAlpha0.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(Constraintfixed);model.FaceLoad(5) faceLoad(SurfaceTraction[0; -1E5; -1E5]);model.CellLoad cellLoad(Gravity[0; 0; -9.81]);当然我们如果对于Matlab结构数组的操作比较熟悉也可以对多个对象进行操作比如设置多个边界条件。
比如面边界经过我们设置之后可以看到
model.FaceBCans 1x6 faceBC arrayProperties for analysis type: structuralStaticIndex Constraint XDisplacement YDisplacement ZDisplacement1 [] [] [] [] 2 [] [] [] [] 3 fixed [] [] [] 4 [] [] [] [] 5 [] [] [] [] 6 [] [] [] [] Show a hrefmatlab:if exist(ans,var), displayAllProperties(ans); else, disp(无法显示变量 ans 的属性因为该变量不再存在。), end所有属性/amodel.FaceBC(2:4) faceBC(Constraintfixed);model.FaceBCans 1x6 faceBC arrayProperties for analysis type: structuralStaticIndex Constraint XDisplacement YDisplacement ZDisplacement1 [] [] [] [] 2 fixed [] [] [] 3 fixed [] [] [] 4 fixed [] [] [] 5 [] [] [] [] 6 [] [] [] [] Show a hrefmatlab:if exist(ans,var), displayAllProperties(ans); else, disp(无法显示变量 ans 的属性因为该变量不再存在。), end所有属性/a这样就很容易的设置了多个边界条件。
接下来就是基本一样的求解过程调用solve函数然后绘制结果。
% 先把面边界条件设回去不然三个面被固定结果会很好玩的
model.FaceBC([2, 4]) faceBC();ret solve(model);pdeplot3D(model.Geometry.Mesh, ColorMapDataret.Displacement.Magnitude);
title(Displacement Magnitude-Structural Static-femodel);vonMisesStress ret.VonMisesStress;pdeplot3D(model.Geometry.Mesh, ColorMapDatavonMisesStress);title(VonMisesStress-Structural Static-femodel);总的来说统一接口的方式也并没有什么大的不同之处。我感觉可能会让共享数模来分析不同学科的交叉问题会更加直观一些。当然后面再学习的时候建议还是直接从femodel开始因为这个是未来的发展方向。
虽然资料确实比较少例子也还有好多没有调整过来。
总结
求解静力学问题求解过程和结果都没有什么让人惊喜的地方。
下面在讨论一个周期加载的问题这个问题是一个动力学问题。
我们就直接用统一建模框架来做。