Questions tagged «finite-element»

一种求解常微分方程和偏微分方程的方法。问题的领域被分解成要素,并且在功能的基础上扩展了每个要素中的解决方案。有限元方法非常适合于自适应细化,不规则几何形状和良好的误差估计。

3
流形上的有限元
我想解决流形上的一些PDE,例如说球体上的椭圆方程。 我从哪说起呢?我想找到一些在2d中使用预先存在的代码/库的东西,暂时没有那么花哨的东西 稍后添加:欢迎文章和报告。

3
在并行有限元计算中管理网格的最佳方法?
我目前正在开发一种域分解方法来解决散射问题。基本上,我正在迭代地解决Helmholtz BVP系统。我在三角形或四面体网格上使用有限元方法离散化方程。我正在为我的博士学位论文开发代码。我知道一些现有的有限元库,例如Deal.ii或DUNE,尽管我认为它们很棒,具有鼓舞人心的设计和API,但出于学习目的,我想从头开始开发自己的小应用程序。 我现在正在运行我的串行版本,现在我想对其进行并行化。毕竟,至少在原则上,制定易于并行化的算法是领域分解框架的优势之一。但是实际上,有许多细节必须考虑。网格管理就是其中之一。如果应用程序在达到高分辨率的同时可以很好地扩展到许多CPU,则在每个CPU上复制整个网格的效率很低。 我想问那些在高性能计算环境中从事类似应用程序工作的开发人员如何处理此问题。 有用于分布式网格管理的p4est库。我不需要AMR,所以这可能是一个过大的选择,因为我只对使用统一网格感兴趣,并且不确定是否可以优化三角形网格。我也可以简单地创建一个统一的网格,然后将其输入到网格划分器之一中,并对输出进行一些后期处理。 最简单的方法似乎是为每个分区创建一个单独的文件,其中包含仅与该特定分区相关的网格信息。该文件将由单个CPU读取,该CPU负责在网格的该部分上组装离散系统。当然,某些全局分区连接性/邻居信息也需要存储在所有CPU读取的文件中以进行进程间通信。 还有哪些其他方法?如果你们中的一些人可以分享,那么与该问题相关的行业或政府研究机构中最常用的方法有哪些?对于编程并行有限元求解器,我是一个新手,我想了解一下我是否在正确地考虑这个问题以及其他人如何解决这个问题。任何有关相关研究文章的建议或指针将不胜感激! 提前致谢!

3
泊松方程:通过拉格朗日乘法器将全梯度作为边界条件
我具有由泊松方程在两个维度支配的物理问题 我有两个梯度分量的测量 ∂ ü / ∂ X和 ∂ ú / ∂ ý沿边界的某些部分, Γ 米,所以想强加 ∂ û- ∇2u = f(x ,y),我ñΩ−∇2u=f(x,y),inΩ -\nabla^2 u = f(x,y), \; in \; \Omega ∂你/ ∂X∂u/∂x\partial{u}/\partial{x}∂你/ ∂ÿ∂u/∂y\partial{u}/\partial{y}Γ米Γm\Gamma_m 和传播到远场。∂ü∂X一世0= 克米,Ø ñΓ米∂u∂xi0=gm,onΓm \frac{\partial{u}}{\partial{x_i}}_0 = g_m, \; on \; \Gamma_m 切向梯度分量,,我可以整合,然后通过狄利克雷条件执行,使得 ∫Γ米∂ù∂ü∂X(t ,0 )∂u∂x(t,0)\frac{\partial{u}}{\partial{x}}_{(t,0)} 为了同时施加法向分量, ∂ ù∫Γ米∂ü∂X(t ,0 )ds …

2
有限元:刚度矩阵的奇异性
我正在求解微分方程 具有初始条件u(0)= u(1)= 0,u''(0)= u''(1)= 0。这里\ sigma(x)\ geqslant \ sigma_ {0}> 0是参数。以算子形式,我们可以将微分方程改写为Au = f,其中算子A是正定的。(σ2(x)u′′(x))′′=f(x),0⩽x⩽1(σ2(x)u″(x))″=f(x),0⩽x⩽1 \left( \sigma^{2}(x) u ''(x) \right)'' = f(x), \;\;\; 0 \leqslant x \leqslant 1 u(0)=u(1)=0u(0)=u(1)=0u(0) = u(1) = 0u′′(0)=u′′(1)=0u″(0)=u″(1)=0u''(0) = u''(1) = 0σ(x)⩾σ0>0σ(x)⩾σ0>0\sigma(x) \geqslant \sigma_{0} > 0Au=fAu=fAu = fAAA 按照FEM方案,我将问题简化为优化问题 J(u)=(Au,u)−2(f,u)→minuJ(u)=(Au,u)−2(f,u)→minu J(u) = (Au,u) - 2(f,u) \to …

