面向对象有限元编程|自定义有限元程序框架
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 npimport ModElementsimport ModMaterialimport ModStructimport ModNumericimport ModPostmat1 = 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) #创建一个求解器的实例clsdelta = cls.CGsolver() #调用共轭梯度法求解post = ModPost.Post(fm, delta) #后处理实例post.outputResult()post.Visualize() #可视化来源:数值分析与有限元编程