fabric.js 不同类型 不同控件_如何模拟不同类型的阻尼

在之前发布的文章: 结构力学中阻尼的来源及数学理论 中,我们介绍了产生结构阻尼的各种物理现象,并讨论了如何用数学的方法表示阻尼。今天,我们继续研究如何在有限元模型中实际添加阻尼。

如何在有限元分析中添加阻尼

在执行结构动力学分析时,模拟阻尼可能是一个重要而且困难的任务。 b809d35d1698cd537e9d8ef9e8af14be.png 振动声学微镜的瞬态分析,考虑了黏滞阻尼和热阻尼。 下面,我们将概述使用 COMSOL Multiphysics® 软件在有限元分析中模拟阻尼效应时需要考虑的因素。
特征频率分析
在 COMSOL Multiphysics 中,可以求解含阻尼或无阻尼的特征频率问题。只要模型中存在任何损耗效应,都会被考虑在内,并且计算出的特征频率为复数。这个过程是自动运行的,因此我们无需在求解器中添加任何特殊设置。 41f1c72d2bd434e8f0439174aefe002e.png 885d6e41b1f9b1b5bd6535f61ede2595.png 不含阻尼(上表)和含阻尼(下表)模型中的特征频率。 在大多数情况下,当包含阻尼时,特征频率和特征模都是复数值。复数模的振型是指,在自由振动下,相角可提供有关结构中不同点之间的相移信息。即,如果两个点的位移具有不同的相角,那么它们将不会同时达到峰值。 在大多数情况下,阻尼对振型和特征频率的影响很小。在特征频率分析中包括阻尼的原因是需要估计各种谐振的衰减量。
频率响应分析
当激励频率位于固有频率附近(例如在 ±50% 内)时,阻尼模型至关重要,如 结构力学中阻尼的来源及数学理论 中的响应曲线所示。此时,我们必须选择合适的阻尼值。当接近共振频率时,结果完全受阻尼控制,因此,损耗系数选择 0.01 或 0.02,意味着最终的应力预测相差 2 倍。
时域分析
在时域分析中,除了模拟波传播或当载荷的时间历程使得某些共振被强烈激发外,大多数情况下阻尼对结果产生的影响是有限的。 但是,时域分析中阻尼还有一个重要作用:可以稳定时间步长。通常结构中会产生杂散的、微弱的波,除非适当地抑制它们,否则时间步长可能会变得非常小,这并不必要。为了抑制这样的波,在高频中引入阻尼模型是有益的。
响应谱分析
在响应谱分析中,阻尼是设计响应谱的一部分,因此不应对其进行显式模拟。单个阻尼值用于表示整个结构。

阻尼的数值模型

有限元公式
有限元离散运动方程的矩阵形式为

其中,M 是质量矩阵,C 是黏性阻尼矩阵,K 是刚度矩阵,u 是位移矢量,右边的f 是力矢量。

在给定几何结构和基本材料参数(例如质量密度和杨氏模量)的情况下,计算质量和刚度矩阵。阻尼矩阵具有多种不同的形式。不同类型的阻尼通常还可以组合。在假定激励和响应为谐波的频域中,对应的方程为

式中,位移矢量和力矢量是复数值。 

阻尼损耗因子
阻尼损耗因子是在频域分析中描述材料损耗的主要方法。如上一篇博文所述,阻尼损耗因子的数学描述由复数值乘以刚度组成。 在 COMSOL Multiphysics 中,我们可以通过材料模型下的阻尼 子节点添加阻尼损耗因子。对于线性弹性材料,甚至可以为本构矩阵中的不同单元添加单独的损耗因子。 3b6df9d3178adfe79a10879cfbba945d.png c082eaf1c8e01c9140ffac12ca4520a8.png 输入阻尼损耗因子的值。 实际上,损耗因子具有一定的频率依赖性是很常见的。在频率响应分析中,可以很容易地将损耗因子作为内置变量freq的函数。我们可以使用下面显示的表达式,也可以参考任何类型的频率函数。 fd3987adbe064f963cb8b1d8d231addf.png 频率依赖的损耗因子。

假设所有地方都使用了相同的损耗因子,用于了解损耗因子阻尼如何进入方程式系统。因此,阻尼矩阵可以表示为

运动方程变为

黏滞阻尼

在黏滞阻尼模型中,固体材料中的应力与应变率成正比。在最一般的情况下,联系应力和应变率的本构张量可以包含 21 个独立的常数。由于阻尼难以测量和量化,几乎无法得知其数值,因此我们更常使用各向同性黏滞阻尼模型。 COMSOL Multiphysics 中 固体力学 接口中的黏滞阻尼使用两个常数:
  • 本体黏度,
  • 剪切黏度,
前者具有一个与体积变化成正比的阻尼,后者具有一个与振型变化成正比的阻尼。 黏性应力张量可以写成

式中, 是体积应变, 是应变张量的偏差部分。

由于阻尼应力与应变率成正比,因此在较高的频率下它将更加明显。 黏滞阻尼是阻尼 节点中的另一个选项。

bc9275abd78166dcf8b36ab0ac3f217a.png

