X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=check%2Fexam_color.cpp;h=823ee7d8a2d9f700d22b9fdf30143d3078644bd0;hp=3097188bcea8a41cc2b74c44fc26f58b8d3319b3;hb=71118ab007969a09872193641469318c9dc4fbcc;hpb=ea924f534d741945cabe3df7d9981f592c46013f diff --git a/check/exam_color.cpp b/check/exam_color.cpp index 3097188b..823ee7d8 100644 --- a/check/exam_color.cpp +++ b/check/exam_color.cpp @@ -3,7 +3,7 @@ * Here we test GiNaC's color objects (su(3) Lie algebra). */ /* - * GiNaC Copyright (C) 1999-2001 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2009 Johannes Gutenberg University Mainz, Germany * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,10 +17,14 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "exams.h" +#include "ginac.h" +using namespace GiNaC; + +#include +using namespace std; static unsigned check_equal(const ex &e1, const ex &e2) { @@ -44,15 +48,14 @@ static unsigned check_equal_simplify(const ex &e1, const ex &e2) return 0; } -static unsigned color_check1(void) +static unsigned color_check1() { - // checks general identities and contractions + // checks general identities and contractions of the structure constants unsigned result = 0; idx a(symbol("a"), 8), b(symbol("b"), 8), c(symbol("c"), 8), d(symbol("d"), 8); - // structure constants result += check_equal(color_d(a, c, a), 0); result += check_equal_simplify(color_d(a, b, c) * color_d(b, d, c), numeric(5,3) * delta_tensor(a, d)); result += check_equal_simplify(color_d(idx(5, 8), b, c) * color_d(b, idx(5, 8), c), numeric(5,3)); @@ -79,21 +82,82 @@ static unsigned color_check1(void) return result; } -unsigned exam_color(void) +static unsigned color_check2() +{ + // checks general identities and contractions of the generators + + unsigned result = 0; + + idx a(symbol("a"), 8), b(symbol("b"), 8), c(symbol("c"), 8), k(symbol("k"), 8); + ex e; + + e = color_T(k) * color_T(k); + result += check_equal_simplify(e, 4 * color_ONE() / 3); + e = color_T(k) * color_T(a) * color_T(k); + result += check_equal_simplify(e, -color_T(a) / 6); + e = color_T(k) * color_T(a) * color_T(b) * color_T(k); + result += check_equal_simplify(e, delta_tensor(a, b) * color_ONE() / 4 - color_T(a) * color_T(b) / 6); + e = color_T(k) * color_T(a) * color_T(b) * color_T(c) * color_T(k); + result += check_equal_simplify(e, (color_h(a, b, c) * color_ONE() / 8).expand() - color_T(a) * color_T(b) * color_T(c) / 6); + e = color_T(a) * color_T(b) * color_T(a) * color_T(b); + result += check_equal_simplify(e, -2 * color_ONE() / 9); + e = color_T(a) * color_T(b) * color_T(b) * color_T(a); + result += check_equal_simplify(e, 16 * color_ONE() / 9); + e = color_T(a) * color_T(b) * color_T(c) * color_T(c) * color_T(b) * color_T(a); + result += check_equal_simplify(e, 64 * color_ONE() / 27); + e = color_T(a) * color_T(b) * color_T(c) * color_T(k) * color_T(a) * color_T(k) * color_T(c) * color_T(b); + result += check_equal_simplify(e, -color_ONE() / 162); + + return result; +} + +static unsigned color_check3() +{ + // checks traces + + unsigned result = 0; + + idx a(symbol("a"), 8), b(symbol("b"), 8), c(symbol("c"), 8); + ex e; + + e = color_ONE(); + result += check_equal(color_trace(e), 3); + e = color_T(a); + result += check_equal(color_trace(e), 0); + e = color_T(a) * color_T(b); + result += check_equal(color_trace(e), delta_tensor(a, b) / 2); + e = color_T(a) * color_T(b) * color_T(c); + result += check_equal(color_trace(e), color_h(a, b, c) / 4); + + e = color_ONE(0) * color_ONE(1) / 9; + result += check_equal(color_trace(e, 0), color_ONE(1) / 3); + result += check_equal(color_trace(e, 1), color_ONE(0) / 3); + result += check_equal(color_trace(e, 2), e); + result += check_equal(color_trace(e, lst(0, 1)), 1); + + e = color_T(a, 0) * color_T(a, 1) * color_T(b, 0) * color_T(b, 1); + result += check_equal_simplify(color_trace(e, 0), 2 * color_ONE(1) / 3); + result += check_equal_simplify(color_trace(e, 1), 2 * color_ONE(0) / 3); + result += check_equal_simplify(color_trace(e, 2), e); + result += check_equal_simplify(color_trace(e, lst(0, 1)), 2); + + return result; +} + +unsigned exam_color() { unsigned result = 0; cout << "examining color objects" << flush; - clog << "----------color objects:" << endl; result += color_check1(); cout << '.' << flush; - - if (!result) { - cout << " passed " << endl; - clog << "(no output)" << endl; - } else { - cout << " failed " << endl; - } + result += color_check2(); cout << '.' << flush; + result += color_check3(); cout << '.' << flush; return result; } + +int main(int argc, char** argv) +{ + return exam_color(); +}