抛物线型压力作用下悬臂梁的abaqus py命令流

本示例演示了如何使用Abaqus进行简单的静力分析,包括模型建立、材料定义、边界条件设置及结果查看等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from abaqus import *
from abaqusConstants import *
session.Viewport(name='Viewport: 1', origin=(0.0, 0.0), width=222.166656494141, 
    height=132.252319335938)
session.viewports['Viewport: 1'].makeCurrent()
session.viewports['Viewport: 1'].maximize()
from caeModules import *
from driverUtils import executeOnCaeStartup
executeOnCaeStartup()
session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(
    referenceRepresentation=ON)
s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=4.0)
g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
s.setPrimaryObject(option=STANDALONE)
s.rectangle(point1=(0.0, 0.0), point2=(1.0, 1.0))
session.viewports['Viewport: 1'].view.fitView()
p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D, 
    type=DEFORMABLE_BODY)
p = mdb.models['Model-1'].parts['Part-1']
p.BaseSolidExtrude(sketch=s, depth=10.0)
s.unsetPrimaryObject()
p = mdb.models['Model-1'].parts['Part-1']
session.viewports['Viewport: 1'].setValues(displayedObject=p)
del mdb.models['Model-1'].sketches['__profile__']
session.viewports['Viewport: 1'].partDisplay.setValues(sectionAssignments=ON, 
    engineeringFeatures=ON)
session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(
    referenceRepresentation=OFF)
mdb.models['Model-1'].Material(name='Material-1')
mdb.models['Model-1'].materials['Material-1'].Elastic(table=((210000000000.0, 
    0.3), ))
mdb.models['Model-1'].HomogeneousSolidSection(name='Section-1', 
    material='Material-1', thickness=None)
p = mdb.models['Model-1'].parts['Part-1']
c = p.cells
cells = c.getSequenceFromMask(mask=('[#1 ]', ), )
region = p.Set(cells=cells, name='Set-1')
p = mdb.models['Model-1'].parts['Part-1']
p.SectionAssignment(region=region, sectionName='Section-1', offset=0.0, 
    offsetType=MIDDLE_SURFACE, offsetField='', 
    thicknessAssignment=FROM_SECTION)
a = mdb.models['Model-1'].rootAssembly
session.viewports['Viewport: 1'].setValues(displayedObject=a)
session.viewports['Viewport: 1'].assemblyDisplay.setValues(
    optimizationTasks=OFF, geometricRestrictions=OFF, stopConditions=OFF)
a = mdb.models['Model-1'].rootAssembly
a.DatumCsysByDefault(CARTESIAN)
p = mdb.models['Model-1'].parts['Part-1']
a.Instance(name='Part-1-1', part=p, dependent=ON)
session.viewports['Viewport: 1'].assemblyDisplay.setValues(
    adaptiveMeshConstraints=ON)
mdb.models['Model-1'].StaticStep(name='Step-1', previous='Initial')
session.viewports['Viewport: 1'].assemblyDisplay.setValues(step='Step-1')
session.viewports['Viewport: 1'].assemblyDisplay.setValues(loads=ON, bcs=ON, 
    predefinedFields=ON, connectors=ON, adaptiveMeshConstraints=OFF)
a = mdb.models['Model-1'].rootAssembly
f1 = a.instances['Part-1-1'].faces
faces1 = f1.getSequenceFromMask(mask=('[#10 ]', ), )
region = a.Set(faces=faces1, name='Set-1')
mdb.models['Model-1'].DisplacementBC(name='BC-1', createStepName='Step-1', 
    region=region, u1=0.0, u2=0.0, u3=0.0, ur1=UNSET, ur2=UNSET, ur3=UNSET, 
    amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='', 
    localCsys=None)
mdb.models['Model-1'].ExpressionField(name='AnalyticalField-1', localCsys=None, 
    description='', expression='(10.0*Z-Z**2)/25.0')
a = mdb.models['Model-1'].rootAssembly
s1 = a.instances['Part-1-1'].faces
side1Faces1 = s1.getSequenceFromMask(mask=('[#2 ]', ), )
region = a.Surface(side1Faces=side1Faces1, name='Surf-1')
mdb.models['Model-1'].Pressure(name='Load-1', createStepName='Step-1', 
    region=region, distributionType=FIELD, field='AnalyticalField-1', 
    magnitude=100.0, amplitude=UNSET)