输入黏滞阻尼。 黏滞阻尼可用于任何动态研究类型。
瑞利阻尼
瑞利阻尼是生成阻尼矩阵的简单方法,它是质量和刚度矩阵的纯线性组合, 该阻尼模型与物理阻尼过程没有直接联系。引入它是因为它提供了一个阻尼矩阵,该矩阵可以被来自无阻尼特征频率问题的特征模对角化,从而在不同模之间实现完全的动态解耦。 但是,刚度矩阵项(β阻尼)也可以看作与应变率成正比。实际上,纯 β 阻尼与黏滞阻尼有关

其中,KG 分别为弹性体积模量和剪切模量。

与黏滞阻尼一样,β阻尼在频率较高时阻尼更大。相反,在低频时,质量比例项α的阻尼很大。由于它作用于结构的速度,因此会抑制刚体运动。 材料模型下的阻尼子节点中也包含了瑞利阻尼。这样我们可以自由地创建阻尼类型(包含所有的瑞利阻尼)。为了使阻尼矩阵在系统水平上是质量矩阵和阻尼矩阵的线性组合,在所有阻尼 节点中,瑞利阻尼参数必须相同。如果不相同,则该特性仅在单元水平是正确的。 我们可以通过两种方式添加瑞利阻尼参数,既可以直接输入 α 和 β,也可以通过两种不同频率的阻尼比来添加。 5950dbc4aed5d46e10ac825d5a89fb9c.png

在“阻尼”子节点中将瑞利阻尼输入材料模型。

损耗材料模型
有些材料模型包含固有损耗,其中最有趣的可能是黏弹性模型。使用这种材料模型时,通常会具有很大的阻尼。大多数情况下,我们不会将其与同一域上的阻尼节点结合使用。 f3ceeec2f295161851d4fe54a5f348de.png 选择黏弹性材料模型。
热弹性阻尼
通过热膨胀 多物理场耦合中的设置,可以将热弹性阻尼直接引入模型中。 96ddf3c34969a9353f3887f24bd7e896.png 耦合传热和结构分析中的热弹性阻尼。

引入热弹性阻尼可以将与应力变化率成正比的热源项添加到热平衡方程中,即

式中,T 是温度,是应力张量,是热膨胀张量系数。 

模态阻尼
模态叠加是求解线性结构动力学问题的一种非常有效的技术。当将模态叠加与阻尼一起 使用时,需要注意一些事项。 首先,应使用无阻尼问题进行初始特征频率分析,然后仅在模态叠加步骤中添加阻尼。确保这点的最简便方法是在每个研究步骤中的“物理场和变量选择”部分设置。 0934f9dc1ddac391e4ac1f0dd45ae6e6.png 9248a641ac8b1bf2576bcb4f0979706a.png 特征频率研究(上)和后续模态叠加研究(下)的研究步骤设置。 模态叠加允许所有类型的阻尼贡献,这并不夸张。在 COMSOL Multiphysics 的模态求解器中,并没有假定特征模解耦。这意味着与许多其他模态叠加方法相比,我们可以在COMSOL中求解更大范围的阻尼问题。 除了各种物理特性提供的阻尼之外,我们还可以为每个特征模提供阻尼比,即所谓的模态阻尼。如果我们从经验中知道某些模态的阻尼比其他模态更大,则模态阻尼特别有用。当不同的物理现象连接到振型时,就属于这种情况。可以直接在模态求解器的设置中设定模态阻尼。 3642eec9b47e7b1827ae11f78cc3167c.png 输入模态阻尼。 模态阻尼可以被添加到任何其他阻尼的贡献中。
无限边界条件
当需要模拟由于声发射或锚固损耗引起的损耗时,为模型配备边界条件非常重要。该边界条件允许射出的波消失而没有反射。COMSOL Multiphysics 在此处提供了多个选项,具体取决于所涉及的物理场接口以及分析是在时域还是在频域。 在频域中,完美匹配层(PML)可以表示边界条件趋向无穷远。PML 公式从根本上衰减了输出波,因此反射的能量非常小,它可用于许多不同的物理场接口。由于输出波中的能量会丢失,因此在分析中将存在阻尼。 PML 是使用计算域外部的少量单元层模拟的。

bba377e27005ab4104266bf15bb5eda6.png将域定义为 PML。

固体力学 接口提供了一种特殊的边界条件,称为低反射边界。它的作用与PML相同:避免波反射。当波以倾斜角度入射到边界时,使用低反射边界节点 的效果不如 PML,但它具有两个优点:
  • 可用于时域分析
  • 由于这是一个边界条件,因此不需要在计算域之外对额外的域进行网格剖分
