1.何谓自由体截面?自由体截取是一种力学分析工具,用于研究结构特定截面(如框架梁或三维连续体构件)所受的力与弯矩状态。在结构力学课程中,通常教授通过平衡方程解析求解自由体截取的方法,针对超静定结构等特殊情形还需结合运动学条件进行补充求解。然而,对于普遍工况而言,采用数值计算方法更具工程适用性。2.如何在Abaqus获取截面力?在Abaqus中,我们可以在ODB内显示自由体截面,包括力。在运行模型之前,我们需要在字段输出变量NFORC。这些是节点的力,将在后处理阶段使用。NFORC变量是由实体单元(例如C3D8,CPS4,CPE4…)所需的,但是,如果我们的模型是由梁单元制成的,则必须要求在场输出中提供可变的SF(截面力和弯曲矩)。3.截面力在后处理的可视化为了在我们的模型中显示自由削减,我们需要像往常一样解决该工作。然后,在可视化模块中,单击视图剪切管理器以选择切割平面,如下图所示。在图像中,我们选择了X平面作为切割平面。然后,要在切口上显示自由力量,必须启用。这样,我们将在模型的切割上看到两个箭头:一个代表力(红色),另一个代表弯矩(蓝色)。显示自由力量和时刻的格式可以在以下方式中自定义:FreeBodyCutManager>Options一些最内置的选项是:显示组件而不是结果。编辑每个组件的颜色。自定义向量标签以更好地可视化。默认情况下,全球坐标系(CSYS-Global)默认情况下,在视图切割中显示的力和力矩的组成部分。但是,如果我们希望这种分解遵循任何其他CSY,则可以创建一个新的CSY,并在以下方式中选择它:FreeBodyCutManager>Options4.如何用脚本获取截面力?实际上,通过Python脚本,我们可以为轴向和剪切力以及弯曲生成自由体力图。从自由削减中提取数据的关键功能是:session.XYDataFromFreeBody以下是示例脚本:TorunthisscriptfromAbaqus/CAEgoto:File>RunScript:Selectthisfile"""fromabaqusimport*fromabaqusConstantsimport*fromcaeModulesimport*importnumpyasnp#Readodbfromthecurrentviewportmyview=session.viewports[session.currentViewportName]odb=session.odbs[myview.odbDisplay.name]#Keepundeformedviewmyview.odbDisplay.display.setValues(plotState=(CONTOURS_ON_UNDEF,))#EnableFreebodycutusingX-plane,withrotationusingtheglobalCSYSmyview.odbDisplay.setValues(viewCutNames=('X-Plane',),viewCut=ON)myview.odbDisplay.viewCuts['X-Plane'].setValues(motion=ROTATE,rotationAxis=AXIS_3,showFreeBodyCut=True)#SpecifytheCSYSusedtoextractdata:globalCSYS(XYZ)myview.odbDisplay.viewCutOptions.setValues(componentResolution=CSYS,csysName='(Global)')#Iterateandextractresultsn_cuts=25angles=np.linspace(1.,89.,n_cuts)forces=[]forces_glob=[]forangleinangles:#Makefreebodycutmyview.odbDisplay.viewCuts['X-Plane'].setValues(angle=angle)#ExtractXYDataObjectsfromFreebodycutdataList=session.XYDataFromFreeBody(odb,force=True,moment=True,resultant=False,comp1=True,comp2=True,comp3=True)fx=zip(*session.xyDataObjects['X-Planeforcecomponent1'].data)[-1][-1]fy=zip(*session.xyDataObjects['X-Planeforcecomponent2'].data)[-1][-1]mz=zip(*session.xyDataObjects['X-Planemomentcomponent3'].data)[-1][-1]#Forcesinglobalaxis(XYZ)forces_glob.append((fx,fy,mz))#Forcesincylindricalaxisaxial_force=fx*np.cos(angle*np.pi/180.)+fy*np.sin(angle*np.pi/180.)shear_force=fx*np.sin(angle*np.pi/180.)-fy*np.cos(angle*np.pi/180.)forces.append((axial_force,shear_force,mz))#DeleteALLxyDataObjects#forkinsession.xyDataObjects.keys():#delsession.xyDataObjects[k]#deleteXYDataObjectscreatedfordindataList:delsession.xyDataObjects[d.name]#Saveresultsfromfreebodycuts#CartesianCSYSfx,fy,mz=zip(*forces_glob)session.XYData(name='Force_X',data=zip(angles,fx),axis1QuantityType=visualization.QuantityType(type=ANGLE),axis2QuantityType=visualization.QuantityType(type=FORCE))session.XYData(name='Force_Y',data=zip(angles,fy),axis1QuantityType=visualization.QuantityType(type=ANGLE),axis2QuantityType=visualization.QuantityType(type=FORCE))#CylindricalCSYSaxial,shear,mz=zip(*forces)session.XYData(name='Force_N',data=zip(angles,axial),axis1QuantityType=visualization.QuantityType(type=ANGLE),axis2QuantityType=visualization.QuantityType(type=FORCE))session.XYData(name='Force_Q',data=zip(angles,shear),axis1QuantityType=visualization.QuantityType(type=ANGLE),axis2QuantityType=visualization.QuantityType(type=FORCE))session.XYData(name='Moment_Z',data=zip(angles,mz),axis1QuantityType=visualization.QuantityType(type=ANGLE),axis2QuantityType=visualization.QuantityType(type=MOMENT))#########################################################################Showcurvesinnewviewport#DeletepreviousxyPlotifitexiststry:delsession.xyPlots['ForceProfiles']exceptKeyError:pass#CreatenewxyPlotxyp=session.XYPlot('ForceProfiles')xyp.area.border.setValues(show=False)xyp.area.style.setValues(fill=True,color='#2B2B2B')chartName=xyp.charts.keys()[0]chart=xyp.charts[chartName]chart.gridArea.style.setValues(color='#3E3E3E')#Createcurvescurve_N=session.Curve(xyData=session.xyDataObjects['Force_N'])curve_N.lineStyle.setValues(style=SOLID,thickness=0.8,color='#000000')curve_N.symbolStyle.setValues(show=False)curve_Q=session.Curve(xyData=session.xyDataObjects['Force_Q'])curve_Q.lineStyle.setValues(style=SOLID,thickness=0.8,color='#FF0000')curve_Q.symbolStyle.setValues(show=False)curve_mz=session.Curve(xyData=session.xyDataObjects['Moment_Z'])curve_mz.lineStyle.setValues(style=DASHED,thickness=0.8,color='#00CCFF')curve_mz.symbolStyle.setValues(show=False)#Addcurvestochart(xyPlot)chart.setValues(curvesToPlot=(curve_N,curve_Q,curve_mz,),)#Arrangenewviewportattherighthalfofthescreennewview=session.Viewport(name='NewViewport',origin=(20.,15.),width=428.,height=188.)newview.makeCurrent()newview.setValues(displayedObject=xyp)w=session.drawingArea.widthh=session.drawingArea.heightx0,y0=session.drawingArea.originnewview.setValues(origin=(x0+w/2.,y0),width=w/2.,height=h)来源:ABAQUS仿真世界