/home/runner/work/kynema/kynema/kynema/src/system/beams/calculate_stiffness_quadrature_point_values.hpp Source File

Kynema API: /home/runner/work/kynema/kynema/kynema/src/system/beams/calculate_stiffness_quadrature_point_values.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
calculate_stiffness_quadrature_point_values.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <KokkosBatched_Copy_Decl.hpp>
4#include <Kokkos_Core.hpp>
5
6#include "calculate_Ouu.hpp"
7#include "calculate_Puu.hpp"
8#include "calculate_Quu.hpp"
11#include "calculate_strain.hpp"
15
16namespace kynema::beams {
17
18template <typename DeviceType>
20 template <typename ValueType>
21 using View = Kokkos::View<ValueType, DeviceType>;
22 template <typename ValueType>
24 template <typename ValueType>
25 using LeftView = Kokkos::View<ValueType, Kokkos::LayoutLeft, DeviceType>;
26 template <typename ValueType>
28
29 size_t element;
30
38
39 Kokkos::View<double* [6], DeviceType> qp_Fc;
40 Kokkos::View<double* [6], DeviceType> qp_Fd;
41 Kokkos::View<double* [6][6], DeviceType> qp_Cuu;
42 Kokkos::View<double* [6][6], DeviceType> qp_Ouu;
43 Kokkos::View<double* [6][6], DeviceType> qp_Puu;
44 Kokkos::View<double* [6][6], DeviceType> qp_Quu;
45
47 void operator()(size_t qp) const {
48 using Kokkos::ALL;
49 using Kokkos::Array;
50 using Kokkos::make_pair;
51 using Kokkos::subview;
52 using CopyMatrix = KokkosBatched::SerialCopy<>;
53 using CopyVector = KokkosBatched::SerialCopy<KokkosBatched::Trans::NoTranspose, 1>;
54
55 const auto r0_data = Array<double, 4>{
56 qp_r0(element, qp, 0), qp_r0(element, qp, 1), qp_r0(element, qp, 2),
57 qp_r0(element, qp, 3)
58 };
61 };
63 auto u_data = Array<double, 3>{};
65 auto r_data = Array<double, 4>{};
68
79
80 const auto r0 = ConstView<double[4]>(r0_data.data());
81 const auto x0_prime = ConstView<double[3]>(x0_prime_data.data());
82 const auto xr = View<double[4]>(xr_data.data());
83 const auto u = View<double[3]>(u_data.data());
84 const auto u_prime = View<double[3]>(u_prime_data.data());
85 const auto r = View<double[4]>(r_data.data());
86 const auto r_prime = View<double[4]>(r_prime_data.data());
87 const auto strain = View<double[6]>(strain_data.data());
88 const auto x0pupSS = View<double[3][3]>(x0pupSS_data.data());
89 const auto M_tilde = View<double[3][3]>(M_tilde_data.data());
90 const auto N_tilde = View<double[3][3]>(N_tilde_data.data());
91 const auto FC = View<double[6]>(FC_data.data());
92 const auto FD = View<double[6]>(FD_data.data());
93 const auto Cstar = View<double[6][6]>(Cstar_data.data());
94 const auto Cuu = View<double[6][6]>(Cuu_data.data());
95 const auto Ouu = View<double[6][6]>(Ouu_data.data());
96 const auto Puu = View<double[6][6]>(Puu_data.data());
97 const auto Quu = View<double[6][6]>(Quu_data.data());
98
99 CopyMatrix::invoke(subview(qp_Cstar, element, qp, ALL, ALL), Cstar);
100
103 u, r, u_prime, r_prime
104 );
106
108
113
116
120
121 CopyVector::invoke(FC, subview(qp_Fc, qp, ALL));
122 CopyVector::invoke(FD, subview(qp_Fd, qp, ALL));
123
124 CopyMatrix::invoke(Cuu, subview(qp_Cuu, qp, ALL, ALL));
125 CopyMatrix::invoke(Ouu, subview(qp_Ouu, qp, ALL, ALL));
126 CopyMatrix::invoke(Puu, subview(qp_Puu, qp, ALL, ALL));
127 CopyMatrix::invoke(Quu, subview(qp_Quu, qp, ALL, ALL));
128 }
129};
130
131} // namespace kynema::beams
Definition beam_quadrature.hpp:16
KOKKOS_INLINE_FUNCTION void QuaternionCompose(const Quaternion1 &q1, const Quaternion2 &q2, QuaternionN &qn)
Composes (i.e. multiplies) two quaternions and stores the result in a third quaternion.
Definition quaternion_operations.hpp:204
KOKKOS_INLINE_FUNCTION void VecTilde(const VectorType &vector, const MatrixType &matrix)
Converts a 3x1 vector to a 3x3 skew-symmetric matrix and returns the result.
Definition vector_operations.hpp:11
static KOKKOS_FUNCTION void invoke(const ConstView< double[6][6]> &Cuu, const ConstView< double[6]> &strain, const View< double[6]> &FC)
Definition calculate_force_FC.hpp:15
static KOKKOS_FUNCTION void invoke(const ConstView< double[3][3]> &x0pupSS, const ConstView< double[6]> &FC, const View< double[6]> &FD)
Definition calculate_force_FD.hpp:15
static KOKKOS_FUNCTION void invoke(const ConstView< double[6][6]> &Cuu, const ConstView< double[3][3]> &x0pupSS, const ConstView< double[3][3]> &M_tilde, const ConstView< double[3][3]> &N_tilde, const View< double[6][6]> &Ouu)
Definition calculate_Ouu.hpp:17
static KOKKOS_FUNCTION void invoke(const ConstView< double[6][6]> &Cuu, const ConstView< double[3][3]> &x0pupSS, const ConstView< double[3][3]> &N_tilde, const View< double[6][6]> &Puu)
Definition calculate_Puu.hpp:17
static KOKKOS_FUNCTION void invoke(const ConstView< double[6][6]> &Cuu, const ConstView< double[3][3]> &x0pupSS, const ConstView< double[3][3]> &N_tilde, const View< double[6][6]> &Quu)
Definition calculate_Quu.hpp:17
Definition calculate_stiffness_quadrature_point_values.hpp:19
Kokkos::View< double *[6][6], DeviceType > qp_Ouu
Definition calculate_stiffness_quadrature_point_values.hpp:42
typename LeftView< ValueType >::const_type ConstLeftView
Definition calculate_stiffness_quadrature_point_values.hpp:27
Kokkos::View< double *[6][6], DeviceType > qp_Cuu
Definition calculate_stiffness_quadrature_point_values.hpp:41
ConstView< double *[7]> node_u
Definition calculate_stiffness_quadrature_point_values.hpp:37
Kokkos::View< ValueType, Kokkos::LayoutLeft, DeviceType > LeftView
Definition calculate_stiffness_quadrature_point_values.hpp:25
ConstLeftView< double ** > shape_deriv
Definition calculate_stiffness_quadrature_point_values.hpp:33
Kokkos::View< ValueType, DeviceType > View
Definition calculate_stiffness_quadrature_point_values.hpp:21
typename View< ValueType >::const_type ConstView
Definition calculate_stiffness_quadrature_point_values.hpp:23
size_t element
Definition calculate_stiffness_quadrature_point_values.hpp:29
KOKKOS_FUNCTION void operator()(size_t qp) const
Definition calculate_stiffness_quadrature_point_values.hpp:47
ConstView< double * > qp_jacobian
Definition calculate_stiffness_quadrature_point_values.hpp:31
Kokkos::View< double *[6], DeviceType > qp_Fd
Definition calculate_stiffness_quadrature_point_values.hpp:40
Kokkos::View< double *[6][6], DeviceType > qp_Quu
Definition calculate_stiffness_quadrature_point_values.hpp:44
Kokkos::View< double *[6][6], DeviceType > qp_Puu
Definition calculate_stiffness_quadrature_point_values.hpp:43
ConstLeftView< double ** > shape_interp
Definition calculate_stiffness_quadrature_point_values.hpp:32
ConstView< double **[6][6]> qp_Cstar
Definition calculate_stiffness_quadrature_point_values.hpp:36
Kokkos::View< double *[6], DeviceType > qp_Fc
Definition calculate_stiffness_quadrature_point_values.hpp:39
ConstView< double **[4]> qp_r0
Definition calculate_stiffness_quadrature_point_values.hpp:34
ConstView< double **[3]> qp_x0_prime
Definition calculate_stiffness_quadrature_point_values.hpp:35
static KOKKOS_FUNCTION void invoke(const ConstView< double[3]> &x0_prime, const ConstView< double[3]> &u_prime, const ConstView< double[4]> &r, const ConstView< double[4]> &r_prime, const View< double[6]> &strain)
Definition calculate_strain.hpp:17
static KOKKOS_FUNCTION void invoke(const ConstView< double[3]> &x0_prime, const ConstView< double[3]> &u_prime, const View< double[3][3]> &x0pupSS)
Definition calculate_temporary_variables.hpp:17
static KOKKOS_FUNCTION void invoke(double jacobian, const ConstLeftView< double * > &shape_interp, const ConstLeftView< double * > &shape_deriv, const ConstView< double *[7]> &node_u, const View< double[3]> &u, const View< double[4]> &r, const View< double[3]> &u_prime, const View< double[4]> &r_prime)
Definition interpolate_to_quadrature_point_for_stiffness.hpp:19
static KOKKOS_FUNCTION void invoke(const ConstView< double[4]> &xr, const ConstView< double[6][6]> &Cstar, const View< double[6][6]> &Cuu)
Definition rotate_section_matrix.hpp:17