Skip to content

Repository files navigation

ProcessTensors.jl

Tensor-network methods for process tensors and non-Markovian quantum dynamics.

CI Coverage Aqua QA

Read the Documentation

ProcessTensors.jl is a Julia package for simulating open quantum systems with matrix-product states and operators. It is built on ITensorMPS.jl and keeps the physics-facing workflow close to the equations: define a system, describe its environment, build a process tensor, and then ask what experiments that process would produce.

The same package can also be used before process tensors enter the story: closed-system Hilbert-space dynamics, vectorized Liouville-space evolution, Lindblad generators, TEBD, TDVP, driven systems, and dissipative many-body models all live under the same interface.

What can you do with it?

Evolve quantum states Work with Hilbert- and Liouville-space MPS/MPO objects, unitary dynamics, Lindblad evolution, TEBD, TDVP, and time-dependent Hamiltonians.
Build environmental memory Construct spin and bosonic baths mode by mode, then turn their influence into an MPO process tensor with Dense() or ACE.
Run experiments on a process Assemble preparations, controls, measurements, left/right actions, trace-outs, and open legs into an InstrumentSeq, then contract it with evaluate_process.
Reuse the same environment Once a process tensor is built, evolve new initial states with evolve, evaluate different protocols, or probe multi-time correlations without rebuilding the bath.

Installation

Install the latest tagged release from GitHub:

using Pkg
Pkg.add(url="https://github.com/Gauthameshwar/ProcessTensors.jl", rev="v0.2.0")

For the latest development version:

using Pkg
Pkg.add(url="https://github.com/Gauthameshwar/ProcessTensors.jl")

ACE: compress the environment, keep the memory

ACE() — Automated Compression of Environments — sequentially incorporates independent microscopic bath modes and compresses the temporal memory they leave behind.

That makes models such as a central spin surrounded by hundreds of bath spins, or a driven two-level system coupled to a thermal bosonic continuum, accessible without explicitly propagating the exponentially large joint environment (see the Central-spin ACE example and Thermal spin-boson ACE example for complete walkthroughs).

A process tensor in a few lines

Define the system and one bath mode:

using ITensors
using ProcessTensors

dt = 0.1
nsteps = 24

sys = siteinds("S=1/2", 1)
bath_site = siteinds("S=1/2", 1)
bathL = liouv_sites(bath_site)

Hsys = OpSum()
Hsys += 1.0, "Sx", 1
system = spin_system(sys, Hsys)

ρbath0 = to_liouville(
    to_dm(MPS(bath_site, ["Up"]));
    sites=bathL,
)

Hbath = OpSum()
Hbath += 1.0, "Sx", 1

Hint = OpSum()
Hint += 1.0, "Sz", 1, "Sz", 2

mode = spin_mode(bathL, Hbath, ρbath0; coupling=Hint)
environment = spin_bath([mode])

pt = build_process_tensor(
    system;
    environment,
    dt,
    nsteps,
)

Then reuse that process tensor however you like.

Follow the reduced non-Markovian trajectory:

ρ0 = to_dm(MPS(sys, ["Up"]))
trajectory = evolve(pt, ρ0)

Or ask an explicit experimental question:

obs = OpSum()
obs += 1.0, "Sz", 1

seq = default_schedule(pt)
add!(seq, 0, state_preparation(ρ0))
add!(seq, nsteps, observable_measurement(obs))

expectation = evaluate_process(pt, seq)

The process tensor is the reusable object in the middle: change the preparation, measurement, control sequence, or multi-time probe without reconstructing the environment.

Pick your route through the docs

The documentation is written as a progression rather than an API dump.

Contributing

ProcessTensors.jl is under active development. Bug reports, physics examples, algorithm implementations, documentation improvements, and discussions about future process-tensor methods are most welcome!

See CONTRIBUTING.md and CHANGELOG.md for development and release information.


No tensor indices were harmed during the development of this package. Several, however, were accidentally contracted with the wrong ones before eventually finding their soulmate.

About

Julia package for MPS-based open quantum dynamics, Liouville-space simulation, and process tensors.

Resources

Code of conduct

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages