/home/runner/work/kynema/kynema/kynema/src/elements/beams/beams_input.hpp Source File

Kynema API: /home/runner/work/kynema/kynema/kynema/src/elements/beams/beams_input.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
beams_input.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <algorithm>
4#include <array>
5#include <numeric>
6#include <span>
7#include <vector>
8
9#include "beam_element.hpp"
10
11namespace kynema {
12
22struct BeamsInput {
23 std::vector<BeamElement> elements; //< Elements in the beam
24 std::array<double, 3> gravity; //< Gravity vector
25
26 BeamsInput(std::span<const BeamElement> elems, std::span<const double, 3> g)
27 : gravity({g[0], g[1], g[2]}) {
28 elements.assign(std::begin(elems), std::end(elems));
29 }
30
32 [[nodiscard]] size_t NumElements() const { return elements.size(); }
33
35 template <typename Accessor>
36 [[nodiscard]] size_t ComputeSum(Accessor accessor) const {
37 return std::transform_reduce(
38 elements.begin(), elements.end(), size_t{0U}, std::plus{},
39 [&accessor](const BeamElement& e) {
40 return accessor(e);
41 }
42 );
43 }
44
46 template <typename Accessor>
47 [[nodiscard]] size_t ComputeMax(Accessor accessor) const {
48 return std::transform_reduce(
49 elements.begin(), elements.end(), size_t{0U},
50 [](auto a, auto b) {
51 return std::max(a, b);
52 },
53 [&accessor](const auto& e) {
54 return accessor(e);
55 }
56 );
57 }
58
60 [[nodiscard]] size_t NumNodes() const {
61 return ComputeSum([](const BeamElement& e) {
62 return e.node_ids.size();
63 });
64 }
65
67 [[nodiscard]] size_t NumQuadraturePoints() const {
68 return ComputeSum([](const BeamElement& e) {
69 return e.quadrature.size();
70 });
71 }
72
74 [[nodiscard]] size_t MaxElemNodes() const {
75 return ComputeMax([](const BeamElement& e) {
76 return e.node_ids.size();
77 });
78 }
79
81 [[nodiscard]] size_t MaxElemQuadraturePoints() const {
82 return ComputeMax([](const BeamElement& e) {
83 return e.quadrature.size();
84 });
85 }
86};
87
88} // namespace kynema
Definition calculate_constraint_output.hpp:8
Beam element constitutes flexible beams material behavior in kynema.
Definition beam_element.hpp:17
std::vector< size_t > node_ids
Definition beam_element.hpp:19
std::vector< std::array< double, 2 > > quadrature
Definition beam_element.hpp:21
Represents the input data for creating flexible beams.
Definition beams_input.hpp:22
BeamsInput(std::span< const BeamElement > elems, std::span< const double, 3 > g)
Definition beams_input.hpp:26
size_t NumElements() const
Returns the number of elements in the beam.
Definition beams_input.hpp:32
size_t MaxElemQuadraturePoints() const
Returns the maximum number of quadrature points in any element of the beam.
Definition beams_input.hpp:81
std::array< double, 3 > gravity
Definition beams_input.hpp:24
size_t ComputeMax(Accessor accessor) const
Computes the maximum of a value across all elements.
Definition beams_input.hpp:47
size_t NumNodes() const
Returns the total number of nodes in the beam.
Definition beams_input.hpp:60
size_t MaxElemNodes() const
Returns the maximum number of nodes in any element of the beam.
Definition beams_input.hpp:74
size_t ComputeSum(Accessor accessor) const
Computes the sum of a value across all elements.
Definition beams_input.hpp:36
std::vector< BeamElement > elements
Definition beams_input.hpp:23
size_t NumQuadraturePoints() const
Returns the total number of quadrature points in the beam.
Definition beams_input.hpp:67