Lets first say there are two functions, compute(t,data,…) and trunc(t,timestep,data,…)
Inside trunc() the function is as following
trunc(t,timestep,data,…)
{
buffer = data
compute(t,data,…)
if(data !=buffer)timestep=ttol
data=buffer
}
So, we can see here that the default example from Mike for trunc is to test new timestep and the result of compute() thats called from within trunc() is just discarded.
Another information from my past test was
if in compute() you add print(t) then add print(marker) in trunc() as following
trunc(t,timestep,data,…)
{
print(marker)
buffer = data
compute(t,data,…)
if(data !=buffer)timestep=ttol
data=buffer
}
In console you will see this
marker
t0
t0
marker
t1
t1
marker
t2
t2
Which means, the Qspice engine always do this call sequence
trunc(t1_propose)->compute(t1_corrected)->trunc(t2_propose)->compute(t2_corrected)->trunc(t3_propose)->compute(t3_corrected)->…
The tx_propose == tx_corrected only if
there data == buffer or no direct timestep manipulation (my example) is performed.