Icarus
Vehicle Simulation as a Transformable Computational Graph, built on Vulcan and Janus
Loading...
Searching...
No Matches
AggregationTypes.hpp
Go to the documentation of this file.
1#pragma once
2
10
12
13namespace icarus {
14
15// =============================================================================
16// Reference Frames
17// =============================================================================
18
25enum class Frame : uint8_t {
30};
31
35inline const char *FrameToString(Frame frame) {
36 switch (frame) {
37 case Frame::BODY:
38 return "BODY";
39 case Frame::WIND:
40 return "WIND";
41 case Frame::LOCAL:
42 return "LOCAL";
43 case Frame::INERTIAL:
44 return "INERTIAL";
45 default:
46 return "UNKNOWN";
47 }
48}
49
50// =============================================================================
51// Force Contribution Structure (Optional - for advanced use)
52// =============================================================================
53
62template <typename Scalar> struct ForceContribution {
63 Vec3<Scalar> force;
64 Vec3<Scalar> moment;
65 Vec3<Scalar> application_point;
67
71 static ForceContribution<Scalar> AtCG(const Vec3<Scalar> &f) {
72 return ForceContribution<Scalar>{.force = f,
73 .moment = Vec3<Scalar>::Zero(),
74 .application_point = Vec3<Scalar>::Zero(),
75 .frame = Frame::BODY};
76 }
77
81 static ForceContribution<Scalar> AtPoint(const Vec3<Scalar> &f, const Vec3<Scalar> &point) {
82 return ForceContribution<Scalar>{.force = f,
83 .moment = Vec3<Scalar>::Zero(),
84 .application_point = point,
85 .frame = Frame::BODY};
86 }
87};
88
89// =============================================================================
90// Lifecycle Classification for Aggregation
91// =============================================================================
92
98enum class SourceLifecycle : uint8_t {
101};
102
103} // namespace icarus
Core type definitions, concepts, and configuration for Icarus.
Definition AggregationTypes.hpp:13
const char * FrameToString(Frame frame)
Convert Frame enum to string for logging.
Definition AggregationTypes.hpp:35
SourceLifecycle
Signal lifecycle for mass/force sources.
Definition AggregationTypes.hpp:98
@ DYNAMIC
Time-varying (e.g., fuel mass, sloshing).
Definition AggregationTypes.hpp:100
@ STATIC
Constant during run (e.g., dry mass, structure).
Definition AggregationTypes.hpp:99
Frame
Reference frame for force/moment quantities.
Definition AggregationTypes.hpp:25
@ WIND
Velocity-aligned frame (X=airspeed direction).
Definition AggregationTypes.hpp:27
@ INERTIAL
Inertial frame (ECI or ECEF).
Definition AggregationTypes.hpp:29
@ LOCAL
Component-local frame (e.g., nozzle axis).
Definition AggregationTypes.hpp:28
@ BODY
Body-fixed frame (X=forward, Y=right, Z=down).
Definition AggregationTypes.hpp:26
Force contribution from a single source.
Definition AggregationTypes.hpp:62
Frame frame
Frame of force/moment vectors.
Definition AggregationTypes.hpp:66
static ForceContribution< Scalar > AtPoint(const Vec3< Scalar > &f, const Vec3< Scalar > &point)
Create a body-frame force at a specified point.
Definition AggregationTypes.hpp:81
Vec3< Scalar > force
Force vector in source frame.
Definition AggregationTypes.hpp:63
static ForceContribution< Scalar > AtCG(const Vec3< Scalar > &f)
Create a body-frame force at CG (no moment transfer needed).
Definition AggregationTypes.hpp:71
Vec3< Scalar > moment
Moment about application point.
Definition AggregationTypes.hpp:64
Vec3< Scalar > application_point
Point of force application (body frame).
Definition AggregationTypes.hpp:65