电路图中所有的网络是被netlistManager统一管理的,在netlistManager中有一个list用于存放netlistNode,当电路图中有多少网络节点,就相当于有多少个netlistNode被存放进list中。
注:上面只是临时写的“list”,至于具体使用的容器应该是list还是vector,还有待进一步推敲。(2024.12.24)
每一个netlistNode相当于是一个网络节点,其内部又有一个list,用于记录着连接到了这一网络节点上的所有“引脚”,也就是接入到这一网络节点上的所有freePin,icPin,线段等等。
当需要生成矩阵(A)和向量(b)时,生成工作由netlistManager进行,它首先根据自身拥有的netlistNode数量决定矩阵和向量的大小,然后开辟内存空间:例如有8个netlistNode、也就是有8个网络节点,那么netlistManager将会创建一个8×8的矩阵A、长度为8的向量b、长度为8的向量solution、长度为8的……若干用到的params。
注:上面这里后面提及的若干个向量,感觉应该封装一下,以更方便使用;2024.12.24
注:上面提到的netlistManager创建的矩阵A,现在总是隐约感觉应该用指针,每一行具体的内容应该由各个netlistNode内部持有;2024.12.24
但是这里不能直接使用遍历netlistNode、不能借助for(key=>value)中的key作为行列依据。原因后面会说明。先说一下需要的做法:在准备生成矩阵和向量之前,要先对当前所有的netlistNode进行一次“编号分配”,这个编号分配出来的并不是netlistNode部分的“名称编号”,而是一个矩阵操作编号。
有了这个矩阵操作编号之后,每一个netlistNode内部的createMatrix()方法,便可以根据自己刚刚被赋予的矩阵操作编号,知道自己计算出来的系数放在矩阵的哪一行、或者哪一列中。
当netlistNode含有一个孤立IC时,自己的分配编号就对应到了行、列上。
当netlistNode含有电源或IC时,无论是基于电源的电压方程、还是基于IC的KCL方程,都可以生成出一个方程,这个方程的系数就是矩阵的行系数。
因为行是netlistNode自己已经知道的(分配编号),所以系数放在哪一行是明确的。
但是这个系数方程是通过各个电源或IC桥接其他网络计算出来的,而其他网络计算出来的结果就是系数中的列属性,这个时候就要知道所有的“桥”的另外一侧的网络是哪个列上的,因而回到最初的问题:要在createMatrix之前,先为所有的网络分配编号。