Tenemos una misión en el procesamiento en Paralelo de la clase, el objetivo es implementar un No-lineal solucionador de Ecuaciones en cuda basado en Newton Raphson método y a la interfaz de este solver con una aplicación que se ocupa de conjunto de ecuaciones no lineales. Queríamos interfaz de nuestro solver con simuladores de circuitos. Hemos recogido un simulador de código abierto y cada vez que el simulador es la realización de un DC punto de funcionamiento de la simulación se va a invocar nuestro código cuda. En este punto hemos querido comparar el desempeño de nuestro solver en contra de solucionadores de problemas de aplicación en otros simuladores de circuitos, tales como
- LTspice
- Ngspice
- Qucs
Y también otro software que resuelven por ejemplo, Matlab optimización de la caja de herramientas
Hemos probado estos solucionadores contra un circuito [que se debe asignar a un enorme conjunto de los lineales eqns.]
El circuito de netlist es generada por un script donde el número de los nodos es dado. Hemos formulado el conjunto de ecuaciones no lineales que rigen el circuito de arriba como los siguientes
Las incógnitas x[i]
en este conjunto de ecuaciones es el voltaje de los nodos y la corriente en cada resistor
Hemos logrado escribir este como una función de matlab para la prueba de este circuito en contra de matlab solver no lineal de los algoritmos presentados en la optimización de la caja de herramientas.
function F = non_linear_diode(X)
% Len(x) is always even 2*d
d = length(X)/2;
F = zeros(1, d*2);
i = 1e-3; % Current source magnitude
r = 50; % Resistors value
c1 = 1e-15; % Diodes I_s
c2 = 0.0258; % Diodes N*V_th
F(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);
for ii = 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);
end
F(d*2) = X(2*d) - c1*(exp(X(d+1)/c2) -1);
end
También hemos escrito un script para generar Spice netlist para este problema
def gen_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 diodo modelo definido en la lista de red. Cuando las pruebas de la anterior solucionadores contra el problema con 70,000
nodos es decir, 140,000
ecuaciones y de incógnitas
- Matlab ejecuta fuera de la memoria
- Qucs tarda una eternidad
- Todas las especias basado en solucionadores de alguna manera de resolver este problema en menos de 2 segundos
Realmente no tenemos idea de cómo especias solucionadores de las arreglé para evitar este problema de memoria, y aún cuando las pruebas de este problema en contra de un menor número de incógnitas por ejemplo 3,000
el spice solucionadores siempre superan a las de matlab y qucs. Aunque como se menciona en [1] [2] [3] spice utiliza el amortiguado de Newton-Raphson enfoque para resolver circuitos con componentes no lineales que es el mismo para todos los solucionadores de problemas mencionados anteriormente
- Matlab
Fsolve
: pata de perro método [Newton + Trust-region + empinada decente] [4] - Qucs : de amortiguamiento de Newton-Raphson [5]
Mis preguntas son
- Cómo especias logró resolver un gran sistema de ecuaciones no lineales de forma rápida y sin el funcionamiento de la memoria ? es explotar el circuito de la estructura haciendo uso de los elementos repetidos ?
- Es este ejemplo suficientemente justo ? quiero decir, ¿debemos considerar más circuitos prácticos ? y si es así ¿se puede dar un ejemplo de un circuito(s) donde DC punto de funcionamiento de la simulación podría ser el cuello de botella del tiempo de simulación ?
- En [6] los autores mencionados ISCAS85 de referencia de los circuitos debemos considerar estos circuitos en nuestras pruebas ?
- Es el DC punto de funcionamiento el tipo de simulación que nos debe de enfocar ? me refiero a que debemos enfocar a la interfaz de nuestro solver para otros tipos de simulaciones por ejemplo, el análisis de transitorios ?
Referencias
1 : http://www.ni.com/white-paper/5808/en/
2 : http://www.ecircuitcenter.com/SpiceTopics/Overview/Overview.htm
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