美文网首页
2019-06-19 MP Toolkit (2)

2019-06-19 MP Toolkit (2)

作者: 低维量子系统 | 来源:发表于2019-06-19 09:20 被阅读0次
    • How to define a model

    See mptoolkit/models


    • For spinchain-su1.cpp
          UnitCell Cell(Site);
          UnitCellOperator Sp(Cell, "Sp"), Sm(Cell, "Sm"), Sz(Cell, "Sz");
          InfiniteLattice Lattice(&Cell);
    
          Lattice["H_J1z"] = sum_unit(Sz(0)*Sz(1));
          Lattice["H_J1t"] = 0.5 * sum_unit(Sp(0)*Sm(1) + Sm(0)*Sp(1));
          Lattice["H_J1"]  = Lattice["H_J1z"] + Lattice["H_J1t"];
    
          Lattice["H_J2z"] = sum_unit(Sz(0)*Sz(2));
          Lattice["H_J2t"] = sum_unit(0.5*(Sp(0)*Sm(2) + Sm(0)*Sp(2)));
          Lattice["H_J2"] = sum_unit(Sz(0)*Sz(2) + 0.5*(Sp(0)*Sm(2) + Sm(0)*Sp(2)));
    
          Lattice["H_B1"] = sum_unit(pow(Sz(0)*Sz(1) + 0.5*(Sp(0)*Sm(1) + Sm(0)*Sp(1)), 2));
          Lattice["H_B2"] = sum_unit(pow(Sz(0)*Sz(2) + 0.5*(Sp(0)*Sm(2) + Sm(0)*Sp(2)), 2));
    
          Lattice["H_B1xy"] = sum_unit(pow(0.5*(Sp(0)*Sm(1) + Sm(0)*Sp(1)), 2));
    
          Lattice["H_mu"] = sum_unit(Sz(0)*Sz(0));
    
          Lattice["H_dimer"] = sum_unit(Sz(0)*Sz(1) + 0.5*(Sp(0)*Sm(1) + Sm(0)*Sp(1))
                        - (Sz(1)*Sz(2) + 0.5*(Sp(1)*Sm(2) + Sm(1)*Sp(2))), 2);
    
          Lattice["H_stag"] = sum_unit(Sz(0) - Sz(1), 2);
    

    • For spinchain-su2.cpp
    half_int Spin = 0.5;
    LatticeSite Site = SpinSU2(Spin);
    
          // The UnitCell consists of a single site
          UnitCell Cell(Site);
    
          // Make an infinite lattice of our unit cell
          InfiniteLattice Lattice(&Cell);
    
          // A short-cut to refer to an operator defined within our unit cell
          UnitCellOperator S(Cell, "S"), Q(Cell, "Q"), I(Cell, "I");
    
          // Define operators that have support over the infinite lattice
          Lattice["H_J1"] = sum_unit(inner(S(0), S(1)));
          Lattice["H_J2"] = sum_unit(inner(S(0), S(2)));
          Lattice["H_J3"] = sum_unit(inner(S(0), S(3)));
    
          Lattice["H_B1"] = sum_unit(pow(inner(S(0), S(1)), 2));
          Lattice["H_B2"] = sum_unit(pow(inner(S(0), S(2)), 2));
          Lattice["H_B3"] = sum_unit(pow(inner(S(0), S(3)), 2));
    
          Lattice["H_Q1"] = sum_unit(inner(Q(0), Q(1)));
          Lattice["H_Q2"] = sum_unit(inner(Q(0), Q(2)));
          Lattice["H_Q3"] = sum_unit(inner(Q(0), Q(3)));
    
          Lattice["H_D"] = -sum_unit(pow(inner(S(0), S(1)), 2) - I(0));
          UnitCellMPO S3 = inner(S(0)+S(1)+S(2), S(0)+S(1)+S(2));
          Lattice["H_T"] = (1.0/24.0) * sum_unit((S3 - 2*I(0)) * (S3 - 6*I(0)) * (S3 - 12*I(0)));
    

    • For spinchain.cpp
    half_int Spin = 0.5;
    LatticeSite Site = SpinSite(Spin);
          UnitCell Cell(Site);
          UnitCellOperator Sx(Cell, "Sx"), Sy(Cell, "Sy"), Sz(Cell, "Sz"), Sp(Cell, "Sp"), Sm(Cell, "Sm");
          UnitCellOperator I(Cell, "I"); // identity operator
          InfiniteLattice Lattice(&Cell);
    
          UnitCellMPO SpinExchange = Sx(0)*Sx(1) + Sy(0)*Sy(1) + Sz(0)*Sz(1);
    
          Lattice["H_xx"] = sum_unit(Sx(0)*Sx(1));
          Lattice["H_yy"] = sum_unit(Sy(0)*Sy(1));
          Lattice["H_zz"] = sum_unit(Sz(0)*Sz(1));
    
          Lattice["H_x"] = sum_unit(Sx(0));
          Lattice["H_y"] = sum_unit(Sy(0));
          Lattice["H_z"] = sum_unit(Sz(0));
    
          Lattice["H_J1z"] = Lattice["H_zz"];
          Lattice["H_J1t"] = Lattice["H_xx"] + Lattice["H_yy"];
          Lattice["H_J1"] = sum_unit(SpinExchange);
          Lattice["H_B1"] = sum_unit(SpinExchange*SpinExchange);
    
          Lattice["H_B1xy"] = sum_unit(pow(Sx(0)*Sx(1) + Sy(0)*Sy(1),2));
    
          Lattice["H_mu"] = sum_unit(Sz(0)*Sz(0));
    
          Lattice["H_dimer"] = sum_unit(Sz(0)*Sz(1) + 0.5*(Sp(0)*Sm(1) + Sm(0)*Sp(1))
                        - (Sz(1)*Sz(2) + 0.5*(Sp(1)*Sm(2) + Sm(1)*Sp(2))), 2);
    
          Lattice["H_stag"] = sum_unit(Sz(0) - Sz(1), 2);
    

    • For spinladdersu2.cpp
    half_int Spin = 0.5;
    int Legs = 2;
     int CellSize = Legs;
    
          LatticeSite Site = SpinSU2(Spin);
          UnitCell Cell(repeat(Site, CellSize));
          InfiniteLattice Lattice(&Cell);
          UnitCellOperator S(Cell, "S");
    
          UnitCellMPO J1x, J1y;
          for (int i = 0; i < Legs-1; ++i)
          {
             J1x += inner(S(0)[i], S(1)[i]);
             J1y += inner(S(0)[i], S(0)[i+1]);
          }
          J1x += inner(S(0)[Legs-1], S(1)[Legs-1]);
    
          Lattice["H_J1x"] = sum_unit(J1x);
          Lattice["H_J1y"] = sum_unit(J1y);
          Lattice["H_J1yp"] = sum_unit(J1y + inner(S(0)[0], S(0)[Legs-1]));
          Lattice["H_J1"] = sum_unit(J1x+J1y);
          Lattice["H_J1p"] = sum_unit(J1x+J1y + inner(S(0)[0], S(0)[Legs-1]));
    

    Sm(5)[1] : the spin S- operator at site 1 of the 5th unit cell


    SpinLadder_iDMRGsvg.png

    相关文章

      网友评论

          本文标题:2019-06-19 MP Toolkit (2)

          本文链接:https://www.haomeiwen.com/subject/jzthqctx.html