Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nick iswap #864

Merged
merged 30 commits into from
Dec 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
eb01f36
Add files via upload
nalanzil Oct 21, 2022
2d736eb
Add files via upload
nalanzil Oct 21, 2022
7291e58
Add files via upload
nalanzil Oct 21, 2022
b77796e
Add files via upload
nalanzil Oct 21, 2022
1975ab3
Add files via upload
nalanzil Oct 21, 2022
4e79cb9
Add files via upload
nalanzil Oct 21, 2022
11c56e6
Add files via upload
nalanzil Oct 21, 2022
debe70b
Add files via upload
nalanzil Oct 24, 2022
2c2b107
Delete Concentric Transmon Type 2 Demo.ipynb
nalanzil Oct 24, 2022
6a7a8ce
Add files via upload
nalanzil Oct 25, 2022
4ae2302
reformatted with yapf + lint in VSCODE
nalanzil Oct 25, 2022
e7b5163
added layer as option
nalanzil Oct 26, 2022
edae677
options updated from 16->17 for conc. transmon
nalanzil Oct 27, 2022
89c2d93
added image
nalanzil Oct 27, 2022
3aa4d0d
add resonators to init file
nalanzil Oct 28, 2022
3e22f18
Add files via upload
nalanzil Nov 8, 2022
99f8b82
Merge branch 'main' into nick-iswap
priti-ashvin-shah-ibm Nov 9, 2022
040651b
Merge branch 'main' into nick-iswap
priti-ashvin-shah-ibm Nov 9, 2022
5203044
Delete ResonatorLumped.PNG
nalanzil Nov 10, 2022
35252fd
Delete TransmonConcentricType2.PNG
nalanzil Nov 10, 2022
aaa232c
Delete TunableCoupler02.PNG
nalanzil Nov 10, 2022
6a7c656
Add files via upload
nalanzil Nov 10, 2022
6ccb68c
Merge branch 'main' into nick-iswap
nalanzil Nov 10, 2022
6b3e595
Merge branch 'main' into nick-iswap
priti-ashvin-shah-ibm Nov 15, 2022
8360e18
Remove the short segments so fillet can happen for the second chip ex…
priti-ashvin-shah-ibm Nov 15, 2022
177faf5
Return the value back to what it was. Changed by accident.
priti-ashvin-shah-ibm Nov 15, 2022
ac87fc3
A new design and GUI is not needed because the 1st one has the copone…
priti-ashvin-shah-ibm Nov 16, 2022
758c0d7
Merge branch 'main' into nick-iswap
priti-ashvin-shah-ibm Nov 29, 2022
83ac73c
Add files via upload
nalanzil Nov 29, 2022
88b657d
Add files via upload
nalanzil Nov 29, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions qiskit_metal/qlibrary/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,17 @@
LineTee
CapNInterdigitalTee
TunableCoupler01
TunableCoupler02


Resonator
------------

.. autosummary::
:toctree:

ReadoutResFC
ResonatorLumped


Terminations
Expand Down Expand Up @@ -109,6 +120,7 @@
jj_dolan
jj_manhattan
TransmonConcentric
TransmonConcentricType2
TransmonCross
TransmonCrossFL
TransmonInterdigitated
Expand Down Expand Up @@ -150,6 +162,7 @@
from .couplers.line_tee import LineTee
from .couplers.cap_n_interdigital_tee import CapNInterdigitalTee
from .couplers.tunable_coupler_01 import TunableCoupler01
from .couplers.tunable_coupler_02 import TunableCoupler02
from .lumped.cap_n_interdigital import CapNInterdigital
from .lumped.cap_3_interdigital import Cap3Interdigital
from .lumped.resonator_coil_rect import ResonatorCoilRect
Expand All @@ -167,6 +180,7 @@
from .qubits.JJ_Dolan import jj_dolan
from .qubits.JJ_Manhattan import jj_manhattan
from .qubits.transmon_concentric import TransmonConcentric
from .qubits.transmon_concentric_type_2 import TransmonConcentricType2
from .qubits.transmon_cross import TransmonCross
from .qubits.transmon_cross_fl import TransmonCrossFL
from .qubits.Transmon_Interdigitated import TransmonInterdigitated
Expand All @@ -176,5 +190,7 @@
from .qubits.transmon_pocket_teeth import TransmonPocketTeeth
from .qubits.SQUID_loop import SQUID_LOOP
from .qubits.star_qubit import StarQubit
from .resonator.readoutres_fc import ReadoutResFC
from .resonator.resonator_lumped import ResonatorLumped

