> Hi Rob,
> Just below your examples. Not everything is in simplified form.
Thanks for taking the time to review these and to address my questions.
I am having a lot of trouble understanding when to use a covarient index,
and when to use a contravarient index. All my books on tensors talk about
the differences having to do with transformation of bases, and whether the
coordinate systems in question are oblique or not. This hardly seems
relavent to what I am doing, where everything lies in a fixed, cartesian
coordinate system.
For example, I don't understand why
("u dot v")$
correct : u([i],[])*v([],[i])$
incorrect : u([],[i])*v([],[i])$
This is of course complicated when it comes to derivatives, and to the lch
function.
> Sorry I did not find your original message (it's probably in my home box).
> (C1) load("use.mc");
> (D1) use.mc
> (C2) bothcases:false;
> (D2) FALSE
> (C3) load("itensor");
> (D3) /usr/local/share/maxima/5.9.0.1cvs/share/tensor/itensor.lisp
> (C4) dummyx:U;
> (D4) U
> (C5) DIM:3;
> (D5) 3
> (C6) allsym:false;
> (D6) FALSE
> (C7) declare(lch,constant);
> (D7) DONE
> (C8) DECSYM(lch,0,3,[],[CYC(ALL),ANTI(ALL)]);
> (D8) DONE
> (C9) DECSYM(lch,3,0,[CYC(ALL),ANTI(ALL)],[]);
> (D9) DONE
> (C10) ("curl u cross v")$
> (C11) expr : lch([],[i,j,k])*diff(lch([k,l,m],[])*u([],[l])*v([],[m]),j);
> (D11) LCH([], [I, J, K]) (U([], [L]) V([], [M], J) LCH([K, L, M], [])
>
> + U([], [L], J) V([], [M]) LCH([K, L, M], []))
> (C12) show(canform(contract(canform(trftkdt(expand(expr))))))$
> I U1 I U1 I U1 I U1
> (D12) U V - V U + U V - V U
> ,U1 ,U1 ,U1 ,U1
> (C13) ("let use the Euqlid metric then covdiff == diff")$
> (C14) ("div(u cross v) ")$
> (C15) show(diff(lch([k,l,m],[])*u([],[l])*v([],[m]),k))$
> L M L M
> (D15) U V LCH + U V LCH
> ,K K/L/M ,K K/L/M
> (C16) ("grad(u dot v)")$
> (C17) show(diff(u([i],[])*v([],[i]),j))$
> I I
> (D17) V U + V U
> I,J ,J I
> (C18) ("grad(u dot v)")$
> (C19) show(diff(u([],[i])*v([],[i]),j))$
> I I I I
> (D19) U V + V U
> ,J ,J
Are these two ways of expressing ("grad(u dot v)") equivalent?
> (C20) ("Tensor dyad vv")$
> (C21) show( v([],[i])*v([],[j]))$
> I J
> (D21) V V
> (C22) ("u dot vv")$
> (C23) show(u([i],[])*v([],[i])*v([],[j]))$
> I J
> (D23) V V U
> I
> (C24) ("curl (u dot vv)")$
> (C25) expr1:
canform(diff(lch([l,k,j],[])*u([i],[])*v([],[i])*v([],[j]),k))$
> (C26) show( expr1)$
> U2 U3 U2 U3
> (D26) V V LCH U + V V LCH U
> L/U1/U2 U3,U1 ,U1 L/U1/U2 U3
>
> U2 U3
> + V V LCH U
> ,U1 L/U1/U2 U3
("curl (u dot vv)")$
expr1: canform(diff(lch([],[l,k,j])*u([i],[])*v([],[i])*v([j],[]),k))$
show( expr1)$
> (C27) ("u cross div(vv)")$
> (C28) expr2:
> canform(expand(lch([l,k,j],[])*u([],[k])*diff(v([],[i])*v([],[j]),i)))$
> (C29) show(expr2)$
> U1 U2 U3 U1 U2 U3
> (D29) U V V LCH + U V V LCH
> ,U3 L/U1/U2 ,U3 L/U1/U2
> (C30) ("curl (u dot vv) - u cross div(vv)" )$
> (C31) show(canform(expr1-expr2))$
> U2 U3 U2 U3
> (D31) V V LCH U + V V LCH U
> L/U1/U2 U3,U1 ,U1 L/U1/U2 U3
>
> U2 U3 U1 U2 U3 U1 U2 U3
> + V V LCH U - U V V LCH - U V V LCH
> ,U1 L/U1/U2 U3 ,U3 L/U1/U2 ,U3
> L/U1/U2
> (C32)
> the key function here is TRFTKDT() that is defined in use.mac.
> It transforms the product of the defined Levi-Chevitta symbols to
> kdelta. Note, my definition of Levi-Chevitta symbol has not got a
> property like lch([i,j,k],[])*v([],[j])*v([],[k])==0.
> Also to ipmpose the Lorentz gauge (divergency free field) use
> lorentz(expr). I cannot propose the similar for condition curl v =0.
> Actually curl exist only for 3d. It make sence to formulate the problem
> in covariant form and then attack it with itensor.
How does lorentz(expr) work? The curl free field condition can also be
viewed as requiring that 'cross' partial derivatives are equal u_i,j==u_j,i
. A function which sorts these indicies into alphabetical order could allow
Maxima to perform appropriate simplifications.
Rob