Hi JaredEBland,
Thank you very much share me this approach, this is a nice way to obtain what I wanted.
I currently come up with another idea, just for discussion:
I found there has a function named merge, in /itensor/mps/siteset.h. Applying this function we can construct arbitrary siteset, take an example:
auto sites1 = Boson(l1,{"ConserveQNs",false,"MaxOcc=",nb1});
auto sites2 = Boson(l2,{"ConserveQNs",false,"MaxOcc=",nb2});
auto sites3 = merge(sites1,sites2,{"Start1=",1,"End1=",l1,"Start2=",1,"End2=",l2});
auto sites4 = Boson(l3,{"ConserveQNs",false,"MaxOcc=",nb3});
auto sites = merge(sites3,sites4,{"Start1=",1,"End1=",l1+l2,"Start2=",1,"End2=",l3});
With the above steps, sites1, sites2, and sites4 with different properties have been merged into a new one.