计算力学|采用python进行有限元模拟

从abaqus输出的inp文件中读取节点和单元信息

import meshio

mesh = meshio.read('Job-3.inp')

coords = mesh.points###coords即为各个节点的坐标

Edof = mesh.cells_dict['triangle']#Edof为三角形单元的节点号

1.单元刚度矩阵

def element_stiffness(n1,coords,E,v,t):

    node1 = coords[n1[0]]

    node2 = coords[n1[1]]

    node3 = coords[n1[2]]

    xi = node1[0]

    yi = node1[1]

    xj = node2[0]

    yj = node2[1]

    xm = node3[0]

    ym = node3[1]

    A=abs((xi*(yj-ym)+xj*(ym-yi)+xm*(yi-yj))*0.5)

    bi=yj-ym

    bj=ym-yi

    bm=yi-yj

    ci=-xi+xm

    cj=-xm+xi

    cm=-xi+xj

B=np.array([[bi,0,bj,0,bm,0],[0,ci,0,cj,0,cm],[ci,bi,cj,bj,cm,bm]])/(2*A)

    BT=B.transpose()

    D=np.array([[1,v,0],[v,1,0],[0,0,(1-v)/2]])*E/(1-v*v)

    Ke=BT.dot(D).dot(B)*t*A

    return Ke

2.总体刚度矩阵

def assemble_stiffness(coords,edof,E,v,t):

    NoN = np.size(coords, 0)

    NoE = np.size(edof, 0)

    PD = np.size(coords, 1)

    NPE = np.size(edof, 1)

    K=np.zeros([NoN*PD,NoN*PD])

    for i in range(len(edof)):

        n1 = edof[i, 0:(NPE)]

        Ke=element_stiffness(i,n1,coords, E,v,t)

        for r in range(NPE):

            for p in range(NPE):

                K[2*n1[r] , 2*n1[p] ] = K[2*n1[r] - 0, 2*n1[p]-0] + Ke[2*r, 2*p]

                K[2*n1[r] , 2*n1[p]+1] = K[2*n1[r] , 2*n1[p]+1] + Ke[2*r, 2*p+1]

                K[2*n1[r] +1, 2*n1[p] ] = K[2*n1[r]+1, 2*n1[p] ] + Ke[2*r+1, 2*p]

                K[2*n1[r] +1, 2*n1[p]+1] = K[2*n1[r]+1 , 2*n1[p]+1] + Ke[2*r+1, 2*p+1]

    return K

3.施加载荷

在薄板的左右两端施加均布载荷,首先根据单元节点横坐标判断在左右两端,判断在左右两端的单元个数,然后在单元上设置近似的均布载荷。

def F(coords,NoN,PD,b,c):

    G = np.zeros([NoN , PD])

    U = np.zeros([NoN , PD])

    # 施加左侧载荷

    m=0

    for i in range(NoN):

        if int(coords[i,:][0]*10**2) == -(b/2)*10**2+1.:

            m=m+1

    p=c/m*689.5

    k = 0

    for i in range(NoN):

        if int(coords[i][0]*10**2) == -(b/2)*10**2+1.:

            print(i)

            k = k + 1           

            G[i][0]= (-p)

    # 施加右侧载荷

    n=0

    for i in range(NoN):

        if int(coords[i,0:][0]*10**2) == (b/2)*10**2-1.:

            n = n + 1

    p = c/ n*689.5

    for i in range(NoN):

        if int(coords[i,0:][0]*10**2) == (b/2)*10**2-1.:

            G[i][0] = p

    return G

4.求解位移

U = np.zeros([2*NoN , PD-1])

T= np.linalg.inv(K)#T为K(总体刚度矩阵)逆矩阵

U=np.dot(T,GT)#U=[K]-1[G]

U=U.reshape(2*NoN,PD-1)#把位移转化为一维数组

5.计算应力应变

epsilonx = np.zeros(NoE)

epsilony = np.zeros(NoE)

epsilonxy = np.zeros(NoE)

A = np.zeros([3,3])

