创建具有假大小的统一特征表达式(以节省内存)
Creating a uniform Eigen expression with a fake size (to save memory)
我正在处理一些 CFD 代码和一些常量(例如表面粗糙度),我想提供将其设置为整个场的统一值或非统一值的选项.
我希望这两个选项都表示为 Eigen::DenseBase
导数,这样我就可以简单地为这两个选项使用函数模板。
非统一 值当前表示为 ArrayXXd
s,其中每一列代表一个单元格。但是,将这种类型用于 uniform 字段将是对 space 的巨大浪费:这些值永远不会改变,因此它们不需要单独表示。
所以我想要的是只存储一个列向量,然后它的行为就像它具有与非统一版本相同的列数(例如允许通过 operator()
或 [=13 访问=]).
我可能可以用包装器 class 来做到这一点,但我可能会 reinventing the square wheel.
我考虑过创建一个 custom nullary expression,但我认为那不是正确的路径,因为 AFAICT 仍然使用相同数量的内存。
如果 Eigen 类型无法实现我正在寻找的内容,我也会接受它作为答案并只使用包装器。
我正在处理一些 CFD 代码和一些常量(例如表面粗糙度),我想提供将其设置为整个场的统一值或非统一值的选项.
我希望这两个选项都表示为 Eigen::DenseBase
导数,这样我就可以简单地为这两个选项使用函数模板。
非统一 值当前表示为 ArrayXXd
s,其中每一列代表一个单元格。但是,将这种类型用于 uniform 字段将是对 space 的巨大浪费:这些值永远不会改变,因此它们不需要单独表示。
所以我想要的是只存储一个列向量,然后它的行为就像它具有与非统一版本相同的列数(例如允许通过 operator()
或 [=13 访问=]).
我可能可以用包装器 class 来做到这一点,但我可能会 reinventing the square wheel.
我考虑过创建一个 custom nullary expression,但我认为那不是正确的路径,因为 AFAICT 仍然使用相同数量的内存。
如果 Eigen 类型无法实现我正在寻找的内容,我也会接受它作为答案并只使用包装器。