1
具有非线性反应项的扩散方程的可能数值方案是什么?
ΩΩ\Omegau (x )ü(X)u(x)- d 我v(甲∇ û )+ Ç ùñ= f-d一世v(一种∇ü)+Cüñ=F -\mathrm{div}(A\nabla u)+cu^n = f 我的问题是:(1)假设Dirichlet边界条件为零,是否存在Sobolev理论来确定该方程的相应变式的适定性?如果是这样,我们应该考虑什么Banach空间?(2)这类方程式有哪些可能的数值方法?

1
如何在有限元法中建立集总质量矩阵
当使用有限元方法求解与时间相关的PDE时,例如说热方程,如果我们使用显式的时间步长,则由于质量矩阵,我们必须求解线性系统。例如,如果我们坚持使用热方程示例, ∂ü∂Ť= Ç ∇2ü∂u∂t=c∇2u\frac{\partial{u}}{\partial{t}} = c\nabla{}^{2}u 然后使用前向欧拉,我们得到 中号(un + 1- 你ñdŤ)= − c KüñM(un+1−undt)=−cKunM(\frac{u^{n+1}-u^{n}}{dt}) = -cKu^{n} 因此,即使我们使用显式的时间步进方案,我们仍然必须求解线性系统。这显然是一个主要问题,因为使用显式方案的主要优点是不必求解线性系统。我已经读过,解决此问题的常用方法是改用“集总”质量矩阵,该矩阵将常规(一致?)质量矩阵转换为对角矩阵,从而使反演变得微不足道。在进行谷歌搜索后,我仍然不能完全确定这个集总质量矩阵是如何创建的。例如,看他的关于扩散-扩散方程的质量集总的数值实验由Edson Wendland Harry和Edmar Schulz编写,他们通过简单地将所有系数求和到对角线上来创建集总质量矩阵。因此,例如,如果我们原始的一致质量矩阵为: ⎛⎝⎜⎜⎜421个22421个1个24221个24⎞⎠⎟⎟⎟(4212242112422124)\begin{pmatrix} 4 & 2 & 1 & 2 \\ 2 & 4 & 2 & 1 \\ 1 & 2 & 4 & 2 \\ 2 & 1 & 2 …

1
DG局部方程,如何解释均值检验函数
在论文http://www.sciencedirect.com/science/article/pii/S0045782509003521中,第584页方程(4)中描述了HDG元素局部方程,其中一个方程采用以下形式 − (uH,∇ q)ķ= - ⟨ ü^H⋅ ñ ,q− q¯⟩∂ķ−(uh,∇q)K=−⟨u^h⋅n,q−q¯⟩∂K-(u_h,\nabla q)_K = -\left\langle\hat{u}_h \cdot n, q - \bar{q}\right\rangle_{\partial K} 这是变分近似到连续方程,具有标量值测试功能q在有意义的空间。▿ ·&Ù = 0∇⋅u=0\nabla \cdot u = 0qqq 本文定义。q¯= 1| ∂ķ|∫∂ķqq¯=1|∂K|∫∂Kq\bar{q} = \frac{1}{|\partial K|} \int_{\partial K} q 从有限元素的角度来看,这是如何解释的?根据我的理解,我们将双方乘以一个测试函数,然后尝试找到满足q的所有可能选择的方程的解。如何以这种方式修改测试空间?qqqqqq 该文件还指出,这是必要的强制执行身份 我同意这种说法,但怎么可能测试功能q - ˉ q可以在代码中实现?在组装单元局部线性系统时,是否应该在单元上采用基函数并减去其均值?⟨u^h⋅n,q−q¯⟩∂K=0⟨u^h⋅n,q−q¯⟩∂K=0\left\langle\hat{u}_h\cdot n, q - \bar{q}\right\rangle_{\partial K} = 0q−q¯q−q¯q - …