session.viewports['Viewport: 1'].view.setValues(nearPlane=19.0798, 
    farPlane=25.0859, width=10.8107, height=4.81076, cameraPosition=(21.7711, 
    -1.74495, 10.5173), cameraUpVector=(-0.218641, 0.963771, -0.152778), 
    cameraTarget=(0.324107, 0.238107, 5.43779))
session.viewports['Viewport: 1'].view.setValues(nearPlane=19.8701, 
    farPlane=23.9758, width=11.2585, height=5.01002, cameraPosition=(22.3933, 
    1.74656, 4.89834), cameraUpVector=(-0.397193, 0.917732, 0.00237891), 
    cameraTarget=(0.322797, 0.230758, 5.44962))
session.viewports['Viewport: 1'].assemblyDisplay.setValues(mesh=ON, loads=OFF, 
    bcs=OFF, predefinedFields=OFF, connectors=OFF)
session.viewports['Viewport: 1'].assemblyDisplay.meshOptions.setValues(
    meshTechnique=ON)
p = mdb.models['Model-1'].parts['Part-1']
session.viewports['Viewport: 1'].setValues(displayedObject=p)
session.viewports['Viewport: 1'].partDisplay.setValues(sectionAssignments=OFF, 
    engineeringFeatures=OFF, mesh=ON)
session.viewports['Viewport: 1'].partDisplay.meshOptions.setValues(
    meshTechnique=ON)
p = mdb.models['Model-1'].parts['Part-1']
p.seedPart(size=0.3, deviationFactor=0.1, minSizeFactor=0.1)
p = mdb.models['Model-1'].parts['Part-1']
p.generateMesh()
a1 = mdb.models['Model-1'].rootAssembly
a1.regenerate()
a = mdb.models['Model-1'].rootAssembly
session.viewports['Viewport: 1'].setValues(displayedObject=a)
session.viewports['Viewport: 1'].assemblyDisplay.setValues(mesh=OFF)
session.viewports['Viewport: 1'].assemblyDisplay.meshOptions.setValues(
    meshTechnique=OFF)
mdb.Job(name='Job-1', model='Model-1', description='', type=ANALYSIS, 
    atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=90, 
    memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True, 
    explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF, 
    modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='', 
    scratch='', resultsFormat=ODB, multiprocessingMode=DEFAULT, numCpus=1, 
    numGPUs=0)
mdb.jobs['Job-1'].submit(consistencyChecking=OFF)
#: The job input file "Job-1.inp" has been submitted for analysis.
#: Job Job-1: Analysis Input File Processor completed successfully.
o3 = session.openOdb(name='D:/SIMULIA/Abaqus/Commands/Job-1.odb')
#: Model: D:/SIMULIA/Abaqus/Commands/Job-1.odb
#: Number of Assemblies:         1
#: Number of Assembly instances: 0
#: Number of Part instances:     1
#: Number of Meshes:             1
#: Number of Element Sets:       3
#: Number of Node Sets:          3
#: Number of Steps:              1
session.viewports['Viewport: 1'].setValues(displayedObject=o3)
session.viewports['Viewport: 1'].view.setValues(nearPlane=17.4595, 
    farPlane=26.7993, width=9.89258, height=4.40221, viewOffsetX=-0.0253098, 
    viewOffsetY=-0.109491)
session.viewports['Viewport: 1'].odbDisplay.display.setValues(plotState=(
    CONTOURS_ON_DEF, ))
#* There is no valid step data available on the database.If the analysis is 
#* running, the database must be closed and reopened once the results have been 
#* initialized. The requested operation has been cancelled.
#: Job Job-1: Abaqus/Standard completed successfully.
session.viewports['Viewport: 1'].odbDisplay.display.setValues(plotState=(
    CONTOURS_ON_DEF, ))
