标签: finite-element-analysis

如何将ODE系统与FEM系统相结合

我将动态模型设置为ODE的(僵硬)系统.我目前用CVODE解决了这个问题(来自Assimulo python包中的SUNDIALS包),一切都很好.

我现在想要为问题添加一个新的3D散热器(具有与温度相关的热参数).我的想法是使用现有的FEM或FVM框架为我提供一个界面,使我可以轻松地为(t, y)常规提供3D块,并获得,而不是从头开始为3D热方程编写所有方程式.支持残差y'.原理是使用FEM系统中的方程而不是求解器.CVODE可以利用稀疏性,但预计组合系统的解决速度将慢于FEM系统自身解决的速度,并为此量身定制.

# pseudocode of a residuals function for CVODE
def residual(t, y):

    # ODE system of n equations 
    res[0] = <function of t,y>;
    res[1] = <function of t,y>;
    ...
    res[n] = <function of t,y>;

    # Here we add the FEM/FVM residuals
    for i in range(FEMcount):
        res[n+1+i] = FEMequations[FEMcount](t,y)

    return res
Run Code Online (Sandbox Code Playgroud)

我的问题是(a)这种方法是否合理,(b)是否有一个FEM或FVM库可以轻松地让我将其视为一个方程组,这样我就可以"将它"粘贴到我现有的一套ODE方程.

如果不能让两个系统共享同一个时间轴,那么我将不得不以步进模式运行它们,我在那里运行一个模型一小段时间,更新另一个模型的边界条件,运行那个,更新第一个模型的BC,等等.

我对精彩的图书馆FiPy有一些经验,我期望最终以上述方式使用该库.但我想知道其他系统在这种性质问题上的经验,以及我错过的其他方法.


编辑:我现在有一些看似有效的示例代码,显示了如何使用CVODE解决FiPy网格扩散残差.然而,这只是一种方法(使用FiPy),其余的问题和疑虑仍然存在.欢迎任何建议.

from fipy import *
from fipy.solvers.scipy import DefaultSolver
solverFIPY = DefaultSolver()

from assimulo.solvers import CVode as solverASSIMULO
from …
Run Code Online (Sandbox Code Playgroud)

python finite-element-analysis differential-equations fipy assimulo

23
推荐指数
1
解决办法
1134
查看次数

什么是使用有限元来解决结构二维和三维帧的python库?

使用Numpy/Scipy或任何其他库,我有兴趣解决2D和3D帧分析问题.

到目前为止,我遇到了sfepy.虽然,它是一个功能齐全的FEM包,但我想知道是否有其他选择?

python numpy finite-element-analysis

16
推荐指数
2
解决办法
2万
查看次数

凹面六边形有两个口的标准网格?

我正在计划通过带两个嘴的凹形双对称六边形流动的可视化.

边d1的长度等于边d2的另一长度的示例:

在此输入图像描述

我在这里首先讨论的关于不规则六边形的命名.

有标准的网格工具,你可以绘制自己的网格,但我想有一些标准库,以便我可以与其他人更好地合作,以后的流程模拟.我没有找到任何网库在MathCentral文件交换六边形这里.

是否有任何标准的网格库用于不规则的六边形形状?我也对任何其他语言开放,因为我可以阅读代码并将这些标准转换为Matlab库.

geometry mesh convex-optimization finite-element-analysis non-convex

9
推荐指数
1
解决办法
312
查看次数

lm_feasible算法的自由度数是否有限制?如果是这样,限制是什么?

我正在开发一种有限元软件,可最大程度地减少机械结构的能量。使用倍频程及其优化包,我遇到了一个奇怪的问题:当我使用300个以上的自由度(DoF)时,lm_feasible算法根本无法计算。另一种算法(sqp)执行计算,但是当我复杂化结构并且超出测试用例时,效果不佳。

使用lm_feasible算法的DoF数量是否有限制?

如果是这样,最大可能有多少个自由度?

概述和大致了解代码的工作原理:

[x,y] = geometryGenerator()

U = zeros(lenght(x)*2,1);
U(1:2:end-1) = x;
U(2:2:end) = y;

