如何在Abaqus脚本中禁止“设置显示...”

时间:2017-08-25 09:02:04

标签: python abaqus

我有很多abaqus插件,可以通过脚本界面在Abaqus CAE中执行操作。对于执行后的许多操作,Abaqus执行一些显示刷新过程需要一些时间。如果模型很小并且脚本没有做太多,那就没问题。但是,例如我的一个脚本占用了一部分,并在用户的CSV文件指定的坐标处的程序集中复制它。有时可能会有多达2000次这样的复制。在这种情况下,完成程序需要永远,大多数时候你只看到“设置显示......”

此外,“设置显示......”会覆盖脚本的进度(里程碑),因此很难看出脚本的进度有多远。

在脚本完成之前,有没有办法暂停此显示更新行为?也许有一个黑客你可以重新定义abaqus更新功能,直到脚本完成或其他什么,因为根据手册,你唯一能做的就是阻止更新配色方案,但这根本没有用。

任何提示都将不胜感激,谢谢!

编辑:为了澄清我在视口对象上使用了以下方法而没有白费:

disableRefresh()
disableColorCodeUpdates()

disableColorCodeUpdates()做的很清楚,当在模型视口中使用颜色编码时,效果很明显。但是,我发现使用和不使用disableRefresh()之间没有区别。

编辑:对不起这么长时间的等待,只是现在我有机会回到abaqus。这是一个简单的示例脚本,它接受一部分并将其置于汇编中:

import random
modelName='Model-1'
partName='Part-1'
noInst=1000

i = 0
lists = []
for i in range(noInst):
    lists.append([random.random()*10,random.random()*10,random.random()*10])

totalParts = len(lists)
session.Viewport(name='Viewport: 2', origin=(6.63750028610229, 
        20.7638893127441), width=335.746887207031, height=149.77685546875)
session.viewports['Viewport: 2'].makeCurrent()
session.viewports['Viewport: 2'].maximize()
session.viewports['Viewport: 1'].restore()

for n,l in enumerate(lists):
    milestone('Replicating parts', 'parts', n+1, totalParts)
    a = mdb.models[modelName].rootAssembly
    p = mdb.models[modelName].parts[partName]
    a.Instance(name='Random_'+'-'+str(n), part=p, dependent=ON)
    a = mdb.models[modelName].rootAssembly   
    a.translate(instanceList=('Random_'+'-'+str(n), ), vector=(float(l[0]), float(l[1]), float(l[2])))

如果我尝试创建视口对象而不指定显示的对象。视口默认为初始视口中的当前显示对象。我注意到我是否将模块从amssembly更改为任何其他模块,例如部分,我获得了速度提升,但它依赖于该部分足够空。如果我的模型包含大而复杂的部件,那么“设置显示......”的速度仍然相当慢。无论如何,我的里程碑都会被“设置显示......”覆盖。

1 个答案:

答案 0 :(得分:2)

我想我以前在类似的情况下已经看到了这一点,我在GUI CAE会话中逐个创建元素。我无法弄清楚如何禁用屏幕刷新,这令人抓狂。有两种解决方法:

1。使用备用命令(如果存在),一次创建多个项目。在上面的示例中,我不是使用Element方法一次创建一个新元素,而是使用makePartFromNodesAndElements生成整个Part和网格,这显然更快。在您的情况下,可能会做类似的事情。

2. 如果您不需要活动的GUI,请从系统shell运行脚本:abaqus cae noGui=script.py。您甚至可以从命令行界面将参数传递给脚本。

我刚想到的另一种(未经测试的)可能性是您可以创建并切换到新视口而无需指定显示的对象。然后尝试你的代码,看看是否加快了速度。