Skip to content

Commit bb9456a

Browse files
authored
Feature/rrsettgast/update tensor ops (#200)
* remove temporaries from some tensorOps functions * change names of tensor ops functions to include rhs and index indicator * fix error messages. fix documentation
1 parent f634198 commit bb9456a

17 files changed

+552
-561
lines changed

docs/sphinx/tensorOps.rst

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,12 @@ Variables
103103
--------------------------------------------------------------------------------------------------
104104
Operation Function
105105
====================================================== ===========================================
106-
:math:`\mathbf{A} \leftarrow x y^T` ``tensorOps::AiBj< m, n >( A, x, y )``
107-
:math:`\mathbf{A} \leftarrow \mathbf{A} + x y^T` ``tensorOps::plusAiBj< m, n >( A, x, y )``
108-
:math:`x \leftarrow \mathbf{A} y` ``tensorOps::AijBj< m, n >( x, A, y )``
109-
:math:`x \leftarrow x + \mathbf{A} y` ``tensorOps::plusAijBj< m, n >( x, A, y )``
110-
:math:`y \leftarrow \mathbf{A}^T x` ``tensorOps::AjiBj< n, m >( y, A, x )``
111-
:math:`y \leftarrow y + \mathbf{A}^T x` ``tensorOps::plusAjiBj< n, m >( y, A, x )``
106+
:math:`\mathbf{A} \leftarrow x y^T` ``tensorOps::Rij_eq_AiBj< m, n >( A, x, y )``
107+
:math:`\mathbf{A} \leftarrow \mathbf{A} + x y^T` ``tensorOps::Rij_add_AiBj< m, n >( A, x, y )``
108+
:math:`x \leftarrow \mathbf{A} y` ``tensorOps::Ri_eq_AijBj< m, n >( x, A, y )``
109+
:math:`x \leftarrow x + \mathbf{A} y` ``tensorOps::Ri_add_AijBj< m, n >( x, A, y )``
110+
:math:`y \leftarrow \mathbf{A}^T x` ``tensorOps::Ri_eq_AjiBj< n, m >( y, A, x )``
111+
:math:`y \leftarrow y + \mathbf{A}^T x` ``tensorOps::Ri_add_AjiBj< n, m >( y, A, x )``
112112
====================================================== ===========================================
113113

114114
Matrix operations
@@ -130,13 +130,13 @@ Variables
130130
Operation Function
131131
=================================================================== ===============================================
132132
:math:`\mathbf{A} \leftarrow \mathbf{D}^T` ``tensorOps::transpose< m, n >( A, D )``
133-
:math:`\mathbf{A} \leftarrow \mathbf{B} \mathbf{C}` ``tensorOps::AikBkj< m, n, p >( A, B, C )``
134-
:math:`\mathbf{A} \leftarrow \mathbf{A} + \mathbf{B} \mathbf{C}` ``tensorOps::plusAikBkj< m, n, p >( A, B, C )``
135-
:math:`\mathbf{B} \leftarrow \mathbf{A} \mathbf{C}^T` ``tensorOps::AikBjk< m, p, n >( B, A, C )``
136-
:math:`\mathbf{B} \leftarrow \mathbf{B} + \mathbf{A} \mathbf{C}^T` ``tensorOps::plusAikBjk< m, p, n >( B, A, C )``
137-
:math:`\mathbf{E} \leftarrow \mathbf{E} + \mathbf{A} \mathbf{A}^T` ``tensorOps::plusAikAjk< m, n >( E, A )``
138-
:math:`\mathbf{C} \leftarrow \mathbf{B}^T \mathbf{A}` ``tensorOps::AkiBkj< p, n, m >( C, B, A )``
139-
:math:`\mathbf{C} \leftarrow \mathbf{C} + \mathbf{B}^T \mathbf{A}` ``tensorOps::plusAkiBkj< p, n, m >( C, B, A )``
133+
:math:`\mathbf{A} \leftarrow \mathbf{B} \mathbf{C}` ``tensorOps::Rij_eq_AikBkj< m, n, p >( A, B, C )``
134+
:math:`\mathbf{A} \leftarrow \mathbf{A} + \mathbf{B} \mathbf{C}` ``tensorOps::Rij_add_AikBkj< m, n, p >( A, B, C )``
135+
:math:`\mathbf{B} \leftarrow \mathbf{A} \mathbf{C}^T` ``tensorOps::Rij_eq_AikBjk< m, p, n >( B, A, C )``
136+
:math:`\mathbf{B} \leftarrow \mathbf{B} + \mathbf{A} \mathbf{C}^T` ``tensorOps::Rij_add_AikBjk< m, p, n >( B, A, C )``
137+
:math:`\mathbf{E} \leftarrow \mathbf{E} + \mathbf{A} \mathbf{A}^T` ``tensorOps::Rij_add_AikAjk< m, n >( E, A )``
138+
:math:`\mathbf{C} \leftarrow \mathbf{B}^T \mathbf{A}` ``tensorOps::Rij_eq_AkiBkj< p, n, m >( C, B, A )``
139+
:math:`\mathbf{C} \leftarrow \mathbf{C} + \mathbf{B}^T \mathbf{A}` ``tensorOps::Rij_add_AkiBkj< p, n, m >( C, B, A )``
140140
=================================================================== ===============================================
141141

142142
Square matrix operations
@@ -188,10 +188,10 @@ Operation
188188
================================================================================ ==============================================
189189
:math:`\mathbf{S} \leftarrow \mathbf{S} + \alpha \mathbf{I}` ``tensorOps::symAddIdentity< m >( S, alpha )``
190190
:math:`tr(\mathbf{S})` ``tensorOps::symTrace< m >( S )``
191-
:math:`x \leftarrow \mathbf{S} y` ``tensorOps::symAijBj< m >( x, S ,y )``
192-
:math:`x \leftarrow x + \mathbf{S} y` ``tensorOps::plusSymAijBj< m >( x, S ,y )``
193-
:math:`\mathbf{A} \leftarrow \mathbf{S} \mathbf{B}^T` ``tensorOps::symAikBjk< m >( A, S, B )``
194-
:math:`\mathbf{S} \leftarrow \mathbf{A} \mathbf{Q} \mathbf{A}^T` ``tensorOps::AikSymBklAjl< m >( S, A, Q )``
191+
:math:`x \leftarrow \mathbf{S} y` ``tensorOps::Ri_eq_symAijBj< m >( x, S ,y )``
192+
:math:`x \leftarrow x + \mathbf{S} y` ``tensorOps::Ri_add_symAijBj< m >( x, S ,y )``
193+
:math:`\mathbf{A} \leftarrow \mathbf{S} \mathbf{B}^T` ``tensorOps::Rij_eq_symAikBjk< m >( A, S, B )``
194+
:math:`\mathbf{S} \leftarrow \mathbf{A} \mathbf{Q} \mathbf{A}^T` ``tensorOps::Rij_eq_AikSymBklAjl< m >( S, A, Q )``
195195
:math:`|\mathbf{S}|` ``tensorOps::symDeterminant< m >( S )``
196196
:math:`\mathbf{S} \leftarrow \mathbf{Q}^-1` ``tensorOps::symInvert< m >( S, Q )``
197197
:math:`\mathbf{S} \leftarrow \mathbf{S}^-1` ``tensorOps::symInvert< m >( S )``

examples/exampleTensorOps.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ CUDA_TEST( tensorOps, device )
9898
float x[ 3 ] = { 1.3f, 2.2f, 5.3f };
9999

100100
// You can mix value types.
101-
LvArray::tensorOps::symAijBj< 3 >( result, symmetricMatricesView[ i ], x );
101+
LvArray::tensorOps::Ri_eq_symAijBj< 3 >( result, symmetricMatricesView[ i ], x );
102102

103103
LVARRAY_ERROR_IF_NE( result[ 0 ], x[ 0 ] * symmetricMatricesView( i, 0 ) +
104104
x[ 1 ] * symmetricMatricesView( i, 5 ) +

host-configs/LLNL/[email protected]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ set(CMAKE_CUDA_FLAGS_RELWITHDEBINFO "-g -lineinfo ${CMAKE_CUDA_FLAGS_RELEASE}" C
5454
set(CMAKE_CUDA_FLAGS_DEBUG "-g -G -O0 -Xcompiler -O0" CACHE STRING "")
5555

5656
# Uncomment this line to make nvcc output register usage for each kernel.
57-
# set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --resource-usage" CACHE STRING "" FORCE)
57+
#set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --resource-usage" CACHE STRING "" FORCE)
5858

5959
# GTEST options
6060
set(ENABLE_GTEST_DEATH_TESTS OFF CACHE BOOL "")

src/fixedSizeSquareMatrixOps.hpp

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,13 @@ auto invert( MATRIX && matrix )
9797
*/
9898
template< std::ptrdiff_t M, typename DST_VECTOR, typename SYM_MATRIX_A, typename VECTOR_B >
9999
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK inline
100-
void symAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
101-
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
102-
VECTOR_B const & LVARRAY_RESTRICT_REF vectorB )
100+
void Ri_eq_symAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
101+
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
102+
VECTOR_B const & LVARRAY_RESTRICT_REF vectorB )
103103
{
104-
internal::SquareMatrixOps< M >::symAijBj( std::forward< DST_VECTOR >( dstVector ),
105-
symMatrixA,
106-
vectorB );
104+
internal::SquareMatrixOps< M >::Ri_eq_symAijBj( std::forward< DST_VECTOR >( dstVector ),
105+
symMatrixA,
106+
vectorB );
107107
}
108108

109109
/**
@@ -119,13 +119,13 @@ void symAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
119119
*/
120120
template< std::ptrdiff_t M, typename DST_VECTOR, typename SYM_MATRIX_A, typename VECTOR_B >
121121
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK inline
122-
void plusSymAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
123-
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
124-
VECTOR_B const & LVARRAY_RESTRICT_REF vectorB )
122+
void Ri_add_symAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
123+
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
124+
VECTOR_B const & LVARRAY_RESTRICT_REF vectorB )
125125
{
126-
internal::SquareMatrixOps< M >::plusSymAijBj( std::forward< DST_VECTOR >( dstVector ),
127-
symMatrixA,
128-
vectorB );
126+
internal::SquareMatrixOps< M >::Ri_add_symAijBj( std::forward< DST_VECTOR >( dstVector ),
127+
symMatrixA,
128+
vectorB );
129129
}
130130

