coordinatesnodesironpythonmeshansys

Ironpython script in Ansys Customization tool


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


Solution

  • 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