Kristjan Kannike

Solving Renormalization Group Equations in Effective Field Theories

A heavy particle has only indirect influence on dynamics at energies below its mass m. Several such mass thresholds mi can exist, with a different effective field theory (EFT) in each interval. At a threshold, parameters of the theories below and above it are matched. Between thresholds, the dependence of parameters such as couplings, masses, or mixing angles is described by renormalization group equations (RGEs). (For reference, see e.g.Effective Field Theory” by Antonio Pich, or Ira Z. Rothstein’s “TASI Lectures on Effective Field Theories”.)

In the program, one can easily choose which RGEs to include in your system of equations (useful for debugging). One can choose which thresholds to include, which piece-wise defined functions to put together for plotting, etc. Possible degeneracy of mass thresholds is taken into account.

Vector, matrix, or tensor functions, and term-by-term multiplication of them in RGEs can be used. (As such, Mathematica 7 allows scalar or matrix multiplication in differential equations, but not term-by-term multiplication like {1,2,3} y[x], where y[x] is a vector function, and the result is another vector function.)

In addition, you do not have to write out identity matrices in matrix RGEs — they are added automatically.

It is hard to read code others have written: thus, each function is provided with tests and you can easily check whether it works as intended.

How the Program Works

The program uses indexed variables to piece together initial conditions (var["name"]), RGEs (beta["name"]), and matching conditions (match["name"]) for functions with "name". Thresholds are entered as thr["name"].

The run function is used to run up or down the energy scale.

In the run procedure, at first the thresholds are sorted and names of degenerate thresholds grouped together with their values.

Values of interval end points are calculated (in each interval from mi to mi +1, the t variable runs from log(mi /mi +1) to 0 when running up, and vice versa when running down).

If printOut=True, initial conditions for the functions, and intermediate and matched results & parameters at each threshold are printed on the screen.

In a cycle over threshold names, the correct RGEs are selected according to currentThresholds, the list of the names of all thresholds below current energy. (That is, either the list of the names of all thresholds passed (running up) or the list of the names of all thresholds not yet passed (running down).) Also, currentThresholds is used in the matching functions to select a right match at each threshold.

Vector, matrix, or tensor functions with right dimensions are constructed automatically according to the dimensions of their initial conditions.

At each threshold, every var["name"] is given a new value. (One can use several runups and rundowns one after another for iteration, as they use initial conditions in the same form var["name"].)

The solutions defined piece-wise in different intervals are put together for functions named in makeFunctionsOf. These functions will be accessible in the form function["name"][t].

Usage, Input Parameters & Initial Conditions

In Mac OS X, move the package file to your Mathematica add-ons directory by mv RGErunEFT.m ~/Library/Mathematica/Applications/

In Linux, move the package file to your Mathematica add-ons directory by mv RGErunEFT.m ~/.Mathematica/Applications/

In Windows, move the package file to your Mathematica add-ons directory by mv RGErunEFT.m %UserProfile%\Application Data\Mathematica\Applications

The package is read in as Needs["RGErunEFT`"];

  1. Threshold values thr["name"] as thr["m1"]=10; thr["m2"]=20; thr["m3"]=30;
  2. Initial conditions for functions var["name"] as var["y1"]=0.7; var["y2"]={1,2/3};
  3. The right sides of RGEs (the so-called beta functions) as beta["name"][t_, currentThresholds_] = Hold[equation]; e.g. beta["y1"][t_, currentThresholds_] = Hold[y1 + y2.y2]; Enter function names without arguments (y2, not y2[t]).

    By default, Plus is Listable: when adding a plain scalar to a vector or matrix, Mathematica adds the scalar to all members of the latter.

    If a square matrix RGE contains “scalar-looking” terms, there is no need to multiply them explicitly by the identity matrix. Identity matrix insertion was tested on the RGEs of the triplet Higgs MSSM. (See the discussion of the patterns used.) — Use Which to choose between variants of the same RGE, with MemberQ[currentThresholds, "thresholdName"] to check whether the threshold with "thresholdName", above which a RGE variant is valid, is in currentThresholds.
  4. Matching conditions & auxiliary parameters (e.g. to use in matching) as match["name"][currentThresholds_, upOrDown_] := Hold[condition]; and param["name"][currentThresholds_, upOrDown_] := Hold[definition];for example match["y1"][currentThresholds_, upOrDown_]:= Hold[Which[upOrDown == "UP" && MemberQ[currentThresholds, "m2"],
    y1+y2M[[1]],
    upOrDown == "DOWN" && MemberQ[currentThresholds, "m2"],
    y1-y2M[[1]],
    True,
    y1]];
    returning the matched value; and e.g. param["U"][currentThresholds_, upOrDown_]:= Hold[Eigenvectors[m]]];Again, use Which with MemberQ[currentThresholds, "thresholdName"]. Enter function names without arguments (y2, not y2[t]). Use an M in the end of the variable name (as in y2M above) to denote an already matched value. — The argument upOrDown can be "UP" or "DOWN", allowing one to reverse match the parameters. — It is not needed to define matching conditions for all functions.
  5. The names of the thresholds to use as thresholdsIn={"m1", "m3"}; Their order is not relevant: threshold values are sorted and the names of degenerate thresholds grouped together automatically.
  6. The names of the functions to use as functionNames={"y1","y2"}; These equations are taken into the system of RGEs, matched at the thresholds, and their initial conditions and intermediate results printed out. They may be extracted from initial conditions as functionNames=indices[var] or from beta function definitions as functionNames=firstIndices[beta];
  7. Names of functions to plot etc. as makeFunctionsOf={"y2"}; These functions will be accessible in the form function["name"][t] where t is the decimal logarithm of the renormalization scale, with the solutions defined piece-wise in different intervals put together.
  8. Run up or down: use run[thresholdsIn, functionNames, "UP"]; for starting at low energy and going up, or change the last argument to "DOWN" (with the rest of the arguments the same) for starting at high energy and going down. It gives each var["name"] a new value at each threshold, and uses them as initial conditions in the next interval. Run has the options
    Option Default value Meaning
    printOut True whether to show run results
    maxSteps 1000000 MaxSteps for NDSolve
    workPrecision MachinePrecision WorkingPrecision for NDSolve

Created: 13.09.2004

Changed: 29.06.2010