131131
/**
@@ -142,13 +142,13 @@ void plusSymAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
142142
*/
143143
template< std::ptrdiff_t M, typename DST_MATRIX, typename SYM_MATRIX_A, typename MATRIX_B >
144144
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK inline
145-
void symAikBjk( DST_MATRIX && LVARRAY_RESTRICT_REF dstMatrix,
146-
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
147-
MATRIX_B const & LVARRAY_RESTRICT_REF matrixB )
145+
void Rij_eq_symAikBjk( DST_MATRIX && LVARRAY_RESTRICT_REF dstMatrix,
146+
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
147+
MATRIX_B const & LVARRAY_RESTRICT_REF matrixB )
148148
{
149-
internal::SquareMatrixOps< M >::symAikBjk( std::forward< DST_MATRIX >( dstMatrix ),
150-
symMatrixA,
151-
matrixB );
149+
internal::SquareMatrixOps< M >::Rij_eq_symAikBjk( std::forward< DST_MATRIX >( dstMatrix ),
150+
symMatrixA,
151+
matrixB );
152152
}
153153

154154
/**
@@ -167,13 +167,13 @@ void symAikBjk( DST_MATRIX && LVARRAY_RESTRICT_REF dstMatrix,
167167
*/
168168
template< std::ptrdiff_t M, typename DST_SYM_MATRIX, typename MATRIX_A, typename SYM_MATRIX_B >
169169
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK inline
170-
void AikSymBklAjl( DST_SYM_MATRIX && LVARRAY_RESTRICT_REF dstSymMatrix,
171-
MATRIX_A const & LVARRAY_RESTRICT_REF matrixA,
172-
SYM_MATRIX_B const & LVARRAY_RESTRICT_REF symMatrixB )
170+
void Rij_eq_AikSymBklAjl( DST_SYM_MATRIX && LVARRAY_RESTRICT_REF dstSymMatrix,
171+
MATRIX_A const & LVARRAY_RESTRICT_REF matrixA,
172+
SYM_MATRIX_B const & LVARRAY_RESTRICT_REF symMatrixB )
173173
{
174-
internal::SquareMatrixOps< M >::AikSymBklAjl( std::forward< DST_SYM_MATRIX >( dstSymMatrix ),
175-
matrixA,
176-
symMatrixB );
174+
internal::SquareMatrixOps< M >::Rij_eq_AikSymBklAjl( std::forward< DST_SYM_MATRIX >( dstSymMatrix ),
175+
matrixA,
176+
symMatrixB );
177177
}
178178

