Difference between revisions of "Evolution.m"

From Spinach Documentation Wiki
Jump to: navigation, search
(Arguments)
Line 10: Line 10:
  
 
       L      - the Liouvillian to be used during evolution
 
       L      - the Liouvillian to be used during evolution
 
+
 
       rho    - the initial state vector or a horizontal stack thereof
 
       rho    - the initial state vector or a horizontal stack thereof
 
+
 
       output - a string giving the type of evolution that is required
 
       output - a string giving the type of evolution that is required
 
+
 
                 'final' - returns the final state vector or a horizontal
 
                 'final' - returns the final state vector or a horizontal
 
                           stack thereof.
 
                           stack thereof.
 
+
 
                 'trajectory' - returns the stack of state vectors giving
 
                 'trajectory' - returns the stack of state vectors giving
 
                               the trajectory of the system starting from
 
                               the trajectory of the system starting from
 
                               rho with the user-specified number of steps
 
                               rho with the user-specified number of steps
 
                               and step length.
 
                               and step length.
 
+
 
                 'total'  - returns the integral of the observable trace
 
                 'total'  - returns the integral of the observable trace
 
                             from the simulation start to infinity. This
 
                             from the simulation start to infinity. This
 
                             option requires the presence of relaxation.
 
                             option requires the presence of relaxation.
 
+
 
                 'refocus' - evolves the first vector for zero steps,
 
                 'refocus' - evolves the first vector for zero steps,
 
                             second vector for one step, third vector for
 
                             second vector for one step, third vector for
Line 32: Line 32:
 
                             stage of evolution in the indirect dimension
 
                             stage of evolution in the indirect dimension
 
                             after a refocusing pulse.
 
                             after a refocusing pulse.
 
+
 
                 'observable' - returns the time dynamics of an observable
 
                 'observable' - returns the time dynamics of an observable
 
                               as a vector (if starting from a single ini-
 
                               as a vector (if starting from a single ini-
 
                               tial state) or a matrix (if starting from a
 
                               tial state) or a matrix (if starting from a
 
                               stack of initial states).
 
                               stack of initial states).
 
+
 
                 'multichannel' - returns the time dynamics of several
 
                 'multichannel' - returns the time dynamics of several
 
                                 observables as rows of a matrix. Note
 
                                 observables as rows of a matrix. Note
Line 43: Line 43:
 
                                 less efficient when there are multiple
 
                                 less efficient when there are multiple
 
                                 destinations to screen against.
 
                                 destinations to screen against.
 
+
 
       coil  - the detection state, used when 'observable' is specified as
 
       coil  - the detection state, used when 'observable' is specified as
 
               the output option. If 'multichannel' is selected, the coil
 
               the output option. If 'multichannel' is selected, the coil
 
               should contain multiple columns corresponding to individual
 
               should contain multiple columns corresponding to individual
 
               observable vectors.
 
               observable vectors.
 
+
 
       destination - (optional) the state to be used for destination state
 
       destination - (optional) the state to be used for destination state
 
                     screening.
 
                     screening.
Line 55: Line 55:
  
 
       L        - Hamiltonian matrix
 
       L        - Hamiltonian matrix
 
+
 
       coil      - observable operator (if any)
 
       coil      - observable operator (if any)
 
+
 
       rho      - initial density matrix
 
       rho      - initial density matrix
 
+
 
       timestep  - duration of a single time step (seconds)
 
       timestep  - duration of a single time step (seconds)
 
+
 
       nsteps    - number of steps to take
 
       nsteps    - number of steps to take
 
+
 
       output    - a string giving the type of evolution that is required
 
       output    - a string giving the type of evolution that is required
 
+
 
                 'final' - returns the final density matrix.
 
                 'final' - returns the final density matrix.
 
+
 
                 'trajectory' - returns a cell array of density matrices
 
                 'trajectory' - returns a cell array of density matrices
 
                               giving the trajectory of the system star-
 
                               giving the trajectory of the system star-
 
                               ting from rho with the user-specified num-
 
                               ting from rho with the user-specified num-
 
                               ber of steps and step length.
 
                               ber of steps and step length.
 
