7template <
typename VarType>
16 subComp->initializeFromNodesAndTerminals(frequency);
20template <
typename VarType>
24 Bool contributeToRightVector) {
28 this->mSubcomponentsMNA.push_back(mnasubcomp);
30 if (contributeToRightVector) {
31 this->mRightVectorStamps.push_back(mnasubcomp->mRightVector);
34 switch (preStepOrder) {
38 this->mSubcomponentsPreStepBeforeParent.push_back(mnasubcomp);
42 this->mSubcomponentsPreStepAfterParent.push_back(mnasubcomp);
46 switch (postStepOrder) {
50 this->mSubcomponentsPostStepBeforeParent.push_back(mnasubcomp);
54 this->mSubcomponentsPostStepAfterParent.push_back(mnasubcomp);
61template <
typename VarType>
66 for (
auto subComp : mSubcomponentsMNA) {
67 subComp->mnaInitialize(omega, timeStep, leftVector);
70 **this->mRightVector = Matrix::Zero(leftVector->
get().rows(), 1);
72 mnaParentInitialize(omega, timeStep, leftVector);
75template <
typename VarType>
78 for (
auto subComp : mSubcomponentsMNA) {
79 subComp->mnaApplySystemMatrixStamp(systemMatrix);
84template <
typename VarType>
87 rightVector.setZero();
88 for (
auto stamp : mRightVectorStamps) {
89 if ((**stamp).size() != 0) {
90 rightVector += **stamp;
96template <
typename VarType>
98 for (
auto subComp : mSubcomponentsPreStepBeforeParent) {
99 subComp->mnaPreStep(time, timeStepCount);
102 for (
auto subComp : mSubcomponentsPreStepAfterParent) {
103 subComp->mnaPreStep(time, timeStepCount);
107template <
typename VarType>
110 for (
auto subComp : mSubcomponentsPostStepBeforeParent) {
111 subComp->mnaPostStep(time, timeStepCount, leftVector);
114 for (
auto subComp : mSubcomponentsPostStepAfterParent) {
115 subComp->mnaPostStep(time, timeStepCount, leftVector);
119template <
typename VarType>
124 for (
auto subComp : mSubcomponentsMNA) {
125 subComp->mnaAddPreStepDependencies(
126 prevStepDependencies, attributeDependencies, modifiedAttributes);
132template <
typename VarType>
138 for (
auto subComp : mSubcomponentsMNA) {
139 subComp->mnaAddPostStepDependencies(prevStepDependencies,
140 attributeDependencies,
141 modifiedAttributes, leftVector);
144 modifiedAttributes, leftVector);
AttributePointer< Attribute< T > > Ptr
Base class for composite power components.
virtual void mnaParentApplySystemMatrixStamp(SparseMatrixRow &systemMatrix)
void mnaCompInitialize(Real omega, Real timeStep, Attribute< Matrix >::Ptr leftVector) override
Initializes variables of components.
void addMNASubComponent(typename SimPowerComp< VarType >::Ptr subc, MNA_SUBCOMP_TASK_ORDER preStepOrder, MNA_SUBCOMP_TASK_ORDER postStepOrder, Bool contributeToRightVector)
Add a new subcomponent implementing MNA methods.
void mnaCompAddPostStepDependencies(AttributeBase::List &prevStepDependencies, AttributeBase::List &attributeDependencies, AttributeBase::List &modifiedAttributes, Attribute< Matrix >::Ptr &leftVector) override
Add MNA post step dependencies.
virtual void initializeParentFromNodesAndTerminals(Real frequency)=0
virtual void mnaParentApplyRightSideVectorStamp(Matrix &rightVector)
void initializeFromNodesAndTerminals(Real frequency) override final
virtual void mnaParentAddPreStepDependencies(AttributeBase::List &prevStepDependencies, AttributeBase::List &attributeDependencies, AttributeBase::List &modifiedAttributes)
void mnaCompApplySystemMatrixStamp(SparseMatrixRow &systemMatrix) override
Stamps system matrix.
virtual void mnaParentPostStep(Real time, Int timeStepCount, Attribute< Matrix >::Ptr &leftVector)
void mnaCompPreStep(Real time, Int timeStepCount) override
MNA pre step operations.
void mnaCompApplyRightSideVectorStamp(Matrix &rightVector) override
Stamps right side (source) vector.
virtual void mnaParentAddPostStepDependencies(AttributeBase::List &prevStepDependencies, AttributeBase::List &attributeDependencies, AttributeBase::List &modifiedAttributes, Attribute< Matrix >::Ptr &leftVector)
void mnaCompAddPreStepDependencies(AttributeBase::List &prevStepDependencies, AttributeBase::List &attributeDependencies, AttributeBase::List &modifiedAttributes) override
Add MNA pre step dependencies.
virtual void mnaParentPreStep(Real time, Int timeStepCount)
void mnaCompPostStep(Real time, Int timeStepCount, Attribute< Matrix >::Ptr &leftVector) override
MNA post step operations.
virtual void createSubComponents()
Constructs and registers MNA subcomponents; called before collectVirtualNodes so virtual nodes exist ...
MNASimPowerComp(String uid, String name, Bool hasPreStep, Bool hasPostStep, Logger::Level logLevel)
Basic constructor that takes UID, name and log level.
Matrix mFrequencies
List of considered network frequencies.
std::shared_ptr< SimPowerComp< VarType > > Ptr
std::vector< std::shared_ptr< SimPowerComp< VarType > > > mSubComponents
void updateMatrixNodeIndices()
Update the "cached" mMatrixNodeIndices and mMatrixNodeIndexIsGround members.
Eigen::Matrix< Real, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > Matrix
Dense matrix for real numbers.
Eigen::SparseMatrix< Real, Eigen::RowMajor > SparseMatrixRow
Sparse matrix for real numbers (row major).