文章目录
- 0、 背景描述
- 1、ABAQUS的后处理
- 2、数据处理
- 3、反思
0、 背景描述
ABAQUS计算塔架频率,但是对于涡激振动的计算,不仅仅需要频率,还需要振型。因此,需要把ABAQUS中的结果提取出来,整理出振型数据。
1、ABAQUS的后处理
因为对ABAQUS中ODB不太熟悉,我需要先做一个测试。把每一个塔筒节中的位移全部取出来,然后逐个求取平均值,再以平均值作为塔筒节段的位移代表值。
下面是从ODB中提取每个part的位移数据的Python代码:
odb = session.openOdb('job-freq-solve.odb')
fop = odb.steps['Solve_freq_with_prestress'].frames[2].fieldOutputs
assembly=odb.rootAssembly
for part_name in assembly.instances.keys()[1:]: # 先遍历获取装配体中所有part的名称
disp = list()
region_name = assembly.instances[part_name]
for value in fop["U"].getSubset(region=region_name).values: # 按照名称获取每个part,并逐个获取其节点
disp.append(value.data) # 保存节点坐标
np.savetxt(part_name+"-disp_data.txt", disp)
对于上面的结果,有一点值得注意的是:ABAQUS中FieldOutput object
存在多个getSubset()
方法版本,这个方法有多种用法,比较常用的有:
为region参数传人OdbSet对象;为region参数传人OdbMeshNode对象或者OdbMeshElement 对象;为region参数传人OdbInstance对象;为Elementype参数传入字符串对象;为location 参数传人FieldLocation 对象
2、数据处理
将得到的数据分别放入excel中进行处理(手动处理有点繁琐,但是因为要验证方法的有效性,麻烦就麻烦点,反正也就做这一次)。
下图中,从左往右第一列是上面从ODB中提取的每个part的所有节点位移的平均值(已经做归一化处理),第二列是根据EuroCode1991-1-1-4附录F的公式得到的归一化振型,第三列是高度。
将上图中的数据绘制成图象,如下图所示。可以发现,对于一阶频率而言,采用part位移平均值作为振型数据的计算基础是合理的。所以这个思路是可以搞定更高阶数据的。
3、反思
俗话说得好,纸上得来终觉浅,绝知此事要躬行!以前也知道一阶振型关于高度是二次函数,但是对于一阶振型,示意图都是下面这样子的:
今天看到位移数据的时候才发现,其实振型并不想之前想的那样,外形差的还是有点多。