4
如何在非常小的域的生物学精确模型中制作出良好的网格
我一直在尝试制作组织层的生物学上精确的2D空间模型,其中会发生不同的生理过程。这主要包括化学反应,扩散和边界上的通量。 我正在COMSOL Multiphysics中建立此模型,COMSOL Multiphysics是一个有限元软件包,可以解决诸如反应扩散系统之类的不同物理问题,尽管对我来说,这可能并不重要。 在我的几何图形中,组织层的细胞之间确实有很小的区域。这些区域用作开口,在这些开口中,单元(接合点)之间会发生扩散。这里的网格质量不是很好,如果我想提高质量(主要是通过引入更多元素等),我的仿真时间会大大增加。质量较低的网格也将导致收敛花费更长的时间。我添加了几何图形以给出想法。我尝试了不同的网格,所有网格的元素质量不同,元素数量从16000到50000。 我在FEM中的背景确实很有限,我想知道我是否可以通过以下方式解决此问题: 不会对生物学产生负面影响(保持组织域大小/问题等在生物学上尽可能准确), 不会大幅增加仿真时间, 提供更好的网格质量。所以我真的很想知道最好的方法是什么,因为我已经想到了一些事情。 因此,我可以使用质量较低的网格物体(这不是很差,但也不是很好),这样我就可以保留较小的区域以获得最佳的生物学准确性,并且计算时间相对较短(希望我不会遇到收敛误差)。但是,例如,也许有一些我可能错过的可能性:是否有可能使小区域变大,然后在扩散率中添加某种因素。换句话说,如果我想将域设为两倍大,我是否会将扩散速率乘以一半?这在化学/物理定律上是否准确: 希望我将问题弄清楚了,并在此先感谢您的帮助。 干杯,

2
有限元
w ^1 ,∞w ^1个,∞W^{1,\infty}∥ ü′H- 你′∥∞‖üH′-ü′‖∞\|u'_h - u'\|_\infty (来自MathOverflow的交叉发布,在这里几乎没有兴趣,但是也许在这里我可以找到更多具有FEM背景的人员。)

1
参考广场上的Raviart-Thomas元素
我想学习Raviart-Thomas(RT)元素的工作原理。为此,我想分析地描述基函数在参考正方形上的外观。这里的目标不是自己实现,而只是为了对该元素有一个直观的了解。 我主要是立足这项工作过讨论的三角形元素在这里,也许它延伸到四边形,本身就是一个错误。 也就是说,我可以为第一个RK元素RK0定义基本函数: i=1,...,4。ϕi(x)=a+bx=(a1+b1xa2+b2y)ϕi(x)=a+bx=(a1+b1xa2+b2y)\mathbf{\phi}_i(\mathbf{x}) = \mathbf{a} + \mathbf{b}\mathbf{x} = \begin{pmatrix} a_1 + b_1 x\\a_2 + b_2 y\end{pmatrix} fori=1,…,4.i=1,…,4.i = 1,\dots,4. 在条件是:ϕiϕi\mathbf{\phi}_i ϕi(xj)⋅nj=δijϕi(xj)⋅nj=δij\mathbf{\phi}_i(\mathbf{x}_j)\cdot\mathbf{n}_j = \delta_{ij} 其中是如下所示的单位法线,是其坐标。X Ĵnjnj\mathbf{n}_jxjxj\mathbf{x}_j 这是参考平方,因此这导致每个基函数的方程组。对于这是:φ 1[−1,1]×[1,1][−1,1]×[1,1][-1,1]\times[1,1]ϕ1ϕ1\mathbf{\phi}_1 ⎛⎝⎜⎜⎜10−100−10110100101⎞⎠⎟⎟⎟⎛⎝⎜⎜⎜a1a2b1b3⎞⎠⎟⎟⎟=⎛⎝⎜⎜⎜1000⎞⎠⎟⎟⎟(10100−101−10100101)(a1a2b1b3)=(1000)\begin{pmatrix} 1 & 0 & 1 & 0\\ 0 & -1 & 0 & 1\\ -1 & 0 & 1 & 0\\ …

2
为什么有限元的形状很重要?
我已经使用FEA几年了,但是正确使用和使用FEA是两件事,安全系数并不是解决所有问题的方法。我有种感觉,除非对这个问题有明确的答案,否则我不会正确使用它: 我知道元素必须接近其理想形状(仅基于雅可比矩阵?)才能获得准确的结果。但是为什么呢?既然我知道它来自坐标变换,那么除非元素的两个向量成为共线的,否则无论其形状如何,结果都不准确吗? 基于图示示例(任意应力分布)的逐步答案将是理想的,尤其是考虑到这是一个相对常见的问题(但从我所见到的答案中从来没有得到很好的回答)。