for i in range(NoE):

      dot_id = Edof[i]

      dot1 = np.array(coords[int(Edof[i, 0])])

      dot2 = np.array(coords[int(Edof[i, 1])])

      dot3 = np.array(coords[int(Edof[i, 2])])

      beta1 = dot2[1] - dot3[1]

      beta2 = dot3[1] - dot1[1]

      beta3 = dot1[1] - dot2[1]

      gamma1 = -dot2[0] + dot3[0]

      gamma2 = -dot3[0] + dot1[0]

      gamma3 = -dot1[0] + dot2[0]

      B=np.array([[1, dot1[0], dot1[1]], [1, dot2[0], dot2[1]],[1, dot3[0], dot3[1]]]) / 2

      A = np.linalg.det(B)

      epsilonx[i - 1] = (beta1 * U[dot_id[0]] + beta2 * U[dot_id[1]] + beta3 * U[dot_id[2]]) / (2 * A)

      epsilony[i - 1] = (gamma1 * U[NoN + dot_id[0]] +

            gamma2 * U[NoN + dot_id[1]] + gamma3 * U[NoN + dot_id[2]]) / (2 * A)

      epsilonxy[i - 1] = (beta1 * U[NoN + dot_id[0]] +

             beta2 * U[NoN + dot_id[1]] + beta3 * U[NoN + dot_id[2]]

             + gamma1 * U[dot_id[0]] + gamma2 * U[dot_id[1]] + gamma3 * U[dot_id[2]]) / (2 *A)

      sigmax = (E / (1 - v ** 2)) * (epsilonx + v * epsilony)

      sigmay = (E / (1 - v ** 2)) * (epsilony + v * epsilonx)

      sigmaxy = (E / (2 * (1 + v))) * epsilonxy

五、结果及分析

编程结果:

X方向位移(Abaqus)

y方向位移(Abaqus)

应力:

数值比较:最大x方向位移

编程

Abaqus

1.79345518e-03

1.183e-03

数值比较:最大y方向位移

编程

Abaqus

8.84718366e-04

1.838e-04

数值比较:最大x方向应力

编程

Abaqus

2.82313695e+04

1.028e+04

分析:在用Abaqus求解时,将中间整个圆环边界位移设置为零,相当于减少了薄板的位移量,因此出现了编程位移数值大于Abaqus数值的问题。而在使用相同模型时,位移的大小决定了应变的大小,应力呈现与应变相同的变化趋势,所以编程的应力大于Abaqus的应力,但结果在同一个数量级,可以基本确定是以上原因。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/451289.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UNIX网络编程-传输层

概述 传输层主要包括:TCP、UDP、SCTP(流控制传输协议)! 绝大多数客户端/服务器网络应用都使用TCP/UDP。SCTP是一个较新的协议,最初设计用于跨因特网传输电话信令。 这些传输协议都转而使用网络协议IP:或是…

pip3安装报error: externally-managed-environment,删除EXTERNALLY-MANAGED即可

pip3 install pandas 安装报错完美解决 解决方法: 1、本地终端查询EXTERNALLY-MANAGED find / -name EXTERNALLY-MANAGED 2、删除EXTERNALLY-MANAGED 记得路径改成自己本地的 sudo mv /usr/local/Cellar/python3.13/3.13.0_1/Frameworks/Python.framework/Versi…

机器视觉系统硬件组成之工业相机篇

工业相机是一种非常重要的机器视觉器件,它能够将被采集的图像信息通过电路转换成电信号,再通过模数转换器(ADC)将其转化为数字信号,最后以标准的视频信号输出。工业相机在机器视觉领域得到了广泛应用,包括质…

百易云资产管理运营系统 ufile.api.php SQL注入漏洞复现

0x01 产品描述: 百易云资产管理运营系统,是专门针对企业不动产资产管理和运营需求而设计的一套综合解决方案。该系统能够覆盖资产的全生命周期管理,包括资产的登记、盘点、评估、处置等多个环节,同时提供强大的运营分析功能&#…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十六集(上篇):制作更多地图,更多敌人,更多可交互对象

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、第一个代表性场景 1.制作敌人僵尸跳跳虫更多敌人2.制作敌人阿斯匹德更多可交互对象3.制作敌人孵化虫和它的孩子二、第二个代表性场景 1.制作更多敌人2.制作…

0x2E service

