コード例 #1
0
ファイル: test_driver.py プロジェクト: tobiaswiener/netket
 def make_driver():
     ha, vstate, _ = _setup_system(L=2)
     return nkx.TDVP(
         ha,
         vstate,
         integrator,
         propagation_type="imag",
     )
コード例 #2
0
ファイル: test_driver.py プロジェクト: tobiaswiener/netket
def test_dt_bounds():
    ha, vstate, _ = _setup_system(L=2, dtype=np.complex128)
    te = nkx.TDVP(
        ha,
        vstate,
        nkx.dynamics.RK23(dt=0.1, adaptive=True, dt_limits=(1e-2, None)),
        propagation_type="real",
    )
    with pytest.warns(UserWarning, match="RK solver: dt reached lower bound"):
        te.run(T=0.1, callback=_stop_after_one_step)
コード例 #3
0
ファイル: test_driver.py プロジェクト: tobiaswiener/netket
def test_one_fixed_step(integrator, propagation_type):
    ha, vstate, _ = _setup_system(L=2)
    te = nkx.TDVP(
        ha,
        vstate,
        integrator,
        qgt=nk.optimizer.qgt.QGTJacobianDense(holomorphic=True),
        propagation_type=propagation_type,
    )
    te.run(T=0.01, callback=_stop_after_one_step)
    assert te.t == 0.01
コード例 #4
0
ファイル: test_driver.py プロジェクト: tobiaswiener/netket
def test_run_twice():
    # 1100
    ha, vstate, _ = _setup_system(L=2)
    driver = nkx.TDVP(
        ha,
        vstate,
        nkx.dynamics.RK23(dt=0.01),
    )
    driver.run(0.03)
    driver.run(0.03)
    np.testing.assert_allclose(driver.t, 0.06)
コード例 #5
0
ファイル: test_driver.py プロジェクト: tobiaswiener/netket
def test_repr_and_info():
    ha, vstate, _ = _setup_system(L=2)
    driver = nkx.TDVP(
        ha,
        vstate,
        nkx.dynamics.RK23(dt=0.01),
    )
    print(str(driver))
    assert "TDVP" in str(driver)

    info = driver.info()
    print(info)
    assert "TDVP" in info
    assert "generator" in info
    assert "integrator" in info
    assert "RK23" in info
コード例 #6
0
def test_change_integrator():
    ha, vstate, _ = _setup_system(L=2)
    driver = nkx.TDVP(
        ha,
        vstate,
        nkx.dynamics.RK23(dt=0.01, adaptive=False),
    )
    driver.run(0.03)
    np.testing.assert_allclose(driver.t, 0.03)

    integrator = nkx.dynamics.Euler(dt=0.05)
    driver.integrator = integrator
    np.testing.assert_allclose(driver.t, 0.03)
    np.testing.assert_allclose(driver.dt, 0.05)

    driver.run(0.1)
    np.testing.assert_allclose(driver.t, 0.13)
コード例 #7
0
def test_change_norm():
    ha, vstate, _ = _setup_system(L=2)
    driver = nkx.TDVP(
        ha,
        vstate,
        nkx.dynamics.RK23(dt=0.01, adaptive=False),
    )
    driver.run(0.03)

    def norm(x):
        return 0.0

    driver.error_norm = norm
    driver.run(0.02)

    driver.error_norm = "qgt"
    driver.run(0.02)

    driver.error_norm = "maximum"
    driver.run(0.02)

    with pytest.raises(ValueError):
        driver.error_norm = "assd"
コード例 #8
0
ファイル: test_driver.py プロジェクト: tobiaswiener/netket
def test_one_step_lindbladian(integrator):
    def _setup_lindbladian_system():
        L = 3
        hi = nk.hilbert.Spin(s=0.5)**L
        ha = nk.operator.LocalOperator(hi)
        j_ops = []
        for i in range(L):
            ha += (0.3 / 2.0) * nk.operator.spin.sigmax(hi, i)
            ha += ((2.0 / 4.0) * nk.operator.spin.sigmaz(hi, i) *
                   nk.operator.spin.sigmaz(hi, (i + 1) % L))
            j_ops.append(nk.operator.spin.sigmam(hi, i))
        #  Create the liouvillian
        lind = nk.operator.LocalLiouvillian(ha, j_ops)

        # Create NDM and vstate
        ma = nk.models.NDM()
        sa = nk.sampler.MetropolisLocal(hilbert=nk.hilbert.DoubledHilbert(hi))
        sa_obs = nk.sampler.MetropolisLocal(hilbert=hi)
        vstate = nk.vqs.MCMixedState(sa,
                                     ma,
                                     sampler_diag=sa_obs,
                                     n_samples=1000,
                                     seed=SEED)

        return lind, vstate

    lind, vstate = _setup_lindbladian_system()
    te = nkx.TDVP(
        lind,
        vstate,
        integrator,
        propagation_type="real",
        linear_solver=partial(nk.optimizer.solver.svd, rcond=1e-3),
    )
    te.run(T=0.01, callback=_stop_after_one_step)
    assert te.t > 0.0
コード例 #9
0
Sx = sum([nk.operator.spin.sigmax(hi, i) for i in range(L)])

# Run the optimization for 300 iterations to determine the ground state, used as
# initial state of the time-evolution
gs.run(n_iter=300, out="example_ising1d_GS", obs={"Sx": Sx})

# Create integrator for time propagation
integrator = nkx.dynamics.RK23(dt=0.01, adaptive=True, rtol=1e-3, atol=1e-3)
print(integrator)

# Quenched hamiltonian: this has a different transverse field than `ha`
ha1 = nk.operator.Ising(hilbert=hi, graph=g, h=0.5)
te = nkx.TDVP(
    ha1,
    variational_state=vs,
    integrator=integrator,
    t0=0.0,
    qgt=nk.optimizer.qgt.QGTJacobianDense(holomorphic=True),
    error_norm="qgt",
)

log = nk.logging.JsonLog("example_ising1d_TE")

# perform the time-evolution saving the observable Sx at every `tstop` time
te.run(
    T=1.0,
    out=log,
    show_progress=True,
    obs={"Sx": Sx},
    tstops=np.linspace(0.0, 1.0, 101, endpoint=True),
)