ABAQUS中为粘弹性边界提取控制面积/提取节点反力/批量施加不同大小节点集中力

        提取控制面积和提取反力其实是一回事,控制面积就是单位压强下的反力,我在CSDN上找到了两个大佬的源码并将其组合了一下,自己做了点合并的工作。

        批量施加集中力参考:利用python对abaqus模型批量加载集中力载荷_abaqus集中力怎么加载_整天不学习的博客-CSDN博客        批量提取的网页我忘记了(可能来自某乎文章),如果有大佬看到侵权烦请提醒我。

        这方面文献很多,但是大部分课题组发表的文章中都不会包含子程序的源码,这能理解但是对于我个人而言就还是需要再去学习这部分知识。简单来说就是走了很多别人已经走过的老路。我觉得大可不必,所以我将自己总结出来的源码放在下面希望可以帮到同做地下结构抗震数值模拟的各位。

        下面是我合并后的源码(部分变量与注释未修改,有python基础的可以自行修改以便于提取不同数据):

from odbAccess import openOdb
from textRepr import *
from abaqus import*
from abaqusConstants import*
from caeModules import *
import csv
import regionToolset
#=====================================提取X向RF1=================================================
# 获取odb对象
my_odb = openOdb(r"C:\temp\Job-1.odb") #改为你自己ODB文件所在地址 
# 获取指定分析步
step = my_odb.steps['Step-1'] #改为你所要提取分析步
# 选取最后一帧
frame = step.frames[-1] #改为你所要提取的帧
# 获取全局反力场变量
dis_field = frame.fieldOutputs['RF'] #改为你所想要提取的变量

# *****************************************************
# 获取局部场变量
# 在前处理时已经定义好的节点集合名称为'SET-X/SET-Y'
# 将已经定义好的集合在odb模块中找到,并赋予给变量NodeSet
NodeSetX = my_odb.rootAssembly.nodeSets['SET-X'] #改为你自己的部件及先前对应的集合
# 在前述全局位移场变量的基础上提取局部位移场
local_dis_values = dis_field.getSubset(region=NodeSetX)
# *****************************************************

# 创建新的csv文件用于保存所需数据
# 遍历指定集合内各节点信息并格式化输出
with open('dataX.csv','w') as f:  # 不指定决定路径则在工作路径生成
	f.write("NodeLabel, NodeRF\n")
	for node_value in local_dis_values.values:
		txt_line = "{}, {}\n".format(node_value.nodeLabel, node_value.data[0])#在ABAQUS开发中0代表X方向,1代表Y方向,2代表Z方向
		f.write(txt_line)
# 关闭ODB,释放资源
#=====================================提取Y向RF2=================================================
NodeSetY = my_odb.rootAssembly.nodeSets['SET-Y'] #改为你自己的部件及先前对应的集合
# 在前述全局反力场变量的基础上提取局部反力场
local_dis_values = dis_field.getSubset(region=NodeSetY)
# *****************************************************

# 创建新的csv文件用于保存所需数据
# 编历指定集合内各节点信息并格式化输出
with open('dataY.csv','w') as f:  #在ABAQUS工作路径生成
	f.write("NodeLabel, NodeRF\n")
	for node_value in local_dis_values.values:
		txt_line = "{}, {}\n".format(node_value.nodeLabel, node_value.data[1])
		f.write(txt_line)
# 关闭ODB,释放资源

#====================================修改文件格式===============================================
#==============修改X向文件===============
# 打开原始CSV文件
input_file = r'C:\temp\dataX.csv'#目录为abaqus工作目录

# 读取原始数据
rows = []
with open(input_file, 'r') as file:
    reader = csv.reader(file)
    rows = list(reader)

# 在每一行的末尾添加0
for row in rows:
    value = row[1]
    if value.startswith('-'):
        row[1] = value[1:]  # 移除负号
    else:
        row[1] = '-' + value  # 添加负号
    row.append('0')
    row.append('0')