%Non geometric argument are not optimised, and fixed during calculation
fct =@(U)complexFunctionOfEnergyIWrap(U(1:2:end-1),U(2:2:end), variousMaterialPropertiesAndOtherArgs)

para = optimset("f_equc_idx",contEq,"lb",lb,"ub",ub,"objf_grad",dEne,"objf_hessian",d2Ene,"MaxIter",1000);
[U,eneFinale,cvg,outp] = nonlin_min(fct,U,para)
Run Code Online (Sandbox Code Playgroud)

完整示例:

clear

pkg load optim

function [x,y] = geometryGenerator(r,elts = 100)
  teta  = linspace(0,pi,elts = 100);
  x = r * cos(teta);
  y = r * sin(teta);
endfunction

function ene  = complexFunctionOfEnergyIWrap (x,y,E,P, X,Y)
  ene = 0;
  for i = 1:length(x)-1
    ene += E*(x(i)/X(i))^4+ E*(y(i)/Y(i))^4- P …
Run Code Online (Sandbox Code Playgroud)

octave nonlinear-optimization finite-element-analysis

8
推荐指数
1
解决办法
347
查看次数

用于实时应用的FEM库

你知道有限元方法的任何库,我可以用于实时应用吗?我想getFEM++,但我还没有测试.
我想用FEM来实时模拟弹塑性体的行为.我的进一步计划是将它与Bullet合并.

c++ finite-element-analysis

6
推荐指数
1
解决办法
972
查看次数

是否有R函数实现有限元方法?

是否存在可以使用有限元方法求解偏微分方程的R函数(Strang and Fix,1973)?

基于维基百科的有限元软件包列表,该方法已在Fortran,C中实现.Dortran和C都可以通过R函数调用,但我在CRAN中看不到任何此类函数.


Strang和Fix.有限元法分析.普伦蒂斯霍尔,1973年.

r finite-element-analysis

6
推荐指数
1
解决办法
3739
查看次数

我在哪里可以找到.NET平台的有限元分析库?

我可以使用在winforms应用程序中实现有限元方法的库.是否有可用于.NET平台的此类库?

.net winforms finite-element-analysis

5
推荐指数
1
解决办法
2829
查看次数

有限元法介绍参考文献

你能推荐一些关于有限元法(FEM)的好文章/笔记/教程吗?我不是每天都要处理高级数学,因此向我介绍理解FEM所需的数学教程将会很棒.

我的目标是编写自己的可变形体模拟(+可塑性).我必须使用FEM,但如果我也知道BEM(边界元法)和FDM(有限差分法)也会很好.

simulation math reference finite-element-analysis

5
推荐指数
1
解决办法
1612
查看次数

组合两个Fortran子程序以与ABAQUS一起使用

我有两个小的用户定义的子程序,我已经在有限元软件ABAQUS中实现了(它们在我的有限元模型中定义了两种特殊类型(JTYPE = 1,2)的多点约束(MPC)).这些子程序根据需要在FORTRAN 66/77中编写,并由ABAQUS在运行时使用Intel FORTRAN编译器进行编译.我已经验证他们编译并正常工作.

但是,我只能在我的模型中一次使用其中一个子程序.这是因为他们必须使用以下名称和参数(为了让ABAQUS知道何时调用它们以及如何使用它们):

      SUBROUTINE MPC(UE,A,JDOF,MDOF,N,JTYPE,X,U,UINIT,MAXDOF,
     * LMPC,KSTEP,KINC,TIME,NT,NF,TEMP,FIELD,LTRAN,TRAN)
Run Code Online (Sandbox Code Playgroud)

然而,事实证明,我需要能够在给定的分析中同时使用这两种类型.由于为我的有限元模型中使用的每个MPC实例指定的JTYPE是1或2,因此理想的解决方案是组合我当前单独的子例程,并在这个新子例程内的两种类型之间切换.我想我可以使用IF(JTYPE .EQ.1)THEN类型语法来做到这一点.