#* rom_Transporter::GetClassBagForRead - Table for class "res_Frame" is missing 
#* from the database: D:/SIMULIA/Abaqus/Commands/Job-1.odb. The database is 
#* corrupt.
#: Job Job-1 completed successfully. 
a = mdb.models['Model-1'].rootAssembly
session.viewports['Viewport: 1'].setValues(displayedObject=a)
mdb.jobs['Job-1'].submit(consistencyChecking=OFF)
#: The job input file "Job-1.inp" has been submitted for analysis.
#: Job Job-1: Analysis Input File Processor completed successfully.
#: Job Job-1: Abaqus/Standard completed successfully.
#: Job Job-1 completed successfully. 
o3 = session.openOdb(name='D:/SIMULIA/Abaqus/Commands/Job-1.odb')
#: Model: D:/SIMULIA/Abaqus/Commands/Job-1.odb
#: Number of Assemblies:         1
#: Number of Assembly instances: 0
#: Number of Part instances:     1
#: Number of Meshes:             1
#: Number of Element Sets:       3
#: Number of Node Sets:          3
#: Number of Steps:              1
session.viewports['Viewport: 1'].setValues(displayedObject=o3)
session.viewports['Viewport: 1'].odbDisplay.display.setValues(plotState=(
    CONTOURS_ON_DEF, ))
session.viewports['Viewport: 1'].view.setValues(nearPlane=19.0454, 
    farPlane=25.3653, width=10.7912, height=4.80209, cameraPosition=(20.027, 
    9.52689, 9.56951), cameraUpVector=(-0.68922, 0.713857, -0.124034), 
    cameraTarget=(0.418928, 0.190362, 5.31944))
session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(
    variableLabel='U', outputPosition=NODAL, refinement=(INVARIANT, 
    'Magnitude'), )
session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(
    variableLabel='S', outputPosition=INTEGRATION_POINT, refinement=(INVARIANT, 
    'Mises'), )
session.viewports['Viewport: 1'].odbDisplay.commonOptions.setValues(
    deformationScaling=UNIFORM, uniformScaleFactor=199671e6)
session.viewports['Viewport: 1'].view.setValues(nearPlane=1.64533e+006, 
    farPlane=2.7173e+006, width=1.64375e+006, height=731471, cameraPosition=(
    1.23737e+006, 591276, -1.42754e+006), cameraUpVector=(-0.927189, 
    -0.0765476, -0.366689), cameraTarget=(-15335.6, -463634, -9225.72))
session.viewports['Viewport: 1'].view.setValues(nearPlane=1.71634e+006, 
    farPlane=2.65707e+006, width=1.7147e+006, height=763042, cameraPosition=(
    507987, 406331, -1.92457e+006), cameraUpVector=(-0.882144, -0.464526, 
    -0.0776978), cameraTarget=(-20289.4, -464890, -12601.5))
session.viewports['Viewport: 1'].view.setValues(nearPlane=1.66739e+006, 
    farPlane=2.70314e+006, width=1.6658e+006, height=741279, cameraPosition=(
    904288, 606212, -1.65398e+006), cameraUpVector=(-0.903914, -0.324771, 
    -0.278322), cameraTarget=(-16627.7, -463043, -10101.3))
session.viewports['Viewport: 1'].odbDisplay.commonOptions.setValues(
    uniformScaleFactor=1e6)
session.viewports['Viewport: 1'].view.setValues(nearPlane=20.5443, 
    farPlane=30.189, width=14.4776, height=6.44255, cameraPosition=(-5.48937, 
    22.6453, 4.52367), cameraUpVector=(-0.241022, -0.400918, -0.88384))
session.viewports['Viewport: 1'].view.setValues(nearPlane=20.3176, 
    farPlane=30.2275, width=14.3179, height=6.37147, cameraPosition=(17.5024, 
    16.4593, 1.87069), cameraUpVector=(-0.920027, 0.389416, -0.0436485), 
    cameraTarget=(0.119981, -2.29205, 4.59706))
session.viewports['Viewport: 1'].view.setValues(nearPlane=22.0632, 
    farPlane=28.2401, width=15.548, height=6.91887, cameraPosition=(25.4518, 
    -2.16475, 8.01175), cameraUpVector=(-0.353072, 0.919761, 0.171407), 
    cameraTarget=(-0.018784, -1.96695, 4.48986))
session.viewports['Viewport: 1'].view.setValues(nearPlane=21.2493, 
    farPlane=29.1067, width=14.9745, height=6.66364, cameraPosition=(24.0221, 
    6.8323, 6.46345), cameraUpVector=(-0.600098, 0.722462, -0.343412), 
    cameraTarget=(0.0131639, -2.168, 4.52446))
