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

Kynema API: /home/runner/work/kynema/kynema/kynema/src/system/beams/calculate_P_D2.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
calculate_P_D2.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <KokkosBatched_Gemm_Decl.hpp>
4#include <KokkosBlas.hpp>
5#include <KokkosBlas1_set.hpp>
6#include <Kokkos_Core.hpp>
7
9
10namespace kynema::beams {
11
12template <typename DeviceType>
14 template <typename ValueType>
15 using View = Kokkos::View<ValueType, DeviceType>;
16 template <typename ValueType>
18
20 const ConstView<double[3]>& xr_prime, const ConstView<double[3]>& u_prime,
21 const ConstView<double[3]>& omega, const ConstView<double[3]>& eps_dot,
22 const ConstView<double[3]>& kappa_dot, const ConstView<double[6][6]>& D,
23 const View<double[6][6]>& P_D2
24 ) {
25 using NoTranspose = KokkosBatched::Trans::NoTranspose;
26 using Transpose = KokkosBatched::Trans::Transpose;
27 using Default = KokkosBatched::Algo::Gemm::Default;
28 using GemmNN = KokkosBatched::SerialGemm<NoTranspose, NoTranspose, Default>;
29 using GemmTN = KokkosBatched::SerialGemm<Transpose, NoTranspose, Default>;
30 using Gemv =
31 KokkosBlas::SerialGemv<KokkosBlas::Trans::NoTranspose, KokkosBlas::Algo::Gemv::Default>;
32 using Kokkos::make_pair;
33 using Kokkos::subview;
34
35 KokkosBlas::SerialSet::invoke(0., P_D2);
36
37 auto omega_tilde_data = Kokkos::Array<double, 9>{};
40
41 auto D11 = subview(D, make_pair(0, 3), make_pair(0, 3));
42 auto D11_eps_dot_data = Kokkos::Array<double, 3>{};
44 Gemv::invoke(1., D11, eps_dot, 0., D11_eps_dot);
45 auto D11_eps_dot_tilde_data = Kokkos::Array<double, 9>{};
48
49 auto D12 = subview(D, make_pair(0, 3), make_pair(3, 6));
50 auto D12_kappa_dot_data = Kokkos::Array<double, 3>{};
52 Gemv::invoke(1., D12, kappa_dot, 0., D12_kappa_dot);
53 auto D12_kappa_dot_tilde_data = Kokkos::Array<double, 9>{};
56
57 auto P_D2_21 = subview(P_D2, make_pair(3, 6), make_pair(0, 3));
58 for (auto i = 0; i < 3; ++i) {
59 for (auto j = 0; j < 3; ++j) {
60 P_D2_21(i, j) = -D11_eps_dot_tilde(i, j) - D12_kappa_dot_tilde(i, j);
61 }
62 }
63
64 auto D12_omega_tilde_data = Kokkos::Array<double, 9>{};
66 GemmNN::invoke(1., D12, omega_tilde, 0., D12_omega_tilde);
67
68 auto xr_u_prime_data = Kokkos::Array<double, 3>{};
70 for (auto component = 0; component < 3; ++component) {
72 }
73 auto tilde_xp_up_data = Kokkos::Array<double, 9>{};
76
77 auto P_D2_22 = subview(P_D2, make_pair(3, 6), make_pair(3, 6));
78 GemmTN::invoke(1., tilde_xp_up, D12_omega_tilde, 0., P_D2_22);
79 }
80};
81} // namespace kynema::beams
Definition beam_quadrature.hpp:14
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:10
Definition calculate_P_D2.hpp:13
static KOKKOS_FUNCTION void invoke(const ConstView< double[3]> &xr_prime, const ConstView< double[3]> &u_prime, const ConstView< double[3]> &omega, const ConstView< double[3]> &eps_dot, const ConstView< double[3]> &kappa_dot, const ConstView< double[6][6]> &D, const View< double[6][6]> &P_D2)
Definition calculate_P_D2.hpp:19
Kokkos::View< ValueType, DeviceType > View
Definition calculate_P_D2.hpp:15
typename View< ValueType >::const_type ConstView
Definition calculate_P_D2.hpp:17