首页/文章/ 详情

面向对象有限元编程|整体结构类(下)

7月前浏览5922

结构对象的重要任务是组装结构刚度矩阵和整体节点力向量。而结构刚度矩阵和整体节点力向量又依赖一个重要的参数--结构总自由度或者总自由度(gdof)。

计算结构总自由度时,可以先将约束(边界)排除,这种方法叫先处理法。也可以不排除边界条件计算结构自由度,这种方法叫后处理法。

▲先处理法结构标识,有约束的地方自由度为0


如何计算结构总自由度?

以先处理法为例,在创建节点对象时,定义了成员变量RX和RY,分别表示节点X和Y方向的约束,若有约束则其值为0,若没有约束则其值为1.如图所示 

初始时对结构总自由度变量gdof赋值为0,对所有的节点遍历,若RX或者RY的值为1,则gdof自加1,与此同时将gdof赋值给RX或者RY。若RX或者RY的值为0,则gdof的值不变。如图所示 

#计算gdof
    def getGdof(self):
        gdof = 0
        for i in range( len(self.listNode) ):
            if self.listNode[i].RX == 1:
                gdof = gdof + 1
                self.listNode[i].RX = gdof
            
            if self.listNode[i].RY == 1:
                gdof = gdof + 1
                self.listNode[i].RY = gdof           
        return gdof


如何组装总刚度矩阵?

以下思路同样适用于组装整体节点力向量。定义一个一维数组elToStr,赋值为每个单元的节点自由度编号,这和单元位移向量v=[v1,θ1,v2,θ2]是一一对应的。比如下图中单元1的elToStr=[0,0,0,1],单元2的elToStr=[0,1,0,2],单元3的elToStr=[0,2,0,3],它是由单元向结构转化的枢纽。

gdof=3,则结构刚度矩阵就是3行3列。开始组装结构刚度矩阵时,结构刚度矩阵赋值全为0。单元1只有一个节点自由度θ2没有被约束,单元1的elToStr只有第四个元素不为0,借鉴划行划列思路,将单元刚度矩阵中被约束的部分划掉,通过数组elToStr将余下的元素添加到结构刚度矩阵的对应位置1行1列

此时结构刚度矩阵为

 

单元2有2个节点自由度θ1,θ2没有被约束,按照上述思路 

此时结构刚度矩阵为

 

单元3有2个节点自由度θ1,θ2没有被约束,按照上述思路此时结构刚度矩阵为

 
#elToStr数组
    def elemToStruct(self, i):
        elToStr = [0000]
        elToStr[0] = self.listElement[i].node1.RX
        elToStr[1] = self.listElement[i].node1.RY
        elToStr[2] = self.listElement[i].node2.RX
        elToStr[3] = self.listElement[i].node2.RY
        return elToStr

#组装结构刚度矩阵KK
    def packageStiffnessMatrix(self, elToStr, ek, KK):
        for m in range ( len(elToStr) ):
            for n in range ( len(elToStr) ):
                if (elToStr[m] != 0and (elToStr[n] != 0) :
                    KK[ elToStr[m]-1 ][ elToStr[n]-1 ] = \
                       KK[ elToStr[m]-1 ][ elToStr[n]-1 ] + ek [ m ][ n ] 


一个完整的桁架结构对象类

class FEModel:
    def __init__ (self, listNode, listElement):
        self.listNode = listNode
        self.listElement = listElement
        self.FF = None                 

    def getGdof(self):
        gdof = 0
        for i in range( len(self.listNode) ):
            if self.listNode[i].RX == 1:
                gdof = gdof + 1
                self.listNode[i].RX = gdof
            
            if self.listNode[i].RY == 1:
                gdof = gdof + 1
                self.listNode[i].RY = gdof           
        return gdof
        
#组装节点力向量
    def packageForce(self):
        for i in range( len(self.listNode) ):          
                if self.listNode[i].RX != 0:
                    self.FF[self.listNode[i].RX-1 ] =  self.listNode[i].fx
                if self.listNode[i].RY != 0 : 
                    self.FF[self.listNode[i].RY-1 ] =  self.listNode[i].fy  

    
    def elemToStruct(self, i):
        elToStr = [0000]
        elToStr[0] = self.listElement[i].node1.RX
        elToStr[1] = self.listElement[i].node1.RY
        elToStr[2] = self.listElement[i].node2.RX
        elToStr[3] = self.listElement[i].node2.RY
        return elToStr

    def packageStiffnessMatrix(self, i,elToStr, ek, KK):
        for m in range ( len(elToStr) ):
            for n in range ( len(elToStr) ):
                if (elToStr[m] != 0and (elToStr[n] != 0) :
                    KK[ elToStr[m]-1 ][ elToStr[n]-1 ] = \
                       KK[ elToStr[m]-1 ][ elToStr[n]-1 ] + ek [ m ][ n ] 




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

康定问情

《康定情歌》不光是一首经典的民歌,它的背后是纯粹的爱情,也是川西高原淳朴的民风,如诗如画。多年前第一次听《康定情歌》就被深深的吸引了。从此对康定魂牵梦绕,直到2020,才得以成行。康定城三山环抱,二水夹流,折多河贯穿城中,富有民族风格的各式建筑错落有致地散布于河两岸。悠悠民歌声,翩翩民族舞,使这里极富高原民族风情特色。康定,既是情歌的故乡,又是茶马互市的重镇,锅庄文化的发祥地。雄伟的雪山,晶莹的湖泊,苍翠的森林,碧绿的原野,炽热的温泉……海洋季风顺着南北走向的横断山蜿蜒而至,使这里雨量充沛,云雾常生。冰川与森林共存是康定独特绮丽的景观。▲此时内心就像是一个孩子看到了零食一般兴奋▲路边的花海▲康定的夜景很美▲毕什么鹏,毕什么沟,毕鹏沟▲跑马溜溜的山上,一朵溜溜的云哟,端端溜溜的照在,康定溜溜的城哟康定很美,将来某一天,一定要带着小姐姐重游此地,感受那个爱情故事。但是,小姐姐在哪里呢?来源:数值分析与有限元编程

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