session.viewports['Viewport: 1'].odbDisplay.setPrimaryVariable(
    variableLabel='U', outputPosition=NODAL, refinement=(INVARIANT, 
    'Magnitude'), )

由于是用pyreader记录的 所以会有很多多于代码,viewpoints请忽视就好。

### 实现4节点矩形单元对50×1网格化悬臂梁在抛物线分布力下位移计算 #### MATLAB编程框架概述 为了实现这一目标,需构建一个完整的有限元分析流程,包括定义单元属性、材料特性以及施加边界条件和载荷。具体来说,对于给定尺寸为50单位长度乘以1单位宽度的悬臂梁结构,在其自由端按照抛物线规律分配横向力。 #### 定义几何参数与离散化处理 考虑到该问题涉及的是平面应力状态下的直梁弯曲变形情况,可以将其划分为多个具有相同大小的小矩形区域作为基本组成部件——即所谓的“四节点矩形单元”。这里假设整个模型被均匀分割成N份,则每一份代表的就是这样一个标准形状的空间子域[^1]。 ```matlab % 几何参数设定 L = 50; % 总长 H = 1; % 高度 nElemX = L; % X方向上的元素数量等于总长 elemSize = L / nElemX; ``` #### 材料性质设置 接下来指定所使用的材料类型及其对应的弹性模量E和泊松比ν等物理常数: ```matlab E = 2e11; % 弹性模量 (Pa) nu = 0.3; % 泊松比率 D = E/(1-nu^2)*[1 nu 0; nu 1 0; 0 0 (1-nu)/2]; % 平面应变刚度矩阵 ``` #### 单元组装过程中的全局刚度矩阵形成 通过遍历所有局部坐标系内的各个微分方程表达式,并利用转换关系映射到整体笛卡尔参照体系之下,从而逐步累加以获得最终形式的整体平衡方程式KU=F。此处特别需要注意的是,由于涉及到不同位置处的具体数值差异,因此必须依据实际加载模式精确调整每一项系数。 ```matlab function K_global = assembleGlobalStiffnessMatrix(coords, connec, D, elemSize) numNodes = size(connec, 1); dofPerNode = 2; K_global = zeros(numNodes*dofPerNode); for i=1:size(connec, 1)-1 nodes = connec(i:i+1,:); coords_elem = coords(nodes,:); Kelem = computeElementStiffness(D, coords_elem, elemSize); idx = reshape([nodes', nodes'+numNodes], [], 1); K_global(sub2ind(size(K_global), repmat(idx, 1, 4), ... [idx(:)', idx(:)'+dofPerNode-1]))... = K_global(sub2ind(size(K_global),repmat(idx, 1, 4), ... [idx(:)', idx(:)'+dofPerNode-1])) + Kelem; end end ``` #### 施加边界条件及外部载荷 固定一端的所有自由度而仅允许另一侧沿垂直于轴向的方向发生相对滑动;与此同时,根据题目描述中提到的要求,还需考虑一种特殊的非均布压力q(x)=qx²作用效果。这可以通过积分运算转化为一系列集中力的形式附加至相应结点之上。 ```matlab % 边界条件应用 fixedDOFs = 1:dofPerNode; % 抛物线分布力 q(x) = qx*x.^2 的离散表示 forceVector = zeros(numNodes*dofPerNode, 1); for i=dofPerNode*(size(connec, 1)):dofPerNode:end xCoord = mean(coords(connec((i-dofPerNode)/(2)+1:(i-dofPerNode)/2+1,:), 1)); forceVector(i-dofPerNode+2) = integral(@(x)(qx.*x.^2), xCoord-elemSize/2, xCoord+elemSize/2); end ``` #### 解决线性代数方程组获取未知变量值 最后一步就是调用内置函数`solve`或者直接求逆操作来得到待求解的目标响应量——各质点的位置偏转程度U。值得注意的是,当面对大型稀疏矩阵时建议优先选用迭代算法以提高效率并减少内存占用。 ```matlab % 删除对应固定的自由度部分 K_reduced = K_global(setdiff(1:end,fixedDOFs), setdiff(1:end,fixedDOFs)); f_reduced = forceVector(setdiff(1:end,fixedDOFs)); % 计算位移场 displacements = zeros(length(fixedDOFs)+length(f_reduced), 1); displacements(setdiff(1:length(displacements), fixedDOFs)) = K_reduced \ f_reduced; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值