Skip to main content

有限元分析

项目描述

FElupe - 有限元分析

PyPI 版本 shields.io 文件状态 许可证:GPL v3 在格拉茨(奥地利)用爱制造 编解码器 DOI 代码风格黑色 GitHub 回购星星 PyPI - 下载

FElupe 是一个 Python 3.6+ 有限元分析包,专注于固体连续体力学中非线性问题的公式化和数值求解。它的名字是 FE(有限元)和德语单词Lupe(放大镜)的组合,作为深入了解有限元分析代码在引擎盖下的样子的同义词。

安装

安装 Python,启动终端并运行

pip install felupe[all]

where[all]安装所有可选依赖项。默认情况下,FElupe 仅依赖于numpyscipy。为了使用 FElupe 的所有功能,建议安装所有可选依赖项。

你好,费卢佩!

具有超弹性材料行为的实体立方体的四分之一模型在夹紧端面施加单轴伸长。这涉及创建网格、区域以及位移场(封装在场容器中)。此外,边界条件由单轴工况模板创建。Neo-Hookean 材料配方应用于实体。一个步骤生成给定边界条件的连续子​​步骤运动。该步骤被添加到作业中。在评估期间,每个步骤的每个子步骤都通过迭代 Newton-Rhapson 程序求解。最后将上一步的解导出为VTK文件。有关此高级代码片段的更多详细信息,请查看文档

import felupe as fem

# create a hexahedron-region on a cube
region = fem.RegionHexahedron(fem.Cube(n=11))

# add a displacement field and apply a uniaxial elongation on the cube
displacement = fem.Field(region, dim=3)
field = fem.FieldContainer([displacement])
boundaries, loadcase = fem.dof.uniaxial(field, clamped=True)

# define the constitutive material behaviour and create a solid body
umat = fem.NeoHooke(mu=1.0, bulk=2.0)
solid = fem.SolidBody(umat, field)

# prepare a step with substeps
move = fem.math.linsteps([0, 0.2], num=10)
step = fem.Step(
    items=[solid], 
    ramp={boundaries["move"]: move}, 
    boundaries=boundaries
)

# add the step to a job and evaluate all substeps
job = fem.Job(steps=[step])
job.evaluate()

# save result of last substep
fem.save(region, field, filename="result.vtk")

文档

文档位于此处

变更日志

此项目的所有显着更改都将记录在此文件中。格式基于Keep a Changelog,并且该项目遵循Semantic Versioning

[未发布]

[5.1.0] - 2022-09-09

改变了

  • 增强Boundary:除了可调用的(fx=lambda x: x == 0相当于fx=0)之外,还按值选择点,还添加mode="and"mode="or"参数。
  • 支持线内元素的旋转功能mesh.revolve()
  • 分别导入以前隐藏的函数fun_items()jac_items()astools.fun()tools.jac()(对数字延续有用)。
  • 将步骤号和子步骤号作为参数添加到callback(stepnumber, substepnumber, substep)a 的 -function 中Job

[5.0.0] - 2022-08-21

添加

  • 添加SolidBodyGravity作用在实体上的实体力。
  • Newton-Rhapson 求解器中的链接字段支持列表newtonrhapson(fields=[field_1, field_2])
  • 中状态变量的自动初始化SolidBodyTensor
  • 添加mesh.runouts()用于创建橡胶金属结构的橡胶块的跳动。
  • 添加FieldPlaneStrain它是一个 2d 场并返回形状梯度(3, 3)(用于 3d 用户材料的平面应变问题)。
  • 添加PointLoad用于创建外力矢量。
  • 添加Step子步骤的生成器,Job并且CharacteristicCurve.

改变了

  • 移动MultiPointConstraint到力学模块并统一处理SolidBody
  • bodies将Newton-Rhapson 求解器的参数重命名为items(现在支持 MPC)。
  • 从 loadcases 将分区系统作为 dict 返回loadcase=dict(dof0=dof0, dof1=dof1, ext0=ext0)
  • 检查函数残差范数newtonrhapson()而不是增量字段值范数。

固定的

  • SolidBodyPressure修复最初定义的压力值的组装向量和结果。
  • 修复verbose=0选项newtonrhapson()
  • 修复由于引入平面应变场修整而导致的轴对称混合场的错误组装。

[4.0.0] - 2022-08-07

