Создание единого собственного выражения с поддельным размером (для экономии памяти) - PullRequest
1 голос
/ 13 июля 2020

Я работаю над некоторым кодом CFD и для некоторых констант (таких как шероховатость поверхности), я хотел бы предоставить возможность либо установить его на единое значение для всего поля, либо на неоднородные значения. Я бы предпочел, чтобы оба варианта были представлены как производные Eigen::DenseBase, чтобы я мог просто использовать шаблоны функций для обоих вариантов.

Неоднородные значения в настоящее время представлены как ArrayXXd s , где каждый столбец представляет собой ячейку. Однако использование этого типа для полей uniform было бы огромной тратой места: эти значения никогда не меняются, поэтому они не нуждаются в индивидуальном представлении.

Итак, я хочу просто сохранить один вектор-столбец, который затем ведет себя так, как если бы он имел такое же количество столбцов, что и неоднородная версия (например, разрешает доступ через operator() или .col(Index)). Я, вероятно, мог бы сделать это с классом-оболочкой, но тогда я бы, вероятно, заново изобрел квадратное колесо .

Я попытался создать обычное нулевое выражение , но я не думаю, что это правильный путь, потому что AFAICT по-прежнему использует тот же объем памяти.

Если то, что я ищу, невозможно с типом Eigen, я также приму это как ответ и будет просто использовать обертку.

1 Ответ

0 голосов
/ 14 июля 2020

Не уверен, что это должен быть ответ, потому что он равен «RTFM».

Под руководством chtz я пересмотрел функциональность, которую уже предоставляет Эйген, которую я ранее отклонил основан на плохо написанном тесте. Но все это уже есть в библиотеке:

Replicate делает именно то, что я хочу.

...