Solucionadores de ecuaciones no lineales en simuladores SPICE

5

Tenemos una asignación en la clase de procesamiento Paralelo, el objetivo es implementar un Solucionador de ecuaciones no lineales en cuda basado en método de Newton Raphson e interconecta este solucionador con una aplicación que trata con un conjunto de ecuaciones no lineales. Queríamos conectar nuestro solver con simuladores de circuito . Hemos seleccionado un simulador de código abierto y cada vez que el simulador realiza una simulación de punto de operación de CC, invocará nuestro código cuda. En este punto, queríamos comparar el rendimiento de nuestro solucionador con los solucionadores implementados en otros simuladores de circuito, como

  • LTspice
  • Ngspice
  • Qucs

Y también otros solucionadores de software, por ejemplo, Caja de herramientas de optimización de Matlab

Hemos probado estos solucionadores contra un circuito [que debería corresponder a un gran conjunto de ecuaciones no lineales.]

Lalistadeconexionesdelcircuitosegeneramedianteunasecuenciadecomandosdondeseproporcionaelnúmerodenodos.Hemosformuladoelconjuntodeecuacionesnolinealesquerigenelcircuitoanteriorcomosigue:

Lasincógnitasx[i]enesteconjuntodeecuacionessonlosnodosdevoltajeylacorrienteencadaresistencia

Hemoslogradoescribirestocomounafunciónmatlabparaprobarestecircuitocontralosalgoritmosdesoluciónnolinealmatlabqueaparecenenlacajadeherramientasdeoptimización.

functionF=non_linear_diode(X)%Len(x)isalwayseven2*dd=length(X)/2;F=zeros(1,d*2);i=1e-3;%Currentsourcemagnituder=50;%Resistorsvaluec1=1e-15;%DiodesI_sc2=0.0258;%DiodesN*V_thF(1)=X(1)-X(2)-i*r;F(d)=X(d)-X(d+1)-X(2*d)*r;F(d+1)=i-c1*(exp(X(2)/c2)-1)-X(d+2);forii=2:(d-1)F(ii)=X(ii)-X(ii+1)-X(ii+d)*r;F(ii+d)=X(ii+d)-c1*(exp(X(ii+1)/c2)-1)-X(ii+d+1);endF(d*2)=X(2*d)-c1*(exp(X(d+1)/c2)-1);end

TambiénhemosescritounscriptparagenerarlalistaderedesdeSpiceparaesteproblema

defgen_ckt(num):ret=""
    for i in range(1, num):
        ret += 'R'+str(i)+" "+str(i)+" "+str(i+1)+" 50\n"
        ret += 'D'+str(i)+" "+str(i+1)+" 0 DI1N4004\n"

Donde DI1N4004 es nuestro modelo de diodo definido en la lista de redes. Al probar los solucionadores anteriores contra el problema con 70,000 nodos, es decir, 140,000 ecuaciones y incógnitas

  • Matlab se queda sin memoria
  • Qucs toma para siempre
  • Todos los solucionadores basados en especias resolvieron de alguna manera este problema en menos de 2 segundos

En realidad no tenemos idea de cómo los solucionadores de especias lograron evitar este problema de memoria, e incluso cuando probamos este problema con un número menor de incógnitas, por ejemplo. 3,000 los solucionadores de especias siempre superan a matlab y qucs. Aunque como se menciona en [1] [2] [3] spice utiliza el enfoque de Newton-Raphson amortiguado para resolver circuitos con componentes no lineales que es el mismo que todos los solucionadores mencionados anteriormente

  • Matlab Fsolve : método de dogleg [Newton + Trust-region + más decente] [4]
  • Qucs: amortiguado Newton-Raphson [5]