添加

  • 添加SolidBody.evaluate.kirchhoff_stress()方法。与柯西应力法相反,这给出了不可压缩平面应力的正确结果。
  • 添加SolidBodyTensor具有状态变量的基于张量的材料定义。
  • bodies参数添加到newtonrhapson().
  • 为字段添加一个容器类,FieldContainer(从 重命名FieldMixed)。
  • (长度=字段数)的添加len(field)方法。FieldContainer

改变了

  • 统一处理FieldFieldMixed
  • 本构模型使用列表作为输入和输出(单一和混合公式之间的一致性)。
  • 允许直接从 1d 稀疏求解向量进行字段更新,而不会被字段偏移量分割。

固定的

  • 修复tovoigt()具有多于或少于两个尾随轴和 2D 张量的数据的帮助器。
  • 如果残差稀疏,则修复错误force()和助手。moment()

已移除

  • 去除 matADi 材料的包装(对于现场容器不需要)。
  • 从全局命名空间中删除IntegralFormMixed和删除。IntegralFormAxisymmetric

[3.1.0] - 2022-05-02

添加

  • 添加可选的并行(线程)基础评估并添加Form(v, u, parallel=True).
  • mechanics使用SolidBody和添加子模块SolidBodyPressure

固定的

  • 为(混合)轴对称分析修复 matADi 材料。
  • 修复轴对称积分形式中缺少的半径。

[3.0.0] - 2022-04-28

