python计算复合材料层合板ABD刚度矩阵、预测层合板强度

article/2025/11/9 16:28:45

鄙人不才,在学校的时候没有学python,复合材料力学也是一知半解,后来工作的时候遇到了需要计算复合材料层合板ABD刚度矩阵的内容,然后恰好在学习python,于是花时间编写了下预测这方面的内容,然后后期还编写了通过Tsai-Wu,Tsai-Hill失效准则预测层合板强度的模块,不过代码编的比较烂,后期会学习python项目管理,然后封装好。


备注:由于本人代码水平有限,现有代码还需要更改,主要是模块间的数据读入和数据传递比较混乱,但模块的计算能力没有问题,各位观众老爷在学习的时候可以参考《复合材料力学》相关书籍的经典层合板理论对照阅读。


@Time : 2018-12-28
@Author : Allen Pen
@E-mail : shengyutou@outlook.com

目录

  • 理论部分
    • 复合材料基础理论
      • 单层板的宏观力学分析
      • 层合板的宏观力学分析
      • 单层板的细观力学分析
  • 计算逻辑与实现逻辑
    • 计算逻辑
  • 层合板ABD刚度矩阵计算
  • 层合板强度预测
  • 最后的最后



# 文件读取 这里需要进行数据读入操作,可以通过GUI填入,或者是读取.txt文档。或者是通过细观力学计算得来。

理论部分

待更新。

复合材料基础理论

待更新。

单层板的宏观力学分析

层合板的宏观力学分析

单层板的细观力学分析

待更新。




计算逻辑与实现逻辑

计算逻辑

在这里插入图片描述



# 计算单层板弹性常数
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018-12-28
# @Author  : Allen Pen
# @E-mail  : shengyutou@outlook.comimport numpy as np
import numpy.linalg as lg
from CLPTC.calculator.input_file_reader import ply_properties,mat_propertiesclass Lamina():'''注意:正轴    -- 与铺层纤维方向相同的方向为正轴向,以1,2,3方向表示偏轴    -- 一般为层合板自然轴定义的坐标系,以x,y,z表示,相对于铺层的坐标系铺层角  -- 偏轴x转至正轴1的夹角,逆时针转向为正泊松比  -- 泊松比使用国外的书和软件的定义方式,即ν_12=-ε_2/ε_1 ,ν_21=-ε_1/ε_2使用nu12,nu12(OptiStruct) = nuxy(ANSYS) = ν_12(国外教材)=ν_1(复合材料力学)=ν_21(复合材料力学)=-ε_2/ε_1matid      material ide1         Young Modulus in direction 1e2         Young Modulus in direction 2g12        in-plane shear modulusnu21       Poisson's ratio 21,nu21=-ε2/ε1nu12       Poisson's ratio 12: use formula nu21/e1 = nu12/e2st1,st2    allowable tensile stresses for directions 1 and 2sc1,sc2    allowable compressive stresses for directions 1 and 2ss12       allowable in-plane stress for shearstrn       allowable strain for direction 1plyid      id of the composite laminat           ply thicknesstheta       ply angleS           (单层的)正轴柔量矩阵Q           (单层的)正轴模量矩阵T_stress    应力转换矩阵T_strain    应变转换矩阵S_offaxis   (单层的)偏轴柔量矩阵Q_offaxis   (单层的)偏轴模量矩阵Sij	       compliance component 	柔量分量Qij	       modulus component    	模量分量'''def __init__(self):self.matid    = Noneself.plyid    = Noneself.t        = Noneself.theta    = Noneself.e1   = Noneself.e2   = Noneself.g12  = Noneself.nu21 = Noneself.nu12 = Noneself.st1  = Noneself.st2  = Noneself.sc1  = Noneself.sc2  = Noneself.ss12 = Noneself.strn = Noneself.S        = Noneself.Q        = Noneself.T_stress = Noneself.T_strain = Noneself.S_offaxis= Noneself.Q_offaxis= Noneself.lamina_Ex  = Noneself.lamina_Ey  = Noneself.lamina_Gxy = Noneself.lamina_nuxy= Noneself.laminates= []self.cos      = Noneself.cos2t    = Noneself.sin      = Noneself.sin2t    = Nonedef calc_SQ(self):'''计算单层的正轴刚度:return: 只返回 S、Q,中间的s11等变量无法访问'''e1 = self.e1e2 = self.e2nu21 = self.nu21nu12 = self.nu12g12 = self.g12s11 = 1 / e1s22 = 1 / e2s66 = 1 / g12s12 = -nu12 / e2s21 = -nu21 / e1s16 = s61 = s26 = s62 = 0qm  = (1 - nu21*nu12)q11 = e1/qmq22 = e2/qmq66 = g12q12 = nu12 * e1/qmq21 = nu21 * e2/qmq16 = q61 = q26 = q62 = 0self.S = np.array([[s11,s12,s16],[s21,s22,s26],[s61,s62,s66]],dtype = float)self.Q = np.array([[q11,q12,q16],[q21,q22,q26],[q61,q62,q66]],dtype = float)# 计算各单层的偏轴刚度theta = self.thetaself.cos   = np.cos( np.deg2rad(   theta ) )self.sin   = np.sin( np.deg2rad(   theta ) )# self.cos2t = np.cos( np.deg2rad( 2*self.theta ) )# self.sin2t = np.sin( np.deg2rad( 2*self.theta ) )cos    = self.cossin    = self.sincos2   = cos**2sin2   = sin**2sincos = sin*cos# cos2t  = self.cos2t# sin2t  = self.sin2t# 应力转换矩阵,用于将偏轴应力转换至正轴应力self.T_stress = np.array([[   cos2,  sin2,  2*sincos],[   sin2,  cos2, -2*sincos],[-sincos,sincos, cos2-sin2]],dtype=float)# 应变转换矩阵,用于将偏轴应变转换至正轴应变self.T_strain = np.array([[     cos2,    sin2,    sincos],[     sin2,    cos2,   -sincos],[-2*sincos,2*sincos, cos2-sin2]],dtype=float)# 计算偏轴刚度矩阵self.Q_offaxis = np.dot(np.dot(lg.inv(self.T_stress), self.Q), self.T_strain)self.S_offaxis = np.dot(np.dot(lg.inv(self.T_strain), self.S), self.T_stress)# 铺层等效的工程弹性常数self.lamina_Ex  = 1/self.S_offaxis[0,0]self.lamina_Ey  = 1/self.S_offaxis[1,1]self.lamina_Gxy = 1/self.S_offaxis[2,2]self.lamina_nuxy= -self.lamina_Ex*self.S_offaxis[0,1]def Get_lamina_prop(plyid):lamina_prop = Lamina()#铺层属性lamina_prop.matid = ply_properties['材料索引值'][plyid]lamina_prop.t     = ply_properties['厚度'][plyid]lamina_prop.theta = ply_properties['铺层角'][plyid]# 铺层的材料属性lamina_prop.e1   = mat_properties['E1'][lamina_prop.matid]lamina_prop.e2   = mat_properties['E2'][lamina_prop.matid]lamina_prop.nu21 = mat_properties['nu21'][lamina_prop.matid]lamina_prop.g12  = mat_properties['G12'][lamina_prop.matid]lamina_prop.nu12 = lamina_prop.nu21/lamina_prop.e1*lamina_prop.e2lamina_prop.calc_SQ()return lamina_prop


层合板ABD刚度矩阵计算


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018-12-28
# @Author  : Allen Penimport numpy as np
import numpy.linalg as lg
import matplotlib.pyplot as plt
from CLPTC.calculator.lamina import Get_lamina_prop #从
from CLPTC.calculator.input_file_reader import total_ply_num,z_coord_dict,z_total,load_info,ply_properties,mat_propertiesclass Laminate():"""equiv_e1         equivalent laminate modulus in 1 directionequiv_e2         equivalent laminate modulus in 2 directionequiv_g12        equivalent laminate shear modulus in 12 directionequiv_nu21       equivalent laminate Poisson ratio in 21 directionequiv_nu12       equivalent laminate Poisson ratio in 12 directionplyid      id of the composite laminaplies      list of pliesplyts      ply thicknesses for this laminatet          total thickness of the laminateA          面内刚度系数矩阵B          耦合刚度系数矩阵D          弯曲刚度系数矩阵ABD        ABD刚度矩阵用于计算柔度矩阵的中间变量A_temp   = A^-1B_temp   = -A^-1*BH_temp   = B*A^-1D_temp   = -B*A^-1*B+DA_inverted          面内柔度系数矩阵B_inverted          耦合柔度系数矩阵H_inverted          一般情况下 H_inverted = B_invertedD_inverted          弯曲柔度系数矩阵ABHD_inverted      ABD柔度矩阵epsilon_0 板中面应变K       板中面翘曲率"""def __init__(self):self.plyid= Noneself.plies= Noneself.plyts= Noneself.t    = Noneself.equiv_e1   = Noneself.equiv_e2   = Noneself.equiv_g12  = Noneself.equiv_nu21 = Noneself.equiv_nu12 = Noneself.A = Noneself.B = Noneself.D = Noneself.ABD = Noneself.A_temp = Noneself.B_temp = Noneself.H_temp = Noneself.D_temp = Noneself.A_inverted = Noneself.B_inverted = Noneself.H_inverted = Noneself.D_inverted = Noneself.ABHD_inverted = Noneself.epsilon_K_offaxis = Noneself.epsilon_offaxis_0 = None #板中面应变self.K = None    #板中面翘曲率self.load_info = None #用于在最大强度比小于1的情况下更新载荷self.N_M = None #层合板当前能承受的载荷self.count = 0 #用于层合板失效层数的统计_ = self.init_build() #在类实例化时,将ABD 刚度阵、柔度阵,以及层的应变计算出来# 设置np数组输出的精度,注意,数组依然按float64储存np.set_printoptions(formatter={'float': '{: 10.3f}'.format})def calc_ABD(self):"""用于计算A,B,D刚度矩阵,以及A',B',D'柔度矩阵ref. 沈观林.《复合材料力学》:return:ABD             A,B,D刚度矩阵ABHD_inverted   A',B',D'柔度矩阵"""self.A = np.zeros([3,3], dtype=float)self.B = np.zeros([3,3], dtype=float)self.D = np.zeros([3,3], dtype=float)self.ply_prop ={}for plyid in range(1,total_ply_num + 1):ply = Get_lamina_prop(plyid)#将计算后的偏轴刚度、应变转换矩阵储存起来self.ply_prop['Q_'+str(plyid)] = ply.Qself.ply_prop['T_strain_' +str(plyid)] = ply.T_strainself.ply_prop['T_stress_'+str(plyid)] = ply.T_stresszk = z_coord_dict['z' + str(plyid)]zk_1 = z_coord_dict['z' + str(plyid-1)]for i in range(3):for j in range(3):self.A[i][j] +=     ply.Q_offaxis[i][j]*(zk    - zk_1  )self.B[i][j] +=1/2.*ply.Q_offaxis[i][j]*(zk**2 - zk_1**2)self.D[i][j] +=1/3.*ply.Q_offaxis[i][j]*(zk**3 - zk_1**3)part1 = np.concatenate([self.A, self.B], axis=1)part2 = np.concatenate([self.B, self.D], axis=1)self.ABD = np.concatenate([part1, part2], axis=0)def calc_ABHD_inverted(self):# 计算ABD'柔度矩阵self.ABHD_inverted = lg.inv(self.ABD)def calc_equivalent_modulus(self):"""用于计算层合板等效的工程弹性常数:return:equiv_e1     等效E1equiv_e2     等效E2equiv_nu21   等效nu21equiv_nu12   等效nu12equiv_g12    等效G12"""AI = lg.inv(self.ABD)a11, a12, a22, a33 = AI[0,0], AI[0,1], AI[1,1], AI[2,2]self.equiv_e1    = 1./(z_total*a11)self.equiv_e2    = 1./(z_total*a22)self.equiv_nu21  = - a12 / a11self.equiv_nu12  = - a12 / a22self.equiv_g12   = 1./(z_total*a33)


层合板强度预测

待更新。

最后的最后


欢迎大家点赞、评论及转载,转载请注明出处!


如果觉得我帮助到了你:
  为我打call,不如为我打款!

在这里插入图片描述


http://chatgpt.dhexx.cn/article/YUWBBU4h.shtml

相关文章

基于Hypermesh、Nastran、Abaqus、LS_Dyna和Femfat的电池包仿真分析

基于Hypermesh、Nastran、Abaqus、LS_Dyna和Femfat的电池包仿真分析 动力电池作为新能源车动力系统的重要组成部分,电池包作为电池的支撑载体,起到保护电池组正常工作的作用,其结构安全性不容忽视。 本套课程采用Hypermesh、Optistruct、Nastran、Abaqus、LS_Dyna和Femfat软件对…

连续体结构拓扑优化方法介绍

连续体结构拓扑优化方法介绍 材料的有效利用一直是人类追求的目标,也是许多研究领域不变的话题,并伴随着结构优化理论和方法的产生而发展。早期结构优化主要是针对尺寸的优化问题,设计域形状是固定的。后来随着结构优化问题的提出&#xff0…

HyperWorks2021软件安装教程

下载软件 https://www.xsoftnet.com/share/a0004MWyQAg9r.html产品介绍: HyperWorks一款功能强大的开放式架构仿真软件。拥有先进的技术以及高性能、高效和创新的产品,为用户提供了设计、仿真和制造等服务。支持电磁分析设计、材料建模制造、多物理场分…

基于ABAQUS和Optistruct汽车结构惯性释放分析详解

导读:惯性释放是允许对完全无约束的结构进行静力分析。通常我们做线性静力分析需要保证结构没有刚**移,否则求解器没有办法计算。但是很多分析,例如飞机在飞行时,轮船在航行(物体整体具有加速度)时&#xf…

那些干到40岁的程序员都去哪儿了?

最近和不少30多岁的程序员朋友们聊天,发现大家普遍非常焦虑。 原因主要有几点,一是担心未来能不能继续保持现有收入,害怕40岁之后薪资会不会下降,甚至失业。二是大家普遍有房贷或者车贷,这本身也是一种精神压力。三是…

编程15年40岁程序员的我终于在压力下被迫转行了

本人今年40岁多了,中山大学计算机小硕,已经从事it工作15年多,最后一次工作是2017年,创业,互联网教育方向,2020年失败关闭公司。 创业失败后,在家沉淀了几个月,然后决定再次找工作。…

走出焦虑!40岁大龄码农该何去何从?

这篇文章,给大家聊聊 Java 工程师的职业发展规划的一些思考,同时也给不少 20 多岁、30 多岁,但是对自己的职业未来很迷茫的同学一些建议。 笔者希望通过此文,帮大家梳理一下程序员的职业发展方向,让大家知道自己从 20 …

大龄程序猿的新出路:改行学中医!40岁程序员,重新高考学中医,如今混得还不错!...

大龄程序员的出路在哪里?送快递,送外卖,跑滴滴? 一位网友给出了一条新出路:改行学中医。 他说,一个40岁的程序员重新参加高考,学中医,如今已经学成归来,混得还不错。 程序…

50岁还在写代码,大龄前端程序员到底有多吃香

