private void PreAnalizeToSolve(Circuit cir, List <Node> nodos, SolveInfo solveinfo) { nodos.AddRange(cir.Nodes.Values); nodos.Remove(cir.Reference); //guardo para futuro los nodos de los componentes especiales if (cir.OriginalCircuit != null) { foreach (var comp in cir.OriginalCircuit.Components) { if (comp is ControlledDipole) { foreach (var nodo in comp.Nodes) { if (!nodo.IsReference) { SpecialComponentInfo info = new SpecialComponentInfo(comp); info.ImportantOutputNodes.Add(nodo); solveinfo.specialcomponents.Add(info); if (!solveinfo.nortonnodes.Contains(nodo)) { solveinfo.nortonnodes.Add(nodo); } //especialcomponents.Add(nodo, comp); } } } } } foreach (var compo in cir.Components) { if (compo is Branch) { solveinfo.ramas.Add((Branch)compo); } } foreach (var nodo in nodos) { //los nodos de salida de un dispositivo VcV deben resolverse mediante matrices if (solveinfo.nortonnodes.Contains(nodo)) { continue; } if (nodo.TypeOfNode == Node.NodeType.MultibranchCurrentNode || nodo.TypeOfNode == Node.NodeType.VoltageLinkedNode ) { solveinfo.nortonnodes.Add(nodo); } else if (nodo.TypeOfNode == Node.NodeType.VoltageDivideNode || nodo.TypeOfNode == Node.NodeType.VoltageFixedNode) { solveinfo.calculablenodes.Add(nodo); } } }
private void PreAnalizeToSolve(Circuit cir, List<Node> nodos, SolveInfo solveinfo) { nodos.AddRange(cir.Nodes.Values); nodos.Remove(cir.Reference); //guardo para futuro los nodos de los componentes especiales if (cir.OriginalCircuit != null) { foreach (var comp in cir.OriginalCircuit.Components) { if (comp is ControlledDipole) { foreach (var nodo in comp.Nodes) { if (!nodo.IsReference) { SpecialComponentInfo info = new SpecialComponentInfo(comp); info.ImportantOutputNodes.Add(nodo); solveinfo.specialcomponents.Add(info); if (!solveinfo.nortonnodes.Contains(nodo)) solveinfo.nortonnodes.Add(nodo); //especialcomponents.Add(nodo, comp); } } } } } foreach (var compo in cir.Components) { if (compo is Branch) solveinfo.ramas.Add((Branch)compo); } foreach (var nodo in nodos) { //los nodos de salida de un dispositivo VcV deben resolverse mediante matrices if (solveinfo.nortonnodes.Contains(nodo)) continue; if (nodo.TypeOfNode == Node.NodeType.MultibranchCurrentNode || nodo.TypeOfNode == Node.NodeType.VoltageLinkedNode ) solveinfo.nortonnodes.Add(nodo); else if (nodo.TypeOfNode == Node.NodeType.VoltageDivideNode || nodo.TypeOfNode == Node.NodeType.VoltageFixedNode) { solveinfo.calculablenodes.Add(nodo); } } }