duffing_system_model¶
- duffing_system_model(dim_oscillators, oscillator_freqs, anharm_freqs, drive_strengths, coupling_dict, dt)[source]¶
Returns a
PulseSystemModel
representing a physical model for a collection of Duffing oscillators.In the model, each individual oscillator is specified by the parameters:
Frequency: \(\nu\), specified in the list
oscillator_freqs
Anharmonicity: \(\alpha\), specified in the list
anharm_freqs
, andDrive strength: \(r\), specified in the list
drive_strengths
.
For each oscillator, the above parameters enter into the Hamiltonian via the terms:
\[\pi(2 \nu - \alpha)a^\dagger a + \pi \alpha (a^\dagger a)^2 + 2 \pi r D(t) (a + a^\dagger),\]where \(a^\dagger\) and \(a\) are, respectively, the creation and annihilation operators for the oscillator, and \(D(t)\) is the drive signal for the oscillator.
Each coupling term between a pair of oscillators is specified by:
Oscillator pair: \((i,k)\), and
Coupling strength: \(j\),
which are passed in the argument
coupling_dict
, which is adict
with keys being thetuple
(i,k)
, and values the strengthj
. Specifying a coupling results in the Hamiltonian term:\[2 \pi j (a_i^\dagger a_k + a_i a_k^\dagger).\]Finally, the returned
PulseSystemModel
is setup for performing cross-resonance drives between coupled qubits. The index for theControlChannel
corresponding to a particular cross-resonance drive channel is retreived by callingPulseSystemModel.control_channel_index()
with the tuple(drive_idx, target_idx)
, wheredrive_idx
is the index of the oscillator being driven, andtarget_idx
is the target oscillator (see example below).Note: In this model, all frequencies are in frequency units (as opposed to radial).
Example
Constructing a three Duffing Oscillator :class:
PulseSystemModel
.# cutoff dimensions dim_oscillators = 3 # single oscillator drift parameters oscillator_freqs = [5.0e9, 5.1e9, 5.2e9] anharm_freqs = [-0.33e9, -0.33e9, -0.33e9] # drive strengths drive_strengths = [0.02e9, 0.02e9, 0.02e9] # specify coupling as a dictionary; here the qubit pair (0,1) is coupled with # strength 0.002e9, and the qubit pair (1,2) is coupled with strength 0.001e9 coupling_dict = {(0,1): 0.002e9, (1,2): 0.001e9} # time dt = 1e-9 # create the model three_qubit_model = duffing_system_model(dim_oscillators=dim_oscillators, oscillator_freqs=oscillator_freqs, anharm_freqs=anharm_freqs, drive_strengths=drive_strengths, coupling_dict=coupling_dict, dt=dt)
In the above model, qubit pairs (0,1) and (1,2) are coupled. To perform a cross-resonance drive on qubit 1 with target 0, use the
ControlChannel
with index:three_qubit_model.control_channel_index((1,0))
- Parameters
dim_oscillators (int) – Dimension of truncation for each oscillator.
oscillator_freqs (list) – Oscillator frequencies in frequency units.
anharm_freqs (list) – Anharmonicity values in frequency units.
drive_strengths (list) – Drive strength values in frequency units.
coupling_dict (dict) – Coupling graph with keys being edges, and values the coupling strengths in frequency units.
dt (float) – Sample width for pulse instructions.
- Returns
The generated Duffing system model
- Return type