Historical Introduction
My philosophy for doing large calculations
Calculations - To Do List
Coincidence limits of sigma up to 12 derivatives.
Coincidence limits of I(x,x'), the bi-tensor of parallel transport, and
Coincidence limits for the HaMiDew coefficients and their derivatives for all interesting operators.
Use above results in deriving point splitting expansions for all two-point objects - including Green functions and stress tensors.
To do these calculations, we must define minimal sets of Riemann tensor products, derivatives, and coupling objects.
Repeat the above calculations adding in torsion and/or other background fields - Yang-Mills, for example.
How big can the calculations get?
The program computes all possible legal terms that can appear in the pth-derivative coincidence limit and then computes which ones actually appear and then the coefficient of that term. Here are a few typical runs:
The output gives a list of Riemann tensors and derivatives suitable for loading back into MathTensor. It also lists the number of terms checked and the ones with non-zero coefficients.
The next table shows in the numbers for higher derivative runs on my SPARC 10:
Order Indices Gen. Terms Non-Zero Minimal Time Size (bytes)
2 4 24 2 2 0:00 141
3 5 120 6 5 0:00 288
4 6 12,240 92 49 1:30 4,406
5 7 206,640 790 364 19:80 43,666
6 8 14,595,840 16,572 3,023 31:11 1,141,977
7 9 477,912,960 261,198 ??? 17:18:39 16,800,403
8 10 32,793,465,600 ??? ??? ??? ???
9 11 1,505,781,446,400 ??? ??? ??? ???
10 12 86,189,631,897,600 ??? ??? ??? ???
Order = number of derivatives of the metric in each term.
Indices = number of free indices on the terms.
Gen. Terms = number of terms generated by the SIGTREE routine.
Non-Zero = number of terms with non-zero coefficients.
Minimal = actual number of independent terms after Riemann symmetries.
Time = run time on SPARC 10 in hours:minutes:seconds
Size = size of result file in bytes.
??? = currently unknown or unavailable.
We can see that beyond order 6 we begin to deal with an extraordinary number of terms. Even at that order, reducing 16,522 terms down to a minimal set will be non-trivial initially.
The order 8 case creates some difficulties since the integers go beyond
machine precision. This is being looked into.
Step by step calculation of sigma coincidence limits
Start up
timestart = SessionTime[];
<<MathTensor.m
Due to the huge number of loops and substitutions in these calculations, the default value of the recursion limit has to be changed.
$RecursionLimit = 512000;
I enter the expression which defines sigma when set equal to zero. I also enter the first three well known coincidence limits of covariant derivatives of sigma.
DefineSigma :=
Canonicalize[sigma - (1/2) CD[sigma,ua] CD[sigma,la]]
RuleUnique[sigmaonerule,CD[sigma,la_],0]
RuleUnique[sigmatworule,CD[sigma,la_,lb_],Metricg[la,lb]]
RuleUnique[sigmathreerule,CD[sigma,la_,lb_,lc_],0]
Four Derivative Case
DefineSigma
CD[%,la,lb,lc,ld]
Expand[%]
ApplyRules[%,{sigmaonerule,sigmatworule,sigmathreerule}]The OrderCD function looks at the derivatives, sees that they are not in lexical order, and then commutes derivatives until they are. This generates more lower derivative terms that are eliminated by applying the sigmaonerule and sigmatworule:
OrderCD[%]
ApplyRules[%,{sigmaonerule,sigmatworule}]
Finally, I solve for the coincidence limit of four derivatives of sigma and then define sigmafourrule using the RuleUnique function. This is saved to
a file later and can be used immediately.
Solve[%==0,CD[sigma,la,lb,lc,ld]]
RuleUnique[sigmafourrule,CD[sigma,la_,lb_,lc_,ld_], %[[1]][[1]][[2]]]
Five Derivative Case
DefineSigma
Expand[CD[%,la,lb,lc,ld,le]]
ApplyRules[%,{sigmaonerule,sigmatworule,sigmathreerule}]
OrderCD[%]
ApplyRules[%,{sigmaonerule,sigmatworule,sigmathreerule}]
Solve[%==0,CD[sigma,la,lb,lc,ld,le]]
RuleUnique[sigmafiverule,CD[sigma,la_,lb_,lc_,ld_,le_], %[[1]][[1]][[2]]]
Six Derivative CaseDefineSigma
Expand[CD[%,la,lb,lc,ld,le,lf]]
Expand[%]
ApplyRules[%,
{sigmaonerule,sigmatworule,sigmathreerule,sigmafourrule}]
OrderCD[%]
ApplyRules[%,
{sigmaonerule,sigmatworule,sigmathreerule,sigmafourrule}]
Solve[%==0,CD[sigma,la,lb,lc,ld,le,lf]]
RuleUnique[sigmasixrule,CD[sigma,la_,lb_,lc_,ld_,le_,lf_], %[[1]][[1]][[2]]]
Seven Derivative CaseDefineSigma
Expand[CD[%,la,lb,lc,ld,le,lf,lg]]
ApplyRules[%,
{sigmaonerule,sigmatworule,sigmathreerule,sigmafourrule,
sigmafiverule}]
OrderCD[%]
ApplyRules[%,
{sigmaonerule,sigmatworule,sigmathreerule,sigmafourrule,
sigmafiverule}]
Solve[%==0,CD[sigma,la,lb,lc,ld,le,lf,lg]]
RuleUnique[sigmasevenrule,CD[sigma,la_,lb_,lc_,ld_,le_,lf_,lg_], %[[1]][[1]][[2]]]
Saving the Results
Definition[$RecursionLimit] >> sigmarules.m
Definition[DefineSigma] >>> sigmarules.m
Definition[sigmaonerule] >>> sigmarules.m
Definition[sigmatworule] >>> sigmarules.m
Definition[sigmathreerule] >>> sigmarules.m
Definition[sigmafourrule] >>> sigmarules.m
Definition[sigmafiverule] >>> sigmarules.m
Definition[sigmasixrule] >>> sigmarules.m
Definition[sigmasevenrule] >>> sigmarules.m
timefinal = Expand[(SessionTime[] - timestart)/60]
Eight Derivative Case
DefineSigma
Expand[CD[%,la,lb,lc,ld,le,lf,lg,lh]]
ApplyRules[%,{sigmaonerule,sigmatworule,sigmathreerule}]
It is necessary to canonicalize this expression to reduce the number of
terms - here from 189 to 98.
Canonicalize[%]
Length[%%]
Length[%%]
It is also correct to split out the pure covariant derivative terms so that OrderCD will not look at them. There are seven pure derivative terms that appear at the end of the equation.
eightderivterms = Take[%%%,-7]
mixedderivterms = Drop[%%%%,-7]
mixedderivtermsfinal =
ApplyRules[%,{sigmaonerule,sigmatworule,sigmathreerule,
sigmafourrule,sigmafiverule,sigmasixrule}]
Clear[mixedderivterms]
OrderCD[eightderivterms]
eightderivtermsfinal =
ApplyRules[%,{sigmaonerule,sigmatworule,sigmathreerule,
sigmafourrule,sigmafiverule,sigmasixrule}]
Clear[eightderivterms]
Clear["sigma*"]
Expand[-(mixedderivtermsfinal + eightderivtermsfinal)/7]
% >> sigma8.m
Index Sums
CD[sigma,la,ua,lc,uc,le,ue]
ApplyRules[%,sigmasixrule]
Canonicalize[%]
Some built in rules about Riemann tensor help to simplify the results. Ultimately, a very large list of rules will need to be produced so that the smallest possible results occur. Note that one possible invariant R^2
does not occur.
ApplyRules[%,RiemannRules]
A final important note - It would be possible to compute this result from DefineSigma as was done with the non-sum cases. This proves to be
more time consuming for all cases than doing the sums on the non-summed
result stored in sigmarules.m.
Bi-vector Example
AddIndexTypes
DefineTensor[bi,"I",{{1,2},1}]The define equation is defineI == 0 from:
defineI = Canonicalize[CD[bi[li,auj],uc] CD[sigma,lc]]
RuleUnique[bizerorule,bi[li1_,auj],Metricg[li1,uj],!SameQ[li1,li]]
CD[defineI,la]
ApplyRules[%,{sigmaonerule,sigmatworule}]
RuleUnique[bionerule,CD[bi[li_,auj],la_],0]
CD[defineI,la,lb]
ApplyRules[%,{sigmaonerule,sigmatworule,sigmathreerule}]
OrderCD[%]
% /. bizerorule
Solve[%==0,CD[bi[li,auj],la,lb]]
RuleUnique[bitworule,CD[bi[li_,auj],la_,lb_],%[[1]][[1]][[2]]]
CD[defineI,la,lb,lc]
ApplyRules[%,{sigmaonerule,sigmatworule,sigmathreerule,sigmafourrule}]
ApplyRules[%,bionerule]
OrderCD[%]
ApplyRules[%,{bizerorule,bionerule}]
Solve[%==0,CD[bi[li,auj],la,lb,lc]]
RuleUnique[bithreerule,CD[bi[li_,auj],la_,lb_,lc_], %[[1]][[1]][[2]]]
Potential solutions to problem size
Faster Microprocessors
Multiprocessors or multiple computers in parallel
Faster Algorithms
Diagramatic representations of results
Minimize the size of all intermedicate expressions
Define what problems actually need to be solved
Find a general pattern from lower order results