0

I'm a beginner in Python and I'm working with the Ansys Customization Tool (ACT) to add my own extension. Is there a direct way to fill a file with every node's coordinates after deformation? hopefully in 3 lines or columns: x , y , z So far I only found the GetNodeValue object but it only gives me the displacement and I need the deformed coordinates for the entire model. My first idea was to add the displacements to the initial coordinates but I didn't manage to do it.

Many thanks for your help

Lara

1 Answers1

0

APDL Snippet

Add an APDL Snippet in the solution part of the tree:

/prep7
UPGEOM,1,1,1,file,rst ! adds the displacements to the nodal coordinates.
cdwrite,geom,nodesAndelements,geom ! Writes node and element data to nodesAndelement.geom

I'm not sure if you can work with the output format from cdwrite, but this is the quickest solution i can think of. If you want to automate you have to insert the command snippet via

solution = ExtAPI.DataModel.Project.Model.Analyses[0].Solution    
fullPath = "path//to//snippet"

snippet = solution.AddCommandSnippet()
snippet.ImportTextFile(fullPath)

ACT

If you want to stay in ACT it could be done like this:

global nodeResults
import units

analysis = ExtAPI.DataModel.Project.Model.Analyses[0]
mesh = analysis.MeshData
# Get nodes 
allNodes = mesh.Nodes
# get the result data
reader = analysis.GetResultsData()
# get the deformation result
myDeformation = reader.GetResult("U")
nodeResultsTemp = []
result_unit = myDeformation.GetComponentInfo("X").Unit
for node in allNodes:
    # get node deformation and convert values in meter
    deformationNode1 = myDeformation.GetNodeValues(node.Id)
    deformationNode1[0] = units.ConvertUnit(deformationNode1[0],result_unit,"m","Length")
    deformationNode1[1] = units.ConvertUnit(deformationNode1[1],result_unit,"m","Length")
    deformationNode1[2] = units.ConvertUnit(deformationNode1[2],result_unit,"m","Length")
    # add node coordinates (in meter) to the displacement
    mesh_unit = mesh.Unit
    node1 = mesh.NodeById(node.Id)
    node1CoorX = units.ConvertUnit(node1.X,mesh_unit,"m","Length")   
    node1CoorY = units.ConvertUnit(node1.Y,mesh_unit,"m","Length")   
    node1CoorZ = units.ConvertUnit(node1.Z,mesh_unit,"m","Length")     
    deformationNode1[0] = deformationNode1[0]+node1CoorX
    deformationNode1[1] = deformationNode1[1]+node1CoorY
    deformationNode1[2] = deformationNode1[2]+node1CoorZ
    
    nodeResultsTemp.append([node1.X,node1.Y,node1.Z,deformationNode1[0],deformationNode1[1],deformationNode1[2]])
nodeResults = nodeResultsTemp
meshWorker
  • 183
  • 2
  • 13
  • Thank you so much! I had tried to work with an apdl snippet but the txt file created changes location for each design point of my DoE. But it seems like the second option is working perfectly, thanks again! – Lara Deliège May 26 '21 at 09:12