# [GiNaC-list] Problem with scalar_products : Scalar product of two vectors in index notation

Sheplyakov Alexei varg at theor.jinr.ru
Thu Nov 9 08:16:44 CET 2006

```Hello,

On Thu, Nov 09, 2006 at 07:38:08AM +0530, aravind b wrote:
> Please go through this code :
>
>
> #include <iostream>
> #include <ginac/ginac.h>
> using namespace std;
> using namespace GiNaC;
>
> int main()
> {
>    symbol i_sym("i"), j_sym("j"), e("e"), a("a"), b("b") ;
>    idx i(i_sym, 3), j( j_sym, 3) ;          //defining indices i and j
>
>    scalar_products sp;
>    sp.add( indexed(e, i), indexed(e, j), delta_tensor(i,j) );       // e.i*
> e.j = delta_tensor.i.j
>
>    cout << (indexed(e,i)*indexed(e,j)).simplify_indexed(sp) <<endl ;
>
>    return 0;
> }
>
> does NOT give delta.j.i instead just gives e.i * e.j - why?

Quoting the manual:
"* as a special case of dummy index summation, it can replace scalar
products   of two tensors with a user-defined value"

Since e.i * e.j is not a scalar (it is a tensor of second rank), your
code won't work.

> Basically, i want to define an orthonormal basis vector set {e.i}.

I think using `idx' object to enumerate the basis is a bad idea.
In general, GiNaC `indexed', `idx' classes are well-suited for 'basis-less'
calculations (see http://www.ginac.de/FAQ.html#matrix_indexed to find
out why). They don't prevent anyone from doing calculation in scpecific
basis, but don't help either.

> If i have vector_a = indexed(a, i) * indexed(e, i) and
> vector_b = indexed(b, j) * indexed(e, j) ,

Indexed objects in GiNaC are treated as tensors, so such a vector_a
is _not_ really a vector, but instead a scalar.

Best regards,
Alexei

--
All science is either physics or stamp collecting.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: Digital signature
Url : http://www.cebix.net/pipermail/ginac-list/attachments/20061109/654eb505/attachment.pgp
```