df49e749126a3e213b6bb0490d2a7ec5.png 低反射边界节点。 模拟波向无穷远传播的另一种方法是使用声波的边界元方法(BEM)公式。
滑动表面之间的摩擦
如果摩擦是阻尼的重要来源,通常我们将不得不进行一些工程上的近似计算。理论上,我们可以通过模拟包括摩擦在内的完全接触来求解时间依赖的问题。然而,在大多数情况下,这将非常耗费计算机资源。 我们可以使用弹性薄层代替接触区,并为其配备黏性或损耗因子阻尼。然而,问题是如何估计剪切刚度和相应的损耗因子。估计这些参数的通用方法是目前还在研究的主题,我们可能必须对关节进行初步的局部分析来了解其特性。
使用其他功能添加阻尼
除了材料模型外,还有许多其他功能可以为模型添加阻尼。例如:
  • 弹簧基础 功能
  • 弹性薄层 功能
  • 弹簧阻尼器 功能
  • 多体动力学 接口中的关节和齿轮
  • 集总机械系统 接口中的阻尼器 和阻抗 功能
  • 转子动力学 和多体动力学 接口中的轴承
  • 速度依赖的任何载荷
  • 复数值的材料数据

结语

在结构动力学中模拟阻尼是定义模型必不可少的部分。COMSOL Multiphysics 提供了多种描述阻尼的选项。但是,结构中材料和组件的正确数据往往较难获取。

dba37b60c6d7b0e13aafea11c6a76bc5.gif

推荐阅读

COMSOL 免费开放 15 个专题培训视频资料结构力学中阻尼的来源及数学理论如何增强结构的稳固性?应力和运动方程简介【仿真百科】深入解读有限元分析的具体过程——从几何结构到仿真模型

本文内容来自 COMSOL 博客,点击“”,阅读更多延伸文章。

dbb05994fb76f2a5a301cc859f0f601a.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Fabric.js 中,可以通过调整 `canvas.bringForward()` 和 `canvas.sendBackwards()` 方法来单独设置不同元素的层级。 例如,要将一个名为 "rect1" 的矩形提到最上面,可以使用以下代码: ```javascript var rect1 = canvas.getItemByName("rect1"); canvas.bringForward(rect1); ``` 另外还可以通过 set({'z-index': value}) 设置每个元素的层级。 如: ```javascript rect1.set({'z-index':10}); ``` 也可以通过canvas.moveTo(object,index) 来设置,第二个参数是层级,表示该对象相对于canvas其他元素层级的位置 如: ```javascript canvas.moveTo(rect1,10); ``` 在这些方法中最上面的层级为最高,第二高的层级为第二高,依此类推。 ### 回答2: 在fabric.js中,可以通过设置object的`zIndex`属性来控制每个元素的层级。`zIndex`属性决定了元素在画布上的显示顺序,具有较高`zIndex`值的元素会覆盖具有较低`zIndex`值的元素。 要给每个元素单独设置不同的层级,可以通过以下步骤实现: 1. 首先,创建一个或多个fabric对象(例如:矩形、文本、图像等)。 ```javascript var rect = new fabric.Rect({ top: 10, left: 10, width: 100, height: 100, fill: 'red' }); var text = new fabric.Text('Hello World', { top: 20, left: 20, fontSize: 24, fill: 'white' }); ``` 2. 接下来,设置每个对象的不同`zIndex`值。 ```javascript rect.set('zIndex', 2); text.set('zIndex', 1); ``` 在这个例子中,`rect`的`zIndex`设置为2,`text`的`zIndex`设置为1。这意味着`rect`将在`text`的上面显示。 3. 最后,将对象添加到fabric canvas中。 ```javascript var canvas = new fabric.Canvas('canvas'); canvas.add(rect, text); ``` 通过以上步骤,`rect`将显示在`text`的上方,因为它的`zIndex`较高。 注意:如果多个对象具有相同的`zIndex`值,那么它们将按照它们添加到canvas中的顺序来显示。如果要更改元素的层级,可以使用`set`方法重新设置其`zIndex`属性或使用`bringToFront`和`sendToBack`等方法将其移动到最前面或最后面。 通过使用`zIndex`属性,我们可以给每个元素单独设置不同的层级,从而实现深度定制的图层显示效果。 ### 回答3: 在fabric.js中,可以通过设置每个元素的zIndex属性来为每个元素单独设置不同的层级。zIndex属性定义了元素在画布上的叠放顺序,数值越大则元素在上层显示,数值越小则元素在下层显示。 首先,创建一个fabric.Canvas对象,并向其添加元素,如矩形和圆形。 ```javascript var canvas = new fabric.Canvas('canvas'); var rect = new fabric.Rect({ left: 50, top: 50, width: 100, height: 100, fill: 'red' }); var circle = new fabric.Circle({ left: 150, top: 150, radius: 50, fill: 'blue' }); canvas.add(rect, circle); ``` 接下来,可以使用`set`方法为每个元素单独设置不同的层级。 ```javascript rect.set({ zIndex: 2 // 设置矩形的层级为2 }); circle.set({ zIndex: 1 // 设置圆形的层级为1 }); canvas.renderAll(); // 重新渲染画布 ``` 这样,矩形将显示在圆形的上方,因为矩形的层级更高。 最后,通过使用`bringToFront`和`sendToBack`等方法,可以动态调整元素的层级。 ```javascript canvas.bringToFront(rect); // 将矩形置于最上层 canvas.sendToBack(circle); // 将圆形置于最下层 ``` 通过以上方法,可以为每个元素设置不同的层级,从而实现元素的叠放效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值