Mis preguntas son

  • ¿Cómo logró Spice resolver un sistema tan grande de ecuaciones no lineales de forma rápida y sin quedarse sin memoria? ¿Está explotando la estructura del circuito haciendo uso de los elementos repetidos?
  • ¿Este ejemplo es suficientemente justo? Quiero decir, ¿necesitamos considerar circuitos más prácticos? y si es así, ¿alguien puede dar un ejemplo de un circuito (s) donde la simulación del punto de operación de CC podría ser el cuello de botella del tiempo de simulación?
  • En [6] los autores mencionaron circuitos de referencia ISCAS85 ¿deberíamos considerar estos circuitos en nuestras pruebas?
  • ¿El punto de operación de CC es el tipo de simulación al que debemos dirigirnos? Quiero decir, deberíamos enfocarnos para conectar nuestro solucionador con otros tipos de simulaciones, por ejemplo. ¿El análisis transitorio?

Referencias

1: http://www.ni.com/white-paper/5808/en/

2: http://www.ecircuitcenter.com/SpiceTopics/Overview/Overview.htm

3: http://www.electronicdesign.com / boards / taking-peek-under-hood-your-spice-circuit-simulation-engine

4: https://www.mathworks.com/help/optim/ug/fsolve.html

5: http://qucs.sourceforge.net/tech/node16.html

6: http://www.mos-ak.org/bucharest/presetnations/Lannutti_MOS -AK_Bucharest.pdf

    
pregunta Elbehery

1 respuesta

7
  

¿Cómo logró Spice resolver un sistema tan grande de ecuaciones no lineales de forma rápida y sin quedarse sin memoria?

Google solucionador de matriz dispersa .

Un buen SPICE es muy probable que se encuentre por defecto (o sabe cuándo cambiar a) un solucionador de matrices dispersas, ya que los circuitos grandes generalmente producen matrices dispersas (cada nodo se conecta a solo una pequeña fracción de las ramas) sería una optimización obvia para usar (o tener disponible) un solucionador de matriz dispersa en un SPICE. Incluso el informe original de 1975 (¿Tesis?) De Nagel sobre SPICE discute el uso de métodos de matriz dispersos .

Matlab ciertamente tiene un solucionador de matriz dispersa disponible, pero probablemente tenga que invocarlo explícitamente.

Es posible que Qucs no tenga esta capacidad, o que no se implemente particularmente bien, ya que es un proyecto de código abierto relativamente simple y es posible que sus desarrolladores no hayan llegado al punto de probar nada más grande que un problema de juguete.

(Sugerencia de sombrero a @jonk para el enlace al informe de Nagel)

  

¿Este ejemplo es suficientemente justo? Quiero decir, ¿necesitamos considerar circuitos más prácticos?

Creo que quiere demostrar su solucionador en una amplia variedad de diferentes tipos de circuitos. Probablemente desee considerar circuitos que se sabe que producen matrices mal acondicionadas . Los circuitos de retroalimentación positiva a menudo también producen dificultades para los solucionadores no lineales.

  

y si es así, ¿alguien puede dar un ejemplo de un circuito (s) donde la simulación del punto de operación de CC podría ser el cuello de botella del tiempo de simulación?

Esperaría que esto sea común en cualquier circuito mal condicionado al configurar una simulación de CA.

  

¿El punto de operación de CC es el tipo de simulación al que debemos dirigirnos? Quiero decir, deberíamos enfocarnos para conectar nuestro solucionador con otros tipos de simulaciones, por ejemplo. ¿El análisis transitorio?

Los otros tipos principales de simulación (ac y transitorios) solo requieren solucionadores lineales. La simulación de CA se refiere explícitamente a pequeñas variaciones sobre el punto de operación, por lo que el circuito puede considerarse lineal por la teoría de la perturbación. El solucionador de transitorios linealiza el circuito en cada paso de tiempo, pero vuelve a calcular el circuito equivalente lineal local para cada paso de tiempo. Entonces, si está intentando demostrar un solucionador no lineal, el solucionador de CC es el que debe demostrar.

    
respondido por el The Photon

Lea otras preguntas en las etiquetas