from .tlines import anchored_path
212 changes: 212 additions & 0 deletions qiskit_metal/qlibrary/couplers/tunable_coupler_02.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
# -*- 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.
"""Tunable Coupler, as shown in Phys. Rev. Research 2, 033447 (2020).
"""

from math import sin, cos
import numpy as np
from qiskit_metal import draw, Dict
from qiskit_metal.qlibrary.core import BaseQubit


class TunableCoupler02(BaseQubit):
"""One of the tunable couplers

.. image::
tunable_coupler_02.png

.. meta::
Tunable Coupler 2

BaseQubit Default Options:
* connection_pads: empty Dict -- Currently not used, connection count is static. (WIP)
Default Options:
* pocket_width: '3mm' -- The width (x-axis) of the transmon pocket
* pocket_height: '2m' -- The height (y-axis) of the transmon pocket
* pos_x: '0mm' -- the x-coordinate location of the JJ in the middle of the qubit
* pos_y: '0mm' -- the y-coordinate location of the JJ in the middle of the qubit
* orientation: '0' -- the angle of rotation
* pad_radius: '0.3mm' -- the radius of the two circular pads on either side of the JJ
* bus_width: '0.1mm' -- the width of the CPW resonator in the coupler
* bus_inner_length: '0.5mm' -- length of the CPW between the JJ and the circular pad
* bus_outer_length: '0.5mm' -- length of the CPW between the circular pad and the in/out pin
* bus_JJ_height: '0.5mm' -- vertical distance between the main cpw line and the offset JJ
* JJ_width: '0.1mm' -- the width of the JJ
* JJ_length: '0.4mm' -- the length of the JJ
* fbl_width: '0.1mm' -- the width of the flux bias line drawn near the JJ
* fbl_length: '0.5mm' -- the length of the flux bias line drawn near the JJ
* fbl_offset: '0.1mm' -- the lateral offset between the flux bias line and the JJ
* layer: '1' -- the default design layer
"""

default_options = Dict(pocket_width='3mm',
pocket_height='2mm',
pos_x='0mm',
pos_y='0mm',
orientation='0',
pad_radius='0.3mm',
bus_width='0.1mm',
bus_inner_length='0.5mm',
bus_outer_length='0.5mm',
bus_JJ_height='0.5mm',
JJ_width='0.1mm',
JJ_length='0.4mm',
fbl_width='0.1mm',
fbl_length='0.5mm',
fbl_offset='0.1mm',
layer='1')

component_metadata = Dict(short_name='Pocket',
_qgeometry_table_path='True',
_qgeometry_table_poly='True',
_qgeometry_table_junction='True')

TOOLTIP = """One of the tunable couplers"""

