double initQCD(double MZalphaS, double McMc, double MbMb, double MtP) { double Mq,Mq_; lambda[5]= findLambda(5,MZalphaS, 91.187); MtPole=MtP; if(MtP< poleQmass(91.187,MZalphaS, 6)) return -1; for(Mq=MtP,Mq_=0;fabs(Mq_-Mq)>0.00001*Mq;) { double alpha=alpha3(Mq, lambda[5], 5); Mq_=Mq; Mq*=MtP/poleQmass(Mq, alpha, 6); } qMass[6]= Mq; lambda[6]= findLambda(6,alpha3(qMass[6],lambda[5], 5),qMass[6]); notInitialized=0; qMass[5]=0; qMass[4]=0; if(MbMb<=lambda[5]) { qMin=lambda[5]; return qMin;} qMass[5]=MbMb; MbPole=poleQmass(MbMb, alpha3(MbMb,lambda[5] ,5),5); lambda[4]= findLambda(4,alpha3(qMass[5],lambda[5],5),qMass[5]); if(McMc<=lambda[4]) {qMin=lambda[4]; return qMin;} qMass[4]=McMc; lambda[3]=findLambda(3,alpha3(qMass[4],lambda[4],4),qMass[4]); qMin=lambda[3]; return qMin; nfMax=6; }
static double findLambda(int nf,double alpha, double M) { double l1=0.1, l2=0.3; double l,a,a1,a2; l2=M*exp(-2*M_PI/alpha/(11-2*nf/3.)); while((a2=alpha3(M,l2,nf)-alpha) < 0) l2*=1.2; l1=l2*0.8; while((a1=alpha3(M,l1,nf)-alpha) > 0) l1*=0.8; do{ l=(l1*a2-l2*a1)/(a2-a1); a=alpha3(M,l,nf)-alpha; if(a<0) { a1=a;l1=l;} else {a2=a;l2=l;} } while (fabs(a) > 0.00001*alpha); return l; }
double alphaQCD(double Q) { if(notInitialized) initQCD(0.1172,1.2,4.23,171.4); if(Q<qMin) return 1; return alpha3(Q,lambda[NF(Q)],NF(Q)); }
double alphaQCD(double Q) { if(notInitialized) initQCD(0.1184,1.2,4.23,173.07); if(Q<qLim) Q=qLim; if(Q<qMin) return 1; return alpha3(Q,lambda[NF(Q)],NF(Q)); }