Abaqus基于Python脚本输出装配体单元与节点信息

直播演示代码整理如下:

from abaqus import *
from abaqusConstants import *
from textRepr import *
import odbAccess
import numpy as np
import os
import sys, os.path
work_dir = "C:\\04_zhuangpeiti"
input_odb = os.path.join(work_dir, "Job-1.odb")
myOdb = odbAccess.openOdb(input_odb, readOnly=False)
#print(len(myOdb))
#myFrames = myOdb.steps["Step-1"].frames
#rootAssembly
myrootAssembly = myOdb.rootAssembly
#print(myrootAssembly)
##{' ALL ELEMENTS': 'OdbSet object', 'WarnElemDistorted': 'OdbSet object'}
#######################################################instances#######################################################
#element_data = myrootAssembly.instances.Partinstances.elements
instances_data = myrootAssembly.instances
#instances_data = list(instances_data)
keys_list = list(instances_data.keys())
#获取装配体PART列表;
muliti_part_instances = keys_list[:2]
#print(muliti_part_instances[0])
#######################################################PART#######################################################
#单元节点均在part下边, 循环获取各part里面的单元和节点;
#muliti_part_instance = muliti_part_instances[1]
#PART_data = myrootAssembly.instances[muliti_part_instance]
#定义装配体描述每个part节点数和单元数的列表,最后输出到txt中;
part_label_node_count = []
#定义装配体节点合并列表,用于合并所有part节点列表,并写入txt
data_0_mergeds = []
k = 0
#利用while循环获取装配体中每个part中的节点
while k < len(muliti_part_instances):
	muliti_part_instance = muliti_part_instances[k]
	PART_data = myrootAssembly.instances[muliti_part_instance]
	elements_data = PART_data.elements
	#print("TWOBLOCK:", k, len(elements_data))
	#获取PART-1-1中节点数据,nodes_data为节点对象集合,里面包含节点编号、节点坐标等一系列数据;
	nodes_data = PART_data.nodes
	#print(len(nodes_data))
	part_label_node_count.append((muliti_part_instances[k],"elements_count:", len(elements_data),"nodes_count:", len(nodes_data)))
	#print(nodes_data[0])
	#获取节点坐标
	i = 0
	#定义节点坐标列表;
	node_xyz_coordinates = []
	#定义节点编号列表
	node_labels = []
	while i < len(nodes_data):
		#获取节点坐标
		node_xyz_coordinate = nodes_data[i].coordinates
		#获取节点编号
		node_label = nodes_data[i].label
		#判断如果节点坐标不为空,则将坐标添加到列表node_xyz_coordinates中
		if node_xyz_coordinates is not None:
			node_xyz_coordinates.append(node_xyz_coordinate)
		#类似判断节点label如果不为空则添加到列表node_labels中
		if node_label is not None:
			node_labels.append(node_label)
		i +=1
	## 使用列表推导式将每个元素转换为列表
	node_xyz_coordinates_as_list = [list(node) for node in node_xyz_coordinates]
	#>>>
	#合并节点编号和节点坐标两个列表, node_labels node_xyz_coordinates_as_list ;
	data = list(zip(node_labels, node_xyz_coordinates_as_list))
	#将 data 元组中的每个元素合并为一个长度为4的一维NumPy数组
	#data_0_mergeds = []
	j = 0
	while j < len(data):
		data_0_merged = np.concatenate((np.array([data[j][0]]), data[j][2]))
		data_0_mergeds.append(data_0_merged)
		j +=1
	k +=1
#列表转数组,为了利用 shap 获取列数量;
data_0_mergeds = np.array(data_0_mergeds)
#print(len(data_0_mergeds))
# shape 可获取数组列数;
#第1列(int) 第2列(float) 第3列(float) 第4列(float)
#节点编号 X Y Z
#######################################################输出节点id和坐标#######################################################
np.savetxt(r"C:\\04_zhuangpeiti\\multi_part__nodes_out.txt", data_0_mergeds, fmt=("%d",) + ("%.10f",)*(data_0_mergeds.shape[1]-1))
#data_0_mergeds.shape[1]为列数4, 减去1代表剩下的三列数为浮点;
input_multi_part__nodes_out = os.path.join(work_dir, "multi_part__nodes_out.txt")
# 打开文件
#part_label_node_count = [('TWOBLOCK-1-1', 'elements_count:', 1000, 'nodes_count', 1331), ('TWOBLOCK-2-1', 'elements_count:', 700, 'nodes_count', 968)]
results_formatted = ["%s %s %d %s %d" % result[0:5] for result in part_label_node_count]
#将"TWOBLOCK-1-1 elements_count: 1000 nodes_count: 1331, TWOBLOCK-2-1 elements_count: 700 nodes_count: 968"插入到第一行
with open(input_multi_part__nodes_out, "r+") as f:
    # 读取原文件内容
    content = f.read()
    # 将列表转换成字符串
    my_string = ', '.join(results_formatted)
    # 在文件开头插入新的内容
    f.seek(0, 0)
    f.write(my_string + '\n' + content)
有问题,私信;

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空