DPsim
DP_Ph1_Switch.h
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 
11 #include <dpsim-models/Base/Base_Ph1_Switch.h>
12 #include <dpsim-models/Definitions.h>
13 #include <dpsim-models/Logger.h>
14 #include <dpsim-models/MNASimPowerComp.h>
15 #include <dpsim-models/Solver/MNAInterface.h>
16 #include <dpsim-models/Solver/MNASwitchInterface.h>
17 
18 namespace CPS {
19 namespace DP {
20 namespace Ph1 {
25 class Switch : public MNASimPowerComp<Complex>,
26  public Base::Ph1::Switch,
27  public SharedFactory<Switch>,
28  public MNASwitchInterface {
29 protected:
30 public:
32  Switch(String uid, String name, Logger::Level loglevel = Logger::Level::off);
34  Switch(String name, Logger::Level logLevel = Logger::Level::off)
35  : Switch(name, name, logLevel) {}
36 
37  SimPowerComp<Complex>::Ptr clone(String name);
38 
39  // #### General ####
41  void initializeFromNodesAndTerminals(Real frequency);
42 
43  // #### General MNA section ####
44  void mnaCompInitialize(Real omega, Real timeStep,
45  Attribute<Matrix>::Ptr leftVector);
47  void mnaCompApplySystemMatrixStamp(SparseMatrixRow &systemMatrix);
49  void mnaCompApplyRightSideVectorStamp(Matrix &rightVector);
51  void mnaCompUpdateVoltage(const Matrix &leftVector);
53  void mnaCompUpdateCurrent(const Matrix &leftVector);
55  void mnaCompPostStep(Real time, Int timeStepCount,
56  Attribute<Matrix>::Ptr &leftVector);
58  void
59  mnaCompAddPostStepDependencies(AttributeBase::List &prevStepDependencies,
60  AttributeBase::List &attributeDependencies,
61  AttributeBase::List &modifiedAttributes,
62  Attribute<Matrix>::Ptr &leftVector);
63 
64  // #### MNA section for switch ####
66  Bool mnaIsClosed();
68  void mnaCompApplySwitchSystemMatrixStamp(Bool closed,
69  SparseMatrixRow &systemMatrix,
70  Int freqIdx);
71 };
72 } // namespace Ph1
73 } // namespace DP
74 } // namespace CPS
Dynamic Phasor Three-Phase Switch.
Dynamic phasor switch.
Definition: DP_Ph1_Switch.h:28
void initializeFromNodesAndTerminals(Real frequency)
Initializes component from power flow data.
SimPowerComp< Complex >::Ptr clone(String name)
Returns a modified copy of the component with the given suffix added to the name and without.
Switch(String name, Logger::Level logLevel=Logger::Level::off)
Defines name, component parameters and logging level.
Definition: DP_Ph1_Switch.h:34
void mnaCompUpdateVoltage(const Matrix &leftVector)
Update interface voltage from MNA system result.
void mnaCompAddPostStepDependencies(AttributeBase::List &prevStepDependencies, AttributeBase::List &attributeDependencies, AttributeBase::List &modifiedAttributes, Attribute< Matrix >::Ptr &leftVector)
Add MNA post step dependencies.
void mnaCompUpdateCurrent(const Matrix &leftVector)
Update interface current from MNA system result.
Bool mnaIsClosed()
Check if switch is closed.
void mnaCompPostStep(Real time, Int timeStepCount, Attribute< Matrix >::Ptr &leftVector)
MNA post step operations.
Switch(String uid, String name, Logger::Level loglevel=Logger::Level::off)
Defines UID, name, component parameters and logging level.
void mnaCompApplySwitchSystemMatrixStamp(Bool closed, SparseMatrixRow &systemMatrix, Int freqIdx)
Stamps system matrix considering the defined switch position.
void mnaCompApplyRightSideVectorStamp(Matrix &rightVector)
Stamps right side (source) vector.
void mnaCompApplySystemMatrixStamp(SparseMatrixRow &systemMatrix)
Stamps system matrix.
String uid()
Returns unique id.
Base class for all MNA components that are transmitting power.
MNA interface to be used by switching devices.
Base class for all components that are transmitting power.
Definition: SimPowerComp.h:17