🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
BlockDynamicSystem.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "BlockAstro.hpp"
25#include "AstCore/BlockSystem.hpp"
26#include "AstCore/BlockDerivative.hpp"
27#include "AstCore/SimTime.hpp"
28#include <unordered_map>
29
30AST_NAMESPACE_BEGIN
31
32class BlockDerivative;
33
61class AST_CORE_API BlockDynamicSystem : public BlockSystem
62{
63public:
64 BlockDynamicSystem() = default;
65 ~BlockDynamicSystem() = default;
66
69 size_t size() const { return state_.size(); }
70
73 int getDimension() const { return static_cast<int>(this->size()); }
74
77 const double* getStateData() const { return state_.data(); }
78
81 const double* getDerivativeData() const { return derivative_.data(); }
82
87 size_t getStateIndex(Identifier* id) const;
88 size_t getStateIndex(StringView name) const;
89
92 void setStateData(const double* y) { state_.assign(y, y + this->size()); }
93
94 #ifdef _MSC_VER
95 #pragma warning(push, 0)
96 #endif
97
100 void getDerivativeData(double* dydt) const { std::copy_n(derivative_.begin(), derivative_.size(), dydt); }
101
104 void fillDerivativeData(double value) { std::fill_n(derivative_.begin(), derivative_.size(), value); }
105
108 void fillAccumulateData(double value) { std::fill_n(accumulate_.begin(), accumulate_.size(), value); }
109
110 #ifdef _MSC_VER
111 #pragma warning(pop)
112 #endif
113
115 errc_t initialize();
116
118 errc_t sortBlocks();
119
121 errc_t createStateMap();
122
124 errc_t connectSignalsByNames();
125
128 void addBlock(BlockDerivative* block);
129
132 void addDerivativeBlock(BlockDerivative* block);
133
136 using BlockSystem::addBlock;
137
139 void clearBlocks();
140
142 void reset();
143
145 errc_t run(const SimTime& simTime) final;
146
147protected:
148 A_DISABLE_COPY(BlockDynamicSystem);
149 using StateMap = std::unordered_map<Identifier*, double*>;
150
151 std::vector<BlockDerivative*> derivativeBlocks_{}; // 状态量导数函数块
152 std::vector<double> state_{}; // 状态量
153 std::vector<double> accumulate_{}; // 累加状态量
154 std::vector<double> derivative_{}; // 状态量导数
155 StateMap stateMap_{}; // 状态量映射表
156 StateMap derivativeMap_{}; // 状态量导数映射表
157};
158
159
160AST_NAMESPACE_END
导数函数块
定义 BlockDerivative.hpp:46
动力学系统
定义 BlockDynamicSystem.hpp:62
void getDerivativeData(double *dydt) const
获取状态量导数数据指针
定义 BlockDynamicSystem.hpp:100
const double * getStateData() const
获取状态量数据指针
定义 BlockDynamicSystem.hpp:77
const double * getDerivativeData() const
获取状态量导数数据指针
定义 BlockDynamicSystem.hpp:81
void setStateData(const double *y)
填充状态量数据
定义 BlockDynamicSystem.hpp:92
void fillDerivativeData(double value)
填充状态量导数数据
定义 BlockDynamicSystem.hpp:104
size_t size() const
获取状态量大小
定义 BlockDynamicSystem.hpp:69
int getDimension() const
获取状态量维度
定义 BlockDynamicSystem.hpp:73
void fillAccumulateData(double value)
填充累加状态量数据
定义 BlockDynamicSystem.hpp:108
子系统块(subsystem block)
定义 BlockSystem.hpp:34
void clearBlocks()
清除子系统中的所有函数块
定义 BlockSystem.cpp:51
errc_t run(const SimTime &simTime) override
计算函数块
定义 BlockSystem.cpp:36
void addBlock(FuncBlock *block)
添加函数块到子系统中
定义 BlockSystem.cpp:46
标识符类
定义 Identifier.hpp:37
仿真时间
定义 SimTime.hpp:30