【问题标题】:How to suppress "Setting display..." in Abaqus scripting如何在 Abaqus 脚本中抑制“设置显示...”
【发布时间】:2019-09-15 16:17:44
【问题描述】:

我有许多 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 更改为任何其他模块,例如部分,我获得了速度提升,但它依赖于部分足够空。如果我的模型具有大而复杂的零件,那么“设置显示..”仍然相当慢,而且无论如何我的里程碑都会被“设置显示..”覆盖。

【问题讨论】:

  • 你能展示一个简单的示例脚本吗?我做了很多 os abaqus 脚本,从未见过“设置显示”
  • 如果你创建并切换到一个新的视口,而不指定显示的对象会发生什么?
  • 什么是milestone
  • 里程碑是 abaqus 的功能,用于在 cae 或查看器中显示进度,就在视口下方,在您看到“设置显示...”的位置。您可以在 Abaqus 手册 > 脚本参考 > Python 命令 > 实用程序命令 > 状态命令 > 里程碑 中找到它

标签: python abaqus


【解决方案1】:

我想我以前曾在类似的情况下看到过这种情况,我在 GUI CAE 会话中一个接一个地创建元素。我不知道如何禁用屏幕刷新,而且速度非常慢。有两种解决方法:

1. 使用替代命令(如果存在)一次创建多个项目。在上面的示例中,我没有使用Element 方法一次创建每个新元素,而是能够使用makePartFromNodesAndElements 一次生成整个零件和网格,这明显更快。在你的情况下,也许可以做类似的事情。

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

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

【讨论】:

  • 1.我找不到该功能的任何替代命令; 2. 这不是一个选项,因为代码是插件的一部分,以帮助组装建模; 3. 我试过了,创建的新视口默认为当前对象。但是,我注意到如果我切换到 Part 模块,我的速度会有所提高。
猜你喜欢
  • 2018-03-03
  • 2018-12-05
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多