Refer to my tutorial at https://github.com/meowstr/circuitsim_tutorial to get an idea of how it works.
Supports:
- Current sources
- Voltage sources
- Resistors
- Diodes
- BJT's (NPN and PNP)
- Capacitors (Transient analysis only)
- Inductors (Transient analysis only)
Input file (test.txt):
v1 0 5v 5
v2 0 9v 9
r1 5v v1 1000
r2 v1 v3 1000
r3 9v v2 1000
d1 v3 0
d2 v2 v3
Output:
$ ./sim test.txt
unknowns: i_v1 5v i_v2 9v v1 v3 v2
equations:
name: vsource
v 0 5v 5
name: 5v
i_v1 +
r 5v v1 1000
name: vsource
v 0 9v 9
name: 9v
i_v2 +
r 9v v2 1000
name: v1
r 5v v1 1000
r v1 v3 1000
name: v3
r v1 v3 1000
d v3 0
d v2 v3
name: v2
r 9v v2 1000
d v2 v3
system at 0: -5.00e+00 0.00e+00 -9.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00
jacobian at 0:
0.00e+00 1.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00
1.00e+00 -1.00e-03 0.00e+00 0.00e+00 1.00e-03 0.00e+00 0.00e+00
0.00e+00 0.00e+00 0.00e+00 1.00e+00 0.00e+00 0.00e+00 0.00e+00
0.00e+00 0.00e+00 1.00e+00 -1.00e-03 0.00e+00 0.00e+00 1.00e-03
0.00e+00 1.00e-03 0.00e+00 0.00e+00 -2.00e-03 1.00e-03 0.00e+00
0.00e+00 0.00e+00 0.00e+00 0.00e+00 1.00e-03 -1.00e-03 0.00e+00
0.00e+00 0.00e+00 0.00e+00 1.00e-03 0.00e+00 0.00e+00 -1.00e-03
root_newton: F( 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 ) = -5.00e+00 0.00e+00 -9.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00
root_newton_step: allocate (n = 7)
root_newton_step: backtrack (dx = 9.00e+00 df = 7.23e+73)
root_newton_step: backtrack (dx = 4.50e+00 df = 2.69e+30)
root_newton_step: backtrack (dx = 2.25e+00 df = 5.18e+08)
root_newton: F( 0.00e+00 6.25e-01 0.00e+00 1.12e+00 6.25e-01 6.25e-01 1.12e+00 ) = -4.38e+00 0.00e+00 -7.88e+00 0.00e+00 0.00e+00 -7.15e-03 -4.85e-05
root_newton_step: backtrack (dx = 7.88e+00 df = 8.25e+41)
root_newton_step: backtrack (dx = 3.94e+00 df = 6.33e+18)
root_newton_step: backtrack (dx = 1.97e+00 df = 1.75e+07)
root_newton_step: backtrack (dx = 9.84e-01 df = 2.92e+01)
root_newton: F( 1.37e-04 8.98e-01 3.26e-04 1.62e+00 7.62e-01 6.25e-01 1.29e+00 ) = -4.10e+00 5.42e-20 -7.38e+00 -1.08e-19 -1.08e-19 3.05e-02 -3.73e-02
root_newton: F( 2.18e-03 5.00e+00 7.72e-03 9.00e+00 2.82e+00 6.34e-01 1.28e+00 ) = 0.00e+00 4.34e-19 0.00e+00 8.67e-19 0.00e+00 8.70e-03 -9.27e-03
root_newton: F( 2.18e-03 5.00e+00 7.73e-03 9.00e+00 2.82e+00 6.33e-01 1.27e+00 ) = 0.00e+00 -4.34e-19 0.00e+00 0.00e+00 4.34e-19 2.10e-03 -2.12e-03
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 2.11e-04 -2.11e-04
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 -8.67e-19 -4.34e-19 2.77e-06 -2.77e-06
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 8.67e-19 4.34e-19 4.91e-10 -4.91e-10
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 -4.34e-19 0.00e+00 -8.67e-19 0.00e+00 1.30e-17 0.00e+00
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 1.30e-17 0.00e+00
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 1.30e-17 0.00e+00
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 1.30e-17 0.00e+00
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 1.30e-17 0.00e+00
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 1.30e-17 0.00e+00
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 1.30e-17 0.00e+00
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 1.30e-17 0.00e+00
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 1.30e-17 0.00e+00
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 1.30e-17 0.00e+00
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 1.30e-17 0.00e+00
root_newton: F( 2.18e-03 5.00e+00 7.74e-03 9.00e+00 2.82e+00 6.33e-01 1.26e+00 ) = 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 1.30e-17 0.00e+00
residual: 1.301043e-17
solution:
i_v1 = 2.183490e-03
5v = 5.000000e+00
i_v2 = 7.740174e-03
9v = 9.000000e+00
v1 = 2.816510e+00
v3 = 6.330193e-01
v2 = 1.259826e+00
Input file (tran.txt):
v1 0 5v 5
r1 5v 1 1000
c1 1 0 0.002
.step 0.1 200
.plot 1
Command:
$ ./tran tran.txt
Output:

