123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- module cantens; % header module tested for REDUCE 3.6 and 3.7.
- create!-package('(cantens ctintro auxitens gentens spaces
- partitns checkind opertens contrtns),
- '(contrib cantens));
- % This package requires ASSIST and DUMMY.
- %
- % ************************************************************************
- %
- % Authors: H. Caprasse <hubert.caprasse@ulg.ac.be>
- % : F. Fontaine <pascal.fontaine@ulg.ac.be>
- %
- % Version and Date: Version 1.11, 15 January 1999.
- %
- %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- % ***** This package is delivered for free. %
- % ***** No modification on it may be made without %
- % ***** due permission of H. Caprasse. %
- %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- %
- % Revision history to versions 1.0 and 1.1:
- % 15/12/98 : Flag 'LOOSE' removed on DEPENDS in order to
- % : allow its redefinition in CSL.
- % : SIMPTENSOR, NUM_EPSI_NON_EUCLID, MATCH_KVALUE and
- % : SIMPMETRIC modified.
- % : MAKE_PARTIC_TENS no longer protected by the 'reserved'
- % : flag.
- % : Modifications to SYMTREE_ZEROP and DV_SKEL2FACTOR1
- % : to allow proper compilation under CSL.
- %% ******************************************************************
- %
- % an extension of the REDUCE command 'depend':
- % patch to extend depend to tensors...
- remflag('(depends),'loose); % because of csl
- symbolic procedure depends(u,v);
- if null u or numberp u or numberp v then nil
- else if u=v then u
- else if atom u and u memq frlis!* then t
- %to allow the most general pattern matching to occur;
- else if (lambda x; x and ldepends(cdr x,v)) assoc(u,depl!*)
- then t
- else if not atom u and idp car u and get(car u,'dname) then
- (if depends!-fn then apply2(depends!-fn,u,v) else nil)
- where (depends!-fn = get(car u,'domain!-depends!-fn))
- else if not atom u
- and (ldepends(cdr u,v) or depends(car u,v)) then t
- else if atom v or idp car v and get(car v,'dname) then nil
- % else dependsl(u,cdr v);
- else if flagp(u,'tensor) and pairp v and u=car v then t
- else nil;
- % an "importation" from EXCALC:
- symbolic procedure permp!:(u,v);
- % True if v is an even permutation of u NIl otherwise.
- if null u then t else if car u = car v then permp!:(cdr u,cdr v)
- else not permp!:(cdr u,subst(car v,car u,cdr v));
- % global and fluid variables defined.
- lisp remflag(list 'minus,'intfn);
- global '(dimex!* sgn!* signat!* spaces!* numindxl!* pair_id_num!*) ;
- lisp (pair_id_num!*:= '((!0 . 0) (!1 . 1) (!2 . 2) (!3 . 3) (!4 . 4)
- (!5 . 5) (!6 . 6) (!7 . 7) (!8 . 8) (!9 . 9)
- (!10 . 10) (!11 . 11) (!12 . 12) (!13 . 13)));
- fluid('(dummy_id!* g_dvnames epsilon!*));
- % g_dvnames is a vector.
- switch onespace;
- !*onespace:=t; % working inside a unique space is the default.
- % Various smacros
- smacro procedure id_cov u;
- % to get the covariant identifier
- % u is the output of get_n_index
- cadr u;
- smacro procedure id_cont u;
- % to get the contravariant identifier
- % u is the output of get_n_index
- u;
- smacro procedure careq_tilde u;
- eqcar(u,'!~);
- smacro procedure careq_minus u;
- eqcar(u,'minus);
- smacro procedure lowerind u;
- list('minus,u);
- smacro procedure raiseind u;
- cadr u;
- smacro procedure id_switch_variance u;
- if eqcar(u,'minus) then cadr u
- else list ('minus, u);
- smacro procedure get!-impfun!-args u;
- % Get dependencies of id u.
- cdr assoc(u,depl!*);
- endmodule;
- end;
|