BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
fn_TR_contract42_blaze.hpp
Go to the documentation of this file.
1/*
2 * BELFEM -- The Berkeley Lab Finite Element Framework
3 * Copyright (c) 2026, The Regents of the University of California,
4 * through Lawrence Berkeley National Laboratory (subject to receipt of any required
5 * approvals from the U.S. Dept. of Energy). All rights reserved.
6 *
7 * Developers: Christian Messe, Gregory Giard
8 *
9 * See the top-level LICENSE file for the complete license and disclaimer.
10 */
11
12#ifndef BELFEM_TR_CONTRACT42_BLAZE_HPP
13#define BELFEM_TR_CONTRACT42_BLAZE_HPP
14
15#include "cl_Matrix.hpp"
16namespace belfem
17{
18 namespace tensor
19 {
20//----------------------------------------------------------------------------
21
25 template < typename T >
26 inline void
27 contract42( const T * A, const Matrix< T > & B, Matrix< T > & C )
28 {
29 C( 0, 0 ) = A[ 0 ] * B( 0, 0 )
30 + A[ 9 ] * B( 1, 0 )
31 + A[ 18 ] * B( 2, 0 )
32 + A[ 27 ] * B( 0, 1 )
33 + A[ 36 ] * B( 1, 1 )
34 + A[ 45 ] * B( 2, 1 )
35 + A[ 54 ] * B( 0, 2 )
36 + A[ 63 ] * B( 1, 2 )
37 + A[ 72 ] * B( 2, 2 );
38
39 C( 1, 0 ) = A[ 1 ] * B( 0, 0 )
40 + A[ 10 ] * B( 1, 0 )
41 + A[ 19 ] * B( 2, 0 )
42 + A[ 28 ] * B( 0, 1 )
43 + A[ 37 ] * B( 1, 1 )
44 + A[ 46 ] * B( 2, 1 )
45 + A[ 55 ] * B( 0, 2 )
46 + A[ 64 ] * B( 1, 2 )
47 + A[ 73 ] * B( 2, 2 );
48
49 C( 2, 0 ) = A[ 2 ] * B( 0, 0 )
50 + A[ 11 ] * B( 1, 0 )
51 + A[ 20 ] * B( 2, 0 )
52 + A[ 29 ] * B( 0, 1 )
53 + A[ 38 ] * B( 1, 1 )
54 + A[ 47 ] * B( 2, 1 )
55 + A[ 56 ] * B( 0, 2 )
56 + A[ 65 ] * B( 1, 2 )
57 + A[ 74 ] * B( 2, 2 );
58
59 C( 0, 1 ) = A[ 3 ] * B( 0, 0 )
60 + A[ 12 ] * B( 1, 0 )
61 + A[ 21 ] * B( 2, 0 )
62 + A[ 30 ] * B( 0, 1 )
63 + A[ 39 ] * B( 1, 1 )
64 + A[ 48 ] * B( 2, 1 )
65 + A[ 57 ] * B( 0, 2 )
66 + A[ 66 ] * B( 1, 2 )
67 + A[ 75 ] * B( 2, 2 );
68
69 C( 1, 1 ) = A[ 4 ] * B( 0, 0 )
70 + A[ 13 ] * B( 1, 0 )
71 + A[ 22 ] * B( 2, 0 )
72 + A[ 31 ] * B( 0, 1 )
73 + A[ 40 ] * B( 1, 1 )
74 + A[ 49 ] * B( 2, 1 )
75 + A[ 58 ] * B( 0, 2 )
76 + A[ 67 ] * B( 1, 2 )
77 + A[ 76 ] * B( 2, 2 );
78
79 C( 2, 1 )= A[ 5 ] * B( 0, 0 )
80 + A[ 14 ] * B( 1, 0 )
81 + A[ 23 ] * B( 2, 0 )
82 + A[ 32 ] * B( 0, 1 )
83 + A[ 41 ] * B( 1, 1 )
84 + A[ 50 ] * B( 2, 1 )
85 + A[ 59 ] * B( 0, 2 )
86 + A[ 68 ] * B( 1, 2 )
87 + A[ 77 ] * B( 2, 2 );
88
89 C( 0, 2 ) = A[ 6 ] * B( 0, 0 )
90 + A[ 15 ] * B( 1, 0 )
91 + A[ 24 ] * B( 2, 0 )
92 + A[ 33 ] * B( 0, 1 )
93 + A[ 42 ] * B( 1, 1 )
94 + A[ 51 ] * B( 2, 1 )
95 + A[ 60 ] * B( 0, 2 )
96 + A[ 69 ] * B( 1, 2 )
97 + A[ 78 ] * B( 2, 2 );
98
99 C( 1, 2 ) = A[ 7 ] * B( 0, 0 )
100 + A[ 16 ] * B( 1, 0 )
101 + A[ 25 ] * B( 2, 0 )
102 + A[ 34 ] * B( 0, 1 )
103 + A[ 43 ] * B( 1, 1 )
104 + A[ 52 ] * B( 2, 1 )
105 + A[ 61 ] * B( 0, 2 )
106 + A[ 70 ] * B( 1, 2 )
107 + A[ 79 ] * B( 2, 2 );
108
109 C( 2, 2 ) = A[ 8 ] * B( 0, 0 )
110 + A[ 17 ] * B( 1, 0 )
111 + A[ 26 ] * B( 2, 0 )
112 + A[ 35 ] * B( 0, 1 )
113 + A[ 44 ] * B( 1, 1 )
114 + A[ 53 ] * B( 2, 1 )
115 + A[ 62 ] * B( 0, 2 )
116 + A[ 71 ] * B( 1, 2 )
117 + A[ 80 ] * B( 2, 2 );
118 }
119//----------------------------------------------------------------------------
120 } /* namespace tensor */
121} /* namespace belfem */
122#endif //BELFEM_FN_TR_CONTRACT42_BLAZE_HPP
Definition fn_TR_contract42_arma.hpp:21
void contract42(const T *A, const T *B, T *C)
tensor contraction A_ijkl * B_kl = C_ij
Definition fn_TR_contract42_arma.hpp:28
USER GUIDES:
Definition cl_Capacitor.cpp:16
C
Definition test_curve_frame.py:49
B
Definition test_twist_crosscheck.py:30