Re: [eigen] [FAQ] how to have an initialized static Matrix

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


On 03/21/2013 11:44:14 AM, Christoph Hertzberg wrote:
On 21.03.2013 11:36, Christoph Hertzberg wrote:
On 21.03.2013 10:30, Helmut Jarausch wrote:
unfortunately, Eigen's elegant initialization is an expression.

Is there an "elegant" solution for this ugly code (within a function)


   static double _C[6] = { 1.0 / 5, 3.0 / 10, 4.0 / 5, 8.0 / 9, 1.0,
1.0 };
static const Eigen::Map<Eigen::Matrix<double,6,1>,0> C((double*)_C);

I found another very hacked solution. It requires that the data layout of Matrix will not change (especially, no extra fields will be introduced):

EIGEN_ALIGN16
static const double C3_data[] = {1.0/5, 3.0/10, 4.0/5, 8.0/9, 1.0, 1.0};
static const Vec6d& C3 = reinterpret_cast<const Vec6d&>(*C3_data);

That's the case for my application : matrix and vectors of weights in higher order Runge-Kutta methods. Still, for a "real" matrix one would have to enter the transposed matrix if one likes to stay to
column ordering for efficiency.

Helmut.



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/