# 写入更新后的数据到原始CSV文件
with open(input_file, 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(rows)

#==============修改Y向文件===============
# 打开原始CSV文件
input_file = r'C:\temp\dataY.csv'

# 读取原始数据
rows = []
with open(input_file, 'r') as file:
    reader = csv.reader(file)
    rows = list(reader)

# 在每一行的末尾添加0
for row in rows:
    value = row[1]
    if value.startswith('-'):
        row[1] = value[1:]  # 移除负号
    else:
        row[1] = '-' + value  # 添加负号
    row.append('0')
    row.append('0')

# 写入更新后的数据到原始CSV文件
with open(input_file, 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(rows)

#=================================施加X向RF=====================================================
#执行此步骤之前需要将csv中力添加负号
 
filename = 'dataX.csv'  # csv文件名
model = 'Model-1'  # 模型名称
stepp = 'Step-1'  # 分析步名称
instance = 'Part-1-1'  # 部件名称
 
nodes = []
force_x, force_y, force_z = [], [], []
 
# 读取csv
with open(filename) as f:
	reader = csv.reader(f)
	rows = next(reader)
	for row in reader:
		nodes.append(int(row[0]))
		force_x.append(float(row[1]))
		force_y.append(float(row[2]))
		force_z.append(float(row[3]))
 
a = mdb.models[model].rootAssembly
n1 = a.instances[instance].nodes  # 模型中的所有节点
 
# 创建节点力
for i in range(len(nodes)):
	node1 = n1.getFromLabel(nodes[i])  # 根据节点号获取节点对象
	n = n1.index(node1)  # 节点索引
	nodes1 = n1[n:n+1]  # 节点序列
	region = regionToolset.Region(nodes=nodes1)
	load = 'load_on_node_' + str(nodes[i])  # 节点力命名
	mdb.models[model].ConcentratedForce(name=load, 
	    createStepName=stepp, region=region, 
	    cf1=force_x[i], cf2=force_y[i], cf3=force_z[i], 
	    distributionType=UNIFORM, field='', localCsys=None)
	
#==================================施加y向RF=========================================================
#同样去提取的Y向文件中添加负号
filename = 'data.csv'  # csv文件名
model = 'Model-1'  # 模型名称
stepp = 'Step-1'  # 分析步名称
instance = 'Part-1-1'  # 部件名称
 
nodes = []
force_x, force_y, force_z = [], [], []
 
# 读取csv
with open(filename) as f:
	reader = csv.reader(f)
	rows = next(reader)
	for row in reader:
		nodes.append(int(row[0]))
		force_x.append(float(row[1]))
		force_y.append(float(row[2]))
		force_z.append(float(row[3]))
 
a = mdb.models[model].rootAssembly
n1 = a.instances[instance].nodes  # 模型中的所有节点
 
# 创建节点力
for i in range(len(nodes)):
	node1 = n1.getFromLabel(nodes[i])  # 根据节点号获取节点对象
	n = n1.index(node1)  # 节点索引
	nodes1 = n1[n:n+1]  # 节点序列
	region = regionToolset.Region(nodes=nodes1)
	load = 'load_on_node_' + str(nodes[i])  # 节点力命名
	mdb.models[model].ConcentratedForce(name=load, 
	    createStepName=stepp, region=region, 
	    cf1=force_x[i], cf2=force_y[i], cf3=force_z[i], 
	    distributionType=UNIFORM, field='', localCsys=None)

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 对于使用Abaqus提取节点力合力的方法,可以通过以下步骤来实现: 1. 在Abaqus中打开相应的模型文件,并选择需要进行力合力提取节点。 2. 点击"Results"选项卡,在下拉菜单中选择"Field Output"。 3. 在出现的"Field Output"对话框中,选择"Output Type"为"Force",并确保选择了正确的输出坐标系。 4. 在"Field Output Variable"区域中,可以选择提取的力的类型。例如,选择"RF"来提取节点上的反向力,选择"SF"来提取节点上的剪切力等。 5. 确认设置无误后,点击"OK"按钮,Abaqus会自动计算并输出所选节点的力合力信息。 6. 查看输出结果时,可以通过在Abaqus中选择"Results"选项卡下的"XY Data"进行可视化展示,也可以将结果以数据文件的形式保存下来进行后续分析和处理。 需要注意的是,以上步骤仅适用于已经完成了力学分析并生成了相应的结果文件的情况。另外,在进行力合力提取之前,建议在分析模型中定义并分配了节点上所需要提取的加载情况,以确保得到准确的结果。 综上所述,使用Abaqus提取节点力合力可以通过选择合适的输出选项和参数来实现,以得到所需的结果。希望以上内容对您有所帮助。 ### 回答2: 要提取节点力合力,可以按照以下步骤操作: 1. 打开Abaqus软件,进入建模环境。 2. 导入已有的模型文件或创建新的模型。确保模型中已经定义了节点和加载。 3. 在Abaqus中选择工具栏上的“节点力合力提取器”选项。 4. 在弹出的对话框中,选择需要提取力合力的节点。可以使用鼠标点击选择单个节点,或者选择多个节点。 5. 选择提取的力类型。可以选择节点上的内部力、接触力、体力、面力或者边界条件等。根据具体需要选择相应类型的力。 6. 指定输出结果文件的名称和位置。可以选择将力合力输出到一个文本文件中,方便后续处理和分析。 7. 点击“确定”按钮开始进行提取。 完成以上操作后,Abaqus软件会根据所选节点和力类型,在指定位置生成力合力结果文件。该文件中包含了每个节点的合力大小和方向信息。可以使用文本编辑软件或其他分析工具打开该文件,进行相应的力合力分析和后续处理。 总结起来,提取节点力合力是通过Abaqus提供的节点力合力提取器功能实现的。这个功能可以帮助工程师快速获取节点上的力大小和方向信息,方便后续分析和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不自律的狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值