179179
/**

src/fixedSizeSquareMatrixOpsImpl.hpp

Lines changed: 47 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,9 @@ struct SquareMatrixOps< 2 >
223223
*/
224224
template< typename DST_VECTOR, typename SYM_MATRIX_A, typename VECTOR_B >
225225
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK inline
226-
static void symAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
227-
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
228-
VECTOR_B const & LVARRAY_RESTRICT_REF vectorB )
226+
static void Ri_eq_symAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
227+
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
228+
VECTOR_B const & LVARRAY_RESTRICT_REF vectorB )
229229
{
230230
checkSizes< 2 >( dstVector );
231231
checkSizes< 3 >( symMatrixA );
@@ -247,9 +247,9 @@ struct SquareMatrixOps< 2 >
247247
*/
248248
template< typename DST_VECTOR, typename SYM_MATRIX_A, typename VECTOR_B >
249249
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK inline
250-
static void plusSymAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
251-
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
252-
VECTOR_B const & LVARRAY_RESTRICT_REF vectorB )
250+
static void Ri_add_symAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
251+
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
252+
VECTOR_B const & LVARRAY_RESTRICT_REF vectorB )
253253
{
254254
checkSizes< 2 >( dstVector );
255255
checkSizes< 3 >( symMatrixA );
@@ -272,9 +272,9 @@ struct SquareMatrixOps< 2 >
272272
*/
273273
template< typename DST_MATRIX, typename SYM_MATRIX_A, typename MATRIX_B >
274274
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK inline
275-
static void symAikBjk( DST_MATRIX && LVARRAY_RESTRICT_REF dstMatrix,
276-
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
277-
MATRIX_B const & LVARRAY_RESTRICT_REF matrixB )
275+
static void Rij_eq_symAikBjk( DST_MATRIX && LVARRAY_RESTRICT_REF dstMatrix,
276+
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
277+
MATRIX_B const & LVARRAY_RESTRICT_REF matrixB )
278278
{
279279
checkSizes< 2, 2 >( dstMatrix );
280280
checkSizes< 3 >( symMatrixA );
@@ -302,9 +302,9 @@ struct SquareMatrixOps< 2 >
302302
*/
303303
template< typename DST_SYM_MATRIX, typename MATRIX_A, typename SYM_MATRIX_B >
304304
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK inline
305-
static void AikSymBklAjl( DST_SYM_MATRIX && LVARRAY_RESTRICT_REF dstSymMatrix,
306-
MATRIX_A const & LVARRAY_RESTRICT_REF matrixA,
307-
SYM_MATRIX_B const & LVARRAY_RESTRICT_REF symMatrixB )
305+
static void Rij_eq_AikSymBklAjl( DST_SYM_MATRIX && LVARRAY_RESTRICT_REF dstSymMatrix,
306+
MATRIX_A const & LVARRAY_RESTRICT_REF matrixA,
307+
SYM_MATRIX_B const & LVARRAY_RESTRICT_REF symMatrixB )
308308
{
309309
checkSizes< 3 >( dstSymMatrix );
310310
checkSizes< 2, 2 >( matrixA );
@@ -580,11 +580,30 @@ struct SquareMatrixOps< 3 >
580580
LVARRAY_HOST_DEVICE constexpr inline
581581
static auto invert( MATRIX && matrix )
582582
{
583-
std::remove_reference_t< decltype( matrix[ 0 ][ 0 ] ) > temp[ 3 ][ 3 ];
584-
auto const det = invert( temp, matrix );
585-
copy< 3, 3 >( matrix, temp );
586-
583+
using realType = std::remove_reference_t< decltype( matrix[ 0 ][ 0 ] ) >;
584+
#if 0
585+
realType temp[ 3 ][ 3 ];
586+
copy< 3, 3 >( temp, matrix );
587+
return invert( matrix, temp );
588+
#else
589+
// cuda kernels use a couple fewer registers in some cases with this implementation.
590+
realType const temp[3][3] =
591+
{ { matrix[1][1]*matrix[2][2] - matrix[1][2]*matrix[2][1], matrix[0][2]*matrix[2][1] - matrix[0][1]*matrix[2][2], matrix[0][1]*matrix[1][2] - matrix[0][2]*matrix[1][1] },
592+
{ matrix[1][2]*matrix[2][0] - matrix[1][0]*matrix[2][2], matrix[0][0]*matrix[2][2] - matrix[0][2]*matrix[2][0], matrix[0][2]*matrix[1][0] - matrix[0][0]*matrix[1][2] },
593+
{ matrix[1][0]*matrix[2][1] - matrix[1][1]*matrix[2][0], matrix[0][1]*matrix[2][0] - matrix[0][0]*matrix[2][1], matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0] } };
594+
595+
realType const det = matrix[0][0] * temp[0][0] + matrix[1][0] * temp[0][1] + matrix[2][0] * temp[0][2];
596+
realType const invDet = 1.0 / det;
597+
598+
for( int i=0; i<3; ++i )
599+
{
600+
for( int j=0; j<3; ++j )
601+
{
602+
matrix[i][j] = temp[i][j] * invDet;
603+
}
604+
}
587605
return det;
606+
#endif
588607
}
589608

590609
/**
@@ -674,9 +693,9 @@ struct SquareMatrixOps< 3 >
674693
*/
675694
template< typename DST_VECTOR, typename SYM_MATRIX_A, typename VECTOR_B >
676695
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK inline
677-
static void symAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
678-
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
679-
VECTOR_B const & LVARRAY_RESTRICT_REF vectorB )
696+
static void Ri_eq_symAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
697+
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
698+
VECTOR_B const & LVARRAY_RESTRICT_REF vectorB )
680699
{
681700
checkSizes< 3 >( dstVector );
682701
checkSizes< 6 >( symMatrixA );
@@ -705,9 +724,9 @@ struct SquareMatrixOps< 3 >
705724
*/
706725
template< typename DST_VECTOR, typename SYM_MATRIX_A, typename VECTOR_B >
707726
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK inline
708-
static void plusSymAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
709-
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
710-
VECTOR_B const & LVARRAY_RESTRICT_REF vectorB )
727+
static void Ri_add_symAijBj( DST_VECTOR && LVARRAY_RESTRICT_REF dstVector,
728+
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
729+
VECTOR_B const & LVARRAY_RESTRICT_REF vectorB )
711730
{
712731
checkSizes< 3 >( dstVector );
713732
checkSizes< 6 >( symMatrixA );
@@ -740,9 +759,9 @@ struct SquareMatrixOps< 3 >
740759
*/
741760
template< typename DST_MATRIX, typename SYM_MATRIX_A, typename MATRIX_B >
742761
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK inline
743-
static void symAikBjk( DST_MATRIX && LVARRAY_RESTRICT_REF dstMatrix,
744-
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
745-
MATRIX_B const & LVARRAY_RESTRICT_REF matrixB )
762+
static void Rij_eq_symAikBjk( DST_MATRIX && LVARRAY_RESTRICT_REF dstMatrix,
763+
SYM_MATRIX_A const & LVARRAY_RESTRICT_REF symMatrixA,
764+
MATRIX_B const & LVARRAY_RESTRICT_REF matrixB )
746765
{
747766
checkSizes< 3, 3 >( dstMatrix );
748767
checkSizes< 6 >( symMatrixA );
@@ -794,9 +813,9 @@ struct SquareMatrixOps< 3 >
794813
*/
795814
template< typename DST_SYM_MATRIX, typename MATRIX_A, typename SYM_MATRIX_B >
796815
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK inline
797-
static void AikSymBklAjl( DST_SYM_MATRIX && LVARRAY_RESTRICT_REF dstSymMatrix,
798-
MATRIX_A const & LVARRAY_RESTRICT_REF matrixA,
799-
SYM_MATRIX_B const & LVARRAY_RESTRICT_REF symMatrixB )
816+
static void Rij_eq_AikSymBklAjl( DST_SYM_MATRIX && LVARRAY_RESTRICT_REF dstSymMatrix,
817+
MATRIX_A const & LVARRAY_RESTRICT_REF matrixA,
818+
SYM_MATRIX_B const & LVARRAY_RESTRICT_REF symMatrixB )
800819
{
801820
checkSizes< 6 >( dstSymMatrix );
802821
checkSizes< 3, 3 >( matrixA );

0 commit comments

Comments
 (0)