itensor and ctensor: indexed objects in moving frames in specific coordinate systems and frame basis
- Subject: itensor and ctensor: indexed objects in moving frames in specific coordinate systems and frame basis
- From: Yaroslav Alekseev
- Date: Thu, 10 Feb 2011 02:52:08 +0300
Viktor T. Toth <vttoth at vttoth.com> ?????(?) ? ????? ?????? Tue, 08 Feb
2011 22:39:04 +0300:
> I think the only step missing is an evaluation of ifb before converting
> to a
> ctensor expression. Try this:
>
> load(itensor);
> load(ctensor);
> iframe_flag:true;
> cframe_flag:true;
> ct_coordsys(polar)$
> depends([V,ifg,ifr,ifri],ct_coords)$
> ishow(covdiff(V([],[j]),j))$
> ishow(ev(%,icc2,ifc2,ifc1,ifb))$
> eqn:eq=%$
> ceqn:ic_convert(eqn)$
> ev(ceqn);
>
> A word of warning: Presently, ic_convert has no explicit knowledge about
> the
> meaning of the symbols ifg, ifr, and ifri. It just treats them as it
> would
> treat any other indexed objects. In the present example, it is not
> relevant
> as the symbols cancel; in other cases, however, you may need to take
> steps
> to identify the itensor symbols ifr, ifri, and ifg with the corresponding
> ctensor matrices fri, ifri, and lfg/ufg as appropriate.
>
>
> Viktor
Ok, thank you for response.
I have to define symbols ifr, ifri, and ifg. So, I've tried this:
load(itensor);
load(ctensor);
iframe_flag:true;
cframe_flag:true;
ct_coordsys(polar)$
depends(V,ct_coords)$
ishow(covdiff(V([],[j]),j))$
ishow(ev(%,icc2,ifc2,ifc1,ifb))$
eqn:eq=%$
ceqn:ic_convert(eqn)$
ifg:matrix([1,0],[0,1]);
fri:matrix([1,0],[0,1/r]);
ifri:matrix([1,0],[0,r]);
ev(ceqn);
But I've got very strange answer:
(%i14) ev(ceqn);
d d
(%o14) ---- (V ) + -- (V )
dphi 2 dr 1
It seems to me that the answer should be something like this (ordinary
divergence):
dV2
----
dphi dV1 V1
(%o21) ---- + --- + --
r dr r
>
>
>
> -----Original Message-----
> From: maxima-bounces at math.utexas.edu
> [mailto:maxima-bounces at math.utexas.edu]
> On Behalf Of Yaroslav Alekseev
> Sent: Tuesday, February 08, 2011 2:38 PM
> To: maxima at math.utexas.edu
> Subject: itensor and ctensor: indexed objects in moving frames
> in
> specific coordinate systems and frame basis
>
>
> Hi to all! I need to learn how to compute various expressions with
> indexed
> objects in moving frames
> in specific coordinate systems and frame basis. For example: to compute
> contract(covdiff(V([],[j]),j))
> in polar coordinate and frame
> basis:matrix([a(r,phi),b(r,phi)],[c(r,phi),d(r,phi)]). In Maxima:
>
> Maxima 5.23.2 http://maxima.sourceforge.net
> using Lisp SBCL 1.0.43
> Distributed under the GNU Public License. See the file COPYING.
> Dedicated to the memory of William Schelter.
> The function bug_report() provides bug reporting information.
> (%i1) kill(all);
> (%o0) done
> (%i1) load(itensor);
> STYLE-WARNING: redefining MAXIMA::$NAME in DEFUN
> STYLE-WARNING: redefining MAXIMA::DERIV in DEFUN
> STYLE-WARNING: redefining MAXIMA::SDIFF in DEFUN
> STYLE-WARNING: redefining MAXIMA::I-$DEPENDENCIES in DEFUN
> STYLE-WARNING: redefining MAXIMA::$DECSYM in DEFUN
> STYLE-WARNING: redefining MAXIMA::$CANFORM in DEFUN
> (%o1) /usr/local/share/maxima/5.23.2/share/tensor/itensor.lisp
> (%i2) load(ctensor);
> (%o2) /usr/local/share/maxima/5.23.2/share/tensor/ctensor.mac
> (%i3) iframe_flag:true;
> (%o3) true
> (%i4) ishow(covdiff(V([],[j]),j));
> j j %1
> (%t4) V + icc2 V
> ,j %1 j
> (%o4) V([], [j], j) + icc2([%1, j], [j]) V([], [%1])
> (%i5) ishow(ev(%,icc2));
> %1 j j
> (%t5) V ifc2 + V
> %1 j ,j
> (%o5) V([], [%1]) ifc2([%1, j], [j]) + V([], [j], j)
> (%i6) ishow(ev(%,ifc2,ifc1));
> %1 j %2
> V ifg (ifb - ifb + ifb )
> j %2 %1 %2 %1 j %1 j %2 j
> (%t6) -------------------------------------------------- + V
> 2 ,j
> (%o6) (V([], [%1]) ifg([], [j, %2]) (ifb([j, %2, %1]) - ifb([%2, %1, j])
> + ifb([%1, j, %2])))/2 + V([],
> [j], j)
> (%i7) expr:contract(ratexpand(%));
> V([], [%1]) ifg([], [j, %2]) ifb([j, %2, %1], [])
> (%o7) -------------------------------------------------
> 2
> V([], [%1]) ifg([], [j, %2]) ifb([%2, %1, j], [])
> - -------------------------------------------------
> 2
> V([], [%1]) ifg([], [j, %2]) ifb([%1, j, %2], [])
> + ------------------------------------------------- + V([], [j], j)
> 2
> (%i8) ishow(expr);
> %1 j %2 %1 j %2 %1 j %2
> V ifg ifb V ifg ifb V ifg ifb
> j %2 %1 %2 %1 j
> %1
> j %2
> (%t8) ---------------------- - ---------------------- +
> ----------------------
> 2 2 2
> j
> +
>
> V
> ,j
> V([], [%1]) ifg([], [j, %2]) ifb([j, %2, %1], [])
> (%o8) -------------------------------------------------
> 2
> V([], [%1]) ifg([], [j, %2]) ifb([%2, %1, j], [])
> - -------------------------------------------------
> 2
> V([], [%1]) ifg([], [j, %2]) ifb([%1, j, %2], [])
> + ------------------------------------------------- + V([], [j], j)
> 2
> (%i9) eqn:ishow(eq=expr);
> %1 j %2 %1 j %2
> V ifg ifb V ifg ifb
> j %2 %1 %2 %1 j
> (%t9) eq = ---------------------- - ----------------------
> 2 2
> %1 j %2
> V ifg ifb
> %1 j
> %2 j
> +
> ----------------------
> + V
> 2
>
> ,j
> V([], [%1]) ifg([], [j, %2]) ifb([j, %2, %1], [])
> (%o9) eq = -------------------------------------------------
> 2
> V([], [%1]) ifg([], [j, %2]) ifb([%2, %1, j], [])
> - -------------------------------------------------
> 2
> V([], [%1]) ifg([], [j, %2]) ifb([%1, j, %2], [])
> + ------------------------------------------------- + V([], [j], j)
> 2
> (%i10) ceqn:ic_convert(eqn);
> STYLE-WARNING: redefining MAXIMA::$IC_CONVERT in DEFUN
> STYLE-WARNING: redefining MAXIMA::$MAKEBOX in DEFUN
> STYLE-WARNING: redefining MAXIMA::$CONMETDERIV in DEFUN
> STYLE-WARNING: redefining MAXIMA::$IGEODESIC_COORDS in DEFUN
> (%o10) eq :
> sum(sum(sum(V ifg ifb , %1, 1, dim), %2, 1, dim), j, 1,
> dim)
> %1 j, %2 j, %2, %1
> ---------------------------------------------------------------------------
> 2
> sum(sum(sum(V ifg ifb , %1, 1, dim), %2, 1, dim), j,
> 1,
> dim)
> %1 j, %2 %2, %1, j
> -
> ---------------------------------------------------------------------------
> 2
> sum(sum(sum(V ifg ifb , %1, 1, dim), %2, 1, dim), j,
> 1,
> dim)
> %1 j, %2 %1, j, %2
> +
> ---------------------------------------------------------------------------
> 2
> + sum(diff(V , ct_coords ), j, 1, dim)
> j j
> (%i11) ct_coordsys(polar);
> (%o11) done
> (%i12) depends(V,ct_coords);
> (%o12) [V(r, phi)]
> (%i13) ev(ceqn);
> d d
> (%o13) ---- (V ) + -- (V ) + (V ifg ifb + V ifg ifb
> dphi 2 dr 1 2 2, 2 2, 2, 2 1 2, 2 2,
> 2, 1
> + V ifg ifb + V ifg ifb + ifg ifb V
> 2 2, 1 2, 1, 2 1 2, 1 2, 1, 1 1, 2 1, 2, 2 2
> + ifg ifb V + V ifg ifb + V ifg ifb
> )/2
> 1, 1 1, 1, 2 2 1 1, 2 1, 2, 1 1 1, 1 1, 1, 1
> + (V ifg ifb + V ifg ifb + V ifb ifg
> 2 2, 2 2, 2, 2 2 2, 1 2, 2, 1 1 1, 2, 2 2,
> 2
> + ifg V ifb + ifg V ifb + V ifb ifg
> 1, 2 2 2, 1, 2 1, 1 2 2, 1, 1 1 1, 2, 1 2, 1
> + V ifb ifg + V ifg ifb )/2
> 1 1, 1, 2 1, 2 1 1, 1 1, 1, 1
> - (V ifg ifb + ifg V ifb + V ifb ifg
> 2 2, 2 2, 2, 2 1, 2 2 2, 2, 1 1 2, 1, 2 2,
> 2
> + V ifg ifb + ifb V ifg + V ifb ifg
> 1 1, 2 2, 1, 1 1, 2, 2 2 2, 1 1 1, 1, 2 2, 1
> + ifg ifb V + V ifg ifb )/2
> 1, 1 1, 2, 1 2 1 1, 1 1, 1, 1
> (%i14)
>
> What should I do next ?
>
--
Yaroslav