python 有限元编程练习 二
高手自动略过。
我本人从CAE行业跳槽到了 EDA行业,到现在已经有两年了。发现EDA行业的跟数值计算有关的节点软件也采用有限元,有限差分或者边界元这些个数值计算方法。于是现在只能再回忆回忆了,有些内容都忘记了。
另外特别说明一点,如果不更新的话,我一般不登陆这个账号。所以留言的朋友我通常没办法及时回复。
还有 python 有限元编程知识你熟悉有限元编程的起点而不是终点。我搁社会上混了得有4年多了,从没听说招聘CAE工程师的人只需要会python就行了的。就算你通过python进到了公司,大概率后期还得要求你转C/C++ 的。
参考书籍:有限元基础教程(国际单位制版)第五版
测试案例 (书上例2.2):
这些都是比较简单的 一维单元,所以我省略了很多详细有限元编程流程的步骤,仅适用于初学者。
1. 我这里创建了一个单元类。node_i 是 单元的第一个节点编号;node_j 是单元的第二个节点编号;k 是单元的弹簧常数。
这里的 form_element_k_matrix() 是产生单元系数矩阵。
2. 根据题目描述可以看到,这里只有四个单元。
所以我这里:
然后创建了一个单元列表,方便后面管理:
定义边界条件数组:
请注意这里的未知量,我全部使用了 -1.0 来代替。
请继续往后看,区分已知节点和未知节点的方式将在下面介绍。
根据我见过的开源软件内部,其区分是已知节点还是未知节点,都是使用的一个数组进行标记。
比如我这里采用了 使用 0 标记未知节点,使用 -1 标记已知的第一类边界条件的节点;使用 -2 标记已知的第二类边界条件,当然本案例里头只有第一类边界条件,所以这里我不再添加其他标记的相应处理流程。
这里只有第一个节点和最后一个节点是第一类边界条件,使用 -1 将他们标记为已知节点。
仔细阅读过教材的朋友应该能知道,整体系数矩阵中,要去掉已知节点的行和列上对应的元素,将剩下的数据组合成新的系数矩阵。
这里我定义了一个产生整体系数矩阵的函数:
3. 如何来将已知节点对应的行和列从系数矩阵中去掉
当前案例的总的节点个数是:5; 已知节点个数是 2; 那么剩下未知节点个数是: 3
我这里采用的方式是这样:
首先计算出来原系数矩阵中的待保留数据在新系数矩阵中要移动的行数。
然后给新系数据矩阵申请一个空间,并将待保留数据记录进去。
那么接下来我们需要需要创建方程组的右端项,右端项也就是 力项。待求量是位移项。
那么这里便跟系数矩阵划掉的项有关系了,其实系数矩阵划掉项这个流程并不是直接去掉,而是将已知项移动到了方程组的右端。
故这里进行移项处理。
移项处理完成之后,抽取出未知节点上对应的数据。
那么接下来,关于 Ax =b 的计算方式,我们产生了 A 和 b。
调用 scipy 中的模块即可进行求解了。
计算结果如下:
该付费内容为:python有限元编程练习(没有视频,附带源码)
3张图片 包含1个附件 0人购买