[eispice] General Questions.

  • From: Cyril Giraudon <cyril.giraudon@xxxxxxx>
  • To: eispice@xxxxxxxxxxxxx
  • Date: Sat, 18 Nov 2006 13:59:10 +0100


I like the idea I can simulate electrical circuits from a python shell. 
I think you start a very useful job.

I work on scientific platforms for electromagnetism simulation and 
python becomes my preferred language.
I have also began two wrappers around gnucap / ngspice with pyrex, but 
by lack of time, those projects sleep :-( ....

I'd like to ask some questions about eispice :

1 -
Have you ever think of writing eispice entirely in python ? It could 
seem ridiculous, but ...
I think there are several python packages very important in the python 
scientific world :
- numpy (scientific array handling, http://numpy.scipy.org/);
- matplotlib (2D scientific plotting capabilities, 
- scipy (general scientific tools based on numpy, 
- pytables (hdf5 wrapper, hdf5 is a general file format for large data 
writing, http://www.pytables.org/moin);

scipy (end perhaps numpy) comes with blas/lapack libraries (standard 
c/fortran library for matrices).
You can invert matrices with scipy as if you work with matlab 
At the end of the linked page, you can read :







eigenvalues and eigenvectors of a





find the k largest eigenvalues and eigenvectors of a







QR decomposition



(L,U)=Sci.linalg.lu(a) or




LU decomposition







Conjugate gradients solver







Fourier transform of a

I haven't benchmarked the LU decomposition, but it's fortran behind the 
Apparently, you can use sparseLU from scipy : 

Where does a circuit simulator need to be fast except for matrices 
operations ?

The consequences are :
- development easier (scripting language);
- No compiled code;
- Cross platform;
- All devices models are written in python;
- no plug-in mechanism (only a good interface);
- Add a models on the fly;
- Perfect integration with python shells, development environments;

You probably know already a lot of what i've just said, but what are 
your motivations for using C language ?
Does Eispice  must be very fast, flexible, modular ?

I have taken a look at the following example

from eispice import *
d = deck("Tline Test")
d.Vs = V('vs', gnd, 0, pulse(0, 1, 15*nano, 1*nano))
d.Rs = R('vs', 'vi', 30)
d.Tg = T('vi', gnd, "vo", "0", 50, 5*nano, 0.5)
d.Rl = R('vo', gnd, 10*kilo)
d.Cl = C('vo', gnd, 5*pico)
d.tran(0.1*nano, 100*nano)
taken from http://www.thedigitalmachine.net/eispice.manual.html.

and I have read the sentence :
"Added a Tk based plotter that should run a lot faster than the old 
gnuplot interface."

Do you really think Eispice must provide graphics capabilities ?
I have already discussed this point with al davis, gnucap developer, 

I think, the circuit simulator itself, must do the minimum amount of the 
task, furthermore in a python environment.
When the example demands a d.tran(0.1*nano, 100*nano), are you sure 
Eispice must control the step of returned values ?
Has Eispice have to plot results ?

Imagine Eispice knows only simulate a [start, end] transient analysis 
and return the last calculated value (it doesn't stock result in 
memory). The python user would write the following code snippet :

import numpy

from pylab import *

import eispice

d = eispice.deck("Tline Test");
d.Vs = V('vs', gnd, 0, pulse(0, 1, 15*nano, 1*nano))
d.Rs = R('vs', 'vi', 30)
d.Tg = T('vi', gnd, "vo", "0", 50, 5*nano, 0.5)
d.Rl = R('vo', gnd, 10*kilo)
d.Cl = C('vo', gnd, 5*pico)

step = 0.1*nano
voArray = numpy.array(1000)
tArray = numpy.array(1000)
i = 0
# Run the simulation
for t in numpy.arange(0.1*nano, 100*nano, step):
  d.tran(t, t+step)
  tArray[i] = t
  voArray[i] = d.getValue("vo")
  # Why not change Rs value in function of vo values (linked elements) ?
  i = i +1

# Plot the result
# http://matplotlib.sourceforge.net/screenshots.html
matplotlib.plot(tArray, voArray)
ylabel('Voltage (mV)')

Yes, It's much longer, but Eispice code is "simpler" and the interaction 
with the user is strong.

The questions are :
What does the core of the simulator have to perform ?
How the user can interact with a running simulation ?
How implement circuit linked elements (linked sources)?
External module : wave form creation, Eispice would accept only 
discretized curves (array) ... ?

I wish I ask useful questions.



To unsubscribe from the eispice list send an email to:
eispice-request@xxxxxxxxxxxxx with 'unsubscribe' in the Subject field

Other related posts: