Menu

#192 Example 13 of EXCALC manual

open
nobody
None
5
2026-03-14
2026-03-13
No

I have downloaded and installed the last version of REDUCE rev 7327 (7-Mar-2026).
I'm using EXCALC, Example 13 under 20.21.11 Metric Structures of the EXCALC manual:
http://www.reduce-algebra.com/manual/manualse147.html#x170-82600020.21

load_package excalc$

% Cylindrical coframe;
coframe b r=d r,b ph=r*d ph,e z=d z;

frame x;
displayframe;
DETM!*;

on nero;

x(-k) _| b(l);

% The commutator of the dual frame;
x(-k) |_ x(-l);

showtime;
end;

1) I think there is an error in the "coframe" command:
coframe b r=d r,b ph=r*d ph,e z=d z;
The third part comes with an e, not b, like the others.
Is this correct?

2) If I issue the command "displayframe" after the command "frame",
what I get is the coframe, exactly as in the command coframe not
the frame. This command should be called "displaycoframe".

3) When I issue the command
%The commutator of the dual frame;
x(-k) |_ x(-l);
Nothing is printed; there is no results for this command.

4) How do I display the frame?

Thank you!

Daniel Volinski

Discussion

  • Eberhard Schruefer

    Hi Daniel,

    Thank you very much for your report. Those are very welcome. Indeed there is a typo in the documentation. I agree that there should be the possibility to display a 'frame' definition if present. I will add a statement for that. And finally, the result for the commutator is a bug that sneaked in over time. Hopefully, I find some time during next week to correct this.

    Eberhard

     
  • Eberhard Schruefer

    Hi Daniel,
    Maybe you can help with testing? The two following procedures should fix the problem with the commutator and would add printing of the frame when present. Please read them in right after you loaded excalc.

     symbolic procedure frame u;
      begin scalar y;
        putform(list(car u,nil),-1);
        flag(list car u,'covariant);
        basisvectorl!* :=
            for each j in indxl!* collect !*a2k list(car u,lowerind j);
        if null dbaseform2base2form then return;
        commutator!-of!-framevectors :=
          for each j in pickupwedges dbaseform2base2form conc
            {list(cadadr j,cadadr cdr j) . mk!*sqpf mkcommutatorfv(j,
                                                    dbaseform2base2form),
             list(cadadr cdr j,cadadr j) . mk!*sqpf negpf mkcommutatorfv(j,
                                                     dbaseform2base2form)};
        y := pair(basisvectorl!*,
                  naturalvector2framevector);
        naturalvector2framevector := for each j in coord!* collect
                                         j . mk!*sqpf mknat2framv(j,y)
      end;
    
    
    symbolic procedure displayframe;
      begin scalar x,y,scoord;
        terpri!* t;
        prin2t "*** COFRAME in use:";
        terpri!* t;
        scoord := coord!*;
        coord!* := nil;
        for each j in basisforml!* do
          <<x := assoc(j,keepl!*);
            maprin car x;
            prin2!* " = ";
            maprin reval cdr x;
            terpri!* t>>;
       coord!* := scoord;
       if basisvectorl!* then
       <<terpri!* t;
         prin2t "*** Corresponding FRAME in use:";
         terpri!* t;
       for each j in basisvectorl!* do
         <<maprin j;
           prin2!* " = ";
           maprin ('plus .
           for each k in coord!* conc
             if (y := reval {'innerprod, j, {'d, k}}) neq 0
                then if y = 1 then {{'partdf, k}}
                      else  {{'times, y, {'partdf, k}}}
              else nil);
           terpri!* t>>>>;
        if !*nat then terpri!* t;
      end;
    

    Please let me know if that works for you.
    Thanks.

    Eberhard

     
  • Daniel Volinski

    Daniel Volinski - 2026-03-14

    Hi Eberhard,

    Yes, it works fine.
    I put both procedures after loading EXCALC.
    I run Example 13, and I get both the frame and the coframe
    when issuing the command "displayframe".
    Moreover, the commutator of the dual frame displays
    results correctly as the documentation of this example.
    Thank you.

    Daniel Volinski

     

Log in to post a comment.

MongoDB Logo MongoDB