Skip to content

Commit 3521131

Browse files
committed
Added refferences to suggested reading
1 parent a1b7c73 commit 3521131

File tree

11 files changed

+1446
-56
lines changed

11 files changed

+1446
-56
lines changed

Manifest.toml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
julia_version = "1.9.0"
44
manifest_format = "2.0"
5-
project_hash = "4a1d97bef8afef670719ac1ef9afa5593983a635"
5+
project_hash = "223688a101f8a9d7186d2b2c1de1b4a7a04b14df"
66

77
[[deps.AbstractFFTs]]
88
deps = ["LinearAlgebra"]
@@ -1040,10 +1040,16 @@ uuid = "7792a7ef-975c-4747-a70f-980b88e8d1da"
10401040
version = "0.4.7"
10411041

10421042
[[deps.Strided]]
1043-
deps = ["LinearAlgebra", "TupleTools"]
1044-
git-tree-sha1 = "a7a664c91104329c88222aa20264e1a05b6ad138"
1043+
deps = ["LinearAlgebra", "StridedViews", "TupleTools"]
1044+
git-tree-sha1 = "b32eadf6ac726a790567fdc872b63117712e16a8"
10451045
uuid = "5e0ebb24-38b0-5f93-81fe-25c709ecae67"
1046-
version = "1.2.3"
1046+
version = "2.0.1"
1047+
1048+
[[deps.StridedViews]]
1049+
deps = ["LinearAlgebra"]
1050+
git-tree-sha1 = "59cc024139c20d1ed8400c419c6fe608637d583d"
1051+
uuid = "4db3bf67-4bd7-4b4e-b153-31dc3fb37143"
1052+
version = "0.1.2"
10471053

10481054
[[deps.SuiteSparse]]
10491055
deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"]

Project.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ UnsafeArrays = "c4a57d5a-5b31-53a6-b365-19f8c011fbd6"
1515

1616
[compat]
1717
Parameters = "0.12"
18+
PrecompileTools = "1"
1819
QuantumOptics = "1"
1920
QuantumOpticsBase = "0.3.9"
20-
Strided = "1.2"
21+
Strided = "1,2"
2122
UnsafeArrays = "1"
2223
julia = "1.8"

docs/src/index.md

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,6 @@
22

