/home/runner/work/kynema/kynema/kynema/src/dof_management/create_element_freedom_table.hpp Source File

Kynema API: /home/runner/work/kynema/kynema/kynema/src/dof_management/create_element_freedom_table.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
create_element_freedom_table.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <Kokkos_Core.hpp>
4
6#include "state/state.hpp"
7
8namespace kynema::dof {
9
14template <typename DeviceType>
16 template <typename ValueType>
17 using View = Kokkos::View<ValueType, DeviceType>;
18 template <typename ValueType>
20
25
27 void operator()(size_t element) const {
28 for (auto node = 0U; node < num_nodes_per_element(element); ++node) {
29 const auto node_index = node_state_indices(element, node);
30 for (auto component = 0U; component < 6U; ++component) {
31 element_freedom_table(element, node, component) =
33 }
34 }
35 }
36};
37
42template <typename DeviceType>
44 template <typename ValueType>
45 using View = Kokkos::View<ValueType, DeviceType>;
46 template <typename ValueType>
48
52
54 void operator()(size_t element) const {
55 // Masses always have one node per element
56 const auto node_index = node_state_indices(element);
57 for (auto component = 0U; component < 6U; ++component) {
60 }
61 }
62};
63
68template <typename DeviceType>
70 template <typename ValueType>
71 using View = Kokkos::View<ValueType, DeviceType>;
72 template <typename ValueType>
74
79
81 void operator()(size_t element) const {
82 // Springs always have two nodes per element
83 for (auto node = 0U; node < 2U; ++node) {
84 const auto node_index = node_state_indices(element, node);
85 // Springs only have translational DOFs
86 for (auto component = 0U; component < 3U; ++component) {
87 element_freedom_table(element, node, component) =
89 }
90 }
91 }
92};
93
105template <typename DeviceType>
107 Elements<DeviceType>& elements, const State<DeviceType>& state
108) {
109 using Kokkos::parallel_for;
110 using RangePolicy = Kokkos::RangePolicy<typename DeviceType::execution_space>;
111 auto beams_range = RangePolicy(0, elements.beams.num_elems);
112
113 parallel_for(
114 "CreateElementFreedomTable_Beams", beams_range,
116 elements.beams.num_nodes_per_element, elements.beams.node_state_indices,
117 state.node_freedom_map_table, elements.beams.element_freedom_table
118 }
119 );
120 auto masses_range = RangePolicy(0, elements.masses.num_elems);
121 parallel_for(
122 "CreateElementFreedomTable_Masses", masses_range,
124 elements.masses.state_indices, state.node_freedom_map_table,
125 elements.masses.element_freedom_table
126 }
127 );
128 auto springs_range = RangePolicy(0, elements.springs.num_elems);
129 parallel_for(
130 "CreateElementFreedomTable_Springs", springs_range,
132 elements.springs.num_nodes_per_element, elements.springs.node_state_indices,
133 state.node_freedom_map_table, elements.springs.element_freedom_table
134 }
135 );
136}
137
138} // namespace kynema::dof
Definition assemble_node_freedom_allocation_table.hpp:10
void create_element_freedom_table(Elements< DeviceType > &elements, const State< DeviceType > &state)
Creates the element freedom tables for all of the elements in the system.
Definition create_element_freedom_table.hpp:106
A container providing handle to all structural elements present in the model.
Definition elements.hpp:20
Masses< DeviceType > masses
Definition elements.hpp:22
Springs< DeviceType > springs
Definition elements.hpp:23
Beams< DeviceType > beams
Definition elements.hpp:21
Container for storing the complete system state of the simulation at a given time increment.
Definition state.hpp:18
View< size_t * > node_freedom_map_table
Definition state.hpp:27
A Kernel that creates the element freedom table which maps each degree of freedom on the beam element...
Definition create_element_freedom_table.hpp:15
Kokkos::View< ValueType, DeviceType > View
Definition create_element_freedom_table.hpp:17
ConstView< size_t * > num_nodes_per_element
Definition create_element_freedom_table.hpp:21
KOKKOS_FUNCTION void operator()(size_t element) const
Definition create_element_freedom_table.hpp:27
typename View< ValueType >::const_type ConstView
Definition create_element_freedom_table.hpp:19
View< size_t *** > element_freedom_table
Definition create_element_freedom_table.hpp:24
ConstView< size_t * > node_freedom_map_table
Definition create_element_freedom_table.hpp:23
ConstView< size_t ** > node_state_indices
Definition create_element_freedom_table.hpp:22
A Kernel that creates the element freedom table which maps each degree of freedom on the mass element...
Definition create_element_freedom_table.hpp:43
Kokkos::View< ValueType, DeviceType > View
Definition create_element_freedom_table.hpp:45
ConstView< size_t * > node_freedom_map_table
Definition create_element_freedom_table.hpp:50
KOKKOS_FUNCTION void operator()(size_t element) const
Definition create_element_freedom_table.hpp:54
ConstView< size_t * > node_state_indices
Definition create_element_freedom_table.hpp:49
typename View< ValueType >::const_type ConstView
Definition create_element_freedom_table.hpp:47
View< size_t ** > element_freedom_table
Definition create_element_freedom_table.hpp:51
A Kernel that creates the element freedom table which maps each degree of freedom on the spring eleme...
Definition create_element_freedom_table.hpp:69
ConstView< size_t * > node_freedom_map_table
Definition create_element_freedom_table.hpp:77
View< size_t *[2][3]> element_freedom_table
Definition create_element_freedom_table.hpp:78
typename View< ValueType >::const_type ConstView
Definition create_element_freedom_table.hpp:73
ConstView< size_t *[2]> node_state_indices
Definition create_element_freedom_table.hpp:76
KOKKOS_FUNCTION void operator()(size_t element) const
Definition create_element_freedom_table.hpp:81
ConstView< size_t * > num_nodes_per_element
Definition create_element_freedom_table.hpp:75
Kokkos::View< ValueType, DeviceType > View
Definition create_element_freedom_table.hpp:71