🛰️航天仿真算法库 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 <unordered_map>
28
29AST_NAMESPACE_BEGIN
30
31class BlockDerivative;
32
60class AST_CORE_API BlockDynamicSystem : public BlockSystem
61{
62public:
63 BlockDynamicSystem() = default;
64 ~BlockDynamicSystem() = default;
65
68 size_t size() const { return state_.size(); }
69
72 int getDimension() const { return static_cast<int>(this->size()); }
73
76 const double* getStateData() const { return state_.data(); }
77
80 const double* getDerivativeData() const { return derivative_.data(); }
81
84 void setStateData(const double* y) { std::copy(y, y + this->size(), state_.begin()); }
85
88 void getDerivativeData(double* dydt) const { std::copy(derivative_.begin(), derivative_.end(), dydt); }
89
92 void fillDerivativeData(double value) { std::fill(derivative_.begin(), derivative_.end(), value); }
93
95 errc_t initialize();
96
98 errc_t sortBlocks();
99
101 errc_t createStateMap();
102
104 errc_t connectSignalsByNames();
105
108 void addBlock(BlockDerivative* block);
109
112 void addDerivativeBlock(BlockDerivative* block);
113
116 using BlockSystem::addBlock;
117
119 void clearBlocks();
120
122 void reset();
123
124protected:
125 using StateMap = std::unordered_map<Identifier*, double*>;
126
127 std::vector<BlockDerivative*> derivativeBlocks_; // 状态量导数函数块
128 std::vector<double> state_; // 状态量
129 std::vector<double> derivative_; // 状态量导数
130 StateMap stateMap_; // 状态量映射表
131 StateMap derivativeMap_; // 状态量导数映射表
132};
133
134
135AST_NAMESPACE_END
导数函数块
定义 BlockDerivative.hpp:46
动力学系统
定义 BlockDynamicSystem.hpp:61
void getDerivativeData(double *dydt) const
获取状态量导数数据指针
定义 BlockDynamicSystem.hpp:88
const double * getStateData() const
获取状态量数据指针
定义 BlockDynamicSystem.hpp:76
const double * getDerivativeData() const
获取状态量导数数据指针
定义 BlockDynamicSystem.hpp:80
void setStateData(const double *y)
填充状态量数据
定义 BlockDynamicSystem.hpp:84
void fillDerivativeData(double value)
填充状态量导数数据
定义 BlockDynamicSystem.hpp:92
size_t size() const
获取状态量大小
定义 BlockDynamicSystem.hpp:68
int getDimension() const
获取状态量维度
定义 BlockDynamicSystem.hpp:72
子系统块(subsystem block)
定义 BlockSystem.hpp:34
void clearBlocks()
清除子系统中的所有函数块
定义 BlockSystem.cpp:51
void addBlock(FuncBlock *block)
添加函数块到子系统中
定义 BlockSystem.cpp:46