- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我用 python 编写了一个脚本,用于在 Abaqus 中对一组文件进行后处理。该脚本按顺序打开abaqus输出数据库文件,读取多个节点的结果,将这些结果写入.txt文件中并关闭odbs(输出数据库)。一开始该过程非常快。经过多次打开和关闭文件数量(即 50 次之后)该过程变得更加缓慢,最后(可能是因为缺少命令)程序(Abaqus)崩溃。
我添加了 gc.collect 命令,不知何故它有所帮助,但问题仍然存在。
我还注意到,虽然写入的文件在另一盘(D)中,但在执行过程中,C:盘的空间被占用。重新启动计算机后,该空间即可释放。
有谁知道为什么会发生这种情况以及我该如何解决它?我的意思是如何避免内存变满和程序变慢。这是我的脚本:
from abaqus import *
from abaqusConstants import *
from caeModules import *
from driverUtils import executeOnCaeStartup
import gc
executeOnCaeStartup()
session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(
referenceRepresentation=ON)
nodes = [1001,1201,1401,1601,1801,2001,2201,2401,2601,2801,3001]
a = ["5"]
Kx = ["0001", "001","1"]
dth = ["0", "05" , "1" ,"5", "10"]
dw = ["0","1","5" ,"10" ,"40"]
fmt = "WD_dw{w}_dth{y}_Kx{z}_a{x}"
k = 0
j = 0
for x in a:
j = j + 1
print 'j =',j
f = open("WD_sin_results_{j}.txt".format(j=j), 'w')
for z in Kx:
for y in dth:
for w in dw:
f.write("\n" + fmt.format(w=w, z=z, y=y, x=x)+ "\n")
lista = []
listb = []
listc = []
xy1 = []
k = k + 1
print 'k =',k
o1 = session.openOdb(name='E:\Abaqus\WD_sin_p1_c{k}.odb'.format(k=k))
session.viewports['Viewport: 1'].setValues(displayedObject=o1)
leaf = dgo.LeafFromOdbElementMaterials(elementMaterials=('SOIL', ))
session.viewports['Viewport: 1'].odbDisplay.displayGroup.replace(leaf=leaf)
odbName=session.viewports[session.currentViewportName].odbDisplay.name
session.odbData[odbName].setValues(activeFrames=(('Step-1', ('0:-1', )), ))
odb = session.odbs['E:\Abaqus\WD_sin_p1_c{k}.odb'.format(k=k)]
for i in nodes:
print 'i =',i
session.xyDataListFromField(odb=odb, outputPosition=NODAL, variable=(('CPRESS', ELEMENT_NODAL), ), nodeLabels=(('PART-1-1', ('%i'%(i), )), ))
xy1 = []
xy1 = session.xyDataObjects['CPRESS (Not averaged) PI: PART-1-1 N: %i'%(i)]
xy1.setValues(
sourceDescription='CPRESS (Not averaged) PI: PART-1-1 N: %i'%(i))
xy2 = xy1[530]
xy3 = xy2[1]
print 'xy3:', xy3
if xy3 < 0:
lista = currentMin(truncate(xyData=xy1, startX=5, endX=6))
lista.setValues(
sourceDescription='currentMin ( truncate ( xyData="CPRESS (Not averaged) PI: PART-1-1 N: {i}" ,startX=5, endX=6 ) )'.format(i=i))
else:
lista = currentMax(truncate(xyData=xy1, startX=5, endX=6))
lista.setValues(
sourceDescription='currentMax ( truncate ( xyData="CPRESS (Not averaged) PI: PART-1-1 N: {i}" ,startX=5, endX=6 ) )'.format(i=i))
listb = lista[100]
print "listb:", lista[100]
listc = listb[1]
print "listc:", listb[1]
f.write('%s'%listc+ "\n")
del session.xyDataObjects['CPRESS (Not averaged) PI: PART-1-1 N: %i'%(i)]
del session.xyDataObjects['CPRESS (Not averaged) PI: PART-1-1 N: %i'%(i)]
del session.xyDataObjects['_temp_1']
del session.xyDataObjects['_temp_2']
del session.xyDataObjects['_temp_3']
del session.xyDataObjects['_temp_4']
del session.xyDataObjects['_temp_5']
del session.xyDataObjects['_temp_6']
del session.xyDataObjects['_temp_7']
del session.xyDataObjects['_temp_8']
del session.xyDataObjects['_temp_9']
del session.xyDataObjects['_temp_10']
del session.xyDataObjects['_temp_11']
del session.xyDataObjects['_temp_12']
del session.xyDataObjects['_temp_13']
del session.xyDataObjects['_temp_14']
del session.xyDataObjects['_temp_15']
del session.xyDataObjects['_temp_16']
del session.xyDataObjects['_temp_17']
del session.xyDataObjects['_temp_18']
del session.xyDataObjects['_temp_19']
del session.xyDataObjects['_temp_20']
del session.xyDataObjects['_temp_21']
del session.xyDataObjects['_temp_22']
session.odbs['E:\Abaqus\WD_sin_p1_c{k}.odb'.format(k=k)].close()
gc.collect()
f.close()
最佳答案
这里有一些建议:
1 - 使用 odbAccess 从 abaqus python 命令提示符打开 odb。不使用 Abaqus Viewer 可能会节省一些内存
2 - 直接从odb中的帧中提取数据。不要使用 XY 数据列表操作。
下面的代码未经测试,但它可能会给您一些想法。如果您想使用它,您很可能必须对其进行调试。我不知道你到底想从odb中提取什么数据,但我做了一个猜测。
from abaqus import *
from abaqusConstants import *
from odbAccess import *
import odbAccess
from caeModules import *
from driverUtils import executeOnCaeStartup
import numpy as np
nodeLabels = [1001,1201,1401,1601,1801,2001,2201,2401,2601,2801,3001]
instanceName='PART-1-1'
a = ["5"]
Kx = ["0001", "001","1"]
dth = ["0", "05" , "1" ,"5", "10"]
dw = ["0","1","5" ,"10" ,"40"]
fmt = "WD_dw{w}_dth{y}_Kx{z}_a{x}"
k = 0
j = 0
for x in a:
j += 1
print 'j =',j
with open("WD_sin_results_{j}.txt".format(j=j), 'w') as f:
for z in Kx:
for y in dth:
for w in dw:
f.write("\n" + fmt.format(w=w, z=z, y=y, x=x)+ "\n")
k += 1
print 'k =',k
odb = odbAccess.openOdb(name='E:\Abaqus\WD_sin_p1_c{k}.odb'.format(k=k))
step=odb.steps.values()[0] # evaluate 1st step in odb
frames=step.frames # evaluate all frames in step
inst=odb.rootAssembly.instances[instanceName]
matrix=np.zeros((len(nodeLabels),len(frames))) #initialse NumPy array, array = node x frame
for frameNum,frame in enumerate(frames):
CPRESSframe=frame.fieldOutputs['CPRESS']
for nodeNum,nodeLabel in enumerate(nodeLabels):
node=inst.getNodeFromLabel(nodeLabel)
matrix[nodeNum,frameNum]=CPRESSframe.getSubset(region=node).values[0].data
# Write out the largest absolute cpress over all the frames for each node
for nodeNum,nodeLabel in enumerate(nodeLabels):
idx=np.argmax(abs(matrix[nodeNum,:])) # find the frame with the largest absolute cpress for this node
f.write('%s'%matrix[nodeNum,idx]+ "\n")
odb.close()
关于python - python Abaqus 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33900696/
当我尝试使用以下命令从 Windows 命令行运行 Abaqus PDE(Python 开发环境)时: abaqus cae -pde 我在命令行中收到以下错误: pde:atxGuiSvr.ipcS
我正在对一些 Abaqus 模拟进行参数化扫描,因此我正在使用 waitForCompletion()防止脚本过早运行的功能。然而,有时参数组合会导致模拟在扫描中的一个或两个参数上挂起大约半小时到一个
我正在尝试在 Abaqus 中应用塑性应变初始条件,如下所示: ** ----------------------------------------------------------------
我正在尝试获取曲面中每个面的法线(编辑:曲面是从实体中提取的,而不是从壳中提取的)。我似乎无法获得面部物体。根据scripting reference guide这应该是语法: mdb.models[
我正在尝试优化某种 Material 的孔隙率分布。我想可视化结果。我可以使用'visualize->material'来可视化不同的 Material ,但是他给每种 Material 随机颜色。我
我正在尝试制作一个 python 脚本来从 ODB 文件(来自 abaqus)中提取节点坐标。到目前为止,我已经想出了下面附加的代码(不要介意我放在#后面的额外信息,有时它只是为了让我可以跟踪我在做什
我将 Abaqus 2020 链接到英特尔 oneAPI ifort 编译器,它运行正常,直到出现此问题。当我尝试使用 /iface:cref 时出现“错误 LNK2019:函数 umat.R 中引用
我是 Abaqus Python 脚本新手。我的脚本中的以下代码行引发关键字错误(类型错误:mergeWire 上的关键字错误)。 myPart.WirePolyLine(points = myPoi
有没有办法用abaqus测量/计算生成模型的表面积? 我熟悉 abaqus CAE 或脚本版本中的工具 -> 查询... -> 质量属性: from abaqus import * prop=mdb.
我在 Abaqus 中编写脚本,在那里我用切圆(如奶酪)粉碎圆形和正方形。我需要在部件之间放置 Contact,所以我需要 Surface。 宏管理器生成: s1 = a.instances['kol
Abaqus 无法找到 C++ 编译器。我需要在 Abaqus 和 Intel Parallel Studio 之间设置一个需要 Visual Studio 的接口(interface)。无论我使用什
我用 python 编写了一个脚本,用于在 Abaqus 中对一组文件进行后处理。该脚本按顺序打开abaqus输出数据库文件,读取多个节点的结果,将这些结果写入.txt文件中并关闭odbs(输出数据库
我想为 Abaqus 创建一个 Python 脚本,其中将使用 Scipy 库。不幸的是,Abaqus 没有那个库。它可以安装,但我想以不同的方式进行。 我的想法是编写一个函数,该函数将接受参数,将其
我正在使用 Abaqus/Python 进行有限元分析。我遇到了以下问题:我有一个 3D 域,它由包含边和圆段的 2D 域组成,并且在三维中拉伸(stretch)。现在我想对该域进行网格划分,约束条件
Abaqus 选择的默认元素是 C3D8R,我想将其更改为 C3D8I。我知道如何在 CAE 中更改元素类型,甚至使用 Python 递归更改元素类型,但不知道如何更改默认值。 问题是,当我分区和重新
我正在尝试使用 abaqus-ython 脚本来提取节点坐标。为此,我首先提取原始节点位置,然后添加位移值。 但是对于我的 abaqus 模型之一,我注意到我提取的位移值与我在 abaqus 中找到的
在ubuntu上安装Abaqus CAE,选择安装目录后继续,出现如下错误 Creating child process failed. Log ID is 0001 Action LaunchAPp
当我运行时 call abaqus job=some_name interactive 可能会发生两件事: 如果这是我第一次运行该作业,则不会进行任何查询。 但是,如果工作存在,我会收到此消息: O
我希望能够运行一个简单的命令来检索 Abaqus 的事件版本。 我曾希望 abaqus -v 或 abaqus -version 可以工作。但是,这些命令无效。 运行 abaqus whereami
我希望能够运行一个简单的命令来检索 Abaqus 的事件版本。 我曾希望 abaqus -v 或 abaqus -version 可以工作。但是,这些命令无效。 运行 abaqus whereami
我是一名优秀的程序员,十分优秀!