DSQSS
1.1
|
00001 //====================================================================== 00002 00003 void Measurement::measure() { 00004 00005 using namespace Specific; 00006 int NV = LAT.countVertices(); 00007 00008 ACC[NV1].accumulate( ((double)NV) ); 00009 00010 double* val = new double[ALG.NXMAX]; //edit sakakura 00011 // double val[ALG.NXMAX]; 00012 00013 for (int i=0; i<ALG.NXMAX; i++) { 00014 val[i] = 0.5 * (double)(2 * i - ALG.NXMAX + 1); 00015 } 00016 double phase[2] = { 1.0 , -1.0 }; 00017 00018 double MZU = 0.0; 00019 double MZUA = 0.0; 00020 double MZS = 0.0; 00021 double MZSA = 0.0; 00022 00023 for (int s=0; s<LAT.NSITE; s++) { 00024 Site& SITE = LAT.S(s); 00025 int mt = SITE.getMTYPE(); 00026 double ph = phase[mt]; 00027 Segment& S0 = SITE.first(); 00028 double mz0 = val[S0.X()]; 00029 Site::iterator p(SITE); 00030 double mza0 = 0.0; 00031 while ( ! (++p).atOrigin() ) { 00032 Segment& S = *p; 00033 double mz = val[S.X()]; 00034 mza0 += mz * S.length(); 00035 } 00036 00037 MZU += mz0; 00038 MZUA += mza0; 00039 MZS += ph * mz0; 00040 MZSA += ph * mza0; 00041 } 00042 00043 ACC[MZU1].accumulate(MZU); 00044 ACC[MZU2].accumulate(MZU * MZU); 00045 ACC[MZUA1].accumulate(MZUA); 00046 ACC[MZUA2].accumulate(MZUA * MZUA); 00047 ACC[MZS1].accumulate(MZS); 00048 ACC[MZS2].accumulate(MZS * MZS); 00049 ACC[MZSA1].accumulate(MZSA); 00050 ACC[MZSA2].accumulate(MZSA * MZSA); 00051 00052 double EBSAMP = - (double) NV ; 00053 00054 for (int b=0; b<LAT.NINT; b++) { 00055 Interaction& I = LAT.I(b); 00056 InteractionProperty& IP = I.property(); 00057 //VertexProperty& VP = IP.getVertexProperty(); 00058 int NBODY = IP.NBODY; 00059 double* tau = new double[NBODY]; 00060 int* x = new int[NBODY]; 00061 Site::iterator* p = new Site::iterator[NBODY]; 00062 00063 for (int i=0; i<NBODY; i++) { 00064 Site& S = I.site(i); 00065 p[i].init(S); 00066 p[i]++; 00067 tau[i] = p[i]->topTime(); 00068 x[i] = p[i]->X(); 00069 } 00070 00071 double t = 0.0; 00072 int it; 00073 00074 // edit Suzuki 00075 // 逆温度に対する規格化 00076 #ifdef NORM 00077 while ( t < 1.0 ) { 00078 #else 00079 while ( t < LAT.BETA ) { 00080 #endif 00081 // end edit Suzuki 00082 it = imin( NBODY , tau ); //nbody=2 it=0 00083 // edit Suzuki 00084 // 逆温度に対する規格化 00085 #ifdef NORM 00086 EBSAMP -= (tau[it]-t) * IP.VertexDensity( x ) * LAT.BETA; 00087 #else 00088 EBSAMP -= (tau[it]-t) * IP.VertexDensity( x ); 00089 #endif 00090 // end edit Suzuki 00091 00092 if ( p[it]->top().isTerminal() ) break; 00093 t = tau[it]; 00094 p[it]++; 00095 tau[it] = p[it]->topTime(); 00096 x[it] = p[it]->X(); 00097 } 00098 00099 delete [] tau; 00100 delete [] x; 00101 delete [] p; 00102 00103 } 00104 00105 ACC[EB1].accumulate( EBSAMP );//kota n++; s1+=x; s2+=(x*x) 00106 ACC[EB2].accumulate( EBSAMP * EBSAMP ); 00107 00108 //+++++ edit sakakura +++++// 00109 00110 if (P.RUNTYPE == 1){ 00111 ediag = MZUA; 00112 } 00113 if (P.RUNTYPE == 2){ 00114 ediag = EBSAMP + double(NV); 00115 nkink = NV; //number of kink 00116 } 00117 00118 //+++++ edit sakakura +++++// 00119 delete []val; 00120 00121 } 00122 00123 //====================================================================== 00124 // === edit rep sakakura === 00125 //void Measurement::setsummary() { 00126 void Measurement::setsummary(int index) { 00127 // === edit rep sakakura === 00128 00129 using namespace Specific; 00130 00131 double* X = new double[NACC]; //edit sakakura 00132 // double X[NACC]; 00133 00134 for (int i=0; i<NACC; i++) ACC[i].average(); 00135 for (int i=0; i<NACC; i++) X[i] = ACC[i].value; 00136 00137 double B = LAT.BETA; 00138 double V = (double)LAT.NSITE; 00139 00140 Q[ANV] = X[NV1]/V; 00141 Q[ENE] = (EBASE + X[EB1]/B)/V; 00142 00143 Q[SPE] = (X[EB2]-X[EB1]*X[EB1]-X[NV1])/V; 00144 00145 // edit Suzuki 00146 // 逆温度に対する規格化 00147 #ifdef NORM 00148 Q[LEN] = X[LE1] * B ; 00149 Q[XMX] = ALG.WDIAG * X[LE1] ; 00150 #else 00151 Q[LEN] = X[LE1]; 00152 Q[XMX] = ALG.WDIAG * X[LE1] / B; 00153 #endif 00154 // end edit Suzuki 00155 // 00156 Q[AMZU] = X[MZU1]/V; 00157 00158 // edit Suzuki 00159 // 逆温度に対する規格化 00160 #ifdef NORM 00161 Q[BMZU] = X[MZUA1]/V; 00162 Q[SMZU] = X[MZU2]/V; 00163 Q[XMZU] = X[MZUA2]/V; 00164 00165 Q[AMZS] = X[MZS1]/V; 00166 Q[BMZS] = X[MZSA1]/V; 00167 Q[SMZS] = X[MZS2]/V; 00168 Q[XMZS] = X[MZSA2]/V; 00169 #else 00170 Q[BMZU] = X[MZUA1]/V/B; 00171 Q[SMZU] = X[MZU2]/V; 00172 Q[XMZU] = X[MZUA2]/V/B/B; 00173 00174 Q[AMZS] = X[MZS1]/V; 00175 Q[BMZS] = X[MZSA1]/V/B; 00176 Q[SMZS] = X[MZS2]/V; 00177 Q[XMZS] = X[MZSA2]/V/B/B; 00178 #endif 00179 // end edit Suzuki 00180 00181 // === edit rep sakakura === 00182 if (P.RUNTYPE == 0)for (int i=0; i<NPHY; i++) PHY[i].accumulate(Q[i]); 00183 if (P.RUNTYPE >> 0)for (int i=0; i<NPHY; i++) PHYX[i][index].accumulate(Q[i]); 00184 // === edit rep sakakura === 00185 00186 delete []X; 00187 }