【问题标题】:Extract nodes coordinates according to local Csys_Abaqus Python scripting根据本地 Csys_Abaqus Python 脚本提取节点坐标
【发布时间】:2021-11-03 14:04:55
【问题描述】:

我编写了一个脚本,它将根据本地系统提取节点坐标。因为坐标是根据全局系统默认生成的。

odb = openOdb(path='.....................Job-1.odb')

Setnodes = 'LocalnodesCoord.txt'
NodesFile = open(Setnodes,'w')

nodeset='NODESET-3'
mySet = odb.rootAssembly.instances['PART-1-1'].nodeSets[nodeset]

csys1=odb.rootAssembly.datumCsyses['CSYS-1']


lastFrame = odb.steps['Step-1'].frames[-1] 
coords=lastFrame.fieldOutputs['COORD']


mySetCoord = coords.getSubset(region=mySet)
mySetCoord_local=mySetCoord.getTransformedField(datumCsys=csys1)
mySetCoordLocalValues=mySetCoord_local.values


for var in mySetCoordLocalValues :
    
    NodesFile.write(str(var.nodeLabel) + ',' + str(var.data[0]) + ',' + str(var.data[1]) + ',' + str(var.data[2])+ '\n')
  

NodesFile.close()
odb.close()

我使用了 getTransformedField() 函数。但问题是我得到了错误的坐标

你能帮我解决这个问题吗? 你知道如何确定变换矩阵吗?

【问题讨论】:

  • 您可以只获取相对于全局坐标系的坐标,然后从中减去局部坐标系的中心坐标。例如。如果 (x,y,z) 是 A 点在全局坐标系中的坐标, (x0,y0,z0) 是局部坐标系的中心。则 A 点在局部坐标系中的坐标为 (x1,y1,z1) = ( x-x0, y-y0, z-z0)。
  • Satish Thorat,谢谢您的回复。但是我认为当局部坐标系和全局坐标系之间存在旋转和平移时,我们不能使用这种方法。

标签: python scripting abaqus


【解决方案1】:

来自documentation:

如果系统是基于模型的,您必须提供一个位移场来确定坐标系的瞬时位置和方向

很可能,当您的本地 Csys 与几何体一起移动时,Abaqus 需要额外的信息来计算转换。 因此,请尝试使用deformationField 和rotationField 来补充getTransformedField 方法,如here 所述

编辑

或者,正如@SatishThorat 在他的评论中所建议的那样。不要忘记使用numpy 模块进行向量算术。

【讨论】:

    【解决方案2】:

    @Roman Zhuravlev,非常感谢您的回答。

    仅供参考,我使用了许多分区面,并且为每个面关联了一个固定的局部坐标系(而不是移动的 Csys)。

    我使用三个点定义了本地 Csys:根据全局 Csys 的原点和另外两个点。 所以,我认为这些参数足以计算转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      相关资源
      最近更新 更多