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