[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: New convergence failure (was Re: [Help-gnucap] Several problems: con
From: |
al davis |
Subject: |
Re: New convergence failure (was Re: [Help-gnucap] Several problems: convergence failure...) |
Date: |
Sun, 7 Mar 2010 21:58:03 -0500 |
User-agent: |
KMail/1.12.4 (Linux/2.6.32-trunk-amd64; KDE/4.3.4; x86_64; ; ) |
On Sunday 07 March 2010, Rubén Gómez Antolí wrote:
> open circuit: internal node 15
> open circuit: internal node 20
Open circuit really means a singular matrix, but from a user's
perspective it means a node that is being calculated in effect
has no connections. Really, there are connections but they are
in effect open, for example a mosfet it cut-off. Consider a
classic CMOS inverter. When both devices are off, that node is
"open". Often it doesn't cause a problem, but when it does you
can usually fix it by putting a load on the node (why I
suggested resistors across diodes) or making option "gmin"
larger (closer to zero).
If you make "gmin" (for example) 1 ohm, it should converge very
quickly to a very wrong result. The default value (1p, 1e-12)
is appropriate for small signal circuits. It is not a good
value for power electronics. Setting it to 1e-6 puts a 1 megohm
resistor to ground at every node. This is probably an
appropriate value for power circuits.
> non-recoverable convergence failure, reducing (itl4)
> newtime=8.532783e-06 rejectedtime=8.532784e-06
> oldtime=8.532783e-06 using=8.532784e-06
> tried everything, still doesn't work, giving up
What is happening in your circuit at time=8.53278e-06 ?
Something strange is happening at that instant. A bifurcation?
Something switches sharply? Look at what happens leading up to
that time.
> >> Try adding a switch, with the control port across a pair
> >> of nodes that you think are causing trouble. Leave the
> >> output (switched resistor) unconnected.
>
> I don't understand very well this. You say that add a switch
> in this way?:
>
> Sdebug 0 100 (0 80) SW
> and node 100 is connected to "air".
> How helps this? Sorry, I'm a bit lost.
Sort of ... What is node 80? You need to set the threshold of
the switch appropriately. I was thinking of putting a switch
input across each diode
When the input of a switch crosses the threshold, that is called
a "cross event". Spice does not model cross events, but gnucap
does. It will do extra time steps in near a cross event to
accurately model the crossing time.
Spice will overshoot crossing times, then get some kind of
failure, usually iteration count "ITL4", then reject the time
step and try again with a smaller step. Gnucap does this too.
It is non-recoverable when it fails again and again, approaching
zero, and still fails.
When gnucap is approaching a cross event, it does finer time
stepping to avoid the fail and reduce cycle, hoping to get it
right the first time.
Not all devices generate cross events, but most nonlinear
devices should whenever there is a region change, or crosses
certain thresholds.
Convergence failures are very likely to happen when an
undetected cross event ALMOST happens, but doesn't really
happen. For example, a high gain amplifier clips. You have a
reasonable value at one time step. The next is well into
clipping. At best, it does more iterations than it should.
Sometimes it fails, backs up, tries again and succeeds the
second time.
By explicitly recognizing the cross event when it just enters
clipping, the simulator will try to schedule a time step as
close as it can to the clip point, just before and just after.
Since transistors don't schedule cross events, you can put a
switch in to sense it and force the extra time steps.
You can use this to suppress the problems of trapezoidal ringing
too.