Negative interaction
Bugfix for using empty list to fill default reduced density matrices in ED.
Bugfix detection complex operators in init method.
Bugfix Krylov method for pure states and non-hermitian case.
Bugfix problem with assignment after reshape.
Enable mpiifort for compiling with MPI sections.
Enable Lambda measurement for pure states.
Good afternoon, When running my code attached, I am running into an error when N >= 8. After the state has evolved for about 14 seconds (of 20 seconds), I get the following error: ** On entry to ZHSEQR parameter number 4 had an illegal value ** On entry to ZGEBAL parameter number 3 had an illegal value ** On entry to ZGEHRD parameter number 2 had an illegal value ** On entry to ZUNGHR ZUNGQR parameter number 2 had an illegal value I could not find much information for what caused this error, and...
Hi Matthew, For these data points, I ran openMPS using docker on my personal laptop. It is a Surface laptop 3 with an i5 Intel core (Intel(R) Core(TM) i5-1035G7 CPU @ 1.20GHz, 1498 Mhz, 4 Core(s), 8 Logical Processor(s)). My question isn't so much about the specific runtimes in the table, it is more about the distinct change in trends. There seems to be one trend for N -> {1, 5} and a separate one for N > 5. I have attached a plot to more properly display this. Thanks again for your help!
Thanks Pablo. Can you summarize the system specifications upon which these results were generated?
I could not add the image of the table in my original post, so here it is.
I have been benchmarking the runtimes of the MPDO method against my own Lindblad Master Equation method and noticed that there is a jump in time when N > 6. Why might this be happening? Attached is an image of a table with the runtimes (in seconds) and my code used to create the times.
Hi Pablo, a few points: You have no Lindblad operators defined, so you cannot expect any decay. The default initial state for the time evolution is the ground state of the Hamiltonian. Then, you evolve under the same Hamiltonian, i.e., you will stay in the eigenstate. The time step you set is taken as-is by OSMPS. A time-step dt=1 is a bit big, especially TDVP will have problems. Suggestions: - Switch off J for the ground state search, your initial state will be a product state of all spins aligned....
Thanks for the help Daniel! I believe I made all of your suggested changes. I added the QT key-value pair to the parameter dictionary, but when the number of trajectories is greater than 1 I get the following error: Execute_MPSMain testwrite/testB_1.0Main.nml 2 running with 0 0 1 At line 21081 of file /openmps/MPSFortLib/Mods/ObsOps.f90 (unit = 18) Fortran runtime error: Cannot open file 'testwrite//testB_1.00ObsMPO_1.dat': No such file or directory Error termination. Backtrace: #0 0x7fd017a98f81...
Hi Pablo, the quick feedback is: 1) Use TDVP, do not use Krylov. 2) There is no key-value pair in the parameter dictionary for the "QT", see at the end of the function description https://openmps.sourceforge.io/pyautodoc/tools.html?highlight=writefiles#tools.WriteFiles 3) There are no Lindblad operators defined, i.e., we have pure Hamiltonian dynamics. The seed is for each trajectory different and you do not have to run the script multiple time. It is done internally once (2) is set. 4) An MPS with...
Attached is a simplification of the main script I have been using. Listed are some issues that I have encountered: The output files have extra spaces which lead to errors when reading the observables. I added a few lines of code to fix this issue, but I think it's important to take note that this is happening. I can't seem to find a way to specify the number of trajectories over which the code is running. Along with this, running the code multiple times gives the exact same results. This to me indicated...
P.S. Assuming that one added myObservables.AddObservable('State', True) in the original examples, which stores states not only under a hash, but also a human-readable filename. On Thu, Jan 6, 2022 at 10:37 AM Daniel Jaschke djaschke@users.sourceforge.net wrote: Hi, statics_initial is enough as a flag. The MPS to False probably came up in a discussion about how to provide input state for the dynamics and skips the ground state search completely, i.e., starting right away with the time evolution. Let's...
Hi, statics_initial is enough as a flag. The MPS to False probably came up in a discussion about how to provide input state for the dynamics and skips the ground state search completely, i.e., starting right away with the time evolution. Let's say you want to pick up the ground state search for the Ising model from the Examples, copy-paste that file, change the write and output directory, and add (constructed from the output directory, id, and unique ID of the first simulation) 'statics_initial'...
Dear Developers and Users, Supposing that at the end of a simulation I find that more sweeps need to be performed, then is there a way to resume the simulation forward from the initially obtained ground state? After reading some previous posts my guess is that it may be possible and we need to add 'MPS' : False and 'statics_initial' : <.bin file name here> in the dictionary, but I am not completely sure about it and about the other changes we need to make. It will be really helpful if can get some...
Hi, it is as intuitive as you might expect. Step 1) define a new operator or multiple of them as already done with the interaction term Operators = mps.BuildBoseOperators(6) Operators['delta_n_3'] = np.diag(np.array([0, 0, 0, 1, 0, 0, 0])) ... (remaining non-default operators) Step 2) add it to your Hamiltonian H = mps.MPO(Operators) H.AddMPOTerm('site', 'delta_n_3', hparam='U_d3', weight=1.0) ... (remaining terms of the Hamiltonian) Then, you can parameterize the term in your simulation dictionary...
Hi Alex, yes indeed, it does slow down due to Gram-Schmidt. Moreover, the code has to do the Gram-Schmidt via fitting new MPS states in contrast to the simple subtraction known from vectors. Subtracting MPSs would increase the bond dimension. From the algorithmic point of view, your approach would be working. But we should think about computational scaling, too. Psi has probably bond dimension chi, |psi><psi| inside the MPO has an MPO bond dimension of chi^2. My first intuition is that we won't be...
Dear Developers and Users, I wish to add an on-site interaction term of the form U_dx (\delta{n_i, x}) to the standard Bose-Hubbard Hamiltonian. Here U_dx denotes the interaction strength and (\delta{n_i, x}) = 1 only when the number of atoms at a site i (n_i ) = x, a fixed number. What will be the best way to code such a term in the existing BoseHubbard example file? Any help would be much appreciated. Thanks!
I've noticed that the excited state search will become quite slow and eventually stop working beyond some highly energetic state (i.e. it's impossible to get the full spectrum unlike in exact diagonalization). I would assume it's because you have to keep subtracting off your new state , resulting in a shrinking state space similar to what happens in a Gran Schmidt procedure What if for each new state from the search, you add a term \lambda |\Psi > < \Psi | to the Hamiltonian and repeat the search...
Segmentation Fault when using FiniteFunction
Issues with Installing OpenMPS
Problem fixed.
No problem! Feel free to open another ticket if you have questions.
Sure. I ran the codes successfully for the first and third examples. Thank you for your time. I appreciate it.
Great!! May I close this issue, or did you have other questions?
Looks like it! Only one way to find out, though: conda activate openmps && \ python Examples/03_BoseHubbardDynamics.py --PostProcess False && \ python Examples/03_BoseHubbardDynamics.py --PostProcess True
I think it did. I ran the example code and got the pdf output file. Thank you so much, Matthew!
Did it work?
Great! Thanks. Can you try this command and send me the output? conda activate openmps && \ python setup.py install && \ python BuildOSMPS.py --clean python BuildOSMPS.py --prefix=$CONDA_PREFIX/bin \ --option=FC:$CONDA_PREFIX/bin/x86_64-conda_cos6-linux-gnu-gfortran \ --option=INCFLAGS:-I$CONDA_PREFIX/include \ --option=LIBFLAGS:-L$CONDA_PREFIX/lib
I got this lrwxrwxrwx 1 mostafa mostafa 36 Jun 9 17:48 x86_64-conda_cos6-linux-gnu-f95 -> x86_64-conda_cos6-linux-gnu-gfortran -rwxrwxr-x 1 mostafa mostafa 226 Jun 9 17:47 x86_64-conda_cos6-linux-gnu-gfortran -rwxrwxr-x 2 mostafa mostafa 904240 Aug 21 2018 x86_64-conda_cos6-linux-gnu-gfortran.bin
Apologies! I had a typo in one of the commands, can you try again?
Can you send me the output of the following command? conda activate openmps ls -la $CONDA_PREFIX/bin | grep -i "fortran"
both of them don't return any output
Can you send me the output of the following command? conda activate openmps ls -la $CONDA_PREFIX | grep -i "fortran"
I hope I didn't do this wrong
Can you try the following and send me the output (please add the output as a text file ... it will be large)? conda activate openmps conda list conda activate openmps python BuildOSMPS.py --clean python BuildOSMPS.py --prefix=$CONDA_PREFIX/bin \ --option=FC:$CONDA_PREFIX/bin/gfortran \ --option=INCFLAGS:-I$CONDA_PREFIX/include \ --option=LIBFLAGS:-L$CONDA_PREFIX/lib
Hi Matthew, Here are the outputs (base) mostafa@mostafa:~$ lsb_release --all No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 21.04 Release: 21.04 Codename: hirsute (base) mostafa@mostafa:~$ conda --version conda 4.10.1 (base) mostafa@mostafa:~$ conda env list # conda environments: # /home/mostafa/anaconda3 base * /home/mostafa/openmps/conda/root/conda openmps /home/mostafa/openmps/conda/root/conda/envs/openmps Thanks you!
Hi Matthew, Here are the outputs (base) mostafa@mostafa:~$ lsb_release --all No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 21.04 Release: 21.04 Codename: hirsute (base) mostafa@mostafa:~$ conda --version conda 4.10.1 (base) mostafa@mostafa:~$ conda env list conda environments: /home/mostafa/anaconda3 base * /home/mostafa/openmps/conda/root/conda openmps /home/mostafa/openmps/conda/root/conda/envs/openmps Thanks you!
What operating system are you using? It looks like it's a Linux-based system. Can you send me the output of these commands: lsb_release --all # this will tell me which Linux version you're using conda --version # this will tell me the version of conda on your system conda env list # this will list all of the conda environments built on your system The procedure for configuring the environment is essentially this (from the openmps directory): conda env create --name openmps --file conda/environments/linux.yml...
Also, if I change python BuildOSMPS.py --prefix=$CONDA_PREFIX/bin \ --option=FC:$CONDA_PREFIX/bin/gfortran \ --option=INCFLAGS:-I$CONDA_PREFIX/include \ --option=LIBFLAGS:-L$CONDA_PREFIX/lib to python BuildOSMPS.py --prefix=$CONDA_PREFIX/bin \ --option=FC:/usr/bin/gfortran \ --option=INCFLAGS:-I$CONDA_PREFIX/include \ --option=LIBFLAGS:-L$CONDA_PREFIX/lib I can avoid these errors, but I end up getting this /usr/bin/gfortran -O3 -c /home/mostafa/openmps/MPSFortLib/Mods/BasicOps.f90 -I/home/mostafa/openmps/MPSFortLib/Mods/...
Here is what these commands return now: $ which python /home/mostafa/openmps/conda/root/conda/envs/openmps/bin/python $ gfortran --version GNU Fortran (Ubuntu 10.3.0-1ubuntu1) 10.3.0 Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ gcc --version gcc (Ubuntu 10.3.0-1ubuntu1) 10.3.0 Copyright (C) 2020 Free Software Foundation, Inc. This is free software;...
It looks like you're also missing gfortran. Can you describe the exact process you used to configure your environment?
It seems like I didn't have the command make. I installed it, but I'm getting these errors. make[1]: /home/mostafa/openmps/conda/root/conda/envs/openmps/bin/gfortran: No such file or directory make[1]: [makefile:14: /home/mostafa/openmps/MPSFortLib/Mods/BasicOps.o] Error 127 make[1]: Leaving directory '/home/mostafa/openmps/MPSFortLib/Mods' make: [makefile:29: moddir_obj] Error 2
Hi, can you run the following commands, and let me know what the output is? which python gfortran --version gcc --version make --version
Issues with Installing OpenMPS
OpenMPS on Google Colab
Bugfix QT and MPO measures: need one copy per trajectory.
Throw h5py once in unittests and catch exception otherwise.
Hi Casey, for instance you can add an additional key 'QT' to the parameters dictionary with an integer, i.e., the number of quantum trajectories. Then, there is a bug in the MPO measurements and you'd have to replace them with site or correlation measurements. The z-compoment would be myObservables.AddObservable('site', 'sigmaz', '<z>') and in the post processing mags.append(np.mean(results['<z>']</z>))</z> The convergence flag is only available for statics and cannot be accessed in a result of a...
Output files for QT time evolution have a tab in their name
updating style for dockerfile and bash scripts
updating style across all bash scripts
adding end-line in gitignore
Merge branch 'master' of ssh://git.code.sf.net/p/openmps/v3code
Thank you for the reply. Now I think for q2, I can calculate the O_CD using nftotal operators, and corr2nn for the O_BO
Thank you for the reply. Now I think for q2, I can calculate the O_CD using nftotal operators, and almost calculate O_SO using corr2nn? But there are two terms with the i, i+1 flipped.
Hi there, Recently I was running a 1D half-filling chain simulation with Coulomb interactions and I realized that even the ground state calculations could not be completed once the chain becomes fairly long (I've tried 80 for instance). On the other hand, this code runs perfectly fine for smaller system (I tried L=40 or smaller). I ran the code using (in my last calculation) python amn.py 80 1 3 The errors: Execute_MPSMain MPS_TMP_LR/mps_long_range_MPS_L80_N40_t1.0_lambda1.0_nuc1_e2_N3Main.nml 0...
Thank you very much for the reply. So the only remaining question in q2 is essentially if I could run correlations like <c_ic_jc_kc_l>. If I just naively run something like myObservables.AddObservable('corr', ['fdagger', 'f', 'fdagger', 'f'], name='cijkl', Phase=True) The results still have dimensions (L, L) instead of (L, L, L, L) By the way, in q2 all the operators c_ij are just fermionic creations and annihilation operators, and the first parameter can be defined using nftotal operators so that...
Thank you very much for the reply. So the only remaining question in q2 is essentially if I could run correlations like <c_ic_jc_kc_l>. If I just naively run something like myObservables.AddObservable('corr', ['fdagger', 'f', 'fdagger', 'f'], name='cijkl', Phase=True) The results still have dimensions (L, L) instead of (L, L, L, L) By the way, in q2 all the operators c_ij are just fermionic creations and annihilation operators
Thank you very much for the reply. So the only remaining question in q2 is essentially if I could run correlations like <c_ic_jc_kc_l>. If I just naively run something like myObservables.AddObservable('corr', ['fdagger', 'f', 'fdagger', 'f'], name='spdm', Phase=True) The results still have dimensions (L, L) instead of (L, L, L, L) By the way, in q2 all the operators c_ij are just fermionic creations and annihilation operators
Thank you very much for the reply. So the only remaining question in q2 is essentially if I could run correlations like <c_ic_jc_kc_l>. </c_ic_jc_kc_l> If I just naively run something like myObservables.AddObservable('corr', ['fdagger', 'f', 'fdagger', 'f'], name='spdm', Phase=True) The results still have dimensions (L, L) instead of (L, L, L, L) By the way, in q2 all the operators c_ij are just fermionic creations and annihilation operators
Thank you very much for the reply. So the only remaining question in q2 is essentially if I could run correlations like <c_ic_jc_kc_l>. By the way, in q2 all the operators c_ij are just fermionic creations and annihilation operators</c_ic_jc_kc_l>
I will start with q.png ... otherwise, I will risk losing your train of thought, I fear: The left-hand side of Eq. (1) looks a lot like the b b_dagger correlation measurement we have in the Bose-Hubbard example. I assume c and c_dagger are the annihilation and creation operators in your local basis, and then I would move the summation outside of < ... | ... | ... > as on the RHS, most likely including the phi_i, phi_j. I would try an outer product with the vector phi with itself to build a matrix...
Actually I think I know part of the answer to my first question, I will just add a FiniteFunction to the MPO observable. However it'd still be nice to calculate the observable b/w different states However, I want to replace my first question with this one, that is it possible to not do a full sum, as seen in the attachment here?
Actually I think I know the answer to my first question, I will just add a FiniteFunction to the MPO observable. However, I want to replace my first question with this one, that is it possible to not do a full sum, as seen in the attachment here?
Hi there, Sorry for the very late reply we were distracted by something else. Also see attached. We have two questions
I want to make a complex MPS, by introducing complex hopping in Bose-hubbard model. There is some error... Traceback (most recent call last): File "/home/anaconda3/envs/openmps/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap self.run() File "/home/anaconda3/envs/openmps/lib/python3.7/multiprocessing/process.py", line 99, in run self._target(self._args, *self._kwargs) File "standard_copy.py", line 160, in main MainFiles = mps.WriteFiles(staticsParameters, Ops, H) File "/home/anaconda3/envs/openmps/lib/python3.7/site-packages/MPSPyLib/tools.py",...
Resolve import of time.clock for python version 3.8+.
Is there any reason that a symmetry generator would make an otherwise properly working operator not injective? I've attached an attempt to add the discrete symmetry generator alla Daniel's method in the Bose Hubbard model linked in my previous reply. The only other example I found is in a two flavored model here: https://sourceforge.net/p/openmps/discussion/tech/thread/134fa04f/?limit=25#903a There Rafael has a two species Fermi Hubbard model, which seems to not be functioning correction from the...
Hi Matthew, did you find time to look at the issue? I just realized that, even if I only define 'Ostr', but set the system size to L=16 instead of 8, there are similar problems in Version 3. Best, Sebastian
In using the Kitaev Wire Model to explore the features of the OSMPS tools, I was hoping to learn a little more about the quantum information tools available while waiting to see what's going on for the discrete symmetries and multi-flavor Fermionic MPS. For the bond entropy, is this defined as the entanglement entropy between the left and right hand sides of the bond? From printing the array, it seems that the bond entropy gives an L+1 array with index 0 being the bond entropy between site zero and...
Small Typos in Python Module obsterms Documentation
Thank you for the help, Matt! I don't mind it at all. A new discussion with a different header will also make it easier for others to search.
Thank you, Daniel. When I try that, by adding Operators['symm_gen'] = np.fmod(Operators['nftotal'],2) before the generating the parameters and just 'Discrete_generators' : ['symm_gen'], inside the parameters definition, I get an error that the chemical potential term that I defined is not injective. I get the same error when I try to specify Discrete_quantum_numbers : [0] for the initial state inside the parameters definition. Should I try the if-then method you implemented in the openBH_correct_initial_state.py...
We are always happy to provide additional context/insight where appropriate, No need to apologize! Re: Discrete_generators ... yes, I would have assumed it was implemented, but didn't dig past documentation. Looks like it is (per Daniel's comment below)! Thanks for your patience. I would recommend trying Daniel's fix for discrete generators, which should enforce exactly the parity you're looking for. j is NumPy's representation for complex numerical objects (imaginary unit). Here's NumPy's documentation...
Thanks, Daniel. I'll make an action item to update the documentation for OpenMPS on Discrete_generators (here) to reflect this.
Hi Jared, the discrete generator has to be a list of strings in your parameter dictionary, in your case with one entry as you stated from the 04_SpinlessFermions.py example. Somewhere you have the class for the operators which has also the basic features of a dictionary. Can you try something like this: Operators['symm_gen'] = np.fmod(Operators['nftotal'],2) and then later 'Discrete_generators' : ['symm_gen'] Please let us know if that works as a solution. Best regards, Daniel On Sun, Oct 25, 2020...
Thank you. That post I referenced had code using Discrete_generators was from 2016 - I thought it had been implemented - so I thought perhaps we should use that for global discrete symmetries. I'm not yet totally python literate - I'm learning python as I explore this tool (sorry!), so I'm missing a detailed understanding of things like Python dictionaries. I'll look into it tonight. Most of my python experience has been yelling at my machine for caring about number of spaces/tabs and not having...
Great question, Jared. Operators is a dictionary list. A reference to something like Operators["nftotal"] should return a NumPy array representation for the operator with name "nftotal". To use a custom global symmetry, you must first declare your operator in the Operators dictionary list with something like this: Operators["new_op_name"] = np.array([[a0, b0, c0, ...], [a1, b1, c1, ...], ...]) Then, in your simulation parameters, insist that the system-global value is fixed: ... some_global_value...
Great question, Jared. Operators is a dictionary list. A reference to something like Operators["nftotal"] should return a NumPy array representation for the operator with name "nftotal". To use a custom global symmetry, you must first declare your operator in the Operators dictionary list with something like this: Operators["new_op_name"] = np.array([[a0, b0, c0, ...], [a1, b1, c1, ...], ...]) Then, in your simulation parameters, insist that the system-global value is fixed: ... some_global_value...
How do we implement global discrete symmetries? In https://sourceforge.net/p/openmps/discussion/tech/thread/7dd1fa40/?limit=25#9544 the idea of a parity / global Z2 is mentioned, but I can't seem to implement it correctly. From that: " Discrete symmetries are of Ising Z2 type which looks to me like your case. Your symmetry generator would be the matrix with diagonal entries (0, 1, 0, 1, ...), in case with spinless fermions of all the same type only (0, 1)" Is there some particular formatting to use?...
Hi Matthew, thanks for answering the question. Apart from having installed anaconda on another occasion, I followed the installation guide to the letter. https://sourceforge.net/p/openmps/wiki/OpenMPS%20from%20Source/ I use ubuntu. Best regards, Simon Matrix Product State (MPS) Simulations / Wiki / OpenMPS from Sourcehttps://sourceforge.net/p/openmps/wiki/OpenMPS%20from%20Source/ Acquire the dependencies Additional steps for macOS. If you are installing onto a linux-based operating system, you can...
Okay, great. Thank you.
Hi Jared, Thanks for reply. But i short out this issue. for two-component we have to conserved abelian generator [nb_0,nb_1] quantum numbers [n1n2 individually . Cheers, Mrinal
Hello, Thanks for posting your issue! The fatal return code 127 indicates that the fortran library does not exist in any standard location. Would you mind sharing your installation procedure with me? Thanks, Matthew J
Hi Sebastian, Thanks for posting, and checking into correctness between major versions of OpenMPS. That saves me a lot of time! I will look into your issue and provide guidance early next week.
Hi Jared! Thanks for the message. I've been debugging the code path you've outlined, and it essentially boils down to a malformed tensor signature that's generating an improperly shaped object for the LAPACK routine. I'm working on two things for you: A "quick and dirty" fix that gets your work going right now. A "longer term" fix that addresses the core behavior. (2) is obviously way more involved than (1), but I am very glad that you posted an issue.
Hello, Matt, May I ask if anything happend in the debugging session? Thanks, Jared
Hi Mrinal, Assuming that you have played with the convergence parameters and found that the error didn't go away: I had a similar issue, and a reinstall fixed that error by changing the compilation optimization flags for the Fortran side. Though, I still have issues with a two component Fermionic model. The post I made : https://sourceforge.net/p/openmps/discussion/users/thread/e9398f5948/ which contains some of the details that helped me resolve that issue on my system. The other post that helped...
I am not able resolve this error while compiling the attached script file... outputs_QW_2/test_QW_2tau_10.1_L_21_N_2_U_10_t1_1.0_t2_1.0 399653c47b8457ac7da448bdd186a945e1567ba9ea306a2c0c outputs_QW_2/test_QW_2tau_10.1_L_21_N_4_U_10_t1_1.0_t2_1.0 82b6f06f8e4aa1f022f413d4cb633399baaf7c068fe467b7a7 outputs_QW_2/test_QW_2_L_21_N_2_U_10_t1_1.0_t2_1.0 31c514da781332bd38bc9ccf33ab3c1efe6baec8e9bbbf57e5 Execute_MPSMain test_QW_2/test_QW_2_L_21_N_2_U_10_t1_1.0_t2_1.0Main.nml 0 On entry to DGEMM parameter...
Two-species bose-hubbard model-
Dear all, I have trouble computing the dynamics of some correlation functions (Bose-Hubbard, Spin-1 Heisenberg), depending on whether some other Observables are defined or not. Attached is an example script for Quench dynamics in a Bose-Hubbard model, using the TDVP. The Observable 'Ostr' is only computed correctly, if the line myObservables.AddObservable('corr',['dn','dn'],'nn') is commented out. It seems that this problem did not exist in version 2.1, but in the newer versions 3 and 3.1. Could...
MPSPyLib not found
Hello, no, it is not possible right now to define this observable via the python interface. But indeed, the inner products are already in fortran, e.g., you could calculate the overlap between the ground state and the excited state (and verify that they are orthogonal). Depending on what your observable really is, there might be the chance to measure reduced density matrices of the ground and excited state and then handle your measurement in your python post processing. If you share what measure...
properly source conda environment in script