FluxQubit#

../../_images/fluxqubit.png

The flux qubit [Orlando1999] is described by the Hamiltonian

\[\begin{split}H_\text{flux}=&(n_{i}-n_{gi})4(E_\text{C})_{ij}(n_{j}-n_{gj}) \\ -&E_{J}\cos\phi_{1}-E_{J}\cos\phi_{2} \\ -&\alpha E_{J}\cos(2\pi f + \phi_{1} - \phi_{2}),\end{split}\]

where \(i,j \in \{1,2\}, E_\text{C}=\tfrac{e^2}{2}C^{-1}\) and

\[\begin{split}C = \left(\begin{matrix} C_{J1}+C_{g1}+C_{J3} & -C_{J3} \\ -C_{J3} & C_{J2}+C_{g2}+C_{J3} \end{matrix}\right).\end{split}\]

\(C_{Ji}\) refers to the capacitance of the \(i^\text{th}\) junction and \(C_{gi}\) refers to the capacitance to ground of the \(i^\text{th}\) island. For simplicity, the Hamiltonian is written here in a mixed basis, however for the purposes of numerical diagonalization in the FluxQubit class, the charge basis is employed for both variables. The user must specify a charge-number cutoff ncut, chosen large enough so that convergence is achieved.

An instance of the flux qubit is initialized as follows:

EJ = 35.0
alpha = 0.6
fluxqubit = scqubits.FluxQubit(EJ1 = EJ,
                              EJ2 = EJ,
                              EJ3 = alpha*EJ,
                              ECJ1 = 1.0,
                              ECJ2 = 1.0,
                              ECJ3 = 1.0/alpha,
                              ECg1 = 50.0,
                              ECg2 = 50.0,
                              ng1 = 0.0,
                              ng2 = 0.0,
                              flux = 0.5,
                              ncut = 10)

From within Jupyter notebook, a flux qubit instance can alternatively be created with:

fluxqubit = scqubits.FluxQubit.create()

This functionality is enabled if the ipywidgets package is installed, and displays GUI forms prompting for the entry of the required parameters.

Wavefunctions and visualization of eigenstates and the potential#

scqubits.FluxQubit.wavefunction([esys, ...])

Return a flux qubit wave function in phi1, phi2 basis

scqubits.FluxQubit.plot_wavefunction([esys, ...])

Plots 2d phase-basis wave function.

scqubits.FluxQubit.plot_potential([...])

Draw contour plot of the potential energy.

Implemented operators#

The following operators are implemented for use in matrix element calculations.

scqubits.FluxQubit.n_1_operator([energy_esys])

Returns the charge number operator conjugate to \(\phi_1\) in the charge? or eigenenergy basis.

scqubits.FluxQubit.n_2_operator([energy_esys])

Returns the charge number operator conjugate to \(\phi_2\) in the charge? or eigenenergy basis.

scqubits.FluxQubit.exp_i_phi_1_operator([...])

Returns operator \(e^{i\phi_1}\) in the charge or eigenenergy basis.

scqubits.FluxQubit.exp_i_phi_2_operator([...])

Returns operator \(e^{i\phi_2}\) in the charge or eigenenergy basis.

scqubits.FluxQubit.cos_phi_1_operator([...])

Returns operator \(\cos \phi_1\) in the charge or eigenenergy basis.

scqubits.FluxQubit.cos_phi_2_operator([...])

Returns operator \(\cos \phi_2\) in the charge or eigenenergy basis.

scqubits.FluxQubit.sin_phi_1_operator([...])

Returns operator \(\sin \phi_1\) in the charge or eigenenergy basis.

scqubits.FluxQubit.sin_phi_2_operator([...])

Returns operator \(\sin \phi_2\) in the charge or eigenenergy basis.

Computation and visualization of matrix elements#

scqubits.FluxQubit.matrixelement_table(operator)

Returns table of matrix elements for operator with respect to the eigenstates of the qubit.

scqubits.FluxQubit.plot_matrixelements(operator)

Plots matrix elements for operator, given as a string referring to a class method that returns an operator matrix.

scqubits.FluxQubit.get_matelements_vs_paramvals(...)

Calculates matrix elements for a varying system parameter, given an array of parameter values.

scqubits.FluxQubit.plot_matelem_vs_paramvals(...)

Generates a simple plot of a set of eigenvalues as a function of one parameter.

Estimation of coherence times#

scqubits.FluxQubit.plot_coherence_vs_paramvals(...)

Show plots of coherence for various channels supported by the qubit as they vary as a function of a changing parameter.

scqubits.FluxQubit.plot_t1_effective_vs_paramvals(...)

Plot effective \(T_1\) coherence time (rate) as a function of changing parameter.

scqubits.FluxQubit.plot_t2_effective_vs_paramvals(...)

Plot effective \(T_2\) coherence time (rate) as a function of changing parameter.

scqubits.FluxQubit.t1(i, j, noise_op, ...[, ...])

Calculate the transition time (or rate) using Fermi's Golden Rule due to a noise channel with a spectral density spectral_density and system noise operator noise_op.

scqubits.FluxQubit.t1_effective([...])

Calculate the effective \(T_1\) time (or rate).

scqubits.FluxQubit.t2_effective([...])

Calculate the effective \(T_2\) time (or rate).

scqubits.FluxQubit.tphi_1_over_f(A_noise, i, ...)

Calculate the 1/f dephasing time (or rate) due to arbitrary noise source.

scqubits.FluxQubit.tphi_1_over_f_cc([...])

Calculate the 1/f dephasing time (or rate) due to critical-current noise from all three Josephson junctions \(EJ1\), \(EJ2\) and \(EJ3\).