3
是否有处理五个以上维度的有限元软件?
我是FE的初学者。我的应用是空间为五维的金融衍生产品的定价。因此,增加时间,问题有六个方面。 我试图环顾四周(Fenics,escript,deal.II等),但我的理解是,这些软件限于3 + 1(3d空间+ 1d时间)。它是否正确? 我的目标语言是Python或C ++。 问题描述 我想对一种投资产品进行定价,每个月投资者都可以自由进行或不进行再投资。我想做到的是随机波动,随机利率和随机死亡率。 随机偏微分方程这个样子 其中μ š 吨是相关的股票价格的时间依赖性常数小号,和乙小号吨是一个独立的Levy过程,其在股价噪声产生小号。类似地,对于其他量:ν σ 吨是关联到波动的时间依赖量σ。 让Çτ表示在时间允许的投资τd小号ŤdσŤd[RŤdqŤ= μ小号ŤdŤ+ σŤ--√d乙小号Ť= μσŤdt + νσŤd乙σŤ= μ[RŤdt + ν[RŤd乙[RŤ= μqŤdt + νqŤd乙qŤ(股票)(挥发性)(利率)(死亡)dSt=μtSdt+σtdBtS(stock)dσt=μtσdt+νtσdBtσ(volatility)drt=μtrdt+νtrdBtr(interest rate)dqt=μtqdt+νtqdBtq(mortality)\begin{align} dS_t &= \mu^S_t d_t + \sqrt{\sigma_t} dB^S_t &\text{(stock)}\\ d\sigma_t &= \mu^\sigma_t dt + \nu^\sigma_t dB^\sigma_t & \text{(volatility)} \\ dr_t &= \mu^r_t dt …


2
间断的Galerkin / Poisson / Fenics
我正在尝试使用Discontinuous Galerkin方法(DG)和以下离散化方法求解二维Poisson方程(抱歉,我有一个png文件,但不允许上传): 方程: ∇⋅(κ∇T)+f=0∇⋅(κ∇T)+f=0\nabla \cdot( \kappa \nabla T) + f = 0 新的方程: q=κ∇T∇⋅q=−fq=κ∇T∇⋅q=−fq = \kappa \nabla T\\\nabla \cdot q = -f 弱形式与数值通量Ť和q:T^T^\hat{T}q^q^\hat{q} ∫q⋅wdV=−∫T∇⋅(κw)dV+∫κT^n⋅wdS∫q⋅∇vdV=∫vfdV+∫q^⋅nvdS∫q⋅wdV=−∫T∇⋅(κw)dV+∫κT^n⋅wdS∫q⋅∇vdV=∫vfdV+∫q^⋅nvdS\int q \cdot w dV = - \int T \nabla \cdot (\kappa w) dV + \int \kappa \hat{T} n \cdot w dS\\ \int q \cdot \nabla v …

1
在科学计算的背景下,C ++ 11 move语义会产生什么影响?
C ++ 11引入了移动语义,例如,在C ++ 03需要执行副本构造或副本分配的情况下,可以提高代码性能。该文章报道说,下面的代码与C + 11编译经历了5倍加速: vector<vector<int> > V; for(int k = 0; k < 100000; ++k) { vector<int> x(1000); V.push_back(x); } 在科学计算的背景下,C ++ 11 move语义会产生什么影响? 我对这个问题很感兴趣,但更具体地说,我对使用Boost库编写的有限元代码的移动语义也很感兴趣。我使用增强版1.47.0(因为增强版发行说明中提到了移动语义是在1.48.0中引入的)和增强版1.53.0 (使用增强版1.47.0)测试了自己的一些C ++ 03代码,但是我没有注意到太多改进。我想任何积蓄从不必为做复制建筑boost::numeric::ublas::vector/ matrix和boost::function不显着的,因为求解系统矩阵构成块体的工作量。 编辑:实际上,似乎只为移动语义实现了boost::function(请参见1.52.0版发行说明)。中没有提到移动语义boost::numeric,我将源代码拼凑起来以确保没有似乎右值引用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.