PowerLawMultiplicityCreator(size_t n1, size_t n2) : T_(double(n2) * 0.3), lambda_(FindLambda(n2, n1)), C_((lambda_ - 1) / (1 - pow(double(T_), 1 - lambda_))), mult_(1 / (1 - lambda_)) { // srand (time(NULL)); // cout << lambda_ << " " << C_ << endl; // cout << (lambda_ + 1) / lambda_ * (1 - pow(T_, -lambda_)) << endl; double sum0 = 0; double sum1 = 0; double div = 0; for(double i = T_; i > .5; i -= 1) { sum0 += p(i); sum1 += (s(i) - s(i - 1)) * i; div += (s(i) - s(i - 1)) * i * i; } // cout << sum0 << " " << sum1 << " " << sqrt(div - sum1 * sum1) << endl; }
void Field::EraseLambda(IntPair lambda) { int index = FindLambda(lambda); if (index != -1) lambdas.erase(lambdas.begin() + index); }
int main(int argc, char* argv[]) { /*if (argc!=2) exit(0); double T = atof(argv[1]); printf(" T=%.3f\n",T);*/ system("rm lambda.T*"); GRID grid("params"); int N= grid.get_N(); Result result1(&grid); Result result2(&grid); Result result3(&grid); for (double T=0.30; T>0.05; T-=0.01) { for (double U=1.5; U<4.0; U+=0.1) { char FN[300]; sprintf( FN, "CHM.U%.3f.T%.3f", U, T); char FN2[300]; sprintf( FN2, "%s.FAILED", FN); if ((not FileExists(FN))and(not FileExists(FN2))) continue; char ldFN[300]; sprintf(ldFN,"lambdas_and_diffs.U%.3f.T%.3f",U,T); FILE* ldFile = fopen(ldFN,"w"); double lambdas[100]; int counter=0; for(int it=1; it<100; it++) { char FN[300]; sprintf( FN, "CHM.U%.3f.T%.3f.it%d", U, T, it); if(not result1.ReadFromFile(FN)) break; sprintf( FN, "CHM.U%.3f.T%.3f.it%d", U, T, it+1); if(not result2.ReadFromFile(FN)) break; sprintf( FN, "CHM.U%.3f.T%.3f.it%d", U, T, it+2); if(not result3.ReadFromFile(FN)) break; double sum = 0; for(int i=0; i<N; i++) sum += sqr( real(result2.G[i]-result1.G[i])) + sqr( imag(result2.G[i]-result1.G[i])); double diff = sqrt(sum)/(2.0*N); double simple_diff = abs( imag(result2.G[N/2]-result1.G[N/2]) ); double lambda = CalcLambda(N, result1.G, result2.G, result3.G); fprintf(ldFile,"%d %.15le %.15le %.15le\n",it,diff,lambda, simple_diff); lambdas[it-1]=lambda; counter++; complex<double>* dG = new complex<double>[N]; for(int i=0; i<N; i++) dG[i] = ((result2.G[i]-result1.G[i])/diff)/(2.0*((double) N)); sprintf( FN, "dG.U%.3f.T%.3f.it%d", U, T, it+1); PrintFunc(FN,N,dG,result1.omega); } fclose(ldFile); char lFN[300]; sprintf(lFN,"lambda.T%.3f",T); FILE* lFile = fopen(lFN,"a"); fprintf(lFile,"%.15le %.15le\n",U,FindLambda(counter,lambdas) ); fclose(lFile); } } return 0; }