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

Kynema API: /home/runner/work/kynema/kynema/kynema/src/system/beams/calculate_quadrature_point_values.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
calculate_quadrature_point_values.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <Kokkos_Core.hpp>
4
11#include "update_node_state.hpp"
12
13namespace kynema::beams {
14
15template <typename DeviceType>
17 using TeamPolicy = typename Kokkos::TeamPolicy<typename DeviceType::execution_space>;
18 using member_type = typename TeamPolicy::member_type;
19 template <typename ValueType>
20 using View = Kokkos::View<ValueType, DeviceType>;
21 template <typename ValueType>
23 template <typename ValueType>
24 using LeftView = Kokkos::View<ValueType, Kokkos::LayoutLeft, DeviceType>;
25
49
52 using simd_type = Kokkos::Experimental::simd<double>;
53 using Kokkos::ALL;
54 using Kokkos::make_pair;
55 using Kokkos::parallel_for;
56 using Kokkos::subview;
57 using Kokkos::TeamVectorRange;
58 using CopyMatrix = KokkosBatched::TeamVectorCopy<member_type>;
59 using CopyVector =
60 KokkosBatched::TeamVectorCopy<member_type, KokkosBatched::Trans::NoTranspose, 1>;
61
62 const auto element = static_cast<size_t>(member.league_rank());
63 const auto num_nodes = num_nodes_per_element(element);
64 const auto num_qps = num_qps_per_element(element);
65 constexpr auto width = simd_type::size();
66 const auto extra_component = num_nodes % width == 0U ? 0U : 1U;
67 const auto simd_nodes = num_nodes / width + extra_component;
68 const auto padded_num_nodes = simd_nodes * width;
69
70 const auto qp_pair = make_pair(0UL, num_qps);
71 const auto node_pair = make_pair(0UL, num_nodes);
72 const auto qp_range = TeamVectorRange(member, num_qps);
73 const auto node_range = TeamVectorRange(member, num_nodes);
74 const auto node_squared_range = TeamVectorRange(member, num_nodes * num_nodes);
76
77 const auto shape_interp =
78 LeftView<double**>(member.team_scratch(0), padded_num_nodes, num_qps);
79 const auto shape_deriv =
80 LeftView<double**>(member.team_scratch(0), padded_num_nodes, num_qps);
81
82 const auto qp_weight = View<double*>(member.team_scratch(0), num_qps);
83 const auto qp_jacobian = View<double*>(member.team_scratch(0), num_qps);
84
85 const auto node_u = View<double* [7]>(member.team_scratch(1), num_nodes);
86 const auto node_u_dot = View<double* [6]>(member.team_scratch(1), num_nodes);
87 const auto node_u_ddot = View<double* [6]>(member.team_scratch(1), num_nodes);
88 const auto node_FX = View<double* [6]>(member.team_scratch(1), num_nodes);
89 const auto qp_Fc = View<double* [6]>(member.team_scratch(1), num_qps);
90 const auto qp_Fd = View<double* [6]>(member.team_scratch(1), num_qps);
91 const auto qp_Fi = View<double* [6]>(member.team_scratch(1), num_qps);
92 const auto qp_Fe = View<double* [6]>(member.team_scratch(1), num_qps);
93 const auto qp_Fg = View<double* [6]>(member.team_scratch(1), num_qps);
94
95 const auto qp_Kuu = View<double* [6][6]>(member.team_scratch(1), num_qps);
96 const auto qp_Puu = View<double* [6][6]>(member.team_scratch(1), num_qps);
97 const auto qp_Cuu = View<double* [6][6]>(member.team_scratch(1), num_qps);
98 const auto qp_Ouu = View<double* [6][6]>(member.team_scratch(1), num_qps);
99 const auto qp_Quu = View<double* [6][6]>(member.team_scratch(1), num_qps);
100 const auto qp_Muu = View<double* [6][6]>(member.team_scratch(1), num_qps);
101 const auto qp_Guu = View<double* [6][6]>(member.team_scratch(1), num_qps);
102
103 const auto stiffness_matrix_terms =
104 View<double** [6][6]>(member.team_scratch(1), num_nodes, num_nodes);
105 const auto inertia_matrix_terms =
106 View<double** [6][6]>(member.team_scratch(1), num_nodes, num_nodes);
107
108 CopyMatrix::invoke(
110 subview(shape_interp, node_pair, qp_pair)
111 );
112 CopyMatrix::invoke(
114 subview(shape_deriv, node_pair, qp_pair)
115 );
116 CopyMatrix::invoke(member, subview(qp_FE_, element, qp_pair, ALL), qp_Fe);
117 CopyMatrix::invoke(member, subview(node_FX_, element, node_pair, ALL), node_FX);
118
119 CopyVector::invoke(member, subview(qp_weight_, element, qp_pair), qp_weight);
120 CopyVector::invoke(member, subview(qp_jacobian_, element, qp_pair), qp_jacobian);
121
123 element, node_state_indices, node_u, node_u_dot, node_u_ddot, Q, V, A
124 };
126 member.team_barrier();
127
130 element, shape_interp, gravity_, qp_r0_, qp_Mstar_, node_u, node_u_dot,
131 node_u_ddot, qp_Fi, qp_Fg, qp_Muu, qp_Guu, qp_Kuu
132 };
134
137 element, qp_jacobian, shape_interp, shape_deriv, qp_r0_, qp_x0_prime_, qp_Cstar_,
138 node_u, qp_Fc, qp_Fd, qp_Cuu, qp_Ouu, qp_Puu, qp_Quu
139 };
141 member.team_barrier();
142
144 element, num_qps, qp_weight, qp_jacobian, shape_interp, shape_deriv, node_FX,
145 qp_Fc, qp_Fd, qp_Fi, qp_Fe, qp_Fg, residual_vector_terms_
146 };
148
150 element, num_nodes, num_qps, qp_weight, qp_jacobian, shape_interp, shape_deriv,
151 qp_Kuu, qp_Puu, qp_Cuu, qp_Ouu, qp_Quu, stiffness_matrix_terms
152 };
154
156 element, num_nodes, num_qps, qp_weight, qp_jacobian, shape_interp,
157 qp_Muu, qp_Guu, beta_prime_, gamma_prime_, inertia_matrix_terms
158 };
160 member.team_barrier();
161
163 element,
164 num_nodes,
165 tangent,
167 stiffness_matrix_terms,
168 inertia_matrix_terms,
170 };
172 }
173};
174
175} // namespace kynema::beams
Definition beam_quadrature.hpp:16
Definition calculate_inertial_quadrature_point_values.hpp:17
Definition calculate_quadrature_point_values.hpp:16
Kokkos::View< ValueType, DeviceType > View
Definition calculate_quadrature_point_values.hpp:20
ConstView< double *[6]> A
Definition calculate_quadrature_point_values.hpp:30
ConstView< double *[6][6]> tangent
Definition calculate_quadrature_point_values.hpp:31
View< double ***[6][6]> system_matrix_terms_
Definition calculate_quadrature_point_values.hpp:48
ConstView< double *** > shape_deriv_
Definition calculate_quadrature_point_values.hpp:38
ConstView< double ** > qp_jacobian_
Definition calculate_quadrature_point_values.hpp:36
ConstView< double **[6]> node_FX_
Definition calculate_quadrature_point_values.hpp:40
typename Kokkos::TeamPolicy< typename DeviceType::execution_space > TeamPolicy
Definition calculate_quadrature_point_values.hpp:17
ConstView< double **[3]> qp_x0_prime_
Definition calculate_quadrature_point_values.hpp:43
typename View< ValueType >::const_type ConstView
Definition calculate_quadrature_point_values.hpp:22
ConstView< double **[6][6]> qp_Cstar_
Definition calculate_quadrature_point_values.hpp:45
Kokkos::View< ValueType, Kokkos::LayoutLeft, DeviceType > LeftView
Definition calculate_quadrature_point_values.hpp:24
View< double **[6]> residual_vector_terms_
Definition calculate_quadrature_point_values.hpp:47
ConstView< size_t * > num_nodes_per_element
Definition calculate_quadrature_point_values.hpp:33
double gamma_prime_
Definition calculate_quadrature_point_values.hpp:27
ConstView< double **[6][6]> qp_Mstar_
Definition calculate_quadrature_point_values.hpp:44
double beta_prime_
Definition calculate_quadrature_point_values.hpp:26
ConstView< size_t ** > node_state_indices
Definition calculate_quadrature_point_values.hpp:32
View< double **[6]> qp_FE_
Definition calculate_quadrature_point_values.hpp:46
ConstView< double **[4]> qp_r0_
Definition calculate_quadrature_point_values.hpp:41
ConstView< double *[6]> V
Definition calculate_quadrature_point_values.hpp:29
ConstView< double **[3]> qp_x0_
Definition calculate_quadrature_point_values.hpp:42
ConstView< size_t * > num_qps_per_element
Definition calculate_quadrature_point_values.hpp:34
ConstView< double *** > shape_interp_
Definition calculate_quadrature_point_values.hpp:37
KOKKOS_FUNCTION void operator()(member_type member) const
Definition calculate_quadrature_point_values.hpp:51
ConstView< double[3]> gravity_
Definition calculate_quadrature_point_values.hpp:39
ConstView< double ** > qp_weight_
Definition calculate_quadrature_point_values.hpp:35
typename TeamPolicy::member_type member_type
Definition calculate_quadrature_point_values.hpp:18
ConstView< double *[7]> Q
Definition calculate_quadrature_point_values.hpp:28
Definition calculate_stiffness_quadrature_point_values.hpp:19
Definition calculate_system_matrix.hpp:10
Definition integrate_inertia_matrix.hpp:9
Definition integrate_residual_vector.hpp:8
Definition integrate_stiffness_matrix.hpp:10
Definition update_node_state.hpp:9