DPsim
Loading...
Searching...
No Matches
MNAStateSpaceExtractor.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Institute for Automation of Complex Power Systems, EONERC, RWTH Aachen University
2// SPDX-License-Identifier: MPL-2.0
3
4#pragma once
5
6#include <memory>
7#include <vector>
8
9#include <dpsim/Definitions.h>
11
12namespace DPsim {
13
15
29public:
30 using Ptr = std::shared_ptr<MNAStateSpaceExtractor>;
31
33
34 void initialize(const CPS::MNAInterface::List &components, UInt mnaVectorSize,
35 Real timeStep);
36
37 void extract(DirectLinearSolver &linearSolver, Bool variableModelChanged,
38 Bool systemMatrixChanged, Real time);
39
40 Bool isInitialized() const { return mInitialized; }
41
42 UInt getStateCount() const { return mStateCount; }
43
44 Real getTimeStep() const { return mTimeStep; }
45
46 const Matrix &getDiscreteStateMatrix() const { return mAd; }
47
48 const StateSpaceMetadata &getMetadata() const { return mMetadata; }
49
51 return mAttributeDependencies;
52 }
53
54 Bool hasExtractionTime() const { return mHasExtractionTime; }
55
56 Real getLastExtractionTime() const { return mLastExtractionTime; }
57
58private:
59 struct ContributorEntry {
61 UInt stateOffset = 0;
62 };
63
64 void reset();
65
66 void allocateMatrices();
67
68 void collectMetadata();
69
70 void stampConstantMatrices();
71
72 void restampUpdatedMatrices();
73
74 void rebuildCombinedMatrices();
75
76 void computeStateMatrix(DirectLinearSolver &linearSolver);
77
78 Bool mInitialized = false;
79
80 UInt mMnaVectorSize = 0;
81
82 UInt mStateCount = 0;
83
84 Real mTimeStep = 0.0;
85
86 Bool mHasUpdatedContributors = false;
87
88 Bool mStateMatrixValid = false;
89
90 StateSpaceMetadata mMetadata;
91
92 Real mLastExtractionTime = 0.0;
93
94 Bool mHasExtractionTime = false;
95
96 std::vector<ContributorEntry> mContributorEntries;
97
98 CPS::AttributeBase::List mAttributeDependencies;
99
100 Matrix mAdLocalConstant;
101 Matrix mBdMnaConstant;
102 Matrix mCdMnaConstant;
103
104 Matrix mAdLocalUpdated;
105 Matrix mBdMnaUpdated;
106 Matrix mCdMnaUpdated;
107
108 Matrix mAdLocal;
109 Matrix mBdMna;
110 Matrix mCdMna;
111
112 Matrix mAd;
113};
114
115} // namespace DPsim
std::vector< Ptr > List
Definition Attribute.h:123
std::vector< Ptr > List
std::shared_ptr< MNAStateSpaceContributor > Ptr
const CPS::AttributeBase::List & getAttributeDependencies() const
void initialize(const CPS::MNAInterface::List &components, UInt mnaVectorSize, Real timeStep)
std::shared_ptr< MNAStateSpaceExtractor > Ptr
const Matrix & getDiscreteStateMatrix() const
void extract(DirectLinearSolver &linearSolver, Bool variableModelChanged, Bool systemMatrixChanged, Real time)
const StateSpaceMetadata & getMetadata() const
CPS::Real Real
Definition Definitions.h:18
CPS::Matrix Matrix
Definition Definitions.h:24
CPS::Bool Bool
Definition Definitions.h:21
CPS::UInt UInt
Definition Definitions.h:23