21 using Ptr = std::shared_ptr<MNASimPowerComp<VarType>>;
22 using List = std::vector<Ptr>;
33 Logger::Level logLevel)
35 mHasPostStep(hasPostStep),
41 Bool hasPostStep =
true,
42 Logger::Level logLevel = Logger::Level::off)
52 Attribute<Matrix>::Ptr leftVector)
final;
57 void mnaPreStep(Real time, Int timeStepCount)
final;
58 void mnaPostStep(Real time, Int timeStepCount,
59 Attribute<Matrix>::Ptr &leftVector)
final;
61 AttributeBase::List &attributeDependencies,
62 AttributeBase::List &modifiedAttributes)
final;
63 void mnaAddPostStepDependencies(AttributeBase::List &prevStepDependencies,
64 AttributeBase::List &attributeDependencies,
65 AttributeBase::List &modifiedAttributes,
66 Attribute<Matrix>::Ptr &leftVector)
final;
67 void mnaInitializeHarm(Real omega, Real timeStep,
68 std::vector<Attribute<Matrix>::Ptr> leftVector)
final;
76 virtual void mnaCompInitialize(Real omega, Real timeStep,
77 Attribute<Matrix>::Ptr leftVector);
78 virtual void mnaCompApplySystemMatrixStamp(SparseMatrixRow &systemMatrix);
79 virtual void mnaCompApplyRightSideVectorStamp(Matrix &rightVector);
80 virtual void mnaCompUpdateVoltage(
const Matrix &leftVector);
81 virtual void mnaCompUpdateCurrent(
const Matrix &leftVector);
82 virtual void mnaCompPreStep(Real time, Int timeStepCount);
83 virtual void mnaCompPostStep(Real time, Int timeStepCount,
84 Attribute<Matrix>::Ptr &leftVector);
86 mnaCompAddPreStepDependencies(AttributeBase::List &prevStepDependencies,
87 AttributeBase::List &attributeDependencies,
88 AttributeBase::List &modifiedAttributes);
90 mnaCompAddPostStepDependencies(AttributeBase::List &prevStepDependencies,
91 AttributeBase::List &attributeDependencies,
92 AttributeBase::List &modifiedAttributes,
93 Attribute<Matrix>::Ptr &leftVector);
95 mnaCompInitializeHarm(Real omega, Real timeStep,
96 std::vector<Attribute<Matrix>::Ptr> leftVector);
97 virtual void mnaCompApplySystemMatrixStampHarm(SparseMatrixRow &systemMatrix,
99 virtual void mnaCompApplyRightSideVectorStampHarm(Matrix &sourceVector);
100 virtual void mnaCompApplyRightSideVectorStampHarm(Matrix &sourceVector,
103 const Task::List &
mnaTasks() const final;
104 Attribute<Matrix>::Ptr getRightVector() const final;
106 class MnaPreStep : public CPS::Task {
109 : Task(**comp.
mName +
".MnaPreStep"), mComp(comp) {
110 mComp.mnaAddPreStepDependencies(
111 mPrevStepDependencies, mAttributeDependencies, mModifiedAttributes);
113 void execute(Real time, Int timeStepCount)
override {
114 mComp.mnaPreStep(time, timeStepCount);
124 Attribute<Matrix>::Ptr leftVector)
125 : Task(**comp.
mName +
".MnaPostStep"), mComp(comp),
126 mLeftVector(leftVector) {
127 mComp.mnaAddPostStepDependencies(mPrevStepDependencies,
128 mAttributeDependencies,
129 mModifiedAttributes, mLeftVector);
131 void execute(Real time, Int timeStepCount)
override {
132 mComp.mnaPostStep(time, timeStepCount, mLeftVector);
137 Attribute<Matrix>::Ptr mLeftVector;