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

面向对象有限元编程|优化框架

作者头像
fem178
发布2021-03-25 16:09:05
4140
发布2021-03-25 16:09:05
举报

上一次提出的有限元程序框架面临一个问题:把单元都放在一个模块文件modelements,导致代码过多,不方便查找。并且也不能体现出这个框架的物理含义,即单元的多样性。同样,后处理模块是一种单元对应一种后处理方法,所以也会定义很多方法。现在把单元拆分,一种单元放在一个模块中。再把所有的单元定义为一个子包Elements,里面除了定义的单元外,还有一个文件__init__.py,这是包的标志。

Python中的包和模块有两种导入方式:精确导入和模糊导入:

  • 精确导入方式:
from Elements import MdTruss

就是从子包Elements导入模块MdTruss, MdTruss.pre 就是调用里面的方法了。

  • 模糊导入方式:
from Elements import *
import numpy as np
from Materials import MdMaterial
from Elements import MdBeam2D
from FiniteModel import MdFEModel
from Numerics import MdLinerSolver
from Posts import MdPost

mat1 = 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) #创建一个求解器的实例cls
delta = cls.CGsolver() #调用共轭梯度法求解

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

post.Visualize()

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

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

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

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

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