/home/runner/work/kynema/kynema/kynema/src/model/model.hpp Source File

Kynema API: /home/runner/work/kynema/kynema/kynema/src/model/model.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
model.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <span>
4#include <tuple>
5
16#include "elements/elements.hpp"
21#include "mesh_connectivity.hpp"
22#include "node.hpp"
23#include "solver/solver.hpp"
24#include "state/state.hpp"
25
26namespace kynema {
27
39template <
40 typename DeviceType =
41 Kokkos::Device<Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space>>
42[[nodiscard]] inline Solver<DeviceType> CreateSolver(
44) {
45 dof::assemble_node_freedom_allocation_table(state, elements, constraints);
47 dof::create_element_freedom_table(elements, state);
48 dof::create_constraint_freedom_table(constraints, state);
49
50 return {
51 state.ID,
52 state.active_dofs,
54 elements.NumberOfNodesPerElement(),
55 elements.NodeStateIndices(),
56 constraints.num_dofs,
57 constraints.base_active_dofs,
58 constraints.target_active_dofs,
59 constraints.base_node_freedom_table,
60 constraints.target_node_freedom_table,
61 constraints.row_range,
62 };
63}
64
74class Model {
75public:
77 static constexpr size_t InvalidNodeID{0U};
78
80 Model() = default;
81
87 explicit Model(std::array<double, 3> gravity) : gravity_(gravity) {}
88
89 //--------------------------------------------------------------------------
90 // Miscellaneous
91 //--------------------------------------------------------------------------
92
97 void SetGravity(double x, double y, double z) {
98 this->gravity_[0] = x;
99 this->gravity_[1] = y;
100 this->gravity_[2] = z;
101 }
102
103 //--------------------------------------------------------------------------
104 // Nodes
105 //--------------------------------------------------------------------------
106
113 const auto id = this->nodes_.size();
114 this->nodes_.emplace_back(id);
115 return NodeBuilder(this->nodes_.back());
116 }
117
124 [[nodiscard]] const Node& GetNode(size_t id) const { return this->nodes_[id]; }
125
132 [[nodiscard]] Node& GetNode(size_t id) { return this->nodes_[id]; }
133
139 [[nodiscard]] size_t NumNodes() const { return this->nodes_.size(); }
140
146 [[nodiscard]] const std::vector<Node>& GetNodes() const { return this->nodes_; }
147
148 //--------------------------------------------------------------------------
149 // Beam Elements
150 //--------------------------------------------------------------------------
151
162 std::span<const size_t> node_ids, std::span<const BeamSection> sections,
163 std::span<const std::array<double, 2>> quadrature
164 ) {
165 const auto elem_id = this->beam_elements_.size();
166 this->beam_elements_.emplace_back(elem_id, node_ids, sections, quadrature);
167 this->mesh_connectivity_.AddBeamElementConnectivity(elem_id, node_ids);
168 return elem_id;
169 }
170
178 [[nodiscard]] const BeamElement& GetBeamElement(size_t id) const {
179 return this->beam_elements_[id];
180 }
181
189 [[nodiscard]] BeamElement& GetBeamElement(size_t id) { return this->beam_elements_[id]; }
190
196 [[nodiscard]] const std::vector<BeamElement>& GetBeamElements() const {
197 return this->beam_elements_;
198 }
199
205 [[nodiscard]] size_t NumBeamElements() const { return this->beam_elements_.size(); }
206
212 [[nodiscard]] BeamsInput CreateBeamsInput() const {
213 return {this->beam_elements_, this->gravity_};
214 }
215
223 template <typename DeviceType>
224 [[nodiscard]] Beams<DeviceType> CreateBeams() const {
225 return kynema::CreateBeams<DeviceType>(this->CreateBeamsInput(), this->nodes_);
226 }
227
234 void TranslateBeam(size_t beam_elem_id, std::span<const double, 3> displacement) {
235 const auto& beam_elem = this->beam_elements_[beam_elem_id];
236 for (const auto& node_id : beam_elem.node_ids) {
237 this->GetNode(node_id).Translate(displacement);
238 }
239 }
240
249 size_t beam_elem_id, std::span<const double, 4> displacement_quaternion,
250 std::span<const double, 3> point
251 ) {
252 const auto& beam_elem = this->beam_elements_[beam_elem_id];
253 for (const auto& node_id : beam_elem.node_ids) {
254 this->GetNode(node_id).RotateAboutPoint(displacement_quaternion, point);
255 }
256 }
257
266 size_t beam_elem_id, std::span<const double, 6> velocity, std::span<const double, 3> point
267 ) {
268 const auto& beam_elem = this->beam_elements_[beam_elem_id];
269 for (const auto& node_id : beam_elem.node_ids) {
270 this->GetNode(node_id).SetVelocityAboutPoint(velocity, point);
271 }
272 }
273
283 size_t beam_elem_id, std::span<const double, 6> acceleration,
284 std::span<const double, 3> omega, std::span<const double, 3> point
285 ) {
286 const auto& beam_elem = this->beam_elements_[beam_elem_id];
287 for (const auto& node_id : beam_elem.node_ids) {
288 this->GetNode(node_id).SetAccelerationAboutPoint(acceleration, omega, point);
289 }
290 }
291
292 //--------------------------------------------------------------------------
293 // Mass Elements
294 //--------------------------------------------------------------------------
295
304 size_t AddMassElement(const size_t node_id, const std::array<std::array<double, 6>, 6>& mass) {
305 const auto elem_id = this->mass_elements_.size();
306 this->mass_elements_.emplace_back(elem_id, node_id, mass);
307 this->mesh_connectivity_.AddMassElementConnectivity(elem_id, node_id);
308 return elem_id;
309 }
310
318 [[nodiscard]] const MassElement& GetMassElement(size_t id) const {
319 return this->mass_elements_[id];
320 }
321
329 [[nodiscard]] MassElement& GetMassElement(size_t id) { return this->mass_elements_[id]; }
330
336 [[nodiscard]] const std::vector<MassElement>& GetMassElements() const {
337 return this->mass_elements_;
338 }
339
345 [[nodiscard]] size_t NumMassElements() const { return this->mass_elements_.size(); }
346
354 template <typename DeviceType>
355 [[nodiscard]] Masses<DeviceType> CreateMasses() const {
356 return kynema::CreateMasses<DeviceType>(
357 MassesInput(this->mass_elements_, this->gravity_), this->nodes_
358 );
359 }
360
361 //--------------------------------------------------------------------------
362 // Spring Elements
363 //--------------------------------------------------------------------------
364
376 const size_t node1_id, const size_t node2_id, const double stiffness,
377 const double undeformed_length
378 ) {
379 const auto elem_id = this->spring_elements_.size();
380 this->spring_elements_.emplace_back(
381 elem_id, std::array{node1_id, node2_id}, stiffness, undeformed_length
382 );
383 this->mesh_connectivity_.AddSpringElementConnectivity(
384 elem_id, std::array{node1_id, node2_id}
385 );
386 return elem_id;
387 }
388
396 [[nodiscard]] const SpringElement& GetSpringElement(size_t id) const {
397 return this->spring_elements_[id];
398 }
399
407 [[nodiscard]] SpringElement& GetSpringElement(size_t id) { return this->spring_elements_[id]; }
408
414 [[nodiscard]] size_t NumSpringElements() const { return this->spring_elements_.size(); }
415
423 template <typename DeviceType>
424 [[nodiscard]] Springs<DeviceType> CreateSprings() const {
425 return kynema::CreateSprings<DeviceType>(SpringsInput(this->spring_elements_), this->nodes_);
426 }
427
428 //--------------------------------------------------------------------------
429 // Elements
430 //--------------------------------------------------------------------------
431
439 template <typename DeviceType>
440 [[nodiscard]] Elements<DeviceType> CreateElements() const {
441 return {
442 this->CreateBeams<DeviceType>(),
443 this->CreateMasses<DeviceType>(),
444 this->CreateSprings<DeviceType>(),
445 };
446 }
447
448 //--------------------------------------------------------------------------
449 // State
450 //--------------------------------------------------------------------------
451
459 template <typename DeviceType>
460 [[nodiscard]] State<DeviceType> CreateState() const {
461 auto state = State<DeviceType>(this->nodes_.size());
462 model::CopyNodesToState<DeviceType>(state, this->nodes_);
463 return state;
464 }
465
466 //--------------------------------------------------------------------------
467 // Constraints
468 //--------------------------------------------------------------------------
469
476 size_t AddFixedBC(const size_t node_id) {
477 const auto id = this->constraints_.size();
478 this->constraints_.emplace_back(
480 );
481 this->mesh_connectivity_.AddConstraintConnectivity(id, std::vector<size_t>{node_id});
482 return id;
483 }
484
493 const size_t node_id,
494 const std::array<double, 7>& initial_displacement = {0., 0., 0., 1., 0., 0., 0.}
495 ) {
496 const auto id = this->constraints_.size();
497 this->constraints_.emplace_back(
499 std::array{0., 0., 0.}, initial_displacement
500 );
501 this->mesh_connectivity_.AddConstraintConnectivity(id, std::vector<size_t>{node_id});
502 return id;
503 }
504
511 size_t AddRigidJointConstraint(std::span<const size_t, 2> node_ids) {
512 const auto id = this->constraints_.size();
513 this->constraints_.emplace_back(
514 id, constraints::ConstraintType::RigidJoint, std::array{node_ids[0], node_ids[1]}
515 );
516 this->mesh_connectivity_.AddConstraintConnectivity(
517 id, std::vector<size_t>{node_ids[0], node_ids[1]}
518 );
519 return id;
520 }
521
531 std::span<const size_t, 2> node_ids, std::span<const double, 3> axis, double* torque
532 ) {
533 const auto id = this->constraints_.size();
534 this->constraints_.emplace_back(
535 id, constraints::ConstraintType::RevoluteJoint, std::array{node_ids[0], node_ids[1]},
536 std::array{axis[0], axis[1], axis[2]}, std::array{0., 0., 0., 1., 0., 0., 0.}, torque
537 );
538 this->mesh_connectivity_.AddConstraintConnectivity(
539 id, std::vector<size_t>{node_ids[0], node_ids[1]}
540 );
541 return id;
542 }
543
552 std::span<const size_t, 2> node_ids, std::span<const double, 3> axis, double* control
553 ) {
554 const auto id = this->constraints_.size();
555 this->constraints_.emplace_back(
556 id, constraints::ConstraintType::RotationControl, std::array{node_ids[0], node_ids[1]},
557 std::array{axis[0], axis[1], axis[2]}, std::array{0., 0., 0., 1., 0., 0., 0.}, control
558 );
559 this->mesh_connectivity_.AddConstraintConnectivity(
560 id, std::vector<size_t>{node_ids[0], node_ids[1]}
561 );
562 return id;
563 }
564
571 size_t AddFixedBC3DOFs(const size_t node_id) {
572 const auto id = this->constraints_.size();
573 this->constraints_.emplace_back(
575 );
576 this->mesh_connectivity_.AddConstraintConnectivity(id, std::vector<size_t>{node_id});
577 return id;
578 }
579
586 size_t AddPrescribedBC3DOFs(const size_t node_id) {
587 const auto id = this->constraints_.size();
588 this->constraints_.emplace_back(
590 );
591 this->mesh_connectivity_.AddConstraintConnectivity(id, std::vector<size_t>{node_id});
592 return id;
593 }
594
600 size_t AddRigidJoint6DOFsTo3DOFs(std::span<const size_t, 2> node_ids) {
601 const auto id = this->constraints_.size();
602 this->constraints_.emplace_back(
604 std::array{node_ids[0], node_ids[1]}
605 );
606 this->mesh_connectivity_.AddConstraintConnectivity(
607 id, std::vector<size_t>{node_ids[0], node_ids[1]}
608 );
609 return id;
610 }
611
616 [[nodiscard]] size_t NumConstraints() const { return this->constraints_.size(); }
617
623 template <typename DeviceType>
625 return Constraints<DeviceType>(this->constraints_, this->nodes_);
626 }
627
633 template <
634 typename DeviceType = Kokkos::Device<
635 Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space>>
636 [[nodiscard]] std::tuple<State<DeviceType>, Elements<DeviceType>, Constraints<DeviceType>>
637 CreateSystem() const {
638 return {
639 this->CreateState<DeviceType>(), this->CreateElements<DeviceType>(),
640 this->CreateConstraints<DeviceType>()
641 };
642 }
643
649 template <
650 typename DeviceType = Kokkos::Device<
651 Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space>>
652 [[nodiscard]] std::tuple<
655 auto [state, elements, constraints] = this->CreateSystem<DeviceType>();
656 auto solver = CreateSolver<DeviceType>(state, elements, constraints);
657 return {state, elements, constraints, solver};
658 }
659
660 //--------------------------------------------------------------------------
661 // Mesh Connectivity
662 //--------------------------------------------------------------------------
663
668 [[nodiscard]] const model::MeshConnectivity& GetMeshConnectivity() const {
669 return this->mesh_connectivity_;
670 }
671
676 [[nodiscard]] model::MeshConnectivity& GetMeshConnectivity() { return this->mesh_connectivity_; }
677
682 void ExportMeshConnectivityToYAML(const std::string& filename = "mesh_connectivity.yaml") const {
683 this->mesh_connectivity_.ExportToYAML(filename);
684 }
685
686private:
687 std::array<double, 3> gravity_ = {0., 0., 0.}; //< Gravity components
688 std::vector<Node> nodes_; //< Nodes in the model
689 std::vector<BeamElement> beam_elements_; //< Beam elements in the model
690 std::vector<MassElement> mass_elements_; //< Mass elements in the model
691 std::vector<SpringElement> spring_elements_; //< Spring elements in the model
692 std::vector<constraints::Constraint> constraints_; //< Constraints in the model
693 model::MeshConnectivity
694 mesh_connectivity_; //< Mesh connectivity tracking element-node relationships
695};
696
697} // namespace kynema
Struct to define the connectivity structure of elements, nodes, and constraints defining an Kynema pr...
Definition model.hpp:74
void RotateBeamAboutPoint(size_t beam_elem_id, std::span< const double, 4 > displacement_quaternion, std::span< const double, 3 > point)
Rotate all beam nodes by given quaternion about a given point.
Definition model.hpp:248
State< DeviceType > CreateState() const
Creates an State struct based on the nodes in this model.
Definition model.hpp:460
Beams< DeviceType > CreateBeams() const
Createsa Beams structure based on the beam elements in the model.
Definition model.hpp:224
Masses< DeviceType > CreateMasses() const
Create a a masses struct based on the mass elements present in the model.
Definition model.hpp:355
size_t AddPrescribedBC3DOFs(const size_t node_id)
Adds a prescribed boundary condition constraint (6DOFs to 3DOFs) to the model and returns the ID.
Definition model.hpp:586
size_t AddPrescribedBC(const size_t node_id, const std::array< double, 7 > &initial_displacement={0., 0., 0., 1., 0., 0., 0.})
Adds a prescribed boundary condition constraint to the model and returns the ID.
Definition model.hpp:492
Model()=default
Default constructor.
size_t AddFixedBC3DOFs(const size_t node_id)
Adds a fixed boundary condition constraint (6DOFs to 3DOFs) to the model and returns the ID.
Definition model.hpp:571
const model::MeshConnectivity & GetMeshConnectivity() const
Get the mesh connectivity.
Definition model.hpp:668
Springs< DeviceType > CreateSprings() const
Creates a Springs struct based on the spring elements in the model.
Definition model.hpp:424
void ExportMeshConnectivityToYAML(const std::string &filename="mesh_connectivity.yaml") const
Export mesh connectivity to a YAML file.
Definition model.hpp:682
const std::vector< MassElement > & GetMassElements() const
Returns a reference to the mass elements present in the model.
Definition model.hpp:336
size_t AddRotationControl(std::span< const size_t, 2 > node_ids, std::span< const double, 3 > axis, double *control)
Adds a rotation control constraint to the model and returns the ID.
Definition model.hpp:551
const std::vector< BeamElement > & GetBeamElements() const
Returns a reference to the beam elements present in the model.
Definition model.hpp:196
BeamElement & GetBeamElement(size_t id)
Returns a beam element by ID.
Definition model.hpp:189
model::MeshConnectivity & GetMeshConnectivity()
Get the mesh connectivity.
Definition model.hpp:676
void SetGravity(double x, double y, double z)
Sets the gravity components for the model.
Definition model.hpp:97
static constexpr size_t InvalidNodeID
Represents an invalid node in constraints that only uses the target node.
Definition model.hpp:77
Constraints< DeviceType > CreateConstraints() const
Returns a Constraints object initialized from the model constraints.
Definition model.hpp:624
size_t AddFixedBC(const size_t node_id)
Adds a fixed boundary condition constraint to the model and returns the ID.
Definition model.hpp:476
Model(std::array< double, 3 > gravity)
Constructor with gravity specified.
Definition model.hpp:87
const BeamElement & GetBeamElement(size_t id) const
Returns a beam element by ID.
Definition model.hpp:178
void SetBeamAccelerationAboutPoint(size_t beam_elem_id, std::span< const double, 6 > acceleration, std::span< const double, 3 > omega, std::span< const double, 3 > point)
Set the acceleration of the beam about a given point.
Definition model.hpp:282
const MassElement & GetMassElement(size_t id) const
Returns a mass element by ID.
Definition model.hpp:318
const std::vector< Node > & GetNodes() const
Returns constant reference to nodes vector.
Definition model.hpp:146
SpringElement & GetSpringElement(size_t id)
Returns a spring element by ID.
Definition model.hpp:407
NodeBuilder AddNode()
Adds a node to the model.
Definition model.hpp:112
const Node & GetNode(size_t id) const
Returns a node by ID.
Definition model.hpp:124
Elements< DeviceType > CreateElements() const
Creates an Elements struct with Beams, Masses, and Springs.
Definition model.hpp:440
const SpringElement & GetSpringElement(size_t id) const
Returns a spring element by ID.
Definition model.hpp:396
size_t AddRigidJoint6DOFsTo3DOFs(std::span< const size_t, 2 > node_ids)
Adds a rigid joint constraint (6DOFs to 3DOFs) to the model and returns the ID.
Definition model.hpp:600
Node & GetNode(size_t id)
Returns a node by ID.
Definition model.hpp:132
size_t AddMassElement(const size_t node_id, const std::array< std::array< double, 6 >, 6 > &mass)
Adds a mass element to the model.
Definition model.hpp:304
BeamsInput CreateBeamsInput() const
Createsa Beams input file based on the beam elements in the model.
Definition model.hpp:212
MassElement & GetMassElement(size_t id)
Returns a mass element by ID.
Definition model.hpp:329
size_t NumSpringElements() const
Returns the number of spring elements present in the model.
Definition model.hpp:414
size_t AddBeamElement(std::span< const size_t > node_ids, std::span< const BeamSection > sections, std::span< const std::array< double, 2 > > quadrature)
Adds a beam element to the model.
Definition model.hpp:161
std::tuple< State< DeviceType >, Elements< DeviceType >, Constraints< DeviceType >, Solver< DeviceType > > CreateSystemWithSolver() const
Returns a State, Elements, Constraints, and Solver object initialized from the model.
Definition model.hpp:654
void TranslateBeam(size_t beam_elem_id, std::span< const double, 3 > displacement)
Translate all beam nodes by given displacement.
Definition model.hpp:234
std::tuple< State< DeviceType >, Elements< DeviceType >, Constraints< DeviceType > > CreateSystem() const
Returns a State, Elements, and Constraints object initialized from the model.
Definition model.hpp:637
size_t NumMassElements() const
Returns the number of mass elements present in the model.
Definition model.hpp:345
size_t AddRevoluteJointConstraint(std::span< const size_t, 2 > node_ids, std::span< const double, 3 > axis, double *torque)
Adds a revolute/hinge constraint to the model and returns the ID.
Definition model.hpp:530
void SetBeamVelocityAboutPoint(size_t beam_elem_id, std::span< const double, 6 > velocity, std::span< const double, 3 > point)
Set the translational and rotational velocity of the beam about a given point.
Definition model.hpp:265
size_t NumBeamElements() const
Returns the number of beam elements present in the model.
Definition model.hpp:205
size_t AddSpringElement(const size_t node1_id, const size_t node2_id, const double stiffness, const double undeformed_length)
Adds a spring element to the model.
Definition model.hpp:375
size_t NumNodes() const
Gets the number of nodes present in the model.
Definition model.hpp:139
size_t AddRigidJointConstraint(std::span< const size_t, 2 > node_ids)
Adds a rigid constraint to the model and returns the ID.
Definition model.hpp:511
size_t NumConstraints() const
Returns the number of constraints present in the model.
Definition model.hpp:616
Builder class for constructing and configuring Node objects.
Definition node.hpp:269
Class to manage element-to-node connectivity information for a mesh.
Definition mesh_connectivity.hpp:19
void AddSpringElementConnectivity(size_t elem_id, const std::array< size_t, 2 > &node_ids)
Adds a spring element's node connectivity.
Definition mesh_connectivity.hpp:46
void AddBeamElementConnectivity(size_t elem_id, std::span< const size_t > node_ids)
Adds a beam element's node connectivity.
Definition mesh_connectivity.hpp:28
void ExportToYAML(std::ostream &file) const
Export mesh connectivity inforation to a YAML file.
Definition mesh_connectivity.hpp:99
void AddMassElementConnectivity(size_t elem_id, size_t node_id)
Adds a mass element's node connectivity.
Definition mesh_connectivity.hpp:37
void AddConstraintConnectivity(size_t constraint_id, std::span< const size_t > node_ids)
Adds a constraint's node connectivity.
Definition mesh_connectivity.hpp:55
void compute_node_freedom_map_table(State< DeviceType > &state)
Compute the node freedom map table, a pointer map to the start of the degrees of freedom ofa given no...
Definition compute_node_freedom_map_table.hpp:38
void assemble_node_freedom_allocation_table(State< DeviceType > &state, const Elements< DeviceType > &elements, const Constraints< DeviceType > &constraints)
Creates the node freedom allocation table in state based on the connectivities defined in the element...
Definition assemble_node_freedom_allocation_table.hpp:140
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
void create_constraint_freedom_table(Constraints< DeviceType > &constraints, const State< DeviceType > &state)
Creates node freedom tables for each the target and base nodes in the constraints.
Definition create_constraint_freedom_table.hpp:66
Definition calculate_constraint_output.hpp:8
Solver< DeviceType > CreateSolver(State< DeviceType > &state, Elements< DeviceType > &elements, Constraints< DeviceType > &constraints)
Compute freedom tables for state, elements, and constraints, then construct and return solver.
Definition model.hpp:42
Beam element constitutes flexible beams material behavior in kynema.
Definition beam_element.hpp:17
Represents the input data for creating flexible beams.
Definition beams_input.hpp:22
Contains the field variables needed to compute the per-element contributions to the residual vector a...
Definition beams.hpp:22
Container class for managing multiple constraints in a simulation.
Definition constraints.hpp:29
View< size_t * > target_active_dofs
Definition constraints.hpp:49
View< Kokkos::pair< size_t, size_t > * > row_range
Definition constraints.hpp:45
View< size_t *[6]> base_node_freedom_table
Definition constraints.hpp:50
size_t num_dofs
Definition constraints.hpp:36
View< size_t * > base_active_dofs
Definition constraints.hpp:48
View< size_t *[6]> target_node_freedom_table
Definition constraints.hpp:51
A container providing handle to all structural elements present in the model.
Definition elements.hpp:20
Kokkos::View< size_t *, DeviceType > NumberOfNodesPerElement() const
Returns the number of nodes per element for each element in the system.
Definition elements.hpp:41
Kokkos::View< size_t **, DeviceType > NodeStateIndices() const
Returns the state indices for each node of each element in the system.
Definition elements.hpp:87
Mass element constitutes rigid bodies/masses material behavior in kynema. It has a single node and a ...
Definition mass_element.hpp:11
Represents the input data for creating mass/rigid body elements.
Definition masses_input.hpp:14
Contains field variables for mass elements (aka, rigid bodies) to compute per-element contributions t...
Definition masses.hpp:17
Represents a node in the finite element model.
Definition node.hpp:26
Node & Translate(std::span< const double, 3 > displacement)
Translate node by a displacement vector.
Definition node.hpp:85
Node & RotateAboutPoint(std::span< const double, 4 > q, std::span< const double, 3 > point)
Rotate node by a quaternion about the given point.
Definition node.hpp:98
void SetVelocityAboutPoint(std::span< const double, 6 > velocity, std::span< const double, 3 > point)
Set node velocity based on rigid body motion about a reference point.
Definition node.hpp:191
void SetAccelerationAboutPoint(std::span< const double, 6 > acceleration, std::span< const double, 3 > omega, std::span< const double, 3 > point)
Set node acceleration based on rigid body motion about a reference point.
Definition node.hpp:220
This object manages the assembly and solution of linear system arising from the generalized-alpha bas...
Definition solver.hpp:21
Spring element represents a constitutively linear spring connecting two nodes and defined by its scal...
Definition spring_element.hpp:12
Represents the input data for creating spring elements.
Definition springs_input.hpp:13
Contains field variables for spring elements to compute per-element contributions to the residual vec...
Definition springs.hpp:14
Container for storing the complete system state of the simulation at a given time increment.
Definition state.hpp:18
View< size_t * > ID
Definition state.hpp:24
View< size_t * > active_dofs
Definition state.hpp:26
View< size_t * > node_freedom_map_table
Definition state.hpp:27