Source code for qiskit_metal.analyses.hamiltonian.transmon_CPB_analytic

# -*- coding: utf-8 -*-

# This code is part of Qiskit.
#
# (C) Copyright IBM 2017, 2021.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.
"""
Models the transmon qubit in the cooper-pair charge basis
and calculate the exact (analytic) solutions

@author: Nick Lanzillo (IBM)
"""
# pylint: disable=invalid-name

import numpy as np
from scipy.special import mathieu_a


[docs] class Hcpb_analytic: """ Analytic version of Hamiltonian-model Cooper pair box (Hcpb) class. Used calculate the exact eigenvalues for arbitrary Ej, Ec, ng values. """ def __init__(self, Ej: float = None, Ec: float = None, ng: float = 0.5): """ Generate a Cooper-pair box (CPB) model. Arguments: Ej (float): Josephson energy of the JJ Ec (float): Charging energy of the CPB ng (float): Offset charge of the CPB (ng=0.5 is the sweet spot). `ng` only needs to run between -0.5 and 0.5. `ng` is defined in units of cooper pairs (2e) """ self._Ej = Ej self._Ec = Ec self._ng = ng self.evals = None self.evecs = None # Generate the diagonal and offdiagonal components of the Hamiltonian #self._gen_operators() # compute the eigenvectors and eigenvalues of the CPB # all properties can be derived from these #self._calc_H()
[docs] def evalue_k(self, k: int): """ Return the eigenvalue of the Hamiltonian for level k. Arguments: k (int): Index of the eigenvalue Returns: float: eigenvalue of the Hamiltonian """ if self._ng == 0: index = k + 1.0 - ((k + 1.0) % 2.0) else: index = k + 1.0 - ((k + 1.0) % 2.0) + 2.0 * self._ng * ( (-1.0)**(k - 0.5 * (np.sign(self._ng) - 1.0))) self.evals = self._Ec * mathieu_a(index, -0.5 * self._Ej / self._Ec) #return self.evals[k] return self.evals