ABAQUS&PYTHON-后处理中生成PATH的代码

特此记录abaqus下单个Part的路径(Path)生成代码,本脚本用于读取abaqus的inp建模文件,对网格节点进行循环,找到对应的节点坐标并判断该节点是否在欲提取数据所在轴线上。文章ABAQUAS中快速创建Path并输出相应计算数据对Path文本的格式进行了记录,本文记录通过读取inp文件来创建Path文件。同时文章ABAQUAS之可视化:python读取inp文件快速创建Path路径中的代码仅针对建模中存在多个instance有效(以上文章标题存在笔误,ABAQUAS写错,应该为ABAQUS)。本文记录只有一个Part模型的inp文本读取方式。

图片

通过定义axis_func来定义输出的轴线

代码如下:

import re
filename = "F:\abaquas_workingdir\Job-1-cccccld20.inp"

def axis_func(x,y):
    ### 定义轴线函数 判断输入的x,y是否在轴线上
    if y == 0.5 and x>0:
        return True
    return False

instance_reg = "name=(.*?),"
fr = open(filename,'r')
added_x = []
added_index = []
g_is_start = False #用来判断是否在实例信息部分
g_is_nd = False #用来判断是否在节点信息部分
g_is_write_one_time = False
lines = fr.readlines()
fr.close()
fr2 = open("part_info.txt","w")
fr3 = open("path_circlem0.txt","w")
for i,line in enumerate(lines):
    line = line.strip()
    if "*Part" in line:
        g_is_start = True
        # import pdb;pdb.set_trace()
        datas = line.split("=")
        insname = datas[1]
        g_is_write_one_time = False
        fr2.write(insname+"n")
    if g_is_start:
        if "*Node" in line:
            g_is_nd = True
        if "*Element" in  line:
            g_is_nd = False
            g_is_start = False
    if g_is_nd:              #如果是在节点信息行中
        if not line.startswith("*"):
            data = [d for d in line.split(",")]
            try:
                index , x, y = int(data[0]),float(data[1]),float(data[2])
            except:
                import pdb;pdb.set_trace()
            fr2.write(str(data)+"n")
            if axis_func(x,y):
                if not x in added_x: ##这里以x坐标来进行判断是否输入重叠的节点信息 并在最后进行排序
                    added_x.append(x)
                    added_index.append(index)
                    fr3.write('"{}-1",{}n'.format(insname.upper(),index)) #实例的名称要转换为大写
fr2.close()
fr3.close()
### 根据节点坐标进行排序
sorted_id = sorted(range(len(added_x)) , key=lambda k:added_x[k] ,reverse=False  )
print(sorted_id)
sorted_index = [added_index[d] for d in sorted_id ]
fr = open("path_sorted.txt","w") ## 生成path信息
for ind in sorted_index:
    fr.write('"{}-1",{}n'.format(insname.upper(),ind))
fr.close()

2021-10-01 17:29

阅读原文

简介:开源CAE技术爱好者,编程爱好者,计算力学,欢迎志同道合的朋友一起交流。欢迎关注微信公众号:挨踢的土木佬
(0)
打赏 喜欢就点个赞支持下吧 喜欢就点个赞支持下吧

声明:本文来自“挨踢的土木佬”,分享链接:https://www.zyxiao.com/p/302394    侵权投诉

网站客服
网站客服
内容投稿 侵权处理
分享本页
返回顶部