# 1P_line.py¶

## Description¶

This example propagates a 1 particle continuous-time quantum walk on an infinite line

Amongst the features used, it illustrates:
• recieving command line options using PETSc

• the use of the chebyshev algorithm
• setting the EigSolver tolerance
• adding a diagonal defects to various nodes

• creating node handles to watch the probability at specified nodes

• various plotting abilities:
• probability vs node plots
• probability vs time plots

## Source Code¶

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 #!/usr/bin/env python2.7 # initialize PETSc import sys, petsc4py petsc4py.init(sys.argv) from petsc4py import PETSc import numpy as np # import pyCTQW as qw import pyCTQW.MPI as qw # enable command line arguments -t and -N OptDB = PETSc.Options() N = OptDB.getInt('N', 100) t = OptDB.getReal('t', 20) # get the MPI rank rank = PETSc.Comm.Get_rank(PETSc.COMM_WORLD) if rank == 0: print '1P Line\n' # initialise an N (default 100) node graph CTQW walk = qw.Line(N) # Create a Hamiltonian with defect and amplitude as below. d = [3,4] amp = [2.0,1.5] walk.createH(d,amp) # create the initial state (1/sqrt(2)) (|0>+|1>) init_state = [[0.,1.0/np.sqrt(2.0)], [1.,1.0/np.sqrt(2.0)]] walk.createInitState(init_state) # set the eigensolver properties. walk.EigSolver.setEigSolver(tol=1.e-3) # create a handle to watch the probability at nodes -5,0,1: walk.watch([0,1,-5]) # Propagate the CTQW using the Chebyshev method # for t=100s in timesteps of dt=0.01 # Note that psiToInit() is being used rather than global timesteps. for i in range(int(t/0.01)): walk.propagate(0.01,method='chebyshev') walk.psiToInit() # plot the marginal probabilities # after propagation over all nodes walk.plot('out/1p_line_plot.png') # plot the probability over time for the watched nodes walk.plotNodes('out/1p_line_nodes.png') # export final state walk.exportState("out/1p_final_state.txt", "txt") # destroy the quantum walk walk.destroy()