0x2E service 1. 概念2. Request message 数据格式3. Respone message 数据格式3.1 正响应格式3.2 negative respone codes(NRC)4. 示例4.1 正响应示例:4.2 NRC 示例1. 概念 UDS(Unified Diagnostic Services)中的0x2E服务,也称为WriteDataByIdentifier(通过标识符写入数据…

spring-boot学习(2)

上次学习截止到拦截器 1.构建RESfun服务 PathVariable通过url路径获取url传递过来的信息 2.MyBatisPlus 第三行的mydb要改为自己的数据库名 第四,五行的账号密码改成自己的 MaooerScan告诉项目自己的这个MyBatisPlus是使用在哪里的,包名 实体类的定义…

专家系统简介

本文对基于规则的专家系统进行简介,举例专家系统的结构类似 MYCIN 系统,同时串联介绍专家系统的各种思想。需要注意的是,本文所述仅是专家系统的一种实现途径,其依赖规则进行知识表示和推理,另外还有基于语义网络、框架…

穿越沙漠问题

题目:一辆吉普车穿越1000km的沙漠。吉普车的总装油量为500L,耗油率为1L/km。由于沙漠中没有油库,必须先用这辆车在沙漠中建立临时油库。若吉普车用最少的耗油量穿越沙漠,应在哪些地方建立油库,以及各处存储的油量是多少…

链动2+1芸众商城421+全插件独立版源码

芸众商城最新全插件421个,去授权 源码全开源链动21商城小程序 这套版本插件全部都是新版本,并非外面那种老版本 老插件全部都不能用的,一堆bug问题,我们插件源码是直接打官方授权源码所以都是最新的,还有很多小程序前…

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey阅读笔记

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey 综述阅读笔记 仅记录个人比较感兴趣的部分 基本知识 PEFT的三种分类:additive, selective, reparameterized, and hybrid fine-tuning selective fine-tuning 不需要任何额外的参数&am…

计算机毕业设计Hadoop+Hive+Spark+Flink广告推荐系统 广告预测 广告数据分析可视化 广告爬虫 大数据毕业设计 深度学习 机器学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 专业 小四号宋体 班级 小…

《环境感知方案:探索未来智能世界的关键技术》

《环境感知方案:探索未来智能世界的关键技术》 一、环境感知方案的研究现状(一)机器人领域的环境感知(二)农业领域的环境感知(三)智能网联汽车领域的环境感知 二、先进的环境感知技术&#xff0…

A Multi-Head Reconstruction Network For Image Anomaly Detection创新点总结

创新点解析:Multi-Head Reconstruction Network (MRN) 与 Multi-Feature Aggregation (MFA) 1. Multi-Head Reconstruction Network (MRN) 传统重建方法的过程: 训练自动编码器或生成模型来重建正常样本的图像。通过比较原始图像和重建图像来检测异常…

数据结构与算法 - 树 #数的概念 #二叉树 #堆 - 堆的实现/堆排序/TOP-K问题

文章目录 前言 一、树 (一)、概念 1、树的定义 (二)、树的定义 1、树为什么是递归定义的? 2、如何定义树(如何表达一棵树) 解决方案一:假设我们得知该树的度 解决方案二:顺序表 解决方案三:左孩子右兄弟表示法 二、二叉…

Linux Ubuntu dbus CAPI ---- #include<dbus.h>出现“无法打开源文件dbus/xxx.h“的问题

一、确保已安装dbus库和CAPI sudo apt-get install libdbus-1-dev 二、在c_cpp_properties.json的includePath中是否配置了dbus库依赖文件所在的路径 三、编译一个简单的dbus代码,在编译过程中只要出现.h文件找不到的情况,就使用下列命令找到.h文件路径…

Java集合常见知识总结(中)

Set Comparable 和 Comparator 的区别 Comparable 接口和 Comparator 接口都是 Java 中用于排序的接口,它们在实现类对象之间比较大小、排序等方面发挥了重要作用: Comparable 接口实际上是出自java.lang包 它有一个 compareTo(Object obj)方法用来排序…

【web】JDBC

项目连接数据库 右侧导航栏找到databsae 如果没有驱动,先下载驱动 填写数据库用户名密码 勾选对应的表即可 JDBC代码流程 1,配置信息 2,加载驱动 从MySQL Connector/J 5.1版本开始,推荐使用com.mysql.cj.jdbc.Driver这个新的驱动类。 3,链接数据库…

初识Linux · 重定向和缓冲区

目录 前言: 预备知识 缓冲区 重定向 前言: 其实有了文件2的预备知识,我们已经初步了解了文件描述符fd是什么,底层是如何运作的了,那么本文,我们通过文件描述符对重定向和缓冲区有一个更深层次的理解&a…

JVM(HotSpot):GC之垃圾标记阶段

文章目录 前言一、标记阶段算法1、引用计数法2、可达性分析算法(JVM使用) 二、4种引用1、 强引用2、软引用(SoftReference)3、弱引用(WeakHashMap)4、虚引用(PhantomReference) 三、代码案例1、 强引用2、软引用(SoftReference)3、弱引用(WeakHashMap) 前…