help-gnucap
[Top][All Lists]
Advanced

[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.






reply via email to

[Prev in Thread] Current Thread [Next in Thread]