DPsim
Loading...
Searching...
No Matches
EMT_SSNComp.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 <dpsim-models/MNASimPowerComp.h>
7#include <dpsim-models/Solver/MNAInterface.h>
8
9namespace CPS {
10namespace EMT {
11
21class SSNComp : public MNASimPowerComp<Real> {
22private:
23 const Int mInputSize;
24 const Int mOutputSize;
25
26protected:
27 Real mTimeStep;
28
29 Matrix mW;
30 Matrix mYHist;
31
32 Matrix mA;
33 Matrix mB;
34 Matrix mC;
35 Matrix mD;
36
37 Matrix mdA;
38 Matrix mdB;
39
40 const Attribute<Matrix>::Ptr mX;
41
42 SSNComp(String uid, String name, Int inputSize, Int outputSize,
43 Logger::Level logLevel = Logger::Level::off);
44
45 virtual Matrix calculateHistoryVector() const;
46
47 MatrixComp calculateSteadyStateStateFromInput(const MatrixComp &u,
48 Real frequency) const;
49 MatrixComp calculateSteadyStateOutputFromInput(const MatrixComp &x,
50 const MatrixComp &u) const;
51
52 void updateState(const Matrix &uOld, const Matrix &uNew);
53
54 void recomputeDiscreteModel();
55
57 virtual void updateStateSpaceModel();
58
59 virtual Attribute<Matrix>::Ptr inputAttribute() const = 0;
60 virtual Attribute<Matrix>::Ptr outputAttribute() const = 0;
61
62public:
63 void setParameters(const Matrix &A, const Matrix &B, const Matrix &C,
64 const Matrix &D);
65
66 void mnaCompInitialize(Real omega, Real timeStep,
67 Attribute<Matrix>::Ptr leftVector) override final;
68
69 void mnaCompAddPreStepDependencies(
70 AttributeBase::List &prevStepDependencies,
71 AttributeBase::List &attributeDependencies,
72 AttributeBase::List &modifiedAttributes) override final;
73
74 void mnaCompPreStep(Real time, Int timeStepCount) override final;
75
76 void mnaCompAddPostStepDependencies(
77 AttributeBase::List &prevStepDependencies,
78 AttributeBase::List &attributeDependencies,
79 AttributeBase::List &modifiedAttributes,
80 Attribute<Matrix>::Ptr &leftVector) override final;
81};
82
83} // namespace EMT
84} // namespace CPS
virtual void updateStateSpaceModel()
Hook for variable/time-varying SSN components.
String uid()
Returns unique id.
MNASimPowerComp(String uid, String name, Bool hasPreStep, Bool hasPostStep, Logger::Level logLevel)