You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenFOAM中如何删除List类型时间列表的前两个元素?

OpenFOAM List类型时间列表删除前两个元素实现方法

首先明确两个核心前提:

  1. 你通过mesh.time().times()拿到的是const引用类型的全局时间列表,本身不允许直接修改,官方设计也不建议对这个全局对象做修改,避免影响求解器/后处理的基础逻辑
  2. OpenFOAM的基础List模板没有提供erase方法,但可以通过子列表构造、转动态列表两种方式实现你要的效果

方案1:直接构造截断后的新List(最推荐,性能开销最小)

利用List自带的subList方法提取从第2个索引开始的所有元素,直接构造新的过滤后列表,代码如下:

const auto& tlist = mesh.time().times();
// subList参数说明:第一个是子列表长度,第二个是起始索引
// 删前2个元素,所以起始索引为2,长度为总长度减2
Foam::List<Foam::instant> filteredTlist(tlist.subList(tlist.size() - 2, 2));

// 测试打印
Foam::Info << filteredTlist << Foam::endl;

这个方法不需要额外的动态结构开销,适合不需要后续再修改列表的场景。

方案2:转为DynamicList后删除(适合需要后续动态增删元素的场景)

如果后续还需要对时间列表做增、删、改操作,可以先转为支持动态操作的DynamicList类型,调用内置的范围删除方法即可:

const auto& tlist = mesh.time().times();
// 直接用List构造DynamicList
Foam::DynamicList<Foam::instant> dynTlist(tlist);
// removeRange参数说明:第一个是删除起始索引,第二个是删除元素个数
dynTlist.removeRange(0, 2);

// 如果后续需要转回普通List,直接赋值即可
Foam::List<Foam::instant> filteredTlist(std::move(dynTlist));

额外说明

你打印出的时间列表前两个元素分别对应constant目录、初始0时刻目录,后处理场景下过滤这两个元素是通用操作,上述两种方案都可以稳定运行在所有OpenFOAM v7+版本中。

内容的提问来源于stack exchange,提问作者Iyach tharwa nambarek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:54:05