问题标签 [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.
2d - How to make a good mesh in a biologically accurate model with very small domains
I have been trying to make a biologically accurate 2D spatial model of tissue layers, where different physiological processes happen. This includes mainly chemical reactions, diffusion and fluxes over boundaries.
I am making this model in COMSOL Multiphysics, a finite element software package that solves different physics like reaction-diffusion systems, although for my question this might not be really relevant.
In my geometry, I have really small regions between the cells of the tissue layers. These regions serve as openings where diffusion can take place between the cells (junctions). The quality of the mesh is not great here and if I want to improve the quality (mainly by introducing more elements and such), my simulation time increases drastically. The lesser quality mesh also causes convergence to take longer. I added a picture of the geometry to give an idea. I tried different meshes, all with different qualities of the elements and the number of elements ranging from 16000 to 50000.
My background in FEM is really limited and I wanted to know if I can tackle this problem in such a way that it
- doesn't negatively affect the biology (keep the tissue domain sizes/problem etc as biologically accurate as possible),
- doesn't increase the simulation time drastically,
- give a better mesh quality.
So I really want to know what the best way to go is, since I have already thought of some things.
Can I go with the lesser quality mesh (which is not really bad, but not good either), so that I can keep the small regions for optimum biological accuracy and have a relatively small computation time (and hope I won't run into convergence errors). But maybe there are possibilities that I am missing, for instance: is it possible to make the small domain bigger and then add some kind of factor to the diffusion rates. In other words, if I want to make the domain twice as large, do I factor the diffusion rate with half? Is that even accurate in chemical/physical laws :S.
Hopefully I made the problem a bit clear and thank you greatly in advance for the help.
Cheers,
Mesh of the tissue model
matlab - 编程有限元方法
我正在尝试自学有限元方法。
我的所有代码均改编自以下链接页面 16-20 http://homepages.cae.wisc.edu/~suresh/ME964Website/M964Notes/Notes/introfem.pdf
我在 Matlab 中编程以对单个 8 节点立方体元素执行有限元分析。我已经定义了 xi,eta,zeta 局部轴(我们现在可以将其视为 x,y,z),所以我得到以下形状函数:
根据[N]
我正在阅读的文字,矩阵将像这样排列:
要找到[B]
矩阵,我必须使用以下[D]
矩阵:
这是一个运算符继续下去[N]
。( B=DN
)
稍后,如正文所示,我将进行涉及该[B]
矩阵在该元素体积上的积分的计算。
所以,我的问题是,如何将这些多项式形状函数存储在矩阵中,对它们进行微分运算,然后对它们进行数值积分。我可以用我现在设置的方式来判断它不会起作用,因为我已经将函数定义为一个区间上的向量[0,1]
,然后将这些向量存储在[N]
矩阵中。然后使用diff()
函数进行适当的微分以找到[B]
矩阵。但是由于[B]
现在的矩阵元素是一个区间内的向量,[0,1]
我认为这会导致问题。你们将如何进行我上面发布的教科书中描述的这些计算?
matlab - 多项式函数作为矩阵元素
MatrixN
是一个包含多项式函数的 2x2 矩阵:
其中x
和y
在区间上定义[0:1]
以形成正方形元素
我也有一个算子矩阵,D
我想评估以下积分:
所以我的问题是,我无法将x
and定义y
为:
因为那时我会将length(0:dx:1)
矩阵中的向量存储为元素,并且由于尺寸不正确,矩阵乘法将无法计算。
那么将这些多项式存储为函数元素然后用矩阵微分算子对它们进行微分的最佳方法是什么D
c# - 从坐标索引节点
我正在使用 C# 在 Rhino/Grasshopper 中进行 FEA(有限元分析)程序。我有线(FD)和网格三角形面(NFD)作为输入,每个都有它们的节点坐标。我正在尝试获取这些坐标并将它们恢复到列表中以索引每个节点。
由于线和网格面可以共享相同的节点,我做了以下尝试避免重复信息:
但是,当我构建项目时,我仍然会收到重复的信息。网格面重复消失了,但代码复制了线条的索引。(例如,一个 9 个节点的问题给了我 13 个节点,有时是 14 或 15 个。查看网格索引,所有内容都低于 9,但在行中不是 [介于 9 和 13 之间])。
我该如何解决?
谢谢,
马尔西奥
numeric - 如何确保gmsh中的节点点?
我正在尝试构建一个非常简单的网格。我有一个盒子:
这工作得很好,gmsh 很乐意(3D)网格化它。问题是我要确保框内的某些点是节点点。所以我的问题是,我如何确保这些点
是网格的一部分吗?
我需要这个的原因是我需要在这些特定点施加边界条件。
如果这在另一个软件中更容易,我也很乐意改变。我希望有人能帮帮忙。
先感谢您。
math - 用于增量计算的 FEM 软件
任何人都可以推荐任何软件来计算对身体的增量压力影响吗?一个特定的应用是通过模拟运行计算齿轮齿上的增量应力。由于我们将进行循环运行,如果我们有 2 个齿轮,它们的齿每转一次就会接触一次,我很想知道是否有软件可以跟踪第一次接触时造成的“损坏”,这会稍微改变齿轮的几何形状,最重要的是改变齿轮在未来接触时对相同应力的响应方式。
post-processing - 巴洛点和高斯点
是否所有高斯点(积分点)也是巴洛点(在后处理阶段提取应力的最佳位置)?我猜没有。仅对于某些非常具体的元素,这可能是正确的。如果没有,是否有任何商业 FEM 代码使用巴洛点而不是高斯点来提取应力?
matlab - 传递函数句柄作为 Matlab 的 mex 的输入
我最近正在使用 MATLAB 研究有限元方法
我试图在 MATLAB 中优化我的代码。
在搜索时,我发现使用 mex 函数可以加速矩阵组装。
在将我的“PoissonAssembler.m”移植到 mex 函数时,我遇到了一些问题。
PoissonAssembler.m 基本上就是这种结构。
在matlab中,我有
由于此函数将更改为其他数值模拟,
我想使用函数句柄作为 mex 文件的输入
我发现有一种方法可以通过使用 mexCallMatlab() 和 feval 来做到这一点。
但是,我认为由于调用 matlab 引起的开销,它会减慢我的代码。
每次更改函数句柄时,有什么方法可以避免它而不编译 mex 文件?
更精确的代码是这样的
matlab - 声明稀疏矩阵太慢了
我目前正在使用 matlab 研究 FEM。
我的代码是这样的
A
的大小是什么时候ten million x ten million
,
pre_process
不到 1 秒
assemble
大约需要 5 秒
sparse
大约需要 820 秒
主要耗时的线路是单行sparse
。
有没有更快的收集方法?
的性质IA
和是JA
A
Pair 对
(IA[k],JA[k])
all 具有所有不同的值k
。得到的矩阵 ,
A
是下三角矩阵并且具有块结构
matlab - 计算点在特定方向上到网格边缘的距离
我正在使用 MATLAB,并且我有一个有限元网格,我对分析特定节点感兴趣。我有关于每个点的位置、这些点如何相互连接以及我知道哪些点属于哪些元素的信息。
我需要计算给定点和网格边缘在特定方向上的大致距离(假设我从一个方向的点射箭,我想知道它在离开整个网格之前行进了多少)。它不需要很精确:例如,知道该点与最接近边缘交叉点的节点之间的距离就足够了。
我没有关于哪些节点/边/元素位于边界或网格内部的信息。
我在想这个策略:
- a) 从感兴趣的节点开始,将方向向量的分量增加 ∂x ∂y ∂z, 。
- b) 每一步检查给定半径内是否有节点(节点的密度相对较高)。
- c) 如果没有,那么网格的边缘可能在这一步和之前的那一步之间。如果有,请继续。
这应该可行,但是我有约 1000 个节点要考虑约 50 多个方向,而且这似乎非常耗时。
正如我所提到的,它不需要是一个精确的值。我想知道一个节点和一个方向的网格末端之间有多少“质量”,但对于我正在分析的内容来说,微小的差异并不重要。
谢谢!