For a large deformation solution, I am trying to transform the COORD field output from a global to user defined dynamic cylindrical coordinate system using Abaqus Python. Angular Transformations within the Results Options help me achieve this cleanly within Abaqus Viewer. However, I need this data for further processing, hence I need an Abaqus Python based method to achieve this. Is there an easy function which I can use?
I explored the getTransformedField(...) method in FieldOutput object. The transformed COORD output doesn't make much sense to me, neither does it match with the nodal COORD values displayed in the Viewer after angular transformation. Here is the script which I wrote:
rootAssy = odb.rootAssembly
instance1 = odb.rootAssembly.instances['PART-1-1']
step = odb.steps['Interference']
lastFrame = step.frames[-1]
nset = instance1.nodeSets['CS_INNER_S']
CSYSnode1 = instance1.nodeSets['NSET_A'].nodes[-1]
CSYSnode2 = instance1.nodeSets['NSET_B'].nodes[-1]
CSYSnode3 = instance1.nodeSets['NSET_C'].nodes[-1]
cylCSYS = rootAssy.DatumCsysByThreeCircNodes(name='cylCSYS',
coordSysType=CYLINDRICAL,
node1Arc=CSYSnode1,
node2Arc=CSYSnode2,
node3Arc=CSYSnode3)
disp = lastFrame.fieldOutputs['U']
COORD_fieldOutput = lastFrame.fieldOutputs['COORD']
transformedCOORD = COORD_fieldOutput.getTransformedField(datumCsys=cylCSYS,
deformationField=disp)
transformedCOORD_nset = transformedCOORD.getSubset(region=nset,
position=NODAL)
transformedScalarCOORD1 = transformedCOORD_nset.getScalarField(componentLabel='COOR1').values[0]
transformedScalarCOORD2 = transformedCOORD_nset.getScalarField(componentLabel='COOR2').values[0]
transformedScalarCOORD3 = transformedCOORD_nset.getScalarField(componentLabel='COOR3').values[0]
print('Node: ', transformedScalarCOORD1.nodeLabel)
print('COOR1: ',transformedCOORD_nset.values[0].data[0], ', COOR2: ',transformedCOORD_nset.values[0].data[1], ', COOR3: ',transformedCOORD_nset.values[0].data[2])
Thanks!
