我有许多 abaqus 插件,它们通过脚本接口在 Abaqus CAE 中执行操作。对于许多操作执行后,Abaqus 会执行一些需要一些时间的显示刷新过程。如果模型很小并且脚本没有做太多事情,那也没关系。然而,例如我的一个脚本获取一部分并将其复制到装配体中用户的 CSV 文件指定的坐标处。有时可能有多达 2000 个这样的复制。在这种情况下,需要很长时间才能完成该过程,并且大多数时候您只能看到“设置显示...”
此外,这个“设置显示...”会覆盖脚本的进度(里程碑),因此很难看到脚本已经前进了多远。
有什么方法可以暂停此显示更新行为,直到脚本完成为止?也许有一个 hack,你可以重新定义 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 更改为任何其他模块,例如部分,我获得了速度提升,但这依赖于该部分足够空。如果我的模型包含又大又复杂的零件,那么“设置显示..”仍然相当慢,而且无论如何,我的里程碑都会被“设置显示..”覆盖。
我想我以前在类似的情况下见过这种情况,当时我在 GUI CAE 会话中逐一创建元素。我不知道如何禁用屏幕刷新,而且速度慢得令人发狂。有两种解决方法:
1. 使用替代命令(如果存在)可以一次创建多个项目。在上面的示例中,我不是使用
Element
方法一次创建一个新元素,而是使用 makePartFromNodesAndElements
一次生成整个零件和网格,速度明显更快。对于你的情况,也许可以做类似的事情。
2. 如果您不需要活动 GUI,请从系统 shell 运行脚本:
abaqus cae noGui=script.py
。您甚至可以从命令行界面将参数传递给脚本。
我刚刚想到的另一种(未经测试的)可能性是,您可以在不指定显示对象的情况下创建并切换到新视口。然后尝试您的代码,看看是否可以加快速度。
尽管此时(6年后)它对你没有用,但我认为这对其他人会有好处。要在 ABAQUS 中禁用视口中的显示,您只需在整个脚本中删除以下命令即可。就是这样:
sp.setPrimaryObject(选项=SUPERIMPOSE)
如果有帮助请告诉我。
最好