From: Christian Bauer Date: Thu, 18 Jul 2002 21:56:54 +0000 (+0000) Subject: synced to 1.0 X-Git-Tag: release_1-1-0~85 X-Git-Url: https://ginac.de/ginac.git/tutorial/ginac.git?a=commitdiff_plain;h=b461f90b4496e22495b334688b460fd0e21207de;p=ginac.git synced to 1.0 --- diff --git a/check/exam_clifford.cpp b/check/exam_clifford.cpp index 73aa132b..71f49dba 100644 --- a/check/exam_clifford.cpp +++ b/check/exam_clifford.cpp @@ -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()); diff --git a/ginac/tensor.cpp b/ginac/tensor.cpp index d6ab5a1f..a1daf625 100644 --- a/ginac/tensor.cpp +++ b/ginac/tensor.cpp @@ -214,6 +214,13 @@ ex tensmetric::eval_indexed(const basic & i) const const varidx & i1 = ex_to(i.op(1)); const varidx & i2 = ex_to(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(i1) || !is_a(i2)) throw(std::invalid_argument("indices of metric tensor must be of type varidx")); - ex dim = ex_to(i1).get_dim(); - if (!dim.is_equal(ex_to(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(i1) || !is_a(i2)) throw(std::invalid_argument("indices of metric tensor must be of type varidx")); - ex dim = ex_to(i1).get_dim(); - if (!dim.is_equal(ex_to(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); }