liens=Import["liensPBC3.dat"];
ppts=Import["PtsPBC3.dat"];
l=Length[liens];
ll=Length[ppts];

cut=0.51;


RawHamFlux=Reap[Do[{rat=N[12*Sqrt[2]];
dx=ppts[[liens[[m,2]],1]]-ppts[[liens[[m,1]],1]];
dy=ppts[[liens[[m,2]],2]]-ppts[[liens[[m,1]],2]];

If[(liens[[m,1]]<liens[[m,2]])&&(Abs[dx]<cut)&&(Abs[dy]<cut),(*Print["Cond  "," ",dx," ",dy," ",liens[[m,1]]," ",liens[[m,2]]];*)
Sow[{{liens[[m,1]],liens[[m,2]]},-Exp[I*pi*Phi*rat*rat*((ppts[[liens[[m,2]]]])[[2]]-(ppts[[liens[[m,1]]]])[[2]])*((ppts[[liens[[m,2]]]])[[1]]+(ppts[[liens[[m,1]]]])[[1]])]}];
Sow[{{liens[[m,2]],liens[[m,1]]},-Exp[-I*pi*Phi*rat*rat*((ppts[[liens[[m,2]]]])[[2]]-(ppts[[liens[[m,1]]]])[[2]])*((ppts[[liens[[m,2]]]])[[1]]+(ppts[[liens[[m,1]]]])[[1]])]}];];

If[(liens[[m,1]]<liens[[m,2]])&&(dx>cut)&&(Abs[dy]<cut),(*1 proche du bord gauche, lien 1->2 croisant bord gauche*)
x2=(ppts[[liens[[m,2]],1]]-1);
Sow[{{liens[[m,1]],liens[[m,2]]},-Exp[2*I*pi*Phi*rat*rat*(((ppts[[liens[[m,2]]]])[[2]]-(ppts[[liens[[m,1]]]])[[2]])/2)*((ppts[[liens[[m,1]]]])[[1]]+x2)-2*I*pi*Phi*rat*rat*ppts[[liens[[m,2]],2]]]}];
Sow[{{liens[[m,2]],liens[[m,1]]},-Exp[-2*I*pi*Phi*rat*rat*(((ppts[[liens[[m,2]]]])[[2]]-(ppts[[liens[[m,1]]]])[[2]])/2)*((ppts[[liens[[m,1]]]])[[1]]+x2)+2*I*pi*Phi*rat*rat*ppts[[liens[[m,2]],2]]]}];];

If[(liens[[m,1]]<liens[[m,2]])&&(Abs[dx]<cut)&&(dy>cut),(*1 proche du bord bas, lien 1->2 croisant bord bas*)
y2=ppts[[liens[[m,2]],2]]-1;
Sow[{{liens[[m,1]],liens[[m,2]]},-Exp[2*I*pi*Phi*rat*rat*((y2-(ppts[[liens[[m,1]]]])[[2]])/2)*((ppts[[liens[[m,1]]]])[[1]]+(ppts[[liens[[m,2]]]])[[1]])]}];
Sow[{{liens[[m,2]],liens[[m,1]]},-Exp[-2*I*pi*Phi*rat*rat*((y2-(ppts[[liens[[m,1]]]])[[2]])/2)*((ppts[[liens[[m,1]]]])[[1]]+(ppts[[liens[[m,2]]]])[[1]])]}];];

If[(liens[[m,1]]<liens[[m,2]])&&(Abs[dx]<cut)&&(dy<-cut),(*1 proche du bord haut, lien 1->2 croisant bord haut*)
y1=(ppts[[liens[[m,1]],2]]-1);
Sow[{{liens[[m,1]],liens[[m,2]]},-Exp[2*I*pi*Phi*rat*rat*((ppts[[liens[[m,2]],2]]-y1)/2)*((ppts[[liens[[m,1]]]])[[1]]+(ppts[[liens[[m,2]]]])[[1]])]}];
Sow[{{liens[[m,2]],liens[[m,1]]},-Exp[-2*I*pi*Phi*rat*rat*((ppts[[liens[[m,2]],2]]-y1)/2)*((ppts[[liens[[m,1]]]])[[1]]+(ppts[[liens[[m,2]]]])[[1]])]}];];

If[(liens[[m,1]]<liens[[m,2]])&&(dx<-cut)&&(Abs[dy]<cut),(*1 proche du bord droit, lien 1->2 croisant bord droit*)
x1=ppts[[liens[[m,1]],1]]-1;
Sow[{{liens[[m,1]],liens[[m,2]]},-Exp[2*I*pi*Phi*rat*rat*(((ppts[[liens[[m,2]]]])[[2]]-(ppts[[liens[[m,1]]]])[[2]])/2)*((ppts[[liens[[m,2]]]])[[1]]+x1)-2*pi*I*rat*rat*(ppts[[liens[[m,2]]]])[[2]]]}];
Sow[{{liens[[m,2]],liens[[m,1]]},-Exp[-2*I*pi*Phi*rat*rat*(((ppts[[liens[[m,2]]]])[[2]]-(ppts[[liens[[m,1]]]])[[2]])/2)*((ppts[[liens[[m,2]]]])[[1]]+x1)+2*pi*I*rat*rat*(ppts[[liens[[m,2]]]])[[2]]]}];];
},{m,1,l}]][[2,1]];

tmp=Split[Sort[RawHamFlux],#1[[1]]==#2[[1]]&];
RawHamFlux=Table[tmp[[i,1,1]]->Tr[Transpose[tmp[[i]]][[2]]],{i,1,Length[tmp]}];

Vérification flux plaquettes

hamf=SparseArray[RawHamFlux];

hamf4=hamf.hamf.hamf.hamf;

hn4=Normal[hamf4];

Dimensions[hn4]

Tr[Simplify[hn4]]

hamf3=SparseArray[RawHamFlux];

hamf34=hamf3.hamf3.hamf3.hamf3;

hn34=Normal[hamf34];

Dimensions[hn34]

Tr[Simplify[hn34]]