ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SfePy 示例1 学习笔记

2022-08-21 21:32:49  阅读:166  来源: 互联网

标签:示例 py vertices 笔记 Salome facet SfePy


官方文档:https://sfepy.org/doc-devel/introduction.html

介绍:

是一个通过有限元法解决1D,2D,3D中的耦合偏微分方程的系统. 可以对于复杂FEM问题进行简单编码
其基于Numpy和Scipy, 是一个多平台的软件

通过Example, Gallery, Tutorial获取相关的示例. 对于高级功能, 查看Primer

示例:

使用Salome软件包配合SfePy

Salome是一个开源工具用于产生网格并将处理后的数据发出. 当前是一个示例使用Salome作为使用SfePy的预处理工具.

当前示例的前提条件是假设已经有了一个可用的Salome副本. 这个副本可以经由Salome的源文件构建而出. 而且假设已经安装了SfePy并拥有MED read支持. 相关安装参考Installation

当前示例的标记:

  1. <sfepy_root>: sfepy源文件的根目录
  2. <work_dir>: 当前的运行目录

Salome的官方文档: Salome

  1. 根据Salome 示例1通过点击Export to MED file, 将文件保存在当前目录下的Mesh_Partition_Hexa.med文件中

  2. 在当前示例中, 我们认为是需要处理一个线性弹性问题, 并将这条"鱼"从头到尾进行波动. sfepy文件夹中的申明文件复制到当前文件夹 <sfepy_root>/sfepy/examples/linear_elasticity/linear_elastic.py

  3. 修改linear_elastic.py文件指定的med对象:

# 将
filename_mesh = data_dir + '/meshes/3d/cylinder.mesh'
# 更改为
filename_mesh = 'Mesh_Partition_Hexa.med' # 用于指定需要进行模拟的med对象
  1. 范围定义: 需要定义mesh对象的合理范围. 这里我们要做的是将这条鱼的尾部设置位移限制, 并设置整条鱼的上下界
# 将
regions = {
    'Omega' : 'all',
    'Left' : ('vertices in (x < 0.001)', 'facet'),
    'Right' : ('vertices in (x > 0.099)', 'facet'),
    'SomewhereTop' : ('vertices in (z > 0.017) & (x > 0.03) & (x < 0.07)', 'vertex'),
}
# 更改为
regions = {
    'Omega' : 'all',
    'Tail' : ('vertices in (x < -94)', 'facet'),
    'TopFixed' : ('vertices in (z > 9.999) & (x > 54)', 'facet'),
    'BotFixed' : ('vertices in (z < 0.001) & (x > 54)', 'facet'),
}
  1. 设定字段说明: Salome的网格对象是一个六边形网格组成的对象, 通过User’s Guide查看标记的内容
# 只需要保持以下内容:
fields = {
    'displacement': ('real', 'vector', 'Omega', 1),
}
  1. 边界条件定义: 在这部分中我们需要告诉SfePy固定"鱼头"部分的上下顶点, 并且将鱼尾以10单位/s的速度进行移动
# 更改以下内容:
ebcs = {
    'Fixed' : ('Left', {'u.all' : 0.0}),
    'Displaced' : ('Right', {'u.0' : 0.01, 'u.[1,2]' : 0.0}),
    'PerturbedSurface' : ('SomewhereTop', {'u.2' : 0.005}),
}
# 改为以下内容:
ebcs = {
    'TopFixed' : ('TopFixed', {'u.all' : 0.0}),
    'BotFixed' : ('BotFixed', {'u.all' : 0.0}),
    'Displaced' : ('Tail', {'u.2' : 10, 'u.[0,1]' : 0.0}),
}
  1. 运行模拟: 在当前运行目录中运行该目录
    ./simple.py linear_elastic.py
    这是在运行模拟过程, 当模型的余量小到一定程度后模拟结束. 其应当只运行一次因为我们只试图解一个线性问题. 其运行结果会被存放进Mesh_Partition_Hexa.vtk文件.

  2. 解析结果: 通过这个命令进行结果的查看
    ./resview.py Mesh_Partition_Hexa.vtk -f u:wu:f2.0:p0 0:vw:p0
    运行这个命令应该能获得变化或者未变化的模型的图形

使用FreeCAD/OpenSCAD + Gmsh进行模型的预处理

流程图

标签:示例,py,vertices,笔记,Salome,facet,SfePy
来源: https://www.cnblogs.com/NoobSirPersonalBlog/p/16610890.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有