将新的张量数据保存到新字段输出的集成点

时间:2019-03-30 15:58:49

标签: python abaqus

我想旋转许多场输出(模态分析框架)的应力张量,添加它们并使用新张量进行一些计算,并将所有内容保存在新的fieloutput中。

为此,我对模态分析中每个帧的场输出应力张量的每个条目进行了处理,将其保存在新矩阵(numpy)中,并将该矩阵与旋转矩阵相乘并求和每个帧中所有应力张量的总和。现在我想保存这些新的张量,以便可以在新框架中通过abaqus可视化新数据。

我找不到有关如何分配/声明各个积分点和元素标签的张量数据以将它们添加到新的字段输出中的任何信息。 我可以对标量字段执行此操作,但不能对张量数据执行此操作。

计算效果很好。

赋予每种模态分析模式的应力张量不同的权重,并将其保存为矩阵列表

Spannungstensor={}length=len(odb.rootAssembly.instances['BALKEN-1'].elements)
    for l in range(len(odb.steps['Modalanalyse'].frames)):
    Spannungstensor[l]={}

    for element in odb.rootAssembly.instances['BALKEN-1'].elements:    
        if element.label in Randelemente:    
            k=0       
            stressfield=odb.steps['Modalanalyse'].frames[l].fieldOutputs['S']
            field=stressfield.getSubset(region=element, position= INTEGRATION_POINT,
                                   elementType='C3D8')
            fieldvalues=field.values            
            for v in fieldvalues:
                o=element.label
                Spannungstensor[l][o]={}
                j=0        
                for integrationPoint in fieldvalues:           
                    j=j+1
                    Spannungstensor[l][o][j]=np.array(((0,0,0),(0,0,0),(0,0,0)))
                    k=-1             
                    for component in v.data:
                        k=k+1
                        if k<3:
                            Spannungstensor[l][o][j][k][k]=component *Wichtungen[l]
                        if k==3:
                            Spannungstensor[l][o][j][0][1]=component *Wichtungen[l]
                            Spannungstensor[l][o][j][1][0]=component *Wichtungen[l]
                        if k==4:
                            Spannungstensor[l][o][j][0][2]=component *Wichtungen[l]
                            Spannungstensor[l][o][j][2][0]=component *Wichtungen[l]
                        if k==5:
                            Spannungstensor[l][o][j][1][2]=component *Wichtungen[l]
                            Spannungstensor[l][o][j][2][1]=component *Wichtungen[l]

添加应力张量并旋转最终应力张量

phi=np.pi/4
teta=0
#-Drehmatrix 
Q=np.array(((np.cos(teta),np.sin(teta),0),
            (-np.sin(teta)*np.cos(phi),np.cos(teta)*np.cos(phi),np.sin(phi)),
             (np.sin(teta)*np.sin(phi),-np.cos(teta)*np.sin(phi),np.cos(phi))))    
#-Drehmatrix transponiert                        
Qt=np.transpose(Q)                            

Spannungstensor_neu={} 
for element in Spannungstensor[1]:
    Spannungstensor_neu[element]={}
    for integrationpoint in Spannungstensor[1][element]:
        Spannungstensor_neu[element][integrationpoint]=np.array(((0,0,0),(0,0,0),(0,0,0)))
        S=np.array(((0,0,0),(0,0,0),(0,0,0)))
        for mode in range(len(odb.steps['Modalanalyse'].frames)):
                        S=S+Spannungstensor[mode][element][integrationpoint]
        Spannungstensor_neu[element][integrationpoint]=Q*S*Qt

Spannungstensor_neu是一个列表,其第一个索引引用元素,第二个索引引用元素的积分点,第三个索引引用应力张量(矩阵)的行,第四个索引引用应力的张量。应力张量(矩阵)。

使用field.addData方法需要如何存储数据?

field.addData(位置= ...,实例= ...,标签= ...,数据= ...) 我将受人尊敬的标签列为清单。

感谢您的任何帮助!

0 个答案:

没有答案