def make(self):
"""Builds the component."""
"""Convert self.options into QGeometry."""
p = self.parse_options() # Parse the string options into numbers
# draw the Josephson Junction
JJ = draw.LineString([
(-0.5 * p.JJ_length, p.bus_JJ_height - 0.5 * p.JJ_width),
(0.5 * p.JJ_length, p.bus_JJ_height - 0.5 * p.JJ_width)
])
# draw the individual components of the CPW resonator
bus_vertical_left = draw.rectangle(
p.bus_width, p.bus_JJ_height,
-0.5 * p.JJ_length - 0.5 * p.bus_width, 0.5 * p.bus_JJ_height)
bus_vertical_right = draw.rectangle(
p.bus_width, p.bus_JJ_height, 0.5 * p.JJ_length + 0.5 * p.bus_width,
0.5 * p.bus_JJ_height)
bus_left = draw.rectangle(
p.bus_inner_length + p.bus_outer_length + 2.0 * p.pad_radius,
p.bus_width, -0.5 * p.JJ_length - p.bus_width - 0.5 *
(p.bus_inner_length + p.bus_outer_length + 2.0 * p.pad_radius),
0.5 * p.bus_width)
bus_right = draw.rectangle(
p.bus_inner_length + p.bus_outer_length + 2.0 * p.pad_radius,
p.bus_width, 0.5 * p.JJ_length + p.bus_width + 0.5 *
(p.bus_inner_length + p.bus_outer_length + 2.0 * p.pad_radius),
0.5 * p.bus_width)
# draw the circular charge pads
left_pad = draw.Point(
-0.5 * p.JJ_length - p.bus_width - p.bus_inner_length -
0.5 * p.pad_radius, 0.5 * p.bus_width).buffer(p.pad_radius)
right_pad = draw.Point(
0.5 * p.JJ_length + p.bus_width + p.bus_inner_length +
0.5 * p.pad_radius, 0.5 * p.bus_width).buffer(p.pad_radius)
# draw the flux bias line
fbl = draw.rectangle(
p.fbl_width, p.fbl_length,
-0.5 * p.JJ_length - p.bus_width - p.fbl_offset - 0.5 * p.fbl_width,
p.bus_JJ_height + 0.5 * p.fbl_length)
# draw the pocket surrounding the qubit
pocket = draw.rectangle(0.0, 0.0, p.pocket_width, p.pocket_height)
# Translate and rotate all shapes
objects = [
JJ, bus_vertical_left, bus_vertical_right, bus_left, bus_right,
left_pad, right_pad, fbl, pocket
]
objects = draw.rotate(objects, p.orientation, origin=(0, 0))
objects = draw.translate(objects, xoff=p.pos_x, yoff=p.pos_y)
[
JJ, bus_vertical_left, bus_vertical_right, bus_left, bus_right,
left_pad, right_pad, fbl, pocket
] = objects
# give each poly a name to send to qgeometry
geom_jj = {'poly1': JJ}
geom_bus_vertical_left = {'poly2': bus_vertical_left}
geom_bus_vertical_right = {'poly3': bus_vertical_right}
geom_bus_left = {'poly4': bus_left}
geom_bus_right = {'poly5': bus_right}
geom_left_pad = {'poly6': left_pad}
geom_right_pad = {'poly7': right_pad}
geom_fbl = {'poly8': fbl}
#geom_pocket = {'poly9': pocket}
# add to qgeometry
self.add_qgeometry('junction',
geom_jj,
layer=p.layer,
subtract=False,
width=p.JJ_width)
self.add_qgeometry('poly',
geom_bus_vertical_left,
layer=p.layer,
subtract=False)
self.add_qgeometry('poly',
geom_bus_vertical_right,
layer=p.layer,
subtract=False)
self.add_qgeometry('poly', geom_bus_left, layer=p.layer, subtract=False)
self.add_qgeometry('poly',
geom_bus_right,
layer=p.layer,
subtract=False)
self.add_qgeometry('poly', geom_left_pad, layer=p.layer, subtract=False)
self.add_qgeometry('poly',
geom_right_pad,
layer=p.layer,
subtract=False)
self.add_qgeometry('poly', geom_fbl, layer=p.layer, subtract=False)

#self.add_qgeometry('poly', geom_pocket, layer=1, subtract=True)
###########################################################################
# Add Qpin connections
# define a function that both rotates and translates the qpin coordinates
def qpin_rotate_translate(x):
y = list(x)
z = [0.0, 0.0]
z[0] = y[0] * cos(p.orientation * 3.14159 / 180) - y[1] * sin(
p.orientation * 3.14159 / 180)
z[1] = y[0] * sin(p.orientation * 3.14159 / 180) + y[1] * cos(
p.orientation * 3.14159 / 180)
z[0] = z[0] + p.pos_x
z[1] = z[1] + p.pos_y
x = (z[0], z[1])
return x

