DPsim
Loading...
Searching...
No Matches
MNAInterface.h
Go to the documentation of this file.
1/* Copyright 2017-2021 Institute for Automation of Complex Power Systems,
2 * EONERC, RWTH Aachen University
3 *
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at https://mozilla.org/MPL/2.0/.
7 *********************************************************************************/
8
9#pragma once
10
12#include <dpsim-models/Config.h>
14#include <dpsim-models/Task.h>
15
16namespace CPS {
19public:
20 typedef std::shared_ptr<MNAInterface> Ptr;
21 typedef std::vector<Ptr> List;
22
23 // #### MNA Base Functions ####
25 virtual void createSubComponents() {}
27 virtual void mnaInitialize(Real omega, Real timeStep) = 0;
28 virtual void mnaInitialize(Real omega, Real timeStep,
29 Attribute<Matrix>::Ptr leftVector) = 0;
31 virtual void mnaApplySystemMatrixStamp(SparseMatrixRow &systemMatrix) = 0;
33 virtual void mnaApplyRightSideVectorStamp(Matrix &rightVector) = 0;
35 virtual void mnaUpdateVoltage(const Matrix &leftVector) = 0;
37 virtual void mnaUpdateCurrent(const Matrix &leftVector) = 0;
39 virtual void mnaPreStep(Real time, Int timeStepCount) = 0;
41 virtual void mnaPostStep(Real time, Int timeStepCount,
42 Attribute<Matrix>::Ptr &leftVector) = 0;
44 virtual void
46 AttributeBase::List &attributeDependencies,
47 AttributeBase::List &modifiedAttributes) = 0;
49 virtual void
51 AttributeBase::List &attributeDependencies,
52 AttributeBase::List &modifiedAttributes,
53 Attribute<Matrix>::Ptr &leftVector) = 0;
54
55 // #### MNA Harmonic Base Functions ####
57 virtual void
58 mnaInitializeHarm(Real omega, Real timeStep,
59 std::vector<Attribute<Matrix>::Ptr> leftVector) = 0;
62 Int freqIdx) = 0;
64 virtual void mnaApplyRightSideVectorStampHarm(Matrix &sourceVector) = 0;
65 virtual void mnaApplyRightSideVectorStampHarm(Matrix &sourceVector,
66 Int freqIdx) = 0;
68 virtual const Task::List &mnaTasks() const = 0;
69 // Return right vector attribute
71};
72} // namespace CPS
std::vector< Ptr > List
Definition Attribute.h:123
AttributePointer< Attribute< T > > Ptr
Definition Attribute.h:250
Interface to be implemented by all models used by the MNA solver.
virtual void mnaAddPostStepDependencies(AttributeBase::List &prevStepDependencies, AttributeBase::List &attributeDependencies, AttributeBase::List &modifiedAttributes, Attribute< Matrix >::Ptr &leftVector)=0
Add MNA post step dependencies.
virtual void mnaUpdateCurrent(const Matrix &leftVector)=0
Update interface current from MNA system result.
virtual void mnaAddPreStepDependencies(AttributeBase::List &prevStepDependencies, AttributeBase::List &attributeDependencies, AttributeBase::List &modifiedAttributes)=0
Add MNA pre step dependencies.
virtual void mnaInitialize(Real omega, Real timeStep)=0
Initializes variables of components.
virtual void mnaPostStep(Real time, Int timeStepCount, Attribute< Matrix >::Ptr &leftVector)=0
MNA post step operations.
virtual void mnaApplySystemMatrixStamp(SparseMatrixRow &systemMatrix)=0
Stamps system matrix.
virtual void mnaPreStep(Real time, Int timeStepCount)=0
MNA pre step operations.
virtual void mnaApplyRightSideVectorStamp(Matrix &rightVector)=0
Stamps right side (source) vector.
virtual Attribute< Matrix >::Ptr getRightVector() const =0
virtual void createSubComponents()
Constructs and registers MNA subcomponents; called before collectVirtualNodes so virtual nodes exist ...
virtual void mnaApplySystemMatrixStampHarm(SparseMatrixRow &systemMatrix, Int freqIdx)=0
Stamps system matrix considering the frequency index.
virtual void mnaApplyRightSideVectorStampHarm(Matrix &sourceVector)=0
Stamps right side (source) vector considering the frequency index.
virtual const Task::List & mnaTasks() const =0
Return list of MNA tasks.
std::vector< Ptr > List
virtual void mnaInitialize(Real omega, Real timeStep, Attribute< Matrix >::Ptr leftVector)=0
virtual void mnaUpdateVoltage(const Matrix &leftVector)=0
Update interface voltage from MNA system result.
virtual void mnaInitializeHarm(Real omega, Real timeStep, std::vector< Attribute< Matrix >::Ptr > leftVector)=0
Initializes variables of components.
virtual void mnaApplyRightSideVectorStampHarm(Matrix &sourceVector, Int freqIdx)=0
std::shared_ptr< MNAInterface > Ptr
std::vector< Ptr > List
Definition Task.h:28
Eigen::Matrix< Real, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > Matrix
Dense matrix for real numbers.
Definition Definitions.h:81
double Real
Definition Definitions.h:62
int Int
Definition Definitions.h:61
Eigen::SparseMatrix< Real, Eigen::RowMajor > SparseMatrixRow
Sparse matrix for real numbers (row major).
Definition Definitions.h:74