问题是每个JTYPE所需的代码块都不同,即使它们都是SUBROUTINE MPC.对于我的第一个子例程(JTYPE = 1),手册需要以下界面:

      SUBROUTINE MPC(UE,A,JDOF,MDOF,N,JTYPE,X,U,UINIT,MAXDOF,
     * LMPC,KSTEP,KINC,TIME,NT,NF,TEMP,FIELD,LTRAN,TRAN)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION A(N),JDOF(N),X(6,N),U(MAXDOF,N),UINIT(MAXDOF,N),
     * TIME(2),TEMP(NT,N),FIELD(NF,NT,N),LTRAN(N),TRAN(3,3,N)


      user coding to define A, JDOF, and, optionally, LMPC


      RETURN
      END
Run Code Online (Sandbox Code Playgroud)

对于第二个子例程(JTYPE = 2),手册需要以下接口:

      SUBROUTINE MPC(UE,A,JDOF,MDOF,N,JTYPE,X,U,UINIT,MAXDOF,
     * LMPC,KSTEP,KINC,TIME,NT,NF,TEMP,FIELD,LTRAN,TRAN)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION UE(MDOF),A(MDOF,MDOF,N),JDOF(MDOF,N),X(6,N),
     * U(MAXDOF,N),UINIT(MAXDOF,N),TIME(2),TEMP(NT,N),
     * FIELD(NF,NT,N),LTRAN(N),TRAN(3,3,N)


      user coding to define JDOF, A and, optionally, LMPC


      RETURN
      END
Run Code Online (Sandbox Code Playgroud)

重要的区别在于A和JDOF阵列的尺寸对于每种类型都是不同的.

我希望通过在IF循环中声明这些变量来解决这个问题,如下所示:

      SUBROUTINE MPC(UE,A,JDOF,MDOF,N,JTYPE,X,U,UINIT,MAXDOF,
     * LMPC,KSTEP,KINC,TIME,NT,NF,TEMP,FIELD,LTRAN,TRAN)
C
C     CUSTOM MULTI POINT …
Run Code Online (Sandbox Code Playgroud)

fortran fortran77 finite-element-analysis

5
推荐指数
1
解决办法
2184
查看次数

有关Gmsh Python API的问题

我正在尝试编写一个脚本,该脚本将使用Gmsh Python API自动对几何进行网格划分以进行CFD分析。我遇到了一些问题:

首先,我希望能够编写用于调试目的的Gmsh脚本文件(.geo)。我查看了Gmsh API的源代码,发现该功能支持.geo_unrolled扩展名gmsh.write(),而不仅限于.geo。此扩展名最能解决问题,但是使用时,似乎没有将任何网格划分操作(例如将曲线标记为超限)或变换(例如膨胀)写入输出文件gmsh.write('test.geo_unrolled')。我认为这与_unrolled部分有关。但是,有什么方法可以从API中获取完整的Gmsh脚本?

其次,当我尝试复制样例的样例时:

p1 = gmsh.model.geo.addPoint(-1, 0.5, 0, 0.1)
p2 = gmsh.model.geo.addPoint(0, 1, 0, 0.1)
p3 = gmsh.model.geo.addPoint(1, 0.5, 0, 0.1)
s1 = gmsh.model.geo.addSpline([p1, p2, p3])
s2 = gmsh.model.geo.copy([s1])
Run Code Online (Sandbox Code Playgroud)

我懂了ValueError: ('gmshModelGeoCopy returned non-zero error code: ', 1)。错误代码1似乎表明s1copy()调用时找不到原始样条()的标签。我在这里想念什么吗?例如,gmsh.model.geo.synchronize()在尝试致电之前,我曾尝试致电copy(),但这没有任何效果。

最后,当我在Gmsh GUI中使用“ 模块”-“几何”-“基本实体”-“变换”-“缩放”使用dilate 变换时,检查对话框中的“ 在副本上应用缩放”选项,在上面的示例样条线上,我的确得到了曲线符合预期,包括三个点。假设我能够使用API​​完成相同的操作,然后如何参考缩放后的样条曲线所经过的三个新点,例如,如果我想在原始样条曲线的起点和缩放的样条曲线?

最后,我要完成的工作如下:通过点列表绘制样条线,创建该样条线的缩放副本,在起点和终点之间绘制线,并创建由两个样条线和线。是否有比我尝试做的更好的方法?

python numeric mesh numerical-methods finite-element-analysis

3
推荐指数
1
解决办法
436
查看次数