DPsim
Loading...
Searching...
No Matches
MNAStateSpaceExtractor.h
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>
10#include <dpsim/MNAStateSpaceContributor.h>
11
12namespace DPsim {
13
15
28class MNAStateSpaceExtractor {
29public:
30 using Ptr = std::shared_ptr<MNAStateSpaceExtractor>;
31
32 MNAStateSpaceExtractor() = default;
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
50 Bool hasExtractionTime() const { return mHasExtractionTime; }
51
52 Real getLastExtractionTime() const { return mLastExtractionTime; }
53
54private:
55 struct ContributorEntry {
56 MNAStateSpaceContributor::Ptr contributor;
57 UInt stateOffset = 0;
58 };
59
60 void reset();
61
62 void allocateMatrices();
63
64 void collectMetadata();
65
66 void stampStaticMatrices();
67
68 void restampVariableMatrices();
69
70 void rebuildCombinedMatrices();
71
72 void computeStateMatrix(DirectLinearSolver &linearSolver);
73
74 Bool mInitialized = false;
75
76 UInt mMnaVectorSize = 0;
77
78 UInt mStateCount = 0;
79
80 Real mTimeStep = 0.0;
81
82 Bool mHasVariableContributors = false;
83
84 Bool mStateMatrixValid = false;
85
86 StateSpaceMetadata mMetadata;
87
88 Real mLastExtractionTime = 0.0;
89
90 Bool mHasExtractionTime = false;
91
92 std::vector<ContributorEntry> mContributorEntries;
93
94 Matrix mAdLocalStatic;
95 Matrix mBdMnaStatic;
96 Matrix mCdMnaStatic;
97
98 Matrix mAdLocalVariable;
99 Matrix mBdMnaVariable;
100 Matrix mCdMnaVariable;
101
102 Matrix mAdLocal;
103 Matrix mBdMna;
104 Matrix mCdMna;
105
106 Matrix mAd;
107};
108
109} // namespace DPsim