+
 
                 'refocus' - evolves the first matrix for zero steps,
 
                 'refocus' - evolves the first matrix for zero steps,
 
                             second matrix for one step, third matrix for
 
                             second matrix for one step, third matrix for
Line 78: Line 78:
 
                             stage of evolution in the indirect dimension
 
                             stage of evolution in the indirect dimension
 
                             after a refocusing pulse.
 
                             after a refocusing pulse.
 
+
 
                 'observable' - returns the time dynamics of an observable
 
                 'observable' - returns the time dynamics of an observable
 
                               as a vector.
 
                               as a vector.
 
+
 
       destination - this argument is ignored.
 
       destination - this argument is ignored.
 
 
  
 
==Outputs==
 
==Outputs==

Revision as of 14:43, 27 August 2018

Time evolution function. Performs all types of time propagation with automatic trajectory level state space restriction (https://doi.org/10.1016/j.jmr.2008.08.008).

Syntax

    answer=evolution(spin_system,L,coil,rho,timestep,nsteps,output,destination)

Arguments

Arguments for Liouville space calculations:

     L      - the Liouvillian to be used during evolution

     rho    - the initial state vector or a horizontal stack thereof

     output - a string giving the type of evolution that is required

               'final' - returns the final state vector or a horizontal
                         stack thereof.

               'trajectory' - returns the stack of state vectors giving
                              the trajectory of the system starting from
                              rho with the user-specified number of steps
                              and step length.

               'total'   - returns the integral of the observable trace
                           from the simulation start to infinity. This
                           option requires the presence of relaxation.

               'refocus' - evolves the first vector for zero steps,
                           second vector for one step, third vector for
                           two steps, etc., consistent with the second
                           stage of evolution in the indirect dimension
                           after a refocusing pulse.

               'observable' - returns the time dynamics of an observable
                              as a vector (if starting from a single ini-
                              tial state) or a matrix (if starting from a
                              stack of initial states).

               'multichannel' - returns the time dynamics of several
                                observables as rows of a matrix. Note
                                that destination state screening may be
                                less efficient when there are multiple
                                destinations to screen against.

     coil   - the detection state, used when 'observable' is specified as
              the output option. If 'multichannel' is selected, the coil
              should contain multiple columns corresponding to individual
              observable vectors.

     destination - (optional) the state to be used for destination state
                   screening.

Arguments for Hilbert space calculations:

      L         - Hamiltonian matrix

      coil      - observable operator (if any)

      rho       - initial density matrix

      timestep  - duration of a single time step (seconds)

      nsteps    - number of steps to take

      output    - a string giving the type of evolution that is required

               'final' - returns the final density matrix.

               'trajectory' - returns a cell array of density matrices
                              giving the trajectory of the system star-
                              ting from rho with the user-specified num-
                              ber of steps and step length.

               'refocus' - evolves the first matrix for zero steps,
                           second matrix for one step, third matrix for
                           two steps, etc., consistent with the second
                           stage of evolution in the indirect dimension
                           after a refocusing pulse.

               'observable' - returns the time dynamics of an observable
                              as a vector.

      destination - this argument is ignored.

Outputs

    output  - description of the output

    output  - description of the output
              description of the output

Notes

  1. Calculation of final states and observables in Hilbert space is parallelised (http://dx.doi.org/10.1063/1.3679656) and tested all the way to 128-core (16 nodes, 8 cores each) configuations. Parallelization of the trajectory calculation does not appear to yield any benefits due to large amount of inter-thread communication.
  2. One-off propagation events (e.g. a hard pulse) should be computed with step.m, which is more efficient inthose cases.
  3. For extremely large Liouvillians that cannot be exponentiated, use krylov.m, which avoids matrix exponentials.

See also

step.m, krylov.m, reduce.m, propagator.m


Version 2.2, authors: Ilya Kuprov, Luke Edwards, Ohad Levinkron