Menu

Spin-boson model

Technical
S Mah
2018-09-06
2018-11-22
  • S Mah

    S Mah - 2018-09-06

    Hello,

    I have gone through the documentation and the examples, and most them consider interacting fermions, spins, or bosons. Does OSMPS support interaction between different particle types? For example, can I compute properties of the spin-boson model, i.e. bosons in a 1D lattice interacting with a single spin (i.e. interaction type H = sigma_x (a^dagger_0 + a_0)), or Kondo model (fermions interacting with a spin).

    If so, how is this dealt with?

     
  • Daniel Jaschke

    Daniel Jaschke - 2018-09-30

    Hello S. Mah,

    I have attached you a script with how I would implement it. From your Hamiltonian I guess that the spin is only interaction with the first lattice site of the Bose-Hubbard model. Thus, I place the spin on the first site and solve the different terms in the Hamiltonian with site-dependent couplings. In addition, I define the spin operators on the same local dimension as the bosonic operators (assuming spin operators have a smaller local dimension than the Bose-Hubbard model). These ideas should give you some good start. Some more thoughts:

    • Having a number conservation in the Bose-Hubbard model is now tricky, if not impossible without changing the python and fortran side of the code. Certainly, one would need more information to check the options. You can always define an input state without symmetry but a specific number of bosons.
    • If you want to go to Fermions, I do not see much problems with using the same approach. Be careful with the phase operator. In the Hamiltonian, it does not act on the spin due to the site-dependent coupling unless you introduce long-range interactions. But the correlations between spin and fermionic sites might be difficult. (The phase operator is involved for correlations/Hamiltonian-terms with f, fdagger.)

    Best regards,

    Daniel

     
  • S Mah

    S Mah - 2018-10-01

    Hey Daniel,

    Thanks for this. I will test it in the coming days and get back to you to see if it works.

    I had an idea that might make the implementation simpler for OSMPS. Instead of using a mix of spins and and bosons, one could also use a bosonic operator for the spin and include a hardcore term in the Hamiltonian (U/2 b^dagger b^dagger b b with U --> infty to prevent more than one excitation on the site). This representation will then exactly reproduce the spin dynamics. I guess using number conservation with this represenation will be easier because one then only has Bosons (although of course this particular Hamiltonian does not conserve total particle number because it has sigma_+ b^dagger and sigma_- b terms).

     

    Last edit: S Mah 2018-10-01
  • S Mah

    S Mah - 2018-10-14

    Hey Daniel,

    I was able to get the desired Hamitlonian implemented and have computed the ground state. I have checked the energies against another method and the results agree. The eigenvectors also agree well, so it appears I am getting reasonable results.

    I now have two questions regarding quenches using this Hamiltonian. I'm interested in doing a quench where the single spin is in the excited state with all the interactions switched off and then at time t=0 the interactions are switched on to constant values. In the limit of small coupling between then spin and the bosons, this quench should give something like spontaneous emission, while for larger couplings more effects come into play (e.g. Rabi oscillations and then for ultrastrong coupling counter-rotating dynamics). As far as I understand OSMPS evaluates the ground state of the static Hamiltonian and then uses that as an initial condition with the quench parameters. In order to get spin up + no bosons as the ground state, I switched all the couplings off and set the coeffcient of the spin term in the Hamiltonian to -1, so the ground state of the spin is indeed spin up. Then I created a time independent quench with variables that have the interaction switched on. When running the code, I get the correct ground state for the static simulation, but the dynamics don't seem to do anything. Any idea what the problem is?

    I have attached the code as a Jupyter notebook. I hope this is ok (if not I can also format it as a regular python file).

    My second question is: Can one set an arbitrary initial state for the quench? For example, if I know the initial state I want, but am not sure what Hamiltonian generates this as a ground state, can I set this as an initial state? I am interested in doing simulations of scattering-type interactions where the spin+boson-bath are in the ground state and are impinged upon by a single boson excitation.

     
  • Daniel Jaschke

    Daniel Jaschke - 2018-10-16

    Hello S. Mah,

    I like your previous suggestion to use hard-core boson on the first site to encode the spin. To make it numerical sound, I would maybe measure the occupation on the for two and more bosons to estimate the error.

    Yes, I would prefer a .py file to run it on my machine. From what I see, I'd say the setup of the quench is correct. You pass the parameters for the ground state to the dictionary and then you define the function for the quench. But I have indeed two concerns:

    1) From the script I guess the time step is dt=10? Not sure if the jupiter script was displayed correctly for me. Although the quench does not depend on time and you have no error from time-slicing your Hamiltonian, I'd suggest a time step smaller than 1 for test runs. Once you confirm your initial results on a small system, one can check which time steps work. Maybe start with dt=0.1; I never use anything above dt=0.5. You can set after how many time steps you want to measure if you do not want too many measurements.
    2) Do not use the Krylov time evolution. It handles the sudden quench usually not very well. TEBD should do well with many MPO terms and you fulfill the TEBD restriction of nearest neighbors only. (And then the errors scales with powers of dt, obviously favoring dt < 1. I'd go with dt=0.01 for the start). Otherwise, I'd pick TDVP.

    The initial state: You can define an initial state for the time evolution and pass it directly to the dictionary. When you set the key 'MPS' to false and pass no convergence / measurement settings for the statics, no ground state will be calculated. I can look for an example script if you want one. Whenever you start in a product state, it will be fairly easy to write down. Some other states such as GHZ states or a superpositions of a few pure states can be written down, too. States without symmetries are easier than state with symmetries. Look into MPSPyLib/state.py to see some examples of what is supported, mostly ProductState and QProductState. The key question is if your groundstate with impinged excitation has a nice representation.

    I hope that helps you to some extent.

    Best regards,

    Daniel

    P.S.
    timeevo_mps_initial : dictionary key to define an initial state for the time evolution
    stepsforoutput: optional argument in AddQuench to set the measurement step in terms of time steps of the time evolution. Default is 1.

     
  • S Mah

    S Mah - 2018-10-17

    Thanks for your suggestion Daniel. I will try to see if this works and let you know how it goes.

    Indeed the time steps were large. I just wanted to check if this was doing anything. I will try to change this to see if it works. I will also try changing the Krylov time evolution.

     

    Last edit: S Mah 2018-10-17
  • S Mah

    S Mah - 2018-10-23

    Hello Daniel,

    Thanks again for your comments.

    I checked changing the time steps dt and changing the solver. Changing the time steps while using the Krylov solver did not fix the problem. On the other hand when I used TEBD the problem was fixed. I ended up working with values of between dt=0.05 and dt=0.5.

    When cavity frequency= spin transition frequency and small values of g/frequency the results of the MPS code agrees with calculations I performed with a brute force solver (which is accurate for g/frequency<~0.5).

    For larger values such as g/frequency=1 computing the quench becomes rather time consuming. This is because the maximum number of Bosons per site can become large (due to the counter-rotating terms in the Hamiltonian) which makes the whole thing run slower. Additionally, it appears that the quenches also take much longer to run at larger times. For the dynamics here, I need to run the quench for times of up to t~30. I guess this takes longer to run because at large times the MPS requires larger bond dimensions right?

    To make things faster it would be nice if I could use the conserved quantity of the Hamiltonian which is sum_sites (n_0 - n_1) + sigma_z/2. I tried using this, but it returned an error saying that this is not actually a symmetry. As you mentioned above it does not work for the combined Hilbert space and may require changing some of the python code. Is there any way around this?

    Actually, if you have some code for defining an initial state that would be helpful. The initial state I'm interested in is rather simple. It's just the ground state of the spin/photon combination I compute in OSMPS with a single photon excitation (with a Gaussian or square puleshape) propagating towards the spin, but sarting far away from the spin, i.e. the whole thing starts in a product state of ground state (x) far away photon.

     
  • Daniel Jaschke

    Daniel Jaschke - 2018-10-25

    Hello,

    Yes, time evolution of the many-body systems can be involving and the bond dimension is one key parameter together with the local dimension on each site. Otherwise, you are advancing from the entry-level questions towards or to research questions, which I cannot answer without digging into it or writing new code.

    Using the symmetry is cumbersome at this level. I'd go with your original solution with a hard core boson on the first site if you only have sigma+ b and sigma- bdagger terms with a proper basis choice for the spin (and a local sigmaz on the spin). I have never worked with a (n_0 - n_1) + sz/2 conserved quantity.

    We have implemented a PartlyProduct state which we used ourselves to study excitons, see Figure 5 of https://doi.org/10.1088/2058-9565/aae724. If you want something like that with symmetries, that goes beyond support into research (at least for myself). Search for PartlyProduct in our online documentation https://openmps.sourceforge.io/ for the version without symmetries.

    What would be possible is to search for an excited state and feed that into the dynamics as initial state of the next simulation. Not sure if that is equal to your excitation, maybe with some regions of the Hamiltonian switched of.

    Best regards,

    Daniel

     
  • Joe Doe

    Joe Doe - 2018-11-20

    Hi Daniel,

    I tried to run the script you posted Spin_and_BoseHubbard.py and I am getting

    Tue Nov 20 13:38:02 EST 2018
    /bin/sh: ./Execute_MPSMain: No such file or directory
    ./Execute_MPSMain TMP_02/Bose_Hubbard_staticst_0.0Main.nml 0
    Traceback (most recent call last):
    File "Spin_and_BoseHubbard.py", line 188, in <module>
    main(PostProcess=Post)
    File "Spin_and_BoseHubbard.py", line 95, in main
    mps.runMPS(MainFiles, RunDir='./')
    File "/cell_root/software/openmps/3.0/gcc/4.9.3/openmpi/1.8.6/python/3.5.1/sys/MPSPyLib/tools.py", line 389, in runMPS
    raise MPSFortLibError(ret_val)
    MPSPyLib.tools.MPSFortLibError: MPSFortLib quit with fatal return code 127!
    Tue Nov 20 13:38:06 EST 2018</module>

    Any idea what is wrong?

     
  • Joe Doe

    Joe Doe - 2018-11-20

    Hi Daniel,

    I tried to run the script you posted Spin_and_BoseHubbard.py and I am getting

    Tue Nov 20 13:38:02 EST 2018
    /bin/sh: ./Execute_MPSMain: No such file or directory
    ./Execute_MPSMain TMP_02/Bose_Hubbard_staticst_0.0Main.nml 0
    Traceback (most recent call last):
    File "Spin_and_BoseHubbard.py", line 188, in <module>
    main(PostProcess=Post)
    File "Spin_and_BoseHubbard.py", line 95, in main
    mps.runMPS(MainFiles, RunDir='./')
    File "/cell_root/software/openmps/3.0/gcc/4.9.3/openmpi/1.8.6/python/3.5.1/sys/MPSPyLib/tools.py", line 389, in runMPS
    raise MPSFortLibError(ret_val)
    MPSPyLib.tools.MPSFortLibError: MPSFortLib quit with fatal return code 127!
    Tue Nov 20 13:38:06 EST 2018</module>

    Any idea what is wrong?

     
  • Daniel Jaschke

    Daniel Jaschke - 2018-11-22

    Hello,

    the line "/bin/sh: ./Execute_MPSMain: No such file or directory" tells you that the fortran executable is not found, although you can find the MPSPyLib. Not sure if you compiled or copy-pasted only the MPSPyLib.

    Bests,

    Daniel

     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.