添加

  • sym参数添加到Bilinearform.integrate()and Bilinearform.assemble()
  • 添加它根据模板区域FieldsMixed创建一个FieldMixed长度。n
  • 添加功能以镜像 Mesh mesh.mirror()
  • 添加一个parallel使用线程版本的新程序集,np.einsum而不是 ( einsumt )。
  • 使用einsumt添加并行版本的数学助手 ( dya, cdya, dot, ) 。ddot
  • parallel关键字添加到本构模型(NeoHookeLinearElasticTensorNotationThreeFieldVariation
  • 与和RegionBoundary的模板区域一起添加。QuadHexahedronGaussLegendreBoundary
  • 为 的函数和梯度方法添加可选的法线向量参数AreaChange
  • 添加一个新的 Mesh-tool triangulate(),适用于四边形和六面体网格。
  • 添加一个新的 Mesh-method Mesh.as_meshio()
  • @Form(...)为线性和双线性表单对象添加函数装饰器。

改变了

  • mesh对(points, cells, cell_dataMesh)内的函数强制执行一致的参数。
  • 将 Numba-parallel程序集重命名为jit.
  • 将单元素形状函数及其导数从region.htoregion.element.hregion.dhdrto 移动region.element.dhdr
  • 为每个单元重复元素形状函数及其衍生物(作为即将到来的准备RegionBoundary)。
  • mesh.convert()通过使用函数 decorator 进行改进@mesh_or_data
  • 允许将数组作为mesh.expand()and的扩展参数传递mesh.revolve()
  • 允许将可选关键字 args 传递给Mesh.save(**kwargs),充当Mesh.as_meshio(**kwargs).write().

固定的

  • 修复 的区域法线向量RegionBoundary
  • BilinearForm如果字段和网格尺寸不相等,则修复集成和后续组装。

[2.0.1] - 2022-01-11

固定的

  • 修复了由prange.

[2.0.0] - 2022-01-10

添加

  • 添加一个新方法来深度复制一个MeshwithMesh.copy()
  • 为并行表单积分器内的尾轴添加广播功能。
  • Basis为线性和双线性形式中使用的虚拟字段添加字段。
  • 添加LinearFormBilinearForm(包括混合变体)用于弱形式表达式的向量/矩阵组装。
  • 为和parallel的线程集成/组装添加关键字。LinearFormBilinearForm

改变了

  • 增强Boundary任何用户定义的规定值的应用,Field它是FieldMixed.
  • 整个混合场必须dof.apply()offsets返回dof.partition的混合场配方一起传递。
  • 设置线弹性材料方法的默认值shape=(1, 1)hessian()

固定的

  • 修复math.dot()了带有尾轴的两个向量的爱因斯坦求和。

已移除

  • 删除dof.extend,因为dof.partition不再需要它。

[1.6.0] - 2021-12-02

添加

  • 添加LinearElasticPlaneStressLinearElasticPlaneStrain材料配方。
  • 为 .添加region参数LinearElastic.hessian()

改变了

  • 根据变形梯度重新设计LinearElastic材料。
  • 以矩阵表示法重新制定LinearElastic材料(与以前的实现相比,弹性矩阵的速度提高了 ~10。)
  • LinearElastic移到constitution.LinearElasticTensorNotation

[1.5.0] - 2021-11-29

添加

  • 添加 kwargs of field.extract()tofunjacof newtonrhapson

改变了

  • threads将in的默认数量设置MatadiMaterialmultiprocessing.cpu_count()
  • 将文档移至阅读文档 (Sphinx)。

固定的

  • 修正dim计算反作用力 ( tools.force) 的问题FieldMixed
  • 修正反作用力矩 ( tools.moment) 的计算FieldMixed

[1.4.0] - 2021-11-15

添加

  • 添加mask参数以Boundary选择用户定义的点。
  • 添加shear工况。
  • matadi为材料添加一个包装器为MatadiMaterial.
  • 添加verbosetiming参数到newtonrhapson.

固定的

  • dim在计算反作用力时从 Field 中获取 internal tools.force
  • 修复math.dotrank 1(向量)、rank 2(矩阵)和 rank 4 张量的组合。

[1.3.0] - 2021-11-02

改变了

  • 重命名mesh.as_discontinous()mesh.disconnect().
  • 重命名constitution.Mixedconstitution.ThreeFieldVariation.
  • 重命名unstackoffsets作为自由分区和所有后续引用的返回。
  • 将工具 ( newtonrhapson, project, save) 和构成 ( NeoHooke,LinearElasticThreeFieldVariation) 导入到 FElupe 的命名空间。
  • 将最小的 README 示例更改为高级代码片段,并参考文档了解详细信息。

[1.2.0] - 2021-10-31

添加

  • 添加模板区域,即带有Hexahedron()元素和正交方案GaussLegendre(order=1, dim=3)的区域RegionHexahedron等。
  • 添加双轴和平面载荷工况(如单轴)。
  • 添加一个最小的 README 示例(Hello FElupe!)。

改变了

  • 取消激活夹紧边界 ( clamped=False) 作为单轴加载的默认选项dof.uniaxial

[1.1.0] - 2021-10-30

添加

  • quadrature.inv()为 Gauss-Legendre 方案添加逆求积方法。
  • 将网格的不连续表示添加为网格方法mesh.as_discontinous()
  • 将正交点处的投影(和平均值)值添加tools.project()到网格点。

改变了

  • 删除quadpy了依赖项并使用内置多项式numpy进行 Gauss-Legendre 计算。

固定的

  • 修复math.tovoigt()功能的第一个剪切组件中的拼写错误。
  • 修复tools.topoints()由于不同的正交和单元排序而导致的错误应力投影。

[1.0.1] - 2021-10-19

固定的

  • sparse如果未安装,则修复 dof 模块的导入。

[1.0.0] - 2021-10-19

添加

  • 开始使用变更日志。
  • 为基本类、方法和函数添加了文档字符串。
  • 为所有元素添加带有点位置的数组。

改变了

  • 重命名元素方法(从basistofunction和 from basisprimeto gradient)。
  • 使本构材料更灵活(允许在应力和弹性评估时传递材料参数umat.gradient(F, mu=1.0))。
  • 重命名ndimdim.
  • 简化元素基类。
  • 加快字段和表单的索引(行、列)计算(现在快大约 10 倍)。
  • test_element.py根据元素方法的变化进行更新。

已移除

  • 自动检查是否可以根据尺寸计算区域的梯度。in的grad参数region(grad=False)必须由用户强制执行。

执照

FElupe - 有限元分析 (C) 2022 Andreas Dutzler,格拉茨(奥地利)。

本程序是免费软件:您可以根据自由软件基金会发布的 GNU 通用公共许可证条款重新分发和/或修改它,许可证的第 3 版或(由您选择)任何更高版本。

分发此程序的目的是希望它有用,但不提供任何保证;甚至没有对适销性或特定用途适用性的默示保证。有关详细信息,请参阅 GNU 通用公共许可证。

您应该已经收到了一份 GNU 通用公共许可证的副本以及该程序。如果没有,请参阅https://www.gnu.org/licenses/

项目详情