Hi everyone,
Now I'm going to share a way I found to define Sy operator in ALPS MPS calculation to inspire further justifications about it. First why it's hard to define Sy operators in ALPS MPS calculations? Because there are 2 obstacles you will face to define and use Sy site operator: When you want to directly measure something about Sy like Sy and Sy:Sy correlations, you enable COMPLEX to 1 so that you can use I in models xml file. Then you define site operator Sy like this:
<SITEOPERATOR name="Sy" site="x"> I/2*(Sminus(x)-Splus(x)) </SITEOPERATOR>
However this will not work in ALPS MPS, you get wrong result when measuring local Sy and get exceptions when you measure correlations like Sy:Sy. There are 2 obstacles. One is that mps_optim's local operator measurement code has a real bug that would lead to wrong measurement results: MPS measurement part would form the wrong local operator to be measured. For example, when you measure Sy. Since Sy is built in SITEOPERATOR as I/2*(Sminus(x)-Splus(x)), the bug is that MPS actually measure Sminus(x)+Splus(x) with all number multipliers before Sminus(x) and Splus(x) unexpectedly set to 1. It measures the wrong operator so it gives you wrong measurement result. The detailed tests are here : https://gitee.com/whitesnow1970/learn-Python-in-alps/blob/master/share/The_b...
In order to bypass this bug, the resolution is defining number multipliers as operators: <OPERATOR name="half_I" matrixelement="I/2"/> <OPERATOR name="half" matrixelement="1/2"/> and define your Sy like: <SITEOPERATOR name="Sy" site="x"> minus_half_I(x)*Splus(x)+half_I(x)*Sminus(x) </SITEOPERATOR> Now all multipliers are 1, who cares you later set it to1? This is justified in my spin 1/2 <Sy> measurements tests. My local Sy measurements results were right.
The second obstacle is not a bug but a restriction. When you measure correlations like Sy:Sy, where Sy is defined in SITEOPERATOR by sums. MPS measurement stops you from measure correlation Sy:Sy and says you have sums in Sy definition. The stopping information is: Cannot measure sum of terms in LOCAL_AT and CORRELATIONS
My resolution is not a standard way so require further justification, it is implemented as follows: Make a repeated definition of Sy in front of Sy's SITEOPERATOR definition with matrix elements. Since in principle you cannot define Sy by matrix elements because it doesn't change Sz quantum number by simply one line. This is a dummy definition, which is assumed to be overwritten by later definition. First define: <OPERATOR name="Sy" matrixelement="I/2"> <CHANGE quantumnumber="Sz" change="-1"/> </OPERATOR> Later define: <SITEOPERATOR name="Sy" site="x"> minus_half_I(x)*Splus(x)+half_I(x)*Sminus(x) </SITEOPERATOR> Where minus_half_I(x) is c*identity operator as mentioned above. I assume later definition covers the former one and I found by doing that MPS will not stop you any longer from measuring Sy:Sy by " Cannot measure sum of terms in LOCAL_AT and CORRELATIONS" exceptions. This is the fact I rely on to bypass this obstacle. In my tests, the Sy:Sy correlation matrix in my spin 1/2 calculation was also right. With this final definition of Sy, you can both bypass the local operator measurement bug in MPS and the restriction of sums when you want a summed local operator to be in MPS correlation measurements. In ALPS DMRG both are unnecessary, just use my original definition is fine. But in mps_optim you have to do this in order to directly measure Sy. I think ALPS MPS is not as polished as developed ALPS DMRG, this is the reason it possesses such limitations. My resolution above can bypass such limitation if one cannot code C++ and modify the open-sourced code. However, it needs further justification because redefinition of operator isn't a standard way in ALPS. (My model xml file: https://gitee.com/whitesnow1970/learn-Python-in-alps/blob/master/share/HSy.x...)
So how much did I tested? For spin 1/2. I used mps_optim to get ground statesof H=+-I/2*(Sminus(i)-Splus(i)). So the ground states are two eigenstates of Sy with eigenvalue +-0.5. I measure my built "Sy" for these two states, both for <"Sy"> and <"Sy"*"Sy"> to get expectation value of "Sy" and "Sy"'s uncertainty. If uncertainty vanishes I will conclude the state is an eigenstate of "Sy" with eigenvalue <"Sy">. My result showed that "Sy" have the identical eigenstates and eigenvalues with Sy=I/2*(Sminus(i)-Splus(i)). So in spin 1/2 space "Sy"=Sy. However I didn't try this for spin 1 yet because my way seems not that global for all spin lengths.
Finally, this is a nice start to use Sy operator in ALPS MPS. Otherwise you will have to break everything into Sz,Splus,Sminus and cannot measure Sy directly. This gets more unconvenient when one measure correlations like Sy:Sy. Welcome to further talks and tests about it~
( -'`-) LiuBiao ll070616@126.com
comp-phys-alps-users@lists.phys.ethz.ch