首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面向对象有限元编程|自定义有限元程序框架

面向对象有限元编程|自定义有限元程序框架

作者头像
fem178
发布2021-03-25 16:08:48
8191
发布2021-03-25 16:08:48
举报

Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了一些功能实现,比如定义函数,类和变量,模块里也能包含可执行的代码。模块让你能够有逻辑地组织你的 Python 代码段。把相关的代码分配到一个模块里能让你的代码更好用,更易懂。

模块定义好后,我们可以使用 import 语句来引入模块。假如要引用模块 math,就可以在文件最开始的地方用 import math 来引入。在调用 math 模块中的函数sqrt时,必须这样引用:math.sqrt

有了模块,自定义有限元程序框架就方便了。以下是自定义有限元程序框架CFEA,结构如下

CFEA
|-- ModElements.py
|-- ModMaterial.py
|-- ModStruct.py
|-- ModNumeric.py
|-- ModPost.py
|-- main.py

ModElements.py定义节点和单元类型,可以不断往里面添加单元类。ModMaterial.py定义材料类,ModStruct.py定义有限元模型类,目前只有一个类。以后再定义由不同单元组成的结构类。ModNumeric.py定义求解器类。ModPost.py定义后处理类,包括调用matplotlib可视化。今后再单独定义可视化类。main.py根据具体问题将上述类实例化。

import numpy as np

import ModElements
import ModMaterial
import ModStruct
import ModNumeric
import ModPost

mat1 = ModMaterial.Material( 1 )
#节点对象
nd1 = ModElements.Beam2DNode( 1,  0,         0,        1,   0,   0)
nd2 = ModElements.Beam2DNode( 2,  4,         0,        1,   0,   0)
nd3 = ModElements.Beam2DNode( 3,  9,         0,        1,   0,   0)
#单元对象
elem1 = ModElements.Beam2D( 1, 1, mat1, nd1, nd2, 1,   -4.5,    -4.5 )
elem2 = ModElements.Beam2D( 2, 1, mat1, nd2, nd3, 1,   -3.2,   -3.2 )

listNode = [nd1, nd2, nd3]
listElem = [elem1, elem2]

fm = ModStruct.FEModel(listNode, listElem) #有限元模型实例
ff = fm.getForceVector()
KK = fm.getStructStiffnessMatrix()
cls =  ModNumeric.solver(KK, ff, 1e-4, 500) #创建一个求解器的实例cls
delta = cls.CGsolver() #调用共轭梯度法求解

post = ModPost.Post(fm, delta) #后处理实例
post.outputResult()

post.Visualize() #可视化

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数值分析与有限元编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档