]> www.ginac.de Git - ginac.git/commitdiff
synced to 1.0
authorChristian Bauer <Christian.Bauer@uni-mainz.de>
Thu, 18 Jul 2002 21:56:54 +0000 (21:56 +0000)
committerChristian Bauer <Christian.Bauer@uni-mainz.de>
Thu, 18 Jul 2002 21:56:54 +0000 (21:56 +0000)
check/exam_clifford.cpp
ginac/tensor.cpp

index 73aa132b5d50981e709981fd4d26899bfe66c052..71f49dba88f9526cd360c377a5609ee437086e8a 100644 (file)
@@ -160,15 +160,15 @@ static unsigned clifford_check3(void)
 
        // one-loop vacuum polarization in QED
        e = dirac_gamma(mu) *
-           (dirac_slash(l, dim) + dirac_slash(q, dim) + m * dirac_ONE()) *
+           (dirac_slash(l, dim) + dirac_slash(q, 4) + m * dirac_ONE()) *
            dirac_gamma(mu.toggle_variance()) *
            (dirac_slash(l, dim) + m * dirac_ONE());
        e = dirac_trace(e).simplify_indexed(sp);
        result += check_equal(e, 4*((2-dim)*l*l + (2-dim)*ldotq + dim*m*m).expand());
 
-       e = dirac_slash(q, dim) *
-           (dirac_slash(l, dim) + dirac_slash(q, dim) + m * dirac_ONE()) *
-           dirac_slash(q, dim) *
+       e = dirac_slash(q, 4) *
+           (dirac_slash(l, dim) + dirac_slash(q, 4) + m * dirac_ONE()) *
+           dirac_slash(q, 4) *
            (dirac_slash(l, dim) + m * dirac_ONE());
        e = dirac_trace(e).simplify_indexed(sp);
        result += check_equal(e, 4*(2*ldotq*ldotq + q*q*ldotq - q*q*l*l + q*q*m*m).expand());
index d6ab5a1f658b0c1819f38f8f5b798e0565f3498d..a1daf6255143b53603469b7d51e4faa8d2cce19f 100644 (file)
@@ -214,6 +214,13 @@ ex tensmetric::eval_indexed(const basic & i) const
        const varidx & i1 = ex_to<varidx>(i.op(1));
        const varidx & i2 = ex_to<varidx>(i.op(2));
 
+       // The dimension of the indices must be equal, otherwise we use the minimal
+       // dimension
+       if (!i1.get_dim().is_equal(i2.get_dim())) {
+               ex min_dim = i1.minimal_dim(i2);
+               return i.subs(lst(i1 == i1.replace_dim(min_dim), i2 == i2.replace_dim(min_dim)));
+       }
+
        // A metric tensor with one covariant and one contravariant index gets
        // replaced by a delta tensor
        if (i1.is_covariant() != i2.is_covariant())
@@ -519,9 +526,6 @@ ex metric_tensor(const ex & i1, const ex & i2)
 {
        if (!is_a<varidx>(i1) || !is_a<varidx>(i2))
                throw(std::invalid_argument("indices of metric tensor must be of type varidx"));
-       ex dim = ex_to<idx>(i1).get_dim();
-       if (!dim.is_equal(ex_to<idx>(i2).get_dim()))
-               throw(std::invalid_argument("all indices of metric tensor must have the same dimension"));
 
        return indexed(tensmetric(), sy_symm(), i1, i2);
 }
@@ -530,9 +534,6 @@ ex lorentz_g(const ex & i1, const ex & i2, bool pos_sig)
 {
        if (!is_a<varidx>(i1) || !is_a<varidx>(i2))
                throw(std::invalid_argument("indices of metric tensor must be of type varidx"));
-       ex dim = ex_to<idx>(i1).get_dim();
-       if (!dim.is_equal(ex_to<idx>(i2).get_dim()))
-               throw(std::invalid_argument("all indices of metric tensor must have the same dimension"));
 
        return indexed(minkmetric(pos_sig), sy_symm(), i1, i2);
 }