I'd still recommend running DMRG to find the ground state, which gives you an MPS, and then just take that as initial state for the TEBD, as outlined below.

On a side note, you can derive your model directly from the NearestNeighborModel, making the

`get_sshint_model`

funciton obsolete:
Code: Select all

```
class SSHIntModel(CouplingMPOModel, NearestNeighborModel):
...
```

`charges='same'`

for the GroupedSite.After these changes, I can run

Code: Select all

```
from tenpy.networks.mps import MPS
from tenpy.algorithms import dmrg, tebd
# SSHIntModel defined above, with charges='same'
M = SSHIntModel({'bc_MPS': 'infinite', 'tau': 1., 'nsys': 4})
pstate = ['empty_A full_B'] * M.lat.N_sites
psi = MPS.from_product_state(M.lat.mps_sites(), pstate, bc=M.lat.bc_MPS)
print("before dmrg:", psi.average_charge())
dmrg.run(psi, M, {})
print("after dmrg:", psi.average_charge())
eng = tebd.Engine(psi, M, {'dt': 0.001, 'N_steps':1, 'order': 2})
for i in range(5):
eng.run()
print("t =", eng.evolved_time, "average charge =", psi.average_charge())
```

(It only affected the infinite case with non-zero qtotal in the unit cell.)

Anyways, I've fixed in in f93f27b63d89a9669e95f2553afbde8d6ac140d7.

After this commit, the average charge stays constant -0.5, as expected.

This was probably also the reason why you got only zero eigenvalues for the transfer matrix, if you have initialized it with

`charge_sector=0`

, which is the default and **assumes**that the dominant eigenvalue is in charge sector 0.

If you would have put

`charge_sector=None`

(which is the default if you use `psi.overlap(other_psi)`

, it checks *all* possible charge sectors.While

`charge_sector=0`

probably works after the fix, I think you should check for large eingenvalues in the other charge sectors as well; I'd expect that if you do a flux pump such that `psi.average_charge()`

changes by one, the charge sector of the dominant eigenvector of the mixed transfer matrix will also change.I hope this settles the problems