33
WaveguideQED.jl is a package for simulating continuous fockstates in waveguides. It expands on [`QuantumOptics.jl`](https://qojulia.org/) by adding a custom basis, operators, and routines for doing detection.
44

5-
## Suggested readings
6-
7-
The following is a list of relevant papers that provide background to the numerical method implemented in the repository.
8-
* Heuck, M., Jacobs, K.,&; Englund, D. R. (2020). Photon-photon interactions in dynamically coupled cavities. *Physical Review A*, *101*(4). https://doi.org/10.1103/PhysRevA.101.042322
9-
* Heuck, M., Jacobs, K., &; Englund, D. R. (2020). Controlled-Phase Gate Using Dynamically Coupled Cavities and Optical Nonlinearities. *Physical Review Letters*, *124*(16). https://doi.org/10.1103/PhysRevLett.124.160501
10-
* Krastanov, S., Jacobs, K., Gilbert, G., Englund, D. R., &; Heuck, M. (2022). Controlled-phase gate by dynamic coupling of photons to a two-level emitter. *Npj Quantum Information*, *8*(1), 103. https://doi.org/10.1038/s41534-022-00604-5
11-
12-
The following papers attack similar types of problems that can be solved with `WaveguideQED.jl` and serve as additional context.
13-
* Kiilerich, A. H., &; Mølmer, K. (2019). Input-Output Theory with Quantum Pulses. *Physical Review Letters*, *123*(12), 123604. https://doi.org/10.1103/PhysRevLett.123.123604
14-
* Kiilerich, A. H., &; Mølmer, K. (2020). Quantum interactions with pulses of radiation. *Physical Review A*, *102*(2), 023717. https://doi.org/10.1103/PhysRevA.102.023717
15-
* Arranz Regidor, S., Crowder, G., Carmichael, H., &; Hughes, S. (2021). Modeling quantum light-matter interactions in waveguide QED with retardation, nonlinear interactions, and a time-delayed feedback: Matrix product states versus a space-discretized waveguide model. *Physical Review Research*, *3*(2). https://doi.org/10.1103/PhysRevResearch.3.023030
16-
17-
185
## Dev docs
196
Added functionalities:
207
* [`WaveguideBasis`](@ref) for representing the waveguide space and the related generator functions: [`zerophoton`](@ref), [`onephoton`](@ref), and [`twophoton`](@ref). Also see [`OnePhotonView`](@ref), [`TwoPhotonView`](@ref), and [`plot_twophoton!`](@ref) for viewing the waveguide data for plotting. Note that [`WaveguideBasis`](@ref) can contain multiple waveguides.

docs/src/references.bib

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,71 @@ @article{Heuck2020Photon-photonCavities
2727
arxivId = {1905.02134}
2828
}
2929

30+
@article{Heuck2020,
31+
abstract = {We show that relatively simple integrated photonic circuits have the potential to realize a high fidelity deterministic controlled-phase gate between photonic qubits using bulk optical nonlinearities. The gate is enabled by converting travelling continuous-mode photons into stationary cavity modes using strong classical control fields that dynamically change the effective cavity-waveguide coupling rate. This architecture succeeds because it reduces the wave packet distortions that otherwise accompany the action of optical nonlinearities [J. Shapiro, Phys. Rev. A 73, 062305 (2006)PLRAAN1050-294710.1103/PhysRevA.73.062305; J. Gea-Banacloche, Phys. Rev. A 81, 043823 (2010)PLRAAN1050-294710.1103/PhysRevA.81.043823]. We show that high-fidelity gates can be achieved with self-phase modulation in χ(3) materials as well as second-harmonic generation in χ(2) materials. The gate fidelity asymptotically approaches unity with increasing storage time for an incident photon wave packet with fixed duration. We also show that dynamically coupled cavities enable a trade-off between errors due to loss and wave packet distortion. Our proposed architecture represents a new approach to practical implementation of quantum gates that is roomerature compatible and only relies on components that have been individually demonstrated.},
32+
author = {Mikkel Heuck and Kurt Jacobs and Dirk R. Englund},
33+
doi = {10.1103/PhysRevLett.124.160501},
34+
issn = {10797114},
35+
issue = {16},
36+
journal = {Physical Review Letters},
37+
month = {4},
38+
pmid = {32383940},
39+
publisher = {American Physical Society},
40+
title = {Controlled-Phase Gate Using Dynamically Coupled Cavities and Optical Nonlinearities},
41+
volume = {124},
42+
year = {2020},
43+
}
44+
45+
@article{Krastanov2022,
46+
abstract = {<p>We propose an architecture for achieving high-fidelity deterministic quantum logic gates on dual-rail encoded photonic qubits by letting photons interact with a two-level emitter (TLE) inside an optical cavity. The photon wave packets that define the qubit are preserved after the interaction due to a quantum control process that actively loads and unloads the photons from the cavity and dynamically alters their effective coupling to the TLE. The controls rely on nonlinear wave mixing between cavity modes enhanced by strong externally modulated electromagnetic fields or on AC Stark shifts of the TLE transition energy. We numerically investigate the effect of imperfections in terms of loss and dephasing of the TLE as well as control field miscalibration. Our results suggest that III-V quantum dots in GaAs membranes is a promising platform for photonic quantum information processing.</p>},
47+
author = {Stefan Krastanov and Kurt Jacobs and Gerald Gilbert and Dirk R. Englund and Mikkel Heuck},
48+
doi = {10.1038/s41534-022-00604-5},
49+
issn = {2056-6387},
50+
issue = {1},
51+
journal = {npj Quantum Information},
52+
month = {9},
53+
pages = {103},
54+
title = {Controlled-phase gate by dynamic coupling of photons to a two-level emitter},
55+
volume = {8},
56+
url = {https://www.nature.com/articles/s41534-022-00604-5},
57+
year = {2022},
58+
}
59+
60+
@article{Ciccarello2018,
61+
abstract = {Quantum collision models (CMs) provide advantageous case studies for investigating major issues in open quantum systems theory, and especially quantum non-Markovianity. After reviewing their general definition and distinctive features, we illustrate the emergence of a CM in a familiar quantum optics scenario. This task is carried out by highlighting the close connection between the well-known input-output formalism and CMs. Within this quantum optics framework, usual assumptions in the CMs’ literature - such as considering a bath of noninteracting yet initially correlated ancillas - have a clear physical origin.},
62+
author = {Francesco Ciccarello},
63+
doi = {10.1515/qmetro-2017-0007},
64+
issue = {1},
65+
journal = {Quantum Measurements and Quantum Metrology},
66+
month = {1},
67+
publisher = {Portico},
68+
title = {Collision models in quantum optics},
69+
volume = {4},
70+
year = {2018},
71+
}
72+
73+
@article{HughesWQEDMPP2021,
74+
abstract = {We present two different methods for modeling non-Markovian quantum light-matter interactions in waveguide QED systems, using matrix product states (MPSs) and a space-discretized waveguide (SDW) model. After describing the general theory and implementation of both approaches, we compare and contrast these methods directly on three topical problems of interest in waveguide-QED, including (i) a two-level system (TLS) coupled to an infinite (one-dimensional) waveguide, (ii) a TLS coupled to a terminated waveguide with a time-delayed coherent feedback, and (iii) two spatially separated TLSs coupled within an infinite waveguide. Both approaches are shown to efficiently describe multiphoton nonlinear dynamics in highly non-Markovian regimes, and we highlight the advantages and disadvantages of these methods for modeling waveguide QED interactions, including their implementation in python, computational run times, and ease of conceptual understanding. We explore both vacuum dynamics as well as regimes of strong optical pumping, where a weak excitation approximation cannot be applied. The MPS approach scales better when modeling multiphoton dynamics and long delay times and explicitly includes non-Markovian memory effects. In contrast, the SDW model accounts for non-Markovian effects through space discretization and solves Markovian equations of motion, yet rigorously includes the effects of retardation. The SDW model, based on an extension of recent collisional pictures in quantum optics, is solved through quantum trajectory techniques and can more easily add in additional dissipation processes, including off-chip decay and TLS pure dephasing. The impact of these processes is shown directly on feedback-induced population trapping and TLS entanglement between spatially separated TLSs.},
75+
author = {Sofia Arranz Regidor and Gavin Crowder and Howard Carmichael and Stephen Hughes},
76+
doi = {10.1103/PhysRevResearch.3.023030},
77+
issn = {2643-1564},
78+
issue = {2},
79+
journal = {Physical Review Research},
80+
month = {4},
81+
pages = {023030},
82+
publisher = {American Physical Society},
83+
title = {Modeling quantum light-matter interactions in waveguide QED with retardation, nonlinear interactions, and a time-delayed feedback: Matrix product states versus a space-discretized waveguide model},
84+
volume = {3},
85+
url = {https://link.aps.org/doi/10.1103/PhysRevResearch.3.023030},
86+
year = {2021},
87+
}
88+
89+
90+
91+
92+
93+
94+
3095
@book{Gerry2004,
3196
author = {Christopher Gerry and Peter Knight},
3297
doi = {10.1017/CBO9780511791239},

docs/src/references.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,18 @@
1-
# References
1+
# Suggested readings and references
2+
3+
## Theory and background
4+
The theory of time-bin continuous fockstates is introduced in [Heuck2020Photon-photonCavities](@cite) where it is used to derive the equations of motion for Waveguide QED systems. The numerical method in this library is heavily based on this approach, where instead of deriving the equations, the systems are solved by applying the operators themselves. The time-bin method is also used in [Heuck2020](@cite) and [Krastanov2022](@cite).
5+
6+
## Similar or other approaches
7+
8+
The following is a list of approaches or methods that are trying to solve similar problems that can be treated with this library.
9+
* [HughesWQEDMPP2021](@cite) considers feedback in waveguide systems and uses a space-discretized waveguide picture with Monte Carlo trajectories
10+
* [Fischer2018](@cite) relates many approaches to solving WaveguideQED problems with each other and also introduces a framework that aims to deal with similar problems through master equations, photon counting and tracing.
11+
* The SLH formalism introduced in [Kielerich2019](@cite) and [Kielerich2020](@cite) uses cascaded cavities to simulate quantum pulses. Further work also includes: [Yang2022](@cite) [Christiansen2023](@cite)
12+
13+
## Papers where we reproduce results from
14+
* The theoretical results in [DynamicalPhotonLodahl2022](@cite) are reproduced in [Scattering on a two-level system](https://qojulia.github.io/WaveguideQED.jl/dev/example_lodahl/)
15+
216

317
```@bibliography
418
```

src/CavityWaveguideOperator.jl

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Abstract type used for operators on acting on a combined [`WaveguideBasis`](@ref
33
"""
44
abstract type CavityWaveguideOperator{BL,BR} <: AbstractOperator{BL,BR} end
55

6+
#TO DO: CLEAN UP
67
#Indexing structure used to loop over state. Needs cleanup and can possible be removed with the addition of eachslice(a,dims=(1,3,...)) in julia 1.9
78
struct WaveguideIndexing{N}
89
ndims::Int
@@ -17,8 +18,6 @@ struct WaveguideIndexing{N}
1718
new{length(iter)}(length(strides),k_idx,end_idx,strides,idx_vec1,idx_vec2,range_idx,iter)
1819
end
1920
end
20-
21-
2221
function WaveguideIndexing(b::Basis,loc)
2322
dims = b.shape
2423
alldims = [1:length(dims)...]
@@ -414,14 +413,14 @@ function tensor(a::Operator,b::T) where {T<:WaveguideOperator}
414413
end
415414

416415

417-
416+
#TO DO: CLEAN UP
417+
#Currently indexing is very complicated using the CavityIndexing structure and could possible be done smoother and faster.
418418
"""
419419
mul!(result::Ket{B1}, a::CavityWaveguideEmission, b::Ket{B2}, alpha, beta) where {B1<:Basis,B2<:Basis}
420420
mul!(result::Ket{B1}, a::CavityWaveguideAbsorption, b::Ket{B2}, alpha, beta) where {B1<:Basis,B2<:Basis}
421421
422422
Fast in-place multiplication of operators/state vectors. Updates `result` as `result = alpha*a*b + beta*result`. `a` is a [`CavityWaveguideOperator`](@ref).
423423
"""
424-
425424
function mul!(result::Ket{B1}, a::CavityWaveguideEmission, b::Ket{B2}, alpha, beta) where {B1<:Basis,B2<:Basis}
426425
dims = basis(result).shape
427426
i,j = a.loc[1],a.loc[2]
@@ -431,15 +430,7 @@ function mul!(result::Ket{B1}, a::CavityWaveguideEmission, b::Ket{B2}, alpha, be
431430
beta1 = one(beta)
432431
end
433432
if length(dims) == 2
434-
loop_destroy_ax!(result.data,a,b.data,alpha,beta1,a.indexing)
435-
#=
436-
a.indexing.idx_vec1[j] = dims[j]
437-
li1 = linear_index(a.indexing.ndims,a.indexing.idx_vec1,a.indexing.strides)
438-
if iszero(beta)
439-
fill!(view(result.data,li1:a.indexing.strides[a.loc[1]]:li1+(a.indexing.end_idx-1)*a.indexing.strides[a.loc[1]]),beta)
440-
elseif !isone(beta)
441-
rmul!(view(result.data,li1:a.indexing.strides[a.loc[1]]:li1+(a.indexing.end_idx-1)*a.indexing.strides[a.loc[1]]),beta)
442-
end=#
433+
loop_destroy_ax!(result.data,a,b.data,alpha,beta1,a.indexing)
443434
elseif length(dims) == 3
444435
loop_destroy_third_axis!(result.data,a,b.data,alpha,beta1,a.indexing,1)
445436
a.indexing.idx_vec1[j] = dims[j]
@@ -460,19 +451,10 @@ function mul!(result::Ket{B1}, a::CavityWaveguideAbsorption, b::Ket{B2}, alpha,
460451
beta1 = one(beta)
461452
end
462453
if length(dims) == 2
463-
loop_create_ax!(result.data,a,b.data,alpha,beta1,a.indexing)
464-
#=
465-
a.indexing.idx_vec1[j] = 1
466-
li1 = linear_index(a.indexing.ndims,a.indexing.idx_vec1,a.indexing.strides)
467-
if iszero(beta)
468-
fill!(view(result.data,li1:a.indexing.strides[a.loc[1]]:li1+(a.indexing.end_idx-1)*a.indexing.strides[a.loc[1]]),beta)
469-
elseif !isone(beta)
470-
rmul!(view(result.data,li1:a.indexing.strides[a.loc[1]]:li1+(a.indexing.end_idx-1)*a.indexing.strides[a.loc[1]]),beta)
471-
end=#
454+
loop_create_ax!(result.data,a,b.data,alpha,beta1,a.indexing)
472455
elseif length(dims) == 3
473456
loop_create_third_axis!(result.data,a,b.data,alpha,beta1,a.indexing,1)
474457
a.indexing.idx_vec1[j] = 1
475-
#loop_rmul_axis!(result.data,a,b.data,alpha,beta,a.indexing,1)
476458
else
477459
iterate_over_iter!(result.data,a,b.data,alpha,beta1,a.indexing,1,loop_create_third_axis!)
478460
a.indexing.idx_vec1[j] = 1

0 commit comments

Comments
 (0)