BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
fn_TR_kelvin_christoffel_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_FN_TR_KELVIN_CHRISTOFFEL_ARMA_HPP
13#define BELFEM_FN_TR_KELVIN_CHRISTOFFEL_ARMA_HPP
14
15#include "cl_Vector.hpp"
16#include "cl_Matrix.hpp"
17
18namespace belfem
19{
20 namespace tensor
21 {
22//----------------------------------------------------------------------------
23
27 template < typename T >
28 void
29 kelvin_christoffel( const T * A, const T * B, T * C )
30 {
31 C[ 0 ] = B[ 0 ] * ( B[ 0 ] * A[ 0 ] + B[ 1 ] * A[ 27 ] + B[ 2 ] * A[ 54 ] )
32 + B[ 1 ] * ( B[ 0 ] * A[ 3 ] + B[ 1 ] * A[ 30 ] + B[ 2 ] * A[ 57 ] )
33 + B[ 2 ] * ( B[ 0 ] * A[ 6 ] + B[ 1 ] * A[ 33 ] + B[ 2 ] * A[ 60 ] );
34 C[ 1 ] = B[ 0 ] * ( B[ 0 ] * A[ 1 ] + B[ 1 ] * A[ 28 ] + B[ 2 ] * A[ 55 ] )
35 + B[ 1 ] * ( B[ 0 ] * A[ 4 ] + B[ 1 ] * A[ 31 ] + B[ 2 ] * A[ 58 ] )
36 + B[ 2 ] * ( B[ 0 ] * A[ 7 ] + B[ 1 ] * A[ 34 ] + B[ 2 ] * A[ 61 ] );
37 C[ 2 ] = B[ 0 ] * ( B[ 0 ] * A[ 2 ] + B[ 1 ] * A[ 29 ] + B[ 2 ] * A[ 56 ] )
38 + B[ 1 ] * ( B[ 0 ] * A[ 5 ] + B[ 1 ] * A[ 32 ] + B[ 2 ] * A[ 59 ] )
39 + B[ 2 ] * ( B[ 0 ] * A[ 8 ] + B[ 1 ] * A[ 35 ] + B[ 2 ] * A[ 62 ] );
40 C[ 3 ] = B[ 0 ] * ( B[ 0 ] * A[ 9 ] + B[ 1 ] * A[ 36 ] + B[ 2 ] * A[ 63 ] )
41 + B[ 1 ] * ( B[ 0 ] * A[ 12 ] + B[ 1 ] * A[ 39 ] + B[ 2 ] * A[ 66 ] )
42 + B[ 2 ] * ( B[ 0 ] * A[ 15 ] + B[ 1 ] * A[ 42 ] + B[ 2 ] * A[ 69 ] );
43 C[ 4 ] = B[ 0 ] * ( B[ 0 ] * A[ 10 ] + B[ 1 ] * A[ 37 ] + B[ 2 ] * A[ 64 ] )
44 + B[ 1 ] * ( B[ 0 ] * A[ 13 ] + B[ 1 ] * A[ 40 ] + B[ 2 ] * A[ 67 ] )
45 + B[ 2 ] * ( B[ 0 ] * A[ 16 ] + B[ 1 ] * A[ 43 ] + B[ 2 ] * A[ 70 ] );
46 C[ 5 ] = B[ 0 ] * ( B[ 0 ] * A[ 11 ] + B[ 1 ] * A[ 38 ] + B[ 2 ] * A[ 65 ] )
47 + B[ 1 ] * ( B[ 0 ] * A[ 14 ] + B[ 1 ] * A[ 41 ] + B[ 2 ] * A[ 68 ] )
48 + B[ 2 ] * ( B[ 0 ] * A[ 17 ] + B[ 1 ] * A[ 44 ] + B[ 2 ] * A[ 71 ] );
49 C[ 6 ] = B[ 0 ] * ( B[ 0 ] * A[ 18 ] + B[ 1 ] * A[ 45 ] + B[ 2 ] * A[ 72 ] )
50 + B[ 1 ] * ( B[ 0 ] * A[ 21 ] + B[ 1 ] * A[ 48 ] + B[ 2 ] * A[ 75 ] )
51 + B[ 2 ] * ( B[ 0 ] * A[ 24 ] + B[ 1 ] * A[ 51 ] + B[ 2 ] * A[ 78 ] );
52 C[ 7 ] = B[ 0 ] * ( B[ 0 ] * A[ 19 ] + B[ 1 ] * A[ 46 ] + B[ 2 ] * A[ 73 ] )
53 + B[ 1 ] * ( B[ 0 ] * A[ 22 ] + B[ 1 ] * A[ 49 ] + B[ 2 ] * A[ 76 ] )
54 + B[ 2 ] * ( B[ 0 ] * A[ 25 ] + B[ 1 ] * A[ 52 ] + B[ 2 ] * A[ 79 ] );
55 C[ 8 ] = B[ 0 ] * ( B[ 0 ] * A[ 20 ] + B[ 1 ] * A[ 47 ] + B[ 2 ] * A[ 74 ] )
56 + B[ 1 ] * ( B[ 0 ] * A[ 23 ] + B[ 1 ] * A[ 50 ] + B[ 2 ] * A[ 77 ] )
57 + B[ 2 ] * ( B[ 0 ] * A[ 26 ] + B[ 1 ] * A[ 53 ] + B[ 2 ] * A[ 80 ] );
58 }
59
60 template < typename T >
61 void
62 kelvin_christoffel( const T * A, const Vector< T > & B, Matrix< T > & C )
63 {
64 kelvin_christoffel( A, B.data(), C.data() );
65 }
66
67//----------------------------------------------------------------------------
68 }
69}
70#endif //BELFEM_FN_TR_KELVIN_CHRISTOFFEL_HPP
Dense column-major matrix.
Definition cl_BZ_Matrix.hpp:28
Column vector.
Definition cl_BZ_Vector.hpp:41
Definition fn_TR_contract42_arma.hpp:21
void kelvin_christoffel(const T *A, const T *B, T *C)
C_ik = A_ijkl * B_j * B_l.
Definition fn_TR_kelvin_christoffel_arma.hpp:29
USER GUIDES:
Definition cl_Capacitor.cpp:16