evolution() vs step()

Topics related to Spinach package
Post Reply
faq_user
Posts: 49
Joined: Tue Jul 13, 2021 8:33 am

evolution() vs step()

Post by faq_user »

As you saw in recent abstracts, we are using Spinach quite a lot to analyse the influence of J modulation in ultrafast NMR. Now we have a technical question on how to best implement free precession delays and square gradient pulses in a simulation. What would be the difference between using "step" and "evolution"? The calculation with "step" is faster than with "evolution" using "stepsize", but does it run the risk of being inaccurate? The precession delays are of a few 10s of ms, with usual 1H-1H J couplings and 1H chemical shifts. The gradient pulses are of a few ms with up to 50 G/cm on a 15 mm sample. The systems have 3-4 spins and 500 slices.
kuprov
Posts: 72
Joined: Mon Mar 29, 2021 4:26 pm

Re: evolution() vs step()

Post by kuprov »

Both functions are machine precision and have adaptive internal accuracy control, but the difference is in the strategy:

1. The "step" function is designed to run a single one-off propagation step with maximum efficiency -- it is used for ideal pulses, shaped pulses and other singular events. It uses Krylov method and avoids the calculation of matrix exponentials.

2. The "evolution" function is designed for long evolution periods under time-independent Hamiltonians with thousands of steps -- it applies sophisticated preliminary analysis to the Liouvillian and the state vector and figures out the smallest active space that it can use without loss of accuracy. It also contains specialized elements, such as the refocussing blocks for indirect dimensions, frequency-domain detection and time integral detection.

So for one-off evolution events, you should use "step" and for lengthy propagation and refocussing periods you should use "evolution". The best way to see the difference in practical usage is to look through our standard pulse sequences, e.g. NOESY and HSQC.
Post Reply