# Right-hand pin
qp1b = (0.5 * p.JJ_length + p.bus_width + p.bus_inner_length +
p.bus_outer_length + 2.0 * p.pad_radius, 0.5 * p.bus_width)
qp1a = (0.5 * p.JJ_length + p.bus_width + 0.9 * p.bus_inner_length +
p.bus_outer_length + 2.0 * p.pad_radius, 0.5 * p.bus_width)
qp1a = qpin_rotate_translate(qp1a)
qp1b = qpin_rotate_translate(qp1b)
self.add_pin('pin1',
points=np.array([qp1a, qp1b]),
width=0.01,
input_as_norm=True)
# Left-hand pin
qp2b = (-0.5 * p.JJ_length - p.bus_width - p.bus_inner_length -
p.bus_outer_length - 2.0 * p.pad_radius, 0.5 * p.bus_width)
qp2a = (-0.5 * p.JJ_length - p.bus_width - 0.9 * p.bus_inner_length -
p.bus_outer_length - 2.0 * p.pad_radius, 0.5 * p.bus_width)
qp2a = qpin_rotate_translate(qp2a)
qp2b = qpin_rotate_translate(qp2b)
self.add_pin('pin2',
points=np.array([qp2a, qp2b]),
width=0.01,
input_as_norm=True)
# Flux Bias Line pin
qp3b = (-0.5 * p.JJ_length - p.bus_width - p.fbl_offset -
0.5 * p.fbl_width, p.bus_JJ_height + p.fbl_length)
qp3a = (-0.5 * p.JJ_length - p.bus_width - p.fbl_offset -
0.5 * p.fbl_width, p.bus_JJ_height + 0.9 * p.fbl_length)
qp3a = qpin_rotate_translate(qp3a)
qp3b = qpin_rotate_translate(qp3b)
self.add_pin('fbl',
points=np.array([qp3a, qp3b]),
width=0.01,
input_as_norm=True)
16 changes: 9 additions & 7 deletions qiskit_metal/qlibrary/qubits/transmon_concentric.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class TransmonConcentric(BaseQubit):
* pocket_w: '1500um' -- Transmon pocket width
* pocket_h: '1000um' -- Transmon pocket height
* cpw_width: '10.0um' -- Width of the readout resonator and flux bias line
* layer: '1' -- the design layer where the component will go
"""

# default drawing options
Expand All @@ -80,7 +81,8 @@ class TransmonConcentric(BaseQubit):
pocket_w='1500um', # transmon pocket width
pocket_h='1000um', # transmon pocket height
cpw_width='10.0um', # width of the readout resonator and flux bias line
inductor_width='5.0um' # width of the Josephson Junctions
inductor_width='5.0um', # width of the Josephson Junctions
layer='1' # design layer
)
"""Default drawing options"""

Expand Down Expand Up @@ -168,24 +170,24 @@ def qpin_rotate_translate(x):

self.add_qgeometry('path',
geom_rr,
layer=1,
layer=p.layer,
subtract=False,
width=p.cpw_width)
self.add_qgeometry('path',
geom_fbl,
layer=1,
layer=p.layer,
subtract=False,
width=p.cpw_width)
self.add_qgeometry('poly', geom_outer, layer=1, subtract=False)
self.add_qgeometry('poly', geom_inner, layer=1, subtract=False)
self.add_qgeometry('poly', geom_outer, layer=p.layer, subtract=False)
self.add_qgeometry('poly', geom_inner, layer=p.layer, subtract=False)
self.add_qgeometry('junction',
geom_jjt,
layer=1,
layer=p.layer,
subtract=False,
width=p.inductor_width)
self.add_qgeometry('junction',
geom_jjb,
layer=1,
layer=p.layer,
subtract=False,
width=p.inductor_width)
self.add_qgeometry('poly', geom_pocket, layer=1, subtract=True)
Expand Down
Loading