大家好呀!我是小千学姐 程序员圈流传着这样一个段子:35岁之后,干前端去送外卖;搞后端去开滴滴;运维就去买保险…… 招人不要35岁的,裁人清理35岁的,不知道什么时候开始,35岁成了职…

35岁后程序员该何去何从?

程序员过了35岁是一个很沉重的话题。一般来讲国内程序员的寿命也就20出头到35岁之间。超过了35岁的程序员,如果继续从事开发工作,在国内相对大多数程序员基本都很可能面临淘汰、裁员等一系列不利于个人的局面。 首先照成这种现状的原因主要有如下几点&am…

一名 40 岁“老”程序员对职业生涯的思考

我是一名程序员,几个月前刚过完四十岁生日。某个星期六的早晨,我参加了一个 React Native 技术交流会,演讲者正在竭力说服我们为什么它会成为移动开发领域真正的下一个大事件。但对我来说,它有点像十五年前的 jsp ,将所…

聊聊大龄程序员的一条出路

IBM有个传奇故事,说一个人毕业时被迫进入了一个偏冷的部门:大机部门。 大机即IBM的大型机(mainframe),特点是性能超强,稳定性巨高(7个9),价格吓人,软件硬件自…

21年的程序员们,超过四十岁的都去干什么了,能干到四十吗?

前言 现在IT行业在中国很热门,以其自由高薪吸引了很多年轻人,但是我们知道整天坐着不动对着电脑编程,时间长了身体或多或少都会有些小毛病,那么这个行业到底是个年轻饭呢还是可以长久发展的? 一千个人就有一千个哈姆雷…

大龄程序员该何去何从,35岁后的路在何方

提到程序员,大家的第一反应可能都是高薪水、福利好,但是作为程序员,他们同样有自己的焦虑,都说程序员是吃青春饭的,在企业里你很少会看到35以上的程序员,难道35真的是程序员的一道魔咒吗? 35岁…

程序员35岁之后有什么出路?

时代财经采访了多位年龄超过35岁的程序员。其中,多人对时代财经表示,这份工作的bug在于,公司内部某个岗位所用的技术是不变的,但整个行业在飞速前进,新人永远被需要,老人却一不小心就会被落下。 当工作瓶颈…

大龄程序员的一些出路

出路一:成为终身程序员 有一位程序员,1952出生。12岁就在编程界崭露头角、13岁造出自动打字机、16岁开发出PDP—8汇编器。他是设计模式和敏捷开发先驱、敏捷联盟首任主席、C Report前主编、Object Mentor公司的总裁。 他写过一系列可以称为经典的书籍。 …

50岁的程序员该何去何从

十年前,我在CSDN写过一篇文章:40岁以后的程序员还能做什么? ,现在十年过去了,重温这篇文章,忽然萌生写篇十年后的反思给60岁的自己缅怀。 程序员的生涯一直被若有似无地关心着,类似「中国大龄程序员是否就…

40岁还在做程序员是好还是坏?

【CSDN 编者按】大龄程序员的危与机! 原文链接:https://medium.com/codex/the-good-and-the-bad-of-being-a-programmer-at-40-9a8935769219 未经授权,禁止转载! 作者 | Josef Cruz 译者 | 弯月 出品 | CSDN(ID&…

35岁高龄程序员的 4 条出路,提早布局,避免出局!

目录 一、40岁回首往事:自己竟没有任何核心优势二、公司遇到危机时40岁大龄程序员会怎么样三、适合大龄程序员的几条职业发展路线四、最后的寄语 这篇文章,给大家聊聊Java工程师的职业发展规划的一些思考,同时也给不少20多岁、30多岁&#…

程序员 40 岁之后的出路在哪里?

今天看了一篇文章《面试了一个 46 岁的程序员,思绪万千》,看完也感慨良多。 一个 46 岁的程序员,不得不写代码养家糊口,在技术和语言能力上与他的年龄完全不符。 最后面试没有通过。 笔者一再强调,面试没有通过&#x…