普通网友 2024-03-04 20:25 采纳率: 14.3%
浏览 14
已结题

abaqus里的python算法

想要运用如下代码在abaqus里在长度为5厚度为0.0585的方形里生成半径指定随机的颗粒,可是显示偏移失败,应该如何更改?

img

from abaqus import *
from abaqusConstants import *
session.Viewport(name='Viewport: 1', origin=(0.0, 0.0), width=194.916549682617, 
    height=127.05989074707)
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)
Mdb()
#: 新的模型数据库已创建.
#: 模型 "Model-1" 已创建.
session.viewports['Viewport: 1'].setValues(displayedObject=None)
s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', 
    sheetSize=200.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=(5, 0.0585))
p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=TWO_D_PLANAR, 
    type=DEFORMABLE_BODY)
p = mdb.models['Model-1'].parts['Part-1']
p.BaseShell(sketch=s)
s.unsetPrimaryObject()
p = mdb.models['Model-1'].parts['Part-1']
session.viewports['Viewport: 1'].setValues(displayedObject=p)
del mdb.models['Model-1'].sketches['__profile__']
p = mdb.models['Model-1'].parts['Part-1']
f, e, d1 = p.faces, p.edges, p.datums
t = p.MakeSketchTransform(sketchPlane=f[0], sketchPlaneSide=SIDE1, origin=(0.0, 
    0.0, 0.0))
s1 = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', 
    sheetSize=424.26, gridSpacing=10.6, transform=t)
g, v, d, c = s1.geometry, s1.vertices, s1.dimensions, s1.constraints
s1.setPrimaryObject(option=SUPERIMPOSE)
p = mdb.models['Model-1'].parts['Part-1']
p.projectReferencesOntoSketch(sketch=s1, filter=COPLANAR_EDGES)

import numpy as np
import random

xmin=0.0
xmax=5
ymin=0.0
ymax=0.0585
beta=0.30
Sph=[]
Sum=0
while True:
    flag = True
    if Sum>=xmax*ymax*beta:
        print('Bones Area is %f mm^2' %Sum)
        print('Total Area is %f mm^2' %(xmax*ymax))
        print('Bones Area is %f%% of Total Area' %(100*Sum/xmax/ymax))
        break
    r=random.uniform(0.0025,0.0075)
    x=random.uniform(xmin,xmax)
    y=random.uniform(ymin,ymax)
    if ((x- r>xmin and x+r<xmax) and (y- r>ymin and y+r<ymax)):
        if not Sph:
            Sph.append([x,y,r])
            Sum = Sum + np.pi*(r-0.1)**2
            continue
        else:
            for s in Sph:
                D=np.sqrt((s[0]- x)**2+(s[1]- y)**2)
                if D<s[2]+r:
                    flag = False
                    break
        if flag==True:
            Sph.append([x,y,r])
            Sum = Sum + np.pi*(r-0.1)**2

a=[x[0] for x in Sph]
b=[x[1] for x in Sph]
print(a)
print('========')
print(b)


for index,item in enumerate(Sph):
    s1.CircleByCenterPerimeter(center=(item[0], item[1]), point1=(item[0], item[1]+item[2]))
    ii = int(2*index+6)
    s1.offset(distance=0.1, objectList=(g[ii], ), side=LEFT)
    p = mdb.models['Model-1'].parts['Part-1']

f = p.faces

pickedFaces = f.getSequenceFromMask(mask=('[#1 ]', ), )
e1, d2 = p.edges, p.datums
p.PartitionFaceBySketch(faces=pickedFaces, sketch=s1)
s1.unsetPrimaryObject()
del mdb.models['Model-1'].sketches['__profile__']

  • 写回答

16条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-04 20:25
    关注

    引自免费微信小程序:皆我百晓生

    在你提供的Abaqus Python脚本中,问题出在试图对圆进行偏移时。根据你的代码片段和描述,你尝试创建一系列随机半径的圆,并将它们偏移到 Sketch 的左侧。但是,在 s1.offset 函数调用部分存在一些问题。

    首先,你需要确保在调用 offset 方法时引用了正确的几何对象(在这里应是新创建的圆形)。其次,你需要检查索引 ii 是否正确地指定了刚绘制的圆所在的geometry列表中的位置。

    以下是修改后的相关代码段:

    # ...(上面的代码不变)
    
    for index, item in enumerate(Sph):
        circle = s1.CircleByCenterPerimeter(center=(item[0], item[1]), point1=(item[0], item[1] + item[2]))
        # 获取当前循环中新创建的Circle的几何对象
        circle_geom = circle.geometry.findAt((item[0], item[1]))
        
        # 根据Abaqus API的规律,可能需要重新考虑ii的计算方式来获取正确的偏移对象
        # 这里假设每个圆都在循环中按顺序添加到几何列表中,且g[ii-1]是上一个圆的几何对象
        # 因此,对于当前圆,我们可以直接使用circle_geom作为偏移的对象
        ii = int(2 * index)  # 修改这里以适应实际的几何对象索引
        try:
            s1.offset(distance=0.1, objectList=(circle_geom,), side=LEFT)
        except Exception as e:
            print(f"Offset failed: {e}")
    
    # ...(下面的代码不变)
    

    请注意,上述代码调整了 ii 的计算方式,并尝试直接使用刚创建的圆的几何对象进行偏移操作。由于不清楚Abaqus内部Sketch的几何对象是如何具体添加到列表中的,所以这里的 ii 可能仍需进一步调试或确认,确保其指向正确的几何对象。

    此外,当执行偏移操作时,请务必捕获可能抛出的异常,以便了解为何偏移失败。如果偏移仍然失败,请检查圆的位置是否超出 Sketch 的边界或其他可能的原因。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月6日
  • 创建了问题 3月4日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表