现有的商业有限元软件ansysMSC marc等比较昂贵,我们可以选用sfepy来进行有限元分析,其官方网站如下:


SfePy: Simple Finite Elements in Pythonsfepy.org


开源python有限元库 python有限元模块_python


使用sfepy首先要安装,为了减少麻烦,建议用anaconda集成环境来安装,具体如下步骤(注意,不要用docker或者wsl,否则用mayavi显示vtk文件时会出问题,但是,如果不需要postproc,那么无所谓):

1、安装anacondaminiconda,对于国内的开发者,推荐清华的源:


Tsinghua Open Source Mirrormirror.tuna.tsinghua.edu.cn

开源python有限元库 python有限元模块_开发者_02


可以先到:

Tsinghua Open Source Mirrormirrors.tuna.tsinghua.edu.cn


开源python有限元库 python有限元模块_开发者_02


下载最新的版本(这里推荐miniconda,没那么多杂七杂八的东西),安装;

2、为了下载速度,国内的开发者建议修改conda的仓库,如上的清华网页注明了方法,这里说明一下,对于windows下的环境,.condarc是在当前用户的目录下, 比如,如果用户名是xxx,则在C:Usersxxx目录下,如果这个位置没有,那么就自己建立一个。

如果是linux环境中,则是在~.condarc文件,没有就自己建一个。

然后把下面的内容复制黏贴到.condarc中:


channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud


3、建立conda环境,我们暂取名为fem,大家可以自己取合适的,然后安装相关的模块,注意几个版本必须取特定 的:


conda create -n fem
conda activate fem
conda config --add channels conda-forge
conda install -y sfepy python=3.6 scipy=1.2 mayavi wxpython ipython


上面的conda config --add channels conda-forge是加入特定的下载仓库,否则没法找到sfepy

--------------------2020-5-27 添加修改 ---------------------------

现在可以安装python3.7版本了。

---------------------------------------------------------------------

另外,再说一次,mayaviwxpython是为了显示postproc的内容,如果你不需要,可以不安装,这样麻烦会少很多。

一旦安装完成,就可以用了。

4、测试安装是否成功:

为了测试所有功能是否都成功安装,可以如下设置:

首先,进入python环境 ,找到sfepy的示例所在目录:


>>python
Python 3.6.7 (default, Jul  2 2019, 02:21:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>import sfepy
>>>print(sfepy.data_dir)
C:Usersxxx.condaenvsfemlibsite-packagessfepy
>>>quit()


上面的C:Usersxxx.condaenvsfemlibsite-packagessfepy就是sfepy的安装目录,这里xxx是你自己用户名。

然后建立一个项目目录,把示例目录里的一个示例程序复制过来:


mkdir demo1
cd demo1
copy C:Usersxxx.condaenvsfemlibsite-packagessfepyexamplesdiffusionpoisson_short_syntax.py .


对于linux系统,把copy命令改为cp

然后运行sfepy-run命令进行分析:


>>sfepy-run simple poisson_short_syntax.py
sfepy: left over: ['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__file__', '__cached__', '__builtins__', 'absolute_import', 'data_dir', 'verbose', '_filename']
sfepy: reading mesh [line2, tri3, quad4, tetra4, hexa8] (C:Usersxxx.condaenvsfemlibsite-packagessfepymeshes3dcylinder.mesh)...
sfepy: ...done in 0.01 s
sfepy: creating regions...
sfepy:     Omega
sfepy:     Gamma_Left
sfepy:     Gamma_Right
sfepy: ...done in 0.02 s
sfepy: equation "Temperature":
sfepy: dw_laplace.i.Omega( coef.val, s, t ) = 0
sfepy: using solvers:
                ts: no ts
               nls: newton
                ls: ls
sfepy: updating variables...
sfepy: ...done
sfepy: setting up dof connectivities...
sfepy: ...done in 0.00 s
sfepy: matrix shape: (300, 300)
sfepy: assembling matrix graph...
sfepy: ...done in 0.00 s
sfepy: matrix structural nonzeros: 3538 (3.93e-02% fill)
sfepy: updating variables...
sfepy: ...done
sfepy: updating materials...
sfepy:     coef
sfepy: ...done in 0.01 s
sfepy: nls: iter: 0, residual: 1.176265e-01 (rel: 1.000000e+00)
sfepy:   residual:    0.05 [s]
sfepy:     matrix:    0.00 [s]
sfepy:      solve:    0.01 [s]
sfepy: nls: iter: 1, residual: 1.927999e-16 (rel: 1.639085e-15)
sfepy: solved in 1 steps in 0.10 seconds


最后,如果成功的话,应该生成cylinder.vtk文件,可以用mayavi进行后处理显示:


sfepy-run postproc cylinder.vtk
sfepy: reading mesh [line2, tri3, quad4, tetra4, hexa8] (cylinder.vtk)...
sfepy: ...done in 0.02 s
sfepy: point scalars t at [-0.05 -0.02  0.  ]
sfepy: range: -2.00e+00 2.00e+00 l2 norm range: 1.06e-02 2.00e+00


注意,中间如果停顿的话,直接按回车就可以了。

如果成功,会弹出mayavi的窗口,显示如下:


开源python有限元库 python有限元模块_开源python有限元库_04