I’m working on a project that involves extracting contact pressure (CPRESS) data from an Abaqus ODB file. Specifically, I want to extract data for a set of nodes defined in a node set called CPRESS1 and save this data to a CSV file. The nodes belong to an assembly, and the extracted data should include the node label, coordinates, and the CPRESS value.
In Abaqus/Explicit, I define the behavior between the surfaces through surface-to-surface cantact(Explicit). For the surfaces of focus, I created a nodeset(enter image description herefig.1) named CPRESS1. In the ODB file, I can see that the CPRESS data has been successfully output(enter image description herefig.2), and the nodeset is correctly displayed(enter image description herefig.3). When I run the code, it successfully identifies each nodes(enter image description herefig.4) in the nodeset but indicates that there is no data available for these nodes.
# -*- coding: utf-8 -*-
import csv
import os
from abaqusConstants import *
from odbAccess import *
# Define the .odb file path
odb_path = r'E:odbpartitionsFinished-07132007-nT10-wT126-base-joint-noshear-fix-iabseFinished-07132008-nT10-wT126-base-joint-noshear-fix-iabse.odb'
# Get the directory of the .odb file
odb_dir = os.path.dirname(odb_path)
# Open the .odb file in read-only mode
odb = openOdb(path=odb_path, readOnly=True)
# Get the node set
node_set_name = 'CPRESS1'
location_cpress1 = odb.rootAssembly.nodeSets[node_set_name]
# Get the last frame from the specified step
lastFrame = odb.steps['Step-pressure'].frames[11]
cpress = lastFrame.fieldOutputs['CPRESS']
cpress1_subset = cpress.getSubset(region=location_cpress1)
# Debug information
print("Total CPRESS values: ", len(cpress1_subset.values))
# Define the CSV file path
csv_path = os.path.join(odb_dir, 'cpress_data.csv')
# Create and open the CSV file for writing
with open(csv_path, mode='w') as file:
writer = csv.writer(file)
# Write the CSV header
writer.writerow(['Node Label', 'X Coordinate', 'Y Coordinate', 'Z Coordinate', 'Contact Pressure'])
# Write each node's contact pressure information
for v in cpress1_subset.values:
node = next((n for n in odb.rootAssembly.nodes if n.label == v.nodeLabel), None)
if node:
writer.writerow([v.nodeLabel, node.coordinates[0], node.coordinates[1], node.coordinates[2], v.data])
else:
print("Node label ", v.nodeLabel, " not found in assembly nodes")
# Close the .odb file
odb.close()
The code above was written with the help of ChatGPT-3.5. As I’m new to Python, there might be some unusual errors in the code. I would appreciate it if you could help me identify the issues in the code. Thank you very much!
toronion5514 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.