面向对象有限元编程|优化框架
面向对象有限元编程|自定义有限元程序框架上一次提出的有限元程序框架面临一个问题:把单元都放在一个模块文件modelements,导致代码过多,不方便查找。并且也不能体现出这个框架的物理含义,即单元的多样性。同样,后处理模块是一种单元对应一种后处理方法,所以也会定义很多方法。现在把单元拆分,一种单元放在一个模块中。再把所有的单元定义为一个子包Elements,里面除了定义的单元外,还有一个文件__init__.py,这是包的标志。Python中的包和模块有两种导入方式:精确导入和模糊导入:精确导入方式:from Elements import MdTruss 就是从子包Elements导入模块MdTruss,MdTruss.pre 就是调用里面的方法了。模糊导入方式:from Elements import * import numpy as npfrom Materials import MdMaterialfrom Elements import MdBeam2Dfrom FiniteModel import MdFEModelfrom Numerics import MdLinerSolverfrom Posts import MdPostmat1 = MdMaterial.Material( 1 )#节点对象nd1 = MdBeam2D.NodeBeam2D( 1, 0, 0, 1, 0, 0)nd2 = MdBeam2D.NodeBeam2D( 2, 4, 0, 1, 0, 0)nd3 = MdBeam2D.NodeBeam2D( 3, 9, 0, 1, 0, 0)#单元对象elem1 = MdBeam2D.ElemBeam2D( 1, 1, mat1, nd1, nd2, 1, -4.5, -4.5 )elem2 = MdBeam2D.ElemBeam2D( 2, 1, mat1, nd2, nd3, 1, -3.2, -3.2 )listNode = [nd1, nd2, nd3]listElem = [elem1, elem2]fm = MdFEModel.FEModel(listNode, listElem) #有限元模型实例ff = fm.getForceVector()KK = fm.getStructStiffnessMatrix()cls = MdLinerSolver.LinerSolver(KK, ff, 1e-4, 500) #创建一个求解器的实例clsdelta = cls.CGsolver() #调用共轭梯度法求解post = MdPost.Post(fm, delta) #后处理实例post.outputResult()post.Visualize()来源:数值分析与有限元编程