BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
fn_TR_contract42_arma.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_ARMA_HPP
13#define BELFEM_TR_CONTRACT42_ARMA_HPP
14
15#include "cl_Matrix.hpp"
16
17namespace belfem
18{
19
20 namespace tensor
21 {
22//----------------------------------------------------------------------------
26 template < typename T >
27 void
28 contract42( const T * A, const T * B, T * C )
29 {
30 C[ 0 ] = A[ 0 ] * B[ 0 ]
31 + A[ 9 ] * B[ 1 ]
32 + A[ 18 ] * B[ 2 ]
33 + A[ 27 ] * B[ 3 ]
34 + A[ 36 ] * B[ 4 ]
35 + A[ 45 ] * B[ 5 ]
36 + A[ 54 ] * B[ 6 ]
37 + A[ 63 ] * B[ 7 ]
38 + A[ 72 ] * B[ 8 ];
39
40 C[ 1 ] = A[ 1 ] * B[ 0 ]
41 + A[ 10 ] * B[ 1 ]
42 + A[ 19 ] * B[ 2 ]
43 + A[ 28 ] * B[ 3 ]
44 + A[ 37 ] * B[ 4 ]
45 + A[ 46 ] * B[ 5 ]
46 + A[ 55 ] * B[ 6 ]
47 + A[ 64 ] * B[ 7 ]
48 + A[ 73 ] * B[ 8 ];
49
50 C[ 2 ] = A[ 2 ] * B[ 0 ]
51 + A[ 11 ] * B[ 1 ]
52 + A[ 20 ] * B[ 2 ]
53 + A[ 29 ] * B[ 3 ]
54 + A[ 38 ] * B[ 4 ]
55 + A[ 47 ] * B[ 5 ]
56 + A[ 56 ] * B[ 6 ]
57 + A[ 65 ] * B[ 7 ]
58 + A[ 74 ] * B[ 8 ];
59
60 C[ 3 ] = A[ 3 ] * B[ 0 ]
61 + A[ 12 ] * B[ 1 ]
62 + A[ 21 ] * B[ 2 ]
63 + A[ 30 ] * B[ 3 ]
64 + A[ 39 ] * B[ 4 ]
65 + A[ 48 ] * B[ 5 ]
66 + A[ 57 ] * B[ 6 ]
67 + A[ 66 ] * B[ 7 ]
68 + A[ 75 ] * B[ 8 ];
69
70 C[ 4 ] = A[ 4 ] * B[ 0 ]
71 + A[ 13 ] * B[ 1 ]
72 + A[ 22 ] * B[ 2 ]
73 + A[ 31 ] * B[ 3 ]
74 + A[ 40 ] * B[ 4 ]
75 + A[ 49 ] * B[ 5 ]
76 + A[ 58 ] * B[ 6 ]
77 + A[ 67 ] * B[ 7 ]
78 + A[ 76 ] * B[ 8 ];
79
80 C[ 5 ] = A[ 5 ] * B[ 0 ]
81 + A[ 14 ] * B[ 1 ]
82 + A[ 23 ] * B[ 2 ]
83 + A[ 32 ] * B[ 3 ]
84 + A[ 41 ] * B[ 4 ]
85 + A[ 50 ] * B[ 5 ]
86 + A[ 59 ] * B[ 6 ]
87 + A[ 68 ] * B[ 7 ]
88 + A[ 77 ] * B[ 8 ];
89
90 C[ 6 ] = A[ 6 ] * B[ 0 ]
91 + A[ 15 ] * B[ 1 ]
92 + A[ 24 ] * B[ 2 ]
93 + A[ 33 ] * B[ 3 ]
94 + A[ 42 ] * B[ 4 ]
95 + A[ 51 ] * B[ 5 ]
96 + A[ 60 ] * B[ 6 ]
97 + A[ 69 ] * B[ 7 ]
98 + A[ 78 ] * B[ 8 ];
99
100 C[ 7 ] = A[ 7 ] * B[ 0 ]
101 + A[ 16 ] * B[ 1 ]
102 + A[ 25 ] * B[ 2 ]
103 + A[ 34 ] * B[ 3 ]
104 + A[ 43 ] * B[ 4 ]
105 + A[ 52 ] * B[ 5 ]
106 + A[ 61 ] * B[ 6 ]
107 + A[ 70 ] * B[ 7 ]
108 + A[ 79 ] * B[ 8 ];
109
110 C[ 8 ] = A[ 8 ] * B[ 0 ]
111 + A[ 17 ] * B[ 1 ]
112 + A[ 26 ] * B[ 2 ]
113 + A[ 35 ] * B[ 3 ]
114 + A[ 44 ] * B[ 4 ]
115 + A[ 53 ] * B[ 5 ]
116 + A[ 62 ] * B[ 6 ]
117 + A[ 71 ] * B[ 7 ]
118 + A[ 80 ] * B[ 8 ];
119 }
120
121 template < typename T >
122 void
123 contract42( const T * A, const Matrix< T > & B, Matrix< T > & C )
124 {
125 contract42( A, B.data(), C.data() );
126 }
127
128//----------------------------------------------------------------------------
129 } /* namespace tensor */
130} /* namespace belfem */
131#endif //BELFEM_TR_CONTRACT42_ARMA_HPP
Dense column-major matrix.
Definition cl_BZ_Matrix.hpp:28
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