rolf_walter

5 Reputation

One Badge

6 years, 356 days

MaplePrimes Activity


These are questions asked by rolf_walter

The procedure "ContractIndices" seems to produce wrong results. This is proved by the following source code, comparing the result of this procedure and a simple direct calculation:

with(DifferentialGeometry):with(Tensor):with(Tools):

DGsetup([x,y],P);
m:=nops(DGinfo("FrameBaseVectors"));
g:=evalDG(1/y^2*dx &t dx+1/y^2*dy &t dy);
CS:=Christoffel(g,"SecondKind");
R0:=CurvatureTensor(CS);
RFc:=ContractIndices(R0,g,[[1,1]]); # Maple Version 2015

# Out of the Help Page: ?Tensor[ContractIndices]
# Form the tensor product T ⊗ S and contract 
# the 1st index of T against the 1st index of S. 
# ContractIndices(T, S, [[1, 1]]);

# Only for comparison: g:= 
# _DG([["tensor", P, [["cov_bas", "cov_bas"], []]], [[
# [1, 1], 1/y^2], 
# [[2, 2], 1/y^2]]]);

# g in table form with all indices, including the zeros: 
g1t:=
table([(1, 1) = 1/y^2, (2, 1) = 0, (1, 2) = 0, (2, 2) = 1/y^2]);

# Only fpr comparison:
# R0:=
# _DG([["tensor", P, [["con_bas", "cov_bas", "cov_bas", "cov_bas"], 
# []]], 
# [
# [[1, 2, 1, 2], -1/y^2], 
# [[1, 2, 2, 1], 1/y^2], 
# [[2, 1, 1, 2], 1/y^2], 
# [[2, 1, 2, 1], -1/y^2]]
# ]);

# R0 in table form with all indices, including the zeros:
R01t:=
table([
(2, 1, 1, 2) = 1/y^2, 
(2, 1, 1, 1) = 0, 
(2, 2, 2, 1) = 0, 
(2, 1, 2, 1) = -1/y^2, 
(1, 1, 1, 2) = 0, 
(1, 2, 2, 2) = 0, 
(1, 2, 2, 1) = 1/y^2, 
(2, 1, 2, 2) = 0, 
(2, 2, 1, 2) = 0, 
(2, 2, 2, 2) = 0, 
(1, 1, 2, 1) = 0, 
(1, 2, 1, 2) = -1/y^2, 
(2, 2, 1, 1) = 0, 
(1, 1, 2, 2) = 0, 
(1, 1, 1, 1) = 0, 
(1, 2, 1, 1) = 0
]);

# Only fpr comparison:
# RFc := 
# _DG([["tensor", P, [["cov_bas", "cov_bas", "cov_bas", "cov_bas"], 
# []]], 
# [
# [[1, 1, 2, 2], 1/y^4], 
# [[1, 2, 1, 2], -1/y^4], 
# [[2, 1, 2, 1], -1/y^4], 
# [[2, 2, 1, 1], 1/y^4]]
# ]);

# RFc in table form with all indices, including the zeros:
RFc1t:=
table(
[(2, 1, 1, 2) = 0, 
(2, 1, 1, 1) = 0, 
(2, 2, 2, 1) = 0, 
(2, 1, 2, 1) = -1/y^4, 
(1, 1, 1, 2) = 0, 
(1, 2, 2, 2) = 0, 
(1, 2, 2, 1) = 0, 
(2, 1, 2, 2) = 0, 
(2, 2, 1, 2) = 0, 
(2, 2, 2, 2) = 0, 
(1, 1, 2, 1) = 0, 
(1, 2, 1, 2) = -1/y^4, 
(2, 2, 1, 1) = 1/y^4, 
(1, 1, 2, 2) = 1/y^4, 
(1, 1, 1, 1) = 0, 
(1, 2, 1, 1) = 0
]);

TestContr:=proc()
    description "Simple contraction";
    local i,j,k,l;
    global RR;
    for i from 1 to m do
        for j from 1 to m do
            for k from 1 to m do
                for l from 1 to m do
                    RR[i,j,k,l]:=add(R01t[r,j,k,l]*g1t[i,r],r=1..m)
                od;
            od;
        od;
    od;
    print(`OK`)
end;

TestContr();

# Result of this:
# RR:=
# table(
# [(2, 1, 1, 2) = 1/y^4, 
# (2, 1, 1, 1) = 0, 
# (2, 2, 2, 1) = 0, 
# (2, 1, 2, 1) = -1/y^4, 
# (1, 1, 1, 2) = 0, 
# (1, 2, 2, 2) = 0, 
# (1, 2, 2, 1) = 1/y^4, 
# (2, 1, 2, 2) = 0, 
# (2, 2, 1, 2) = 0, 
# (2, 2, 2, 2) = 0, 
# (1, 1, 2, 1) = 0, 
# (1, 2, 1, 2) = -1/y^4, 
# (2, 2, 1, 1) = 0, 
# (1, 1, 2, 2) = 0, 
# (1, 1, 1, 1) = 0, 
# (1, 2, 1, 1) = 0
# ]);

Testeq:=proc()
    local i,j,k,l;
    # global
    for i from 1 to m do
        for j from 1 to m do
            for k from 1 to m do
                for l from 1 to m do
    if not (RFc1t[i,j,k,l] = RR[i,j,k,l]) then 
     print([i,j,k,l]) fi;
                od;
            od;
        od;
    od;
end;

Testeq();
# Result of this:
#                          [1, 1, 2, 2]
#                          [1, 2, 2, 1]
#                          [2, 1, 1, 2]
#                          [2, 2, 1, 1]

# No equality for these indices!

Page 1 of 1