首页/文章/ 详情

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

5月前浏览4687

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( 11, mat1, nd1, nd2, 1,   -4.5,    -4.5 )
elem2 = ModElements.Beam2D( 21, 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-4500#创建一个求解器的实例cls
delta = cls.CGsolver() #调用共轭梯度法求解

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

post.Visualize() #可视化




来源:数值分析与有限元编程
pythonUM材料
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-04-02
最近编辑:5月前
太白金星
本科 慢慢来
获赞 4粉丝 8文章 317课程 0
点赞
收藏
作者推荐

你会用“niHao”作为变量名吗?

Jeff Atwood 曾说:“想出好的命名的确很难,但是有难的道理,因为好的命名需要只用一两个单词出表达你的根本意思。”程序代码往往有复杂的逻辑,而且是别人写的,自己很难在短时间内理清逻辑关系;况且在理解该逻辑关系之前,甚至要先推断代码的功能、输入和输出。故而就算写的好的代码,依然是很难阅读的。就算人家有注释,说不定你得把注释当成关键字,好好地Bing一把,学他个三五个月,你才能理解作者的意图。而在自己写代码的时候,功能往往是明确的,自己整理的思路自己自然明了,一旦思路明确,写出正确的代码就比较容易了。反过来,自己写的代码交给别人来阅读,又是困难重重了。如果你想要提高代码的可读性,命名的确很重要。准确的命名可以提高代码的可读性,让人容易理解,方便调试,也给以后修 改和维护你的代码的人带来方便。一旦开始做了,很快你会发现要想出一个简洁又准确的名字没那么容易。随身带着一本词典?NO,一个工具神器,可以说所有程序员都有用。它是 VS Code 上一个插件,打开源码后可以自动解析所有包含英文的单词。这个插件还有一个有趣的名字,叫:会了吧搜索huile8就能找到。“会了吧”简介是这么写的:打开源码可以自动分析所有包含的英语单词,并显示解释结果,先学单词再看代码。用了会了吧,统统都会啦!它的功能包括:单词后面可以显示 单词解释鼠标悬停可以显示 音标和解释点击单词可以朗读本单词“会了吧”可自动处理源代码的单词,也可通过.vscode/huile8-mastered-list.txt 手动设置已学习过的单词。离线词库主要来源这两个GitHub开源库,链接:https://github.com/skywind3000/ECDICThttps://github.com/fxsjy/diaosi我觉得,这样可以把别人的命名熟悉了,自己写代码的时候,手到擒来。挺不错的。来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