inlib
1.2.0
|
Some common d sqm ////////////////////////////////////////////////////////. More...
Public Member Functions | |
E (unsigned int a_order, unsigned int a_index) | |
virtual | ~E () |
E (const E &a_from) | |
E & | operator= (const E &a_from) |
Static Public Member Functions | |
static bool | group_constants (unsigned int a_order, inlib::array< T > &a_constants) |
static bool | metric (unsigned int a_order, sqm< T > &a_metric) |
static bool | cartan_metric (unsigned int a_order, sqm< T > &a_metric) |
static bool | casimir (unsigned int a_order, sqm< T > &a_casimir) |
Some common d sqm ////////////////////////////////////////////////////////.
static bool inlib::E< T >::cartan_metric | ( | unsigned int | a_order, |
sqm< T > & | a_metric | ||
) | [inline, static] |
Definition at line 610 of file sqm.
{ // For order n : -(2*n-4))*I(n*(n-1)/2) unsigned int number = a_order * (a_order-1)/2; array<T> csts; if(!E<T>::group_constants(a_order,csts)) { a_metric.clear(); return false; } // Fill the adjoint representation : // r r // (Xk) = cst // c kc std::vector< sqm<T> > xs; for(unsigned int index=0;index<number;index++) { sqm<T> x(number); for(unsigned int j=0;j<number;j++) { for(unsigned int k=0;k<number;k++) { std::vector<unsigned int> is(3); is[0] = index; is[1] = k; is[2] = j; T value; if(!csts.value(is,value)) return false; if(!x.set_value(j,k,value)) return false; } } xs.push_back(x); } a_metric.set_order(number); for(unsigned int j=0;j<number;j++) { for(unsigned int k=0;k<number;k++) { sqm<T> mx = xs[j]*xs[k]; if(!a_metric.set_value(j,k,mx.trace())) return false; } } return true; }
static bool inlib::E< T >::casimir | ( | unsigned int | a_order, |
sqm< T > & | a_casimir | ||
) | [inline, static] |
Definition at line 653 of file sqm.
{ // For order n : (n-1)/2 * I(n) unsigned int number = a_order * (a_order-1)/2; sqm<T> metric(number); if(!E<T>::metric(a_order,metric)) { a_casimir.clear(); return false; } sqm<T> metric_inv(number); if(!metric.invert(metric_inv)) return false; a_casimir.set_order(a_order); std::vector< sqm<T> > Es; for(unsigned int index=0;index<number;index++) Es.push_back(E<T>(a_order,index)); for(unsigned int j=0;j<number;j++) { for(unsigned int k=0;k<number;k++) { sqm<T> mx = Es[j]*Es[k]; mx.multiply(metric_inv.value(j,k)); a_casimir.add(mx); } } return true; }
static bool inlib::E< T >::group_constants | ( | unsigned int | a_order, |
inlib::array< T > & | a_constants | ||
) | [inline, static] |
Definition at line 529 of file sqm.
{ unsigned int number = a_order * (a_order-1)/2; std::vector<unsigned int> orders(3,number); a_constants.configure(orders); std::vector< sqm<T> > Es; for(unsigned int index=0;index<number;index++) Es.push_back(E(a_order,index)); sqm<T> zero(a_order); for(unsigned int j=0;j<number;j++) { for(unsigned int k=j+1;k<number;k++) { sqm<T> cm = commutator(Es[j],Es[k]); // Find the result in the Es themselves : bool found = false; for(unsigned int l=0;l<number;l++) { if(cm.equal(zero)) { found = true; break; } else if(cm.equal(Es[l])) { std::vector<unsigned int> is(3); is[0] = j; is[1] = k; is[2] = l; a_constants.set_value(is,1); is[0] = k; is[1] = j; is[2] = l; a_constants.set_value(is,-1); found = true; break; } else { sqm<T> tmp(cm); tmp.multiply(-1.); if(tmp.equal(Es[l])) { std::vector<unsigned int> is(3); is[0] = j; is[1] = k; is[2] = l; a_constants.set_value(is,-1); is[0] = k; is[1] = j; is[2] = l; a_constants.set_value(is,1); found = true; break; } } } if(!found) { a_constants.clear(); return false; } } } return true; }
static bool inlib::E< T >::metric | ( | unsigned int | a_order, |
sqm< T > & | a_metric | ||
) | [inline, static] |
Definition at line 591 of file sqm.
{ // For order n : -2*I(n*(n-1)/2) for all orders. unsigned int number = a_order * (a_order-1)/2; std::vector< sqm<T> > Es; for(unsigned int index=0;index<number;index++) Es.push_back(E<T>(a_order,index)); a_metric.set_order(number); for(unsigned int j=0;j<number;j++) { for(unsigned int k=0;k<number;k++) { sqm<T> mx = Es[j]*Es[k]; if(!a_metric.set_value(j,k,mx.trace())) return false; } } return true; }
Definition at line 689 of file sqm.
{ inlib::sqm<T>::operator=(a_from); return *this; }