我如何使用c++ API从Abaqus odb文件中提取比我的RAM大的数据(fieldOutputs)
How can I extract Data(fieldOutputs) which is bigger than my RAM from an Abaqus odb-file using the c++ API
我正在使用c++ API访问*。odb文件。读取文件没有问题,除非文件比我的RAM大。
文档中有两个例程用于从odb文件读取数据(在我的例子中是fieldOutputs)。
1。批量数据
odb_FieldOutput& disp = lastFrame.fieldOutputs()["U"];
const odb_SequenceFieldBulkData& seqDispBulkData = disp.bulkDataBlocks();
int numDispBlocks = seqDispBulkData.size();
for (int iblock=0; iblock<numDispBlocks; iblock++) {
const odb_FieldBulkData& bulkData = seqDispBulkData[iblock];
int numNodes = bulkData.length();
int numComp = bulkData.width();
float* data = bulkData.data();
int* nodeLabels = bulkData.nodeLabels();
for (int node=0,pos=0; node<numNodes; node++) {
int nodeLabel = nodeLabels[node];
cout << "Node = " << nodeLabel;
cout << " U = ";
for (int comp=0;comp<numComp;comp++) {
cout << data[pos++] << " ";
}
cout << endl;
}
}
2值const odb_SequenceFieldValue& displacements = lastFrame.fieldOutputs()["U"].values();
int numValues = displacements.size();
int numComp = 0;
for (int i=0; i<numValues; i++) {
const odb_FieldValue val = displacements[i];
cout << "Node = " << val.nodeLabel();
const float* const U = val.data(numComp);
cout << ", U = ";
for (int comp=0;comp<numComp;comp++)
cout << U[comp] << " ";
}
cout << endl;
}
我想做的是从文件中读取数据并将它们保存到mat文件中。
数据形状:
Odb-file是一个可以用树状结构表示的数据库。
包含步骤。每个步骤包含帧,每个帧包含fieldOutputs。这些字段输出可以是矩阵或向量。维度取决于节点的数量和每个字段输出的参数数量。
我的问题:
所提到的例程之一能够依次加载大于RAM的文件吗?如果有,我很乐意得到一些提示。
附加信息:
文档:http://abaqus.software.polimi.it/v6.12/books/ker/default.htm和http://xn--90ajn.xn--p1ai:2080/v6.12/pdf_books/SCRIPT_USER.pdf我使用Abaqus 6.12和visual studio 2010编译器
一个字段的输出真的比你的RAM大吗?你有超过10亿个元素吗?
我认为您正在运行大量的字段输出,并且在这样做时内存不足。
在那里你可以用完内存,因为Abaqus Odb API没有正确释放内存(据我观察)。在c++ API中有一些未记录的函数来释放内存,如果我找到它们,我可以提供。
即使这样,我也不能让API释放内存。我解决了这个问题(打开Odb ->读取数据块->关闭Odb ->重新打开Odb并读取下一个数据块)我的观察是,在每个块被正确释放后等待1或2秒将是有帮助的。
因此读取数据块后块到Matlab(将其保存在Matlab中)将是一种使其工作的方法。
当然,如果您读取整个字段输出,bulkData方法将是有利的。
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 为什么我的 2d 数组的第二行从 RAM 中获取随机值?
- 为什么我的C 代码在Linux上运行,而在Windows上不运行,是否有RAM内存的问题
- 为什么free()没有释放我的Arduino Uno上的RAM
- 出于某种原因,一个int在我的ram上的重量超过了32位
- 我的 265GB RAM 笔记本电脑上的内存是否超过 8GB
- 为什么我的程序设计为用完 RAM 和 CPU 不使用所有 RAM 和 CPU?
- 为什么当我的矢量<矢量<int><矢量> >大于 RAM 时,我的程序会产生正确的输出?
- 我如何使用c++ API从Abaqus odb文件中提取比我的RAM大的数据(fieldOutputs)
- 是我的SDL/C++程序占用了太多RAM内存吗
- 我怎么能画一个平铺图没有我的ram使用或cpu使用的方式上升