🛰️航天仿真算法库 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
42class AST_CORE_API BlockDynamicSystem : public BlockSystem
43{
44public:
45 BlockDynamicSystem() = default;
46 ~BlockDynamicSystem() = default;
47
50 size_t size() const { return state_.size(); }
51
54 int getDimension() const { return static_cast<int>(this->size()); }
55
58 const double* getStateData() const { return state_.data(); }
59
62 const double* getDerivativeData() const { return derivative_.data(); }
63
66 void setStateData(const double* y) { std::copy(y, y + this->size(), state_.begin()); }
67
70 void getDerivativeData(double* dydt) const { std::copy(derivative_.begin(), derivative_.end(), dydt); }
71
74 void fillDerivativeData(double value) { std::fill(derivative_.begin(), derivative_.end(), value); }
75
77 errc_t initialize();
78
80 errc_t sortBlocks();
81
83 errc_t createStateMap();
84
86 errc_t connectSignalsByNames();
87
90 void addBlock(BlockDerivative* block);
91
94 void addDerivativeBlock(BlockDerivative* block);
95
98 using BlockSystem::addBlock;
99
101 void clearBlocks();
102
104 void reset();
105
106protected:
107 using StateMap = std::unordered_map<Identifier*, double*>;
108
109 std::vector<BlockDerivative*> derivativeBlocks_; // 状态量导数函数块
110 std::vector<double> state_; // 状态量
111 std::vector<double> derivative_; // 状态量导数
112 StateMap stateMap_; // 状态量映射表
113 StateMap derivativeMap_; // 状态量导数映射表
114};
115
116
117AST_NAMESPACE_END
导数函数块
定义 BlockDerivative.hpp:34
动力学系统
定义 BlockDynamicSystem.hpp:43
void getDerivativeData(double *dydt) const
获取状态量导数数据指针
定义 BlockDynamicSystem.hpp:70
const double * getStateData() const
获取状态量数据指针
定义 BlockDynamicSystem.hpp:58
const double * getDerivativeData() const
获取状态量导数数据指针
定义 BlockDynamicSystem.hpp:62
void setStateData(const double *y)
填充状态量数据
定义 BlockDynamicSystem.hpp:66
void fillDerivativeData(double value)
填充状态量导数数据
定义 BlockDynamicSystem.hpp:74
size_t size() const
获取状态量大小
定义 BlockDynamicSystem.hpp:50
int getDimension() const
获取状态量维度
定义 BlockDynamicSystem.hpp:54
子系统块(subsystem block)
定义 BlockSystem.hpp:34
void clearBlocks()
清除子系统中的所有函数块
定义 BlockSystem.cpp:51
void addBlock(FuncBlock *block)
添加函数块到子系统中
定义 BlockSystem.cpp:46