/home/runner/work/kynema/kynema/kynema/src/elements/masses/create_masses.hpp Source File

Kynema API: /home/runner/work/kynema/kynema/kynema/src/elements/masses/create_masses.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
create_masses.hpp
Go to the documentation of this file.
1#pragma once
2#include <span>
3
4#include "masses.hpp"
5#include "masses_input.hpp"
6#include "model/node.hpp"
7
8namespace kynema {
9
20template <typename DeviceType>
22 const MassesInput& masses_input, std::span<const Node> nodes
23) {
24 using Kokkos::create_mirror_view;
25 using Kokkos::deep_copy;
26 using Kokkos::WithoutInitializing;
27
28 Masses<DeviceType> masses(masses_input.NumElements());
29
30 auto host_gravity = create_mirror_view(WithoutInitializing, masses.gravity);
31 auto host_state_indices = create_mirror_view(WithoutInitializing, masses.state_indices);
32 auto host_x0 = create_mirror_view(WithoutInitializing, masses.node_x0);
33 auto host_Mstar = create_mirror_view(WithoutInitializing, masses.qp_Mstar);
34
35 host_gravity(0) = masses_input.gravity[0];
36 host_gravity(1) = masses_input.gravity[1];
37 host_gravity(2) = masses_input.gravity[2];
38
39 // Populate element data - x0 and Mstar
40 for (auto element : std::views::iota(0U, masses_input.NumElements())) {
41 host_state_indices(element) = static_cast<size_t>(masses_input.elements[element].node_id);
42 const auto& elem = masses_input.elements[element];
43 for (auto component : std::views::iota(0U, 7U)) {
44 host_x0(element, component) = nodes[elem.node_id].x0[component];
45 }
46 for (auto component_1 : std::views::iota(0U, 6U)) {
47 for (auto component_2 : std::views::iota(0U, 6U)) {
48 host_Mstar(element, component_1, component_2) =
49 elem.M_star[component_1][component_2];
50 }
51 }
52 }
53
54 deep_copy(masses.gravity, host_gravity);
55 deep_copy(masses.state_indices, host_state_indices);
56 deep_copy(masses.node_x0, host_x0);
57 deep_copy(masses.qp_Mstar, host_Mstar);
58
59 return masses;
60}
61
62} // namespace kynema
Definition calculate_constraint_output.hpp:8
Masses< DeviceType > CreateMasses(const MassesInput &masses_input, std::span< const Node > nodes)
Creates a masses data structure and initializes its data.
Definition create_masses.hpp:21
Represents the input data for creating mass/rigid body elements.
Definition masses_input.hpp:14
std::vector< MassElement > elements
Definition masses_input.hpp:15
std::array< double, 3 > gravity
Definition masses_input.hpp:16
size_t NumElements() const
Returns the total number of elements present in masses/rigid_body portion of the mesh.
Definition masses_input.hpp:24
Contains field variables for mass elements (aka, rigid bodies) to compute per-element contributions t...
Definition masses.hpp:17
View< double *[7]> node_x0
Definition masses.hpp:27
View< double *[6][6]> qp_Mstar
Definition masses.hpp:28
View< size_t * > state_indices
Definition masses.hpp:23
View< double[3]> gravity
Definition masses.hpp:26