问题标签 [finite-element-analysis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
638 浏览

simulation - 屈服点前的 Solidworks 变形

我正在运行solidworks 跌落测试模拟,但在理解结果时遇到了一些麻烦。这个想法基本上是一个由铝制成的空心壳,将以 5 m/s 的速度撞击地面。它承载了一些重量,我不确定如何建模,所以我只是创建了一种自定义材料,并说它具有与 AL 6061 完全相同的特性,但具有更高的密度,这使得质量与真实世界的质量相近外壳+内部质量。仅此一项可能会引起一些问题,但我不知道还能怎么说壳承载了质量(我想可能会增加重力,但这似乎更加迂回)。

我主要关心的是位移,下面你可以看到沉重的壳已经撞击了地面,应力以波浪的形式向上传播,侧面的比例显示最大应力为 273 MPa,屈服为275兆帕。 未变形

因此,外壳不应有任何永久变形,但是当我显示“变形结果”时,它是这样的:

变形

Solidworks 显示了这种大位移(我确保它是真正的 1:1 比例并且没有被夸大)。它对应于 3.5mm,但如果你仔细观察,位移实际上是这个的两倍。我通过在白色剪影中叠加未变形的模型来注意到这一点。如图所示,整个部分向下移动了一定的量,鼻子向上凹陷,solidworks 正在减去差异,但实际上鼻子距离其原始位置的距离是原来的两倍。基本上,除了当前的 3.5mm 之外,您还必须考虑将整个模型向下移动,以使底鼻相互对应,这意味着位移将接近一厘米。

我的困惑源于这样一个事实,即这一切看起来对于变形来说是太多的位移,但正如我之前提到的,我们还没有超过屈服点,所以理论上它应该在撞击后全部弹回原位。我应该相信由于没有达到 YP 压力,外壳会完好无损吗?

0 投票
0 回答
555 浏览

finite-element-analysis - Ansys LS-DYNA 显式动力学元件 COMBI165 长度影响解决方案

我正在使用 Ansys LS-DYNA 显式动态模型分析一些动态模型。

我的模型只有梁单元 (BEAM161)、集中质量 (MASS166) 和弹簧/阻尼器 (COMBI165)。

问题是弹簧/阻尼器的长度会影响结果,这不应该发生:根据手册,您定义 COMBI165 的刚度或阻尼系数,乘以节点之间的相对位移/速度以获得反作用力。

对于我的特殊问题,弹簧/阻尼器的长度不是调节时间步长,所以这不是差异的根源。

0 投票
1 回答
1251 浏览

optimization - CAD 中的自动化设计、FEA 中的分析和优化

我想通过让优化器对 CAD 文件进行更改来优化设计,然后在 FEM 中对其进行分析,并将结果反馈到优化器以基于 FEM 对设计进行更改,直到解决方案收敛到最佳(质量、刚度等)。

这就是我的设想:

  • 在 CAD 软件(例如 CATIA)中创建零件的蓝图。
  • 从编程语言(例如 Python)中运行优化器代码(例如 fmincon)。优化器的参数是 CAD 模型的参数(角度、长度、厚度等)。
  • 优化器评估某个设计(参数集)。编程语言调用 CAD 软件并相应地修改设计。
  • 编程语言提取一些信息(例如质量)。
  • 然后编程语言提取一个 STEP 文件并将其传递给 FEA 求解器(例如 Abaqus),在该求解器中执行预定义的分析。
  • 编程语言读取结果(例如 max van Mises 压力)。
  • CAD 和 FEM 的结果(例如质量和应力)被馈送到优化器,从而相应地改变设计。
  • 直到收敛。

我知道这存在于封闭体系结构(例如 isight)中,但我想使用开放体系结构,其中从开放编程语言(理想情况下是 Python)中调用优化器。

最后,这是我的问题:

  • 可以按照我描述的那样完成吗?
  • 请参考,教程?
  • 对于编程、CAD 和 FEM,您推荐哪些软件?
0 投票
1 回答
2415 浏览

python - 自适应网格细化 - Python

我目前非常困惑于我的代码中不起作用的东西,并且已经盯着它看了好几个小时。我创建了一些函数来使用有限元方法自适应地逼近拉普拉斯方程的解,然后使用对偶加权残差估计它的误差。错误函数应该给出一个错误向量(每个元素一个错误),然后我选择最大的错误,在它们周围添加更多元素,再次解决,然后重新检查错误;但是我不知道为什么我的错误估计没有改变!

我的前 4 个函数是正确的,但如果有人想尝试代码,我会将它们包括在内:

我的错误指示函数采用近似值 Uh,并在网格上求解,并找到 eta = (f - Bu)z。

我的下一个函数似乎很好地使网格适应给定的错误指示器!只是不知道为什么指标似乎保持不变?

一个示例输入是:Mesh_Refinement(np.linspace(0,1,3),0.1,0.2,np.linspace(0,1,60),20)

我知道这里有很多代码,但我很茫然,我不知道该去哪里!

0 投票
1 回答
150 浏览

python - 向量已被插值的矩阵向量乘法 - Python

我已经使用有限元方法来近似拉普拉斯方程$-u_{xx} = sin(\pi*x)$,因此将其转换为矩阵系统 AU = F,其中 A 是刚度向量并求解 U(对我的问题并不重要)。

我现在得到了我的近似值 U,当我找到 AU 时,我应该得到向量 F(或至少相似),其中 F 是:

在此处输入图像描述

AU 给出了 x = 0 到 x = 1 的以下图(例如,对于 20 个节点):

在此处输入图像描述

然后我需要将 U 插值到更长的向量并找到 AU(对于更大的 A 也是,但不插值)。我通过以下方式对 U 进行插值:

这似乎可以正常工作,直到我将它与更长的 A 矩阵相乘:

在此处输入图像描述

似乎每个尖峰都位于 x 的节点处(即原始 U 的节点)。有人知道是什么原因造成的吗?以下是我查找 A、U 和 F 的代码。

0 投票
0 回答
64 浏览

python - 自适应网格的误差估计指标

我一直在尝试为拉普拉斯方程的有限元方法设置自适应网格(因此 AU = F,其中 A 是刚度矩阵)但是在误差估计方面遇到了一些麻烦,因此一直以网格结束如下所示:

[ 0. 0.11111111 0.22222222 0.27777778 0.33333333 0.44444444 0.47222222 0.47916667 0.48090278 0.48111979 0.48133681 0.48177083 0.48263889 0.48611111 0.5 0.55555556 0.66666667 0.77777778 0.88888889 1. ]

正如您所看到的,由于此时误差估计没有减少,许多节点都在同一个地方分组。误差估计的基本思想是我们有两个网格,我们的自适应网格和丰富/更大的网格. 我们在丰富的网格上找到 A、Z 和 F 的近似值,在自适应网格上找到 U 的近似值,然后在精细网格上对其进行插值并计算以下内容:

eta_i = (f_i - sum_j (A[i,j]U[j]))*z[i]

一个大的 eta_i 意味着 element_i 需要改进。这是我的代码,我确定 Poisson_Stiffness(找到 A)、Nodal_Quadrature(找到 F)、Solver(找到 U)和 DualSolution(找到 Z)都是正确的。我无法判断问题出在 SubdivisionIndicators 函数还是网格细化中,但我假设前者通常是由于错误没有减少,因此在同一位置周围元素堆积。

Mesh_refine(np.linspace(0,1,10),10,np.linspace(0,1,100),0.5)

0 投票
0 回答
93 浏览

finite-element-analysis - ABAQUS:通过边缘中心的两个夹具在自重下平衡薄板

我创建了一个尺寸(200x200x5mm)的盘子。密度=5000。该板与 x 轴倾斜 30 度。现在,正好在自重的影响下,使用图 1 所示面中点的两个支撑使板处于平衡状态。应该使用什么重力值(+1 或 +9.81)和边界条件来获得支撑处的 mgsin30 和 mgcos30 的理想反作用力。

PS:我刚刚在面的两个中点固定(encaster)板并在(静态,常规)中运行模拟。我的反作用力为 6.15 和 4.02 N(对于 x 方向的 g=+10)。但理想情况下,作用在身体上的法向力必须是 mgcos30 和 mgsin30。

帮助我解决边界条件以及上述过程中出现的任何问题。谢谢 图:图中圈出的两个中点

0 投票
0 回答
172 浏览

fortran - 生成元素边数的网格化选项(tetgen-triangle)

我用 fortran 90 写了一个有限元代码。

这段代码真的很快,除了网格划分过程。

我分别使用三角形tetgen进行 2D 和 3D 网格划分,所以这个过程当然很快。

例如,对于 2D 中的单位正方形 [0,1]x[0,1],我有一个文件,其中包含其节点的坐标(例如,具有 5 个节点的网格):

称为coordinate.dat,它有 4 个元素(三角形),节点称为element.dat

我还有一个文件,其中每一行i是其初始的最终节点的编号,称为edge.dat

使用这些文件,我需要生成以下信息:

(1) 给定一个元素(三角形或四面体),我需要知道它的边数(分别为边和面)。例如,我需要生成以下结构或文件,称为struct1.dat

(2) 此外,给定一条边(边或面),我需要知道该边共享的 2 个元素(如果边在边界上,则只有一个)的元素编号。例如,我需要生成以下结构(或文件),称为struct2.dat

对于这两种结构struct1.datstruct2.dat,我的代码非常慢,因为我使用了带有很多循环的蛮力方法。

我正在寻找一种为此优化的算法(一篇论文,或者更好的:fortran 中的一个子程序可供下载)?我想继续使用三角形和 tetgen,但我愿意听取其他选择。

0 投票
0 回答
225 浏览

python - Fenics 帮助:将数据列表写入 fenics 中非线性部分的表达式?

我正在尝试解决 fenics 中的非线性问题。我不知道非线性函数是一个表达式,而是只知道数据形式的值。

换句话说,如果我正在求解 nabla(k(u).nabla(u)) = C,我不知道 k(u) 或者不能用 x[0] 等形式写出来,我只知道对应的值k 代表 u 的所有值。

目前我已经编写了一些插值函数并将其称为“k”,它可以将其投影到函数空间,但是当我将它放入变分形式并求解时,它似乎不起作用。

下面是一些澄清问题的代码:我使用的是制造解决方案的方法,其中 u=x^2 以 k=1+u^2 作为测试,其中 k_data = u=[0,(1+xmax 的数据列表^2)]。

有人告诉我,我可以查看 Expression 中的子类,但我不知道如何在不知道 x[0] 的情况下执行此操作。请帮忙!

0 投票
0 回答
45 浏览

python - Python不在大文件上应用正则表达式

以下是我尝试在完整文件上应用正则表达式的代码。每当我在小于 1MB 的较小文件上测试此代码时,代码都可以正常工作,但在大文件上则无法正常工作并返回空数组。下面是我试图解析的数据样本。通常它涉及 3M 行这样的数据。