7 Bool isTerminal1NotGrounded,
8 Bool isTerminal2NotGrounded,
10 SPDLOG_LOGGER_DEBUG(mSLog,
"Start stamping conductance...");
12 stampValue(conductance, mat, node1Index, node2Index, isTerminal1NotGrounded,
13 isTerminal2NotGrounded, 1, 0, mSLog);
15 SPDLOG_LOGGER_DEBUG(mSLog,
"Stamping completed.");
20 Bool isTerminal1NotGrounded,
21 Bool isTerminal2NotGrounded,
25 mSLog,
"Start stamping admittance for frequency index {:d}...", freqIdx);
27 stampValue(admittance, mat, node1Index, node2Index, isTerminal1NotGrounded,
28 isTerminal2NotGrounded, maxFreq, freqIdx, mSLog);
30 SPDLOG_LOGGER_DEBUG(mSLog,
"Stamping completed.");
35 UInt node2Index,
Bool isTerminal1NotGrounded,
Bool isTerminal2NotGrounded,
37 if (admittance.rows() != 2 || admittance.cols() != 2)
42 "Start stamping packed real admittance for frequency index {:d}...",
45 stampValue(admittance, mat, node1Index, node2Index, isTerminal1NotGrounded,
46 isTerminal2NotGrounded, maxFreq, freqIdx, mSLog);
48 SPDLOG_LOGGER_DEBUG(mSLog,
"Stamping completed.");
54 Bool isTerminal1NotGrounded,
55 Bool isTerminal2NotGrounded,
57 SPDLOG_LOGGER_DEBUG(mSLog,
"Start stamping conductance matrix...");
59 stampMatrix(conductanceMat, mat, node1Index, node2Index,
60 isTerminal1NotGrounded, isTerminal2NotGrounded, 1, 0, mSLog);
62 SPDLOG_LOGGER_DEBUG(mSLog,
"Stamping completed.");
69 mSLog,
"Start stamping 3x3 conductance matrix between two nodes...");
71 stampMatrixBetween2Nodes(conductanceMat, 3, mat, node1Index, node2Index, 1, 0,
74 SPDLOG_LOGGER_DEBUG(mSLog,
"Stamping completed.");
81 mSLog,
"Start stamping 3x3 conductance matrix from node to ground...");
83 stampMatrixNodeToGround(conductanceMat, 3, mat, nodeIndex, 1, 0, mSLog);
85 SPDLOG_LOGGER_DEBUG(mSLog,
"Stamping completed.");
90 UInt node2Index,
Bool isTerminal1NotGrounded,
Bool isTerminal2NotGrounded,
93 mSLog,
"Start stamping admittance matrix for frequency index {:d}...",
96 stampMatrix(admittanceMat, mat, node1Index, node2Index,
97 isTerminal1NotGrounded, isTerminal2NotGrounded, maxFreq, freqIdx,
100 SPDLOG_LOGGER_DEBUG(mSLog,
"Stamping completed.");
105 Bool isTerminal1NotGrounded,
Bool isTerminal2NotGrounded,
107 SPDLOG_LOGGER_DEBUG(mSLog,
108 "Start stamping conductance as 3x3 scalar matrix...");
110 stampValueAsScalarMatrix(conductance, 3, mat, node1Index, node2Index,
111 isTerminal1NotGrounded, isTerminal2NotGrounded, 1, 0,
114 SPDLOG_LOGGER_DEBUG(mSLog,
"Stamping completed.");
119 Bool isTerminal1NotGrounded,
Bool isTerminal2NotGrounded,
121 SPDLOG_LOGGER_DEBUG(mSLog,
122 "Start stamping admittance as 3x3 scalar matrix for "
123 "frequency index {:d}...",
126 stampValueAsScalarMatrix(admittance, 3, mat, node1Index, node2Index,
127 isTerminal1NotGrounded, isTerminal2NotGrounded,
128 maxFreq, freqIdx, mSLog);
130 SPDLOG_LOGGER_DEBUG(mSLog,
"Stamping completed.");
135 UInt node2Index,
Bool isTerminal1NotGrounded,
136 Bool isTerminal2NotGrounded,
Int maxFreq,
138 if (isTerminal1NotGrounded && isTerminal2NotGrounded) {
139 stampToMatrix(value, mat, node1Index, node1Index, node2Index, node2Index,
140 maxFreq, freqIdx, mSLog);
141 }
else if (isTerminal1NotGrounded) {
142 addToMatrixElement(mat, node1Index, node1Index, value, maxFreq, freqIdx,
144 }
else if (isTerminal2NotGrounded) {
145 addToMatrixElement(mat, node2Index, node2Index, value, maxFreq, freqIdx,
151void MNAStampUtils::stampMatrix(
const MatrixVar<T> &matrix,
153 UInt node2Index,
Bool isTerminal1NotGrounded,
154 Bool isTerminal2NotGrounded,
Int maxFreq,
156 Int numRows = matrix.rows();
157 Int numCols = matrix.cols();
158 if (numRows != numCols) {
159 throw InvalidArgumentException();
162 if (isTerminal1NotGrounded && isTerminal2NotGrounded) {
163 stampMatrixBetween2Nodes(matrix, numRows, mat, node1Index, node2Index,
164 maxFreq, freqIdx, mSLog);
165 }
else if (isTerminal1NotGrounded) {
166 stampMatrixNodeToGround(matrix, numRows, mat, node1Index, maxFreq, freqIdx,
168 }
else if (isTerminal2NotGrounded) {
169 stampMatrixNodeToGround(matrix, numRows, mat, node2Index, maxFreq, freqIdx,
175void MNAStampUtils::stampMatrixBetween2Nodes(
const MatrixVar<T> &matrix,
181 for (
UInt i = 0; i < sizeOfMatrix; i++) {
182 for (
UInt j = 0; j < sizeOfMatrix; j++) {
183 stampToMatrix(matrix(i, j), mat, node1Index + i, node1Index + j,
184 node2Index + i, node2Index + j, maxFreq, freqIdx, mSLog);
190void MNAStampUtils::stampMatrixNodeToGround(
193 for (
UInt i = 0; i < sizeOfMatrix; i++) {
194 for (
UInt j = 0; j < sizeOfMatrix; j++) {
195 addToMatrixElement(mat, nodeIndex + i, nodeIndex + j, matrix(i, j),
196 maxFreq, freqIdx, mSLog);
202void MNAStampUtils::stampValueAsScalarMatrix(
204 UInt node2Index,
Bool isTerminal1NotGrounded,
Bool isTerminal2NotGrounded,
206 if (isTerminal1NotGrounded && isTerminal2NotGrounded) {
207 for (
UInt i = 0; i < sizeOfScalarMatrix; i++) {
208 stampToMatrix(value, mat, node1Index + i, node1Index + i, node2Index + i,
209 node2Index + i, maxFreq, freqIdx, mSLog);
211 }
else if (isTerminal1NotGrounded) {
212 for (
UInt i = 0; i < sizeOfScalarMatrix; i++) {
213 addToMatrixElement(mat, node1Index + i, node1Index + i, value, maxFreq,
216 }
else if (isTerminal2NotGrounded) {
217 for (
UInt i = 0; i < sizeOfScalarMatrix; i++) {
218 addToMatrixElement(mat, node2Index + i, node2Index + i, value, maxFreq,
229 addToMatrixElement(mat, row1, column1, value, maxFreq, freqIdx, mSLog);
230 addToMatrixElement(mat, row1, column2, -value, maxFreq, freqIdx, mSLog);
231 addToMatrixElement(mat, row2, column1, -value, maxFreq, freqIdx, mSLog);
232 addToMatrixElement(mat, row2, column2, value, maxFreq, freqIdx, mSLog);
237void MNAStampUtils::addToMatrixElement(
SparseMatrixRow &mat, Matrix::Index row,
238 Matrix::Index column,
Real value,
241 SPDLOG_LOGGER_DEBUG(mSLog,
242 "- Adding {:s} to system matrix element ({:d},{:d})",
248void MNAStampUtils::addToMatrixElement(
SparseMatrixRow &mat, Matrix::Index row,
249 Matrix::Index column,
Complex value,
252 SPDLOG_LOGGER_DEBUG(mSLog,
253 "- Adding {:s} to system matrix element ({:d},{:d})",
259void MNAStampUtils::addToMatrixElement(
SparseMatrixRow &mat, Matrix::Index row,
260 Matrix::Index column,
265 "- Adding packed real 2x2 block to system matrix element ({:d},{:d})",
std::shared_ptr< spdlog::logger > Log
static String complexToString(const Complex &num)
static String realToString(const Real &num)
static void stampConductanceAs3x3ScalarMatrix(Real conductance, SparseMatrixRow &mat, UInt node1Index, UInt node2Index, Bool isTerminal1NotGrounded, Bool isTerminal2NotGrounded, const Logger::Log &mSLog)
Stamps conductance as a 3x3 scalar matrix (a diagonal matrix, where all diagonal elements are equal t...
static void stampConductance(Real conductance, SparseMatrixRow &mat, UInt node1Index, UInt node2Index, Bool isTerminal1NotGrounded, Bool isTerminal2NotGrounded, const Logger::Log &mSLog)
static void stampAdmittanceMatrix(const MatrixComp &admittanceMat, SparseMatrixRow &mat, UInt node1Index, UInt node2Index, Bool isTerminal1NotGrounded, Bool isTerminal2NotGrounded, const Logger::Log &mSLog, Int maxFreq=1, Int freqIdx=0)
static void stampAdmittanceAs3x3ScalarMatrix(Complex admittance, SparseMatrixRow &mat, UInt node1Index, UInt node2Index, Bool isTerminal1NotGrounded, Bool isTerminal2NotGrounded, const Logger::Log &mSLog, Int maxFreq=1, Int freqIdx=0)
Stamps admittance as a 3x3 scalar matrix (a diagonal matrix, where all diagonal elements are equal to...
static void stampAdmittance(Complex admittance, SparseMatrixRow &mat, UInt node1Index, UInt node2Index, Bool isTerminal1NotGrounded, Bool isTerminal2NotGrounded, const Logger::Log &mSLog, Int maxFreq=1, Int freqIdx=0)
static void stamp3x3ConductanceMatrixBetween2Nodes(const Matrix &conductanceMat, SparseMatrixRow &mat, UInt node1Index, UInt node2Index, const Logger::Log &mSLog)
static void stampConductanceMatrix(const Matrix &conductanceMat, SparseMatrixRow &mat, UInt node1Index, UInt node2Index, Bool isTerminal1NotGrounded, Bool isTerminal2NotGrounded, const Logger::Log &mSLog)
static void stamp3x3ConductanceMatrixNodeToGround(const Matrix &conductanceMat, SparseMatrixRow &mat, UInt nodeIndex, const Logger::Log &mSLog)
static void addToMatrixElement(SparseMatrixRow &mat, Matrix::Index row, Matrix::Index column, Complex value, Int maxFreq=1, Int freqIdx=0)
Eigen::Matrix< Real, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > Matrix
Dense matrix for real numbers.
Eigen::Matrix< VarType, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > MatrixVar
std::complex< Real > Complex
Eigen::Matrix< Complex, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor > MatrixComp
Dense matrix for complex numbers.
Eigen::SparseMatrix< Real, Eigen::RowMajor > SparseMatrixRow
Sparse matrix for real numbers (row major).