68 if(
size( ) <= a_index ) {
73 std::size_t numberOfOrders =
static_cast<std::size_t
>( m_array.m_shape[2] );
74 std::size_t rows =
static_cast<std::size_t
>( m_array.m_shape[0] );
75 std::size_t columns =
static_cast<std::size_t
>( m_array.m_shape[1] );
78 std::size_t lengthSum = 0;
79 for( std::size_t i1 = 0; i1 < m_array.m_numberOfStarts; ++i1 ) {
80 std::size_t start =
static_cast<std::size_t
>( m_array.m_starts[i1] );
81 std::size_t length =
static_cast<std::size_t
>( m_array.m_lengths[i1] );
83 std::size_t energyInIndex = start / ( numberOfOrders * columns );
84 std::size_t energyOutIndex = start % ( numberOfOrders * columns );
85 std::size_t orderIndex = energyOutIndex % numberOfOrders;
86 energyOutIndex /= numberOfOrders;
88 std::size_t step = a_index - orderIndex;
89 if( orderIndex > a_index ) {
91 if( energyOutIndex >= columns ) {
95 step += numberOfOrders;
97 std::size_t dataIndex = lengthSum + step;
98 for( ; step < length; step += numberOfOrders ) {
99 matrix.set( energyInIndex, energyOutIndex, m_array.m_dValues[dataIndex] );
101 if( energyOutIndex >= columns ) {
105 dataIndex += numberOfOrders;