TSIL_COMPLEX TSIL_BprimeAtZero (TSIL_REAL x, TSIL_REAL y, TSIL_REAL qq) { TSIL_REAL xoy, onemxoy, onemxoy2, onemxoy3, onemxoy4, temp; if (x < y) {temp = y; y = x; x = temp;} xoy = x/y; onemxoy = 1.0L - xoy; if (TSIL_FABS(onemxoy) > 0.005) return (x*x - 2.L*TSIL_A(x,qq)*y - y*y + 2.L*x*TSIL_A(y,qq))/(2.L*TSIL_POW(x - y,3)); else { onemxoy2 = onemxoy * onemxoy; onemxoy3 = onemxoy2 * onemxoy; onemxoy4 = onemxoy3 * onemxoy; return (1.0L - onemxoy/2.0L - onemxoy2/5.0L - onemxoy3/10.0L - 2.0L*onemxoy4/35.0L - onemxoy2*onemxoy3/28.0L - onemxoy3*onemxoy3/42.0L - onemxoy4*onemxoy3/60.0L - 2.0L*onemxoy4*onemxoy4/165.0L - onemxoy3*onemxoy3*onemxoy3/110.0L - onemxoy3*onemxoy3*onemxoy4/143.0L - onemxoy3*onemxoy4*onemxoy4/182.0L - 2.0L*onemxoy4*onemxoy4*onemxoy4/455.0L)/(6.0L * x); } }
TSIL_COMPLEX TSIL_BAtZero (TSIL_REAL x, TSIL_REAL y, TSIL_REAL qq) { if (TSIL_FABS(x - y) > TSIL_TOL) return (TSIL_A(y,qq) - TSIL_A(x,qq))/(x - y); else return -TSIL_A(x,qq)/x - 1.0L; }
TSIL_COMPLEX TSIL_Bp (TSIL_REAL X, TSIL_REAL Y, TSIL_COMPLEX S, TSIL_REAL QQ) { if (X < TSIL_TOL) { TSIL_Warn("Bp", "B(x',y) is undefined for x=0."); return TSIL_Infinity; } if (TSIL_CABS(1.0L - S/(X+Y+2.0L*TSIL_SQRT(X*Y))) < TSIL_TOL) { TSIL_Warn("Bp", "B(x',y) is undefined at s = (sqrt(x) + sqrt(y))^2."); return TSIL_Infinity; } if (TSIL_CABS(S) < TSIL_TOL) { if (TSIL_FABS(1.0L - X/Y) < TSIL_TOL) return (-0.5L/X); else return 1.0L/(Y-X) + Y*TSIL_LOG(X/Y)/((Y-X)*(Y-X)); } if (TSIL_CABS(1.0L - (X + Y - 2.0L*TSIL_SQRT(X*Y))/S) < TSIL_TOL) return (1.0L - TSIL_SQRT(Y/X) +0.5L*TSIL_LOG(Y/X))/(X + Y - 2.0L*TSIL_SQRT(X*Y)); else return ((X-Y-S)*TSIL_B(X,Y,S,QQ) + (X+Y-S)*TSIL_LOG(X/QQ) -2.0L*TSIL_A(Y,QQ) + 2.0L*(S-X))/TSIL_Delta(S,X,Y); }
int main (int argc, char *argv[]) { TSIL_DATA result; /* Top-level TSIL data object */ TSIL_REAL qq; /* Ensures correct basic type; see also TSIL_COMPLEX */ TSIL_REAL x, g, lambda; TSIL_COMPLEX pi1, pi1prime, pi2, s1, s2; TSIL_REAL factor = 1.0L/(16.0L*PI*PI); /* If incorrect number of args, print message on stderr and exit: */ if (argc != 5) TSIL_Error("main", "Expected 4 arguments: m^2, g, lambda, and Q^2", 1); /* Note cast to appropriate floating-point type for safety */ x = (TSIL_REAL) strtold(argv[1], (char **) NULL); g = (TSIL_REAL) strtold(argv[2], (char **) NULL); lambda = (TSIL_REAL) strtold(argv[3], (char **) NULL); qq = (TSIL_REAL) strtold(argv[4], (char **) NULL); /* All loop integrals have a common squared-mass argument x: */ TSIL_SetParameters (&result, x, x, x, x, x, qq); /* For the pole mass calculation, evaluate two-loop integrals at s = x: */ TSIL_Evaluate (&result, x); /* Assemble one- and two-loop mass squared results: */ pi1 = 0.5L*lambda*TSIL_A(x,qq) - 0.5L*g*g*TSIL_B(x,x,x,qq); pi1prime = -0.5L*g*g*TSIL_dBds(x, x, x, qq); pi2 = - 0.5L*g*g*g*g*TSIL_GetFunction(&result, "M") - 0.5L*g*g*g*g*TSIL_GetFunction(&result, "Vzxyv") + g*g*g*TSIL_GetFunction(&result, "Uzxyv") - (1.0L/6.0L)*lambda*lambda*TSIL_GetFunction(&result, "Svyz") + 0.25L*lambda*g*g*TSIL_POW(TSIL_GetFunction(&result, "Bxz"), 2) + 0.25L*lambda*lambda*TSIL_A(x,qq)*(TSIL_A(x,qq)/x + 1.0L) - 0.5L*lambda*g*g*TSIL_A(x,qq)*TSIL_Bp(x, x, x, qq) - 0.25L*lambda*g*g*TSIL_I2p(x,x,x,qq); s1 = x + factor*pi1; s2 = x + factor*pi1 + factor*factor*(pi2 + pi1*pi1prime); printf("Tree-level squared mass: %lf\n", (double) x); printf("One-loop pole squared mass: %lf\n", (double) s1); printf("Two-loop pole squared mass: %lf\n", (double) s2); return 0; }