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

Kynema API: /home/runner/work/kynema/kynema/kynema/src/system/beams/integrate_stiffness_matrix.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
integrate_stiffness_matrix.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <KokkosBatched_Copy_Decl.hpp>
4#include <Kokkos_Core.hpp>
5#include <Kokkos_SIMD.hpp>
6
7namespace kynema::beams {
8
9template <typename DeviceType>
11 template <typename ValueType>
12 using View = Kokkos::View<ValueType, DeviceType>;
13 template <typename ValueType>
15 template <typename ValueType>
16 using LeftView = Kokkos::View<ValueType, Kokkos::LayoutLeft, DeviceType>;
17 template <typename ValueType>
19
20 size_t element;
21 size_t num_nodes;
22 size_t num_qps;
33
35 void operator()(size_t node_simd_node) const {
36 using simd_type = Kokkos::Experimental::simd<double>;
37 using tag_type = Kokkos::Experimental::vector_aligned_tag;
38 using Kokkos::ALL;
39 using Kokkos::Array;
40 using Kokkos::make_pair;
41 using Kokkos::subview;
42
43 constexpr auto width = simd_type::size();
44 const auto extra_component = num_nodes % width == 0U ? 0U : 1U;
46 const auto node = node_simd_node / simd_nodes;
47 const auto simd_node = (node_simd_node % simd_nodes) * width;
48
50
51 const auto qp_Kuu = ConstView<double* [36]>(qp_Kuu_.data(), num_qps);
52 const auto qp_Puu = ConstView<double* [36]>(qp_Puu_.data(), num_qps);
53 const auto qp_Cuu = ConstView<double* [36]>(qp_Cuu_.data(), num_qps);
54 const auto qp_Ouu = ConstView<double* [36]>(qp_Ouu_.data(), num_qps);
55 const auto qp_Quu = ConstView<double* [36]>(qp_Quu_.data(), num_qps);
56
57 for (auto qp = 0U; qp < num_qps; ++qp) {
58 const auto w = simd_type(qp_weight_(qp));
59 const auto jacobian = simd_type(qp_jacobian_(qp));
60 const auto phi_1 = simd_type(shape_interp_(node, qp));
61 auto phi_2 = simd_type{};
62 phi_2.copy_from(&shape_interp_(simd_node, qp), tag_type());
63 const auto phi_prime_1 = simd_type(shape_deriv_(node, qp));
64 auto phi_prime_2 = simd_type{};
66 const auto K = (phi_1 * phi_2) * (w * jacobian);
67 const auto P = (phi_1 * phi_prime_2) * w;
68 const auto C = (phi_prime_1 * phi_prime_2) * (w / jacobian);
69 const auto O = (phi_prime_1 * phi_2) * w;
70 const auto Kuu_local = subview(qp_Kuu, qp, ALL);
71 const auto Quu_local = subview(qp_Quu, qp, ALL);
72 const auto Puu_local = subview(qp_Puu, qp, ALL);
73 const auto Cuu_local = subview(qp_Cuu, qp, ALL);
74 const auto Ouu_local = subview(qp_Ouu, qp, ALL);
75 for (auto component = 0; component < 36; ++component) {
76 const auto Kuu = simd_type(Kuu_local(component));
77 const auto Quu = simd_type(Quu_local(component));
78 const auto Puu = simd_type(Puu_local(component));
79 const auto Cuu = simd_type(Cuu_local(component));
80 const auto Ouu = simd_type(Ouu_local(component));
82 local_M[component] + K * (Kuu + Quu) + P * Puu + C * Cuu + O * Ouu;
83 }
84 }
85
86 const auto num_lanes = Kokkos::min(width, num_nodes - simd_node);
88 const auto M_slice =
90
91 for (auto lane = 0U; lane < num_lanes; ++lane) {
92 for (auto component = 0; component < 36; ++component) {
94 }
95 }
96 }
97};
98
99} // namespace kynema::beams
Definition beam_quadrature.hpp:16
Definition integrate_stiffness_matrix.hpp:10
ConstView< double *[6][6]> qp_Puu_
Definition integrate_stiffness_matrix.hpp:28
ConstView< double *[6][6]> qp_Quu_
Definition integrate_stiffness_matrix.hpp:31
ConstView< double * > qp_weight_
Definition integrate_stiffness_matrix.hpp:23
View< double **[6][6]> gbl_M_
Definition integrate_stiffness_matrix.hpp:32
size_t element
Definition integrate_stiffness_matrix.hpp:20
ConstView< double * > qp_jacobian_
Definition integrate_stiffness_matrix.hpp:24
size_t num_nodes
Definition integrate_stiffness_matrix.hpp:21
typename View< ValueType >::const_type ConstView
Definition integrate_stiffness_matrix.hpp:14
ConstView< double *[6][6]> qp_Ouu_
Definition integrate_stiffness_matrix.hpp:30
typename LeftView< ValueType >::const_type ConstLeftView
Definition integrate_stiffness_matrix.hpp:18
size_t num_qps
Definition integrate_stiffness_matrix.hpp:22
ConstView< double *[6][6]> qp_Kuu_
Definition integrate_stiffness_matrix.hpp:27
ConstView< double *[6][6]> qp_Cuu_
Definition integrate_stiffness_matrix.hpp:29
Kokkos::View< ValueType, DeviceType > View
Definition integrate_stiffness_matrix.hpp:12
ConstLeftView< double ** > shape_deriv_
Definition integrate_stiffness_matrix.hpp:26
ConstLeftView< double ** > shape_interp_
Definition integrate_stiffness_matrix.hpp:25
KOKKOS_FUNCTION void operator()(size_t node_simd_node) const
Definition integrate_stiffness_matrix.hpp:35
Kokkos::View< ValueType, Kokkos::LayoutLeft, DeviceType > LeftView
Definition integrate_stiffness_matrix.hpp:16