现有的商业有限元软件ansys
、MSC marc
等比较昂贵,我们可以选用sfepy
来进行有限元分析,其官方网站如下:
SfePy: Simple Finite Elements in Pythonsfepy.org
使用sfepy
首先要安装,为了减少麻烦,建议用anaconda
集成环境来安装,具体如下步骤(注意,不要用docker
或者wsl
,否则用mayavi
显示vtk
文件时会出问题,但是,如果不需要postproc
,那么无所谓):
1、安装anaconda
或miniconda
,对于国内的开发者,推荐清华的源:
Tsinghua Open Source Mirrormirror.tuna.tsinghua.edu.cn
可以先到:
Tsinghua Open Source Mirrormirrors.tuna.tsinghua.edu.cn
下载最新的版本(这里推荐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版本了。
---------------------------------------------------------------------
另外,再说一次,mayavi
和wxpython
是为了显示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
的窗口,显示如下: