DSQSS  1.1
spin_H.h
説明を見る。
00001 
00002 //============================================================================
00003 //    Spin Matrices
00004 //============================================================================
00005 
00006 class HeisenbergSpin {
00007 public:
00008   int K;
00009   int D;
00010   cmatrix I;
00011   cmatrix UP;
00012   cmatrix DN;
00013   cmatrix X;
00014   cmatrix Y;
00015   cmatrix Z;
00016   HeisenbergSpin( int );
00017   ~HeisenbergSpin() {};
00018 };
00019 
00020 //----------------------------------------------------------------------------
00021 
00022 HeisenbergSpin::HeisenbergSpin( int K0 ) {
00023   K = K0; // K = 2 * S
00024   D = K0+1;
00025   I.resize(D,D);
00026   UP.resize(D,D);
00027   DN.resize(D,D);
00028   X.resize(D,D);
00029   Y.resize(D,D);
00030   Z.resize(D,D);
00031   I.zero();
00032   UP.zero();
00033   DN.zero();
00034   X.zero();
00035   Y.zero();
00036   Z.zero();
00037   for (int i=0; i<D-1; i++) {
00038     UP.re(i+1,i) = sqrt((double)((i+1)*(K-i)));
00039   }
00040   DN = t(UP);
00041 //  X = 0.5 * (UP + DN);
00042   cmatrix temp = UP + DN;
00043   X = 0.5 * temp;
00044   Y = ((-0.5) * IUNIT) * (UP - DN);
00045   for (int i=0; i<D; i++) {
00046     I.re(i,i) = 1.0;
00047     Z.re(i,i) = - 0.5*(double)K + (double)i;
00048   }
00049 }
00050 
00051 //----------------------------------------------------------------------------
00052 
00053 class HeisenbergSpinSet {
00054 
00055 public:
00056 
00057   int DS;    // the dimension of the 1-spin Hilbert space
00058   int N;     // "N" in SU(N)
00059   int K;     // the number of bosons on each site
00060   int NSITE; // the number of spins
00061   int DIM;   // the dimension of the whole Hilbert space
00062 
00063   cmatrix* X;
00064   cmatrix* Y;
00065   cmatrix* Z;
00066   cmatrix I;
00067 
00068   HeisenbergSpinSet( int K0 , int NSITE0 ) {
00069 
00070 printf("SpinSet> start.\n");
00071 
00072     K = K0;
00073     NSITE = NSITE0;
00074 
00075     HeisenbergSpin S( K );
00076 
00077     DS = S.D;
00078     X = new cmatrix[NSITE];
00079     Y = new cmatrix[NSITE];
00080     Z = new cmatrix[NSITE];
00081 
00082     printf("  definig spins ...\n");
00083     DIM = 1;
00084     for (int i=0; i<NSITE; i++) {
00085       DIM *= (DS);
00086       cmatrix x;
00087       cmatrix y;
00088       cmatrix z;
00089       x.unity();
00090       y.unity();
00091       z.unity();
00092       for (int j=0; j<NSITE; j++) {
00093         if ( i == j ) {
00094           x = (S.X)^x;
00095           y = (S.Y)^y;
00096           z = (S.Z)^z;
00097         } else {
00098           x = (S.I)^x;
00099           y = (S.I)^y;
00100           z = (S.I)^z;
00101         }
00102         X[i] = x;
00103         Y[i] = y;
00104         Z[i] = z;
00105       }
00106 printf("  ... done.\n");
00107 
00108       I.resize(DIM);
00109       I.identity();
00110 
00111 printf("SpinSet> end.\n");
00112 
00113     };
00114   };
00115 };
00116 
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型の値 フレンド マクロ定義