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() #可视化