void rotate(snapshot *snap, string *tags, string *vecs, char axis, real thetax, real thetay, real thetaz) { matrix rmat; bodyptr bp; switch (tolower(axis)) { case 'x': xmatrix(rmat, thetax); break; case 'y': ymatrix(rmat, thetay); break; case 'z': zmatrix(rmat, thetaz); break; default: error("%s: unknown axis %c\n", getargv0(), axis); } if (set_member(tags, PosTag) && set_member(vecs, PosTag)) for_all_bodies(bp, *snap) rotatevec(Pos(bp), rmat); if (set_member(tags, VelTag) && set_member(vecs, VelTag)) for_all_bodies(bp, *snap) rotatevec(Vel(bp), rmat); if (set_member(tags, AccTag) && set_member(vecs, AccTag)) for_all_bodies(bp, *snap) rotatevec(Acc(bp), rmat); if (set_member(tags, AuxVecTag) && set_member(vecs, AuxVecTag)) for_all_bodies(bp, *snap) rotatevec(AuxVec(bp), rmat); }
void kTpemHamiltonian (Geometry const &geometry, DynVars const &dynVars, tpem_sparse *matrix,Parameters const ðer,Aux &aux,int type) { int row, col, volume, i = 0, p; double a=aux.varTpem_a, b=aux.varTpem_b, tmp; int j,k,dir; volume = ether.linSize; int level,gamma1,gamma2; vector<MatType> jmatrix(36,0), ymatrix(36,0); if (ether.isSet("adjusttpembounds")) { a=1.0; b=0.0; } row=0; for (gamma1=0;gamma1<6;gamma1++) { for (p = 0; p < volume; p++, row++) { auxCreateJmatrix(jmatrix,dynVars,ether,p),auxCreateYmatrix(ymatrix,dynVars,ether,p); matrix->rowptr[row] = i; matrix->colind[i] = row; tmp =real(jmatrix[gamma1+6*gamma1])*double(ether.modulus[p]) + ether.potential[p]+real(ymatrix[gamma1+6*gamma1]); // tmp =real(jmatrix[gamma1+6*gamma1])*double(ether.modulus[p]) + ether.potential[p]; matrix->values[i] = (tmp-b)/a; /* -b because it's diagonal */ i++; for (j = 0; j < geometry.z(p); j++) { k = geometry.neighbor(p,j); dir = geometry.scalarDirection(p,k,j); // for (gamma1=0;gamma1<ether.numberOfOrbitals;gamma1++) { for (gamma2=0;gamma2<6;gamma2++) { matrix->colind[i]=k+gamma2*volume; matrix->values[i]=ether.bandHoppings[gamma1+gamma2*6+36*dir]/a; i++; } // } } for (gamma2=0;gamma2<6;gamma2++) { if (gamma1==gamma2) continue; matrix->colind[i]=p + gamma2*volume; matrix->values[i]=jmatrix[gamma1+6*gamma2]*double(ether.modulus[p])/a; i++; } } } if (i!=ether.nonzero) { cerr<<"i="<<i<<" but nonzero="<<ether.nonzero<<endl; cerr<<"At this point: "<<__FILE__<<" "<<__LINE__<<endl; exit(1); } }