void ffbDDLinefuncInit(void) { init(); init_flat(); init_alpha(); init_alpha_flat(); }
int main(){ //N points on which function is known int N=62; //function values are fs, points of support are s std::vector<double> fs, s; //initialize function f init(s,fs, N); for(int i=0;i<N;++i){ std::cout<<s[i]<<" "<<fs[i]<<std::endl; } std::cout<<std::endl; for(int q=0;q<1000;++q){ //evaluation point x double x=-0.5+(q/100.); //double x=3.15; //compute distance to point x std::vector<double> alpha_sx(N); if(init_alpha(N, alpha_sx, s, fs, x)) continue; std::vector<double> phi_mu(N); pade_scheme(phi_mu, s, fs, alpha_sx, x, 30,31); } std::cout<<std::endl; }
void pade_interpolator::pade_interpolate(const imaginary_domain_data &data, real_domain_data &real){ int N_real=real.N_real(); int N_imag=data.N_imag(); //extract Matsubara frequencies, Matsubara data, and real frequencies pade_complex_vector_type real_frequencies(N_real); pade_complex_vector_type matsubara_frequencies(N_imag); pade_complex_vector_type matsubara_values(N_imag); for(int i=0;i<N_real;++i){ real_frequencies[i]=pade_complex_type(real.freq()[i], 0); } for(int i=0;i<N_imag;++i){ matsubara_frequencies[i]=pade_complex_type(0.,data.freq()[i]); matsubara_values [i]=pade_complex_type(data.val()[i].real(), data.val()[i].imag()); } pade_complex_vector_type alpha_sx(N_imag); pade_complex_vector_type phi_mu_nu(N_imag); double norm=data.norm(); ////DEBUG int N=21; pade_complex_vector_type input_x(N), input_y(N); for(int i=0;i<N;++i){ input_x[i]=0.1*i; input_y[i]=pade_complex_type(sin(0.1*i)); } pade_complex_vector_type pmn(N); pade_mu_=20; pade_nu_=0; for(pade_complex_type x=pade_complex_type(-2.); x.real()<pade_complex_type(-1.999).real(); x=x+pade_complex_type(0.2)){ //pade_complex_type x=3.001; pade_complex_vector_type asx(N); for(int i=0;i<N;++i) asx[i]=x-input_x[i]; //for(int i=0;i<N;++i){ std::cout<<input_x[i]<<" "<<input_y[i]<<" "<<asx[i]<<std::endl;} pade_complex_type z=pade_scheme(pmn, input_x, input_y, asx, x); std::cout<<x.real()<<" "<<z.real()<<" "<<z.imag()<<std::endl; } exit(0); ////DEBUG //interpolate 'alpha', the distance from each point to x #pragma omp parallel for default(none) shared(real,std::cerr) firstprivate(N_imag,N_real,real_frequencies,alpha_sx,matsubara_frequencies,matsubara_values,phi_mu_nu, norm) for(int i=0;i<N_real;++i){ pade_complex_type x=real_frequencies[i]; std::pair<bool, int> v=init_alpha(N_imag, alpha_sx,matsubara_frequencies, x); if(v.first){ //tried to evaluate on a point where we know the function real.val()[i]=to_simple_precision(matsubara_values[v.second]); continue; } //run neville scheme #pragma omp critical std::cerr<<"computing pade for i: "<<i<<std::endl; real.val()[i]=to_simple_precision(pade_scheme(phi_mu_nu, matsubara_frequencies, matsubara_values, alpha_sx, x))*norm; } }
int r_alphaQCD(FILE *mode) { int n; int err; n=fscanf(mode, "alphaPDF=%d alpha(MZ)=%lf NF=%d Order=%d MbMb=%lf Mtp=%lf", &alphaPDF, &alphaMZ,&alphaNF,&alphaOrder,&MbMb,&Mtp); if(n!=6) return 1; init_alpha(); return 0; }
VngoSystem() { VgSystem = this; set_gamma(1.f); init_alpha(); cur_vport = NULL; DIBTx = NULL; DDTx = NULL; D3DTx = NULL; OGLTx = NULL; }
void i_alphaQCD(void) { init_alpha();}
int qcdmen_(void) { void * pscr=NULL; int mode; int returnCode=0; initStrFun(0); L10:{ char strmen[]="\030" " parton dist. alpha OFF " " alpha(MZ)= ZZZZ " " nf = NF " " order= NNLO " " mb(mb)= MbMb " " Mtop(pole)= Mtp " " Alpha(Q) plot " " Qren = RRR " " Qpdf1= FF1 " " Qpdf2= FF2 " " Qshow= FFS "; if(alphaPDF) { int k=0; //printf("alphaPDF=%d sf_alpha[0]=%p sf_alpha[1]=%p\n", alphaPDF,sf_alpha[0],sf_alpha[1]); switch(alphaPDF) { case 1: if(sf_alpha[0]) k=1; else if(sf_alpha[1]) k=2; break; case 2: if(sf_alpha[1]) k=2; else if(sf_alpha[0]) k=1; break; } if(k) improveStr(strmen,"OFF","pdf%d",k); } improveStr(strmen,"ZZZZ","%.4f", alphaMZ); improveStr(strmen,"NF","%d",alphaNF); if(alphaOrder==1) improveStr(strmen,"NNLO","%-.4s","LO"); else if(alphaOrder==2) improveStr(strmen,"NNLO","%-.4s","NLO"); else alphaOrder=3; improveStr(strmen,"MbMb","%.3f", MbMb); improveStr(strmen,"Mtp","%.2f", Mtp); improveStr(strmen,"RRR","%-.16s", Rscale_str); improveStr(strmen,"FF1","%-.16s", F1scale_str); improveStr(strmen,"FF2","%-.16s", F2scale_str); improveStr(strmen,"FFS","%-.16s", Sscale_str); menu1(54,8,"QCD alpha",strmen,"n_alpha",&pscr,&mode); } switch (mode) { case 0: if(returnCode) init_alpha(); return returnCode; case 1: { char alphaMen[100]="\006" " OFF " " pdf1 " " pdf2 "; int k=0; menu1(54,12,"alpha",alphaMen,"",NULL,&k); if(k)alphaPDF=k-1; if(alphaPDF && !sf_alpha[alphaPDF-1]) messanykey(20,20,"WARNING! This pdf does not define alphaQCD "); } break; case 2: { double alphaMZ_old=alphaMZ; if(correctDouble(3,15,"Enter new value ",&alphaMZ,1)) returnCode=1; if(alphaMZ>0 && alphaMZ<0.3) returnCode=1; else { alphaMZ=alphaMZ_old; messanykey(5,15,"Your input is out of alphaMZ range"); } } break; case 3: { int NF_old=alphaNF; if(correctInt(3,15,"Enter new value ",&alphaNF,1)) { if(alphaNF<=6 && alphaNF>=3) returnCode=1; else { messanykey(5,15,"NF out of range"); alphaNF=NF_old;} } } break; case 4: { char lomen[]="\010" " LO " " NLO " " NNLO "; void *pscrlo=NULL; int k=0; menu1(52,12,"",lomen,"",&pscrlo,&k); if(k) { alphaOrder=k; returnCode=1; put_text(&pscrlo);} } break; case 5: correctDouble(3,15,"Enter new value ",&MbMb,1); break; case 6: correctDouble(3,15,"Enter new value ",&Mtp,1); break; case 7: { void * screen; int i; static double qMin=1, qMax=1000; static int nPoints=100; if(returnCode) init_alpha(); get_text(1,1,maxCol(),maxRow(),&screen); if(correctDouble(40 ,15 ,"Q_min=",&qMin,0)&& qMin>=0.5 && correctDouble(40 ,16 ,"Q_max=",&qMax,0)&& qMax>qMin && correctInt(33,17,"number of points=" ,&nPoints,0) && nPoints>3&& nPoints<=150) { double *f[3]={NULL,NULL,NULL}; double *ff[3]={NULL,NULL,NULL}; char buff[3][100]; char* Y[3]={buff[0],buff[1],buff[2]}; switch(alphaOrder) { case 1: sprintf(Y[0],"MSbar LO"); break; case 2: sprintf(Y[0],"MSbar NLO"); break; case 3: sprintf(Y[0],"MSbar NNLO"); break; default:sprintf(Y[0],"MSbar"); } int N,k; f[0]=(double*) malloc(nPoints*sizeof(double)); int xLog= (qMin>0 && qMax/qMin >10)? 1 : 0; for(i=0;i<nPoints;i++) { double z=(i+0.5)/(double)(nPoints),q; if(xLog) q=pow(qMin,1-z)*pow(qMax,z); else q=qMin*(1-z)+qMax*z; f[0][i]=alpha_0(q); // printf("i=%d %E\n",i,f[0][i]); } N=1; for(k=0;k<2;k++) if(sf_alpha[k]) { char buff[300]; strFunName(k+1,Y[N]); char *p=strstr(Y[N],"(proton"); if(p) p[0]=0; else { p=strstr(Y[N],"(anti-proton"); if(p) p[0]=0; } f[N]=(double*) malloc(nPoints*sizeof(double)); for(i=0;i<nPoints;i++) { double z=(i+0.5)/(double)(nPoints),q; if(xLog) q=pow(qMin,1-z)*pow(qMax,z); else q=qMin*(1-z)+qMax*z; f[N][i]=(*sf_alpha[k])(q); } N++; } // printf("N=%d Y[0]=%s\n Y[1]=%s\n Y[2]=%s\n", N,Y[0],Y[1],Y[2]); // plot_Nar(NULL, "Alpha(Q)", log10(qMin), log10(qMax),"log10(Q/GeV)", nPoints, N, f,ff,Y); plot_Nar(NULL, "Alpha(Q)", qMin,qMax,"Q/GeV", nPoints, xLog, N, f,ff,Y); for(k=0;k<N;k++) free(f[k]); } else messanykey(40,18, " Correct input is \n" " 0.5<= Q_min <Q_max\n" " number of points <=150 and >=4"); put_text(&screen); } break; case 8: { int npos=1,rc; do { char mess[200]; goto_xy(2,12); print("Renorm. scale: "); if(str_redact(Rscale_str,npos,60)==KB_ENTER) returnCode=1; goto_xy(2,12); clr_eol(); rc=initScales(Rscale_str,F1scale_str,F2scale_str,Sscale_str, mess); if(rc) messanykey(10,10,mess); } while(rc); } break; case 9: { int npos=1,rc; do { char mess[200]; goto_xy(2,12); print("Fct1.scale: "); if(str_redact(F1scale_str,npos,60)==KB_ENTER) returnCode=1; goto_xy(2,12); clr_eol(); rc=initScales(Rscale_str,F1scale_str,F2scale_str,Sscale_str, mess); if(rc) messanykey(10,10,mess); } while(rc); } break; case 10: { int npos=1,rc; do { char mess[200]; goto_xy(2,12); print("Fct1.scale: "); if(str_redact(F2scale_str,npos,60)==KB_ENTER) returnCode=1; goto_xy(2,12); clr_eol(); rc=initScales(Rscale_str,F1scale_str,F2scale_str,Sscale_str, mess); if(rc) messanykey(10,10,mess); } while(rc); } break; case 11: { int npos=1,rc; do { char mess[200]; goto_xy(2,12); print("Shworing scale: "); if(str_redact(Sscale_str,npos,60)==KB_ENTER) returnCode=1; goto_xy(2,12); clr_eol(); rc=initScales(Rscale_str,F1scale_str,F2scale_str,Sscale_str,mess); if(rc) messanykey(10,10,mess); } while(rc); } break; } goto L10; }