123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- module eds;
- %
- % EDS V2.2
- %
- %
- % Author: David Hartley
- % Physics and Mathematical Physics
- % University of Adelaide SA 5005
- % Australia
- %
- % email: DHartley@physics.adelaide.edu.au
- %
- %
- % Description: EDS is a REDUCE package for symbolic analysis of partial
- % differential equations using the geometrical approach of
- % exterior differential systems. The package implements
- % much of exterior differential systems theory, including
- % prolongation and involution analysis, and has been
- % optimised for large, non-linear problems.
- %
- %
- % Requires: REDUCE 3.8
- %
- % Created: 23/6/90 V0 as es.red (with Robin W Tucker)
- %
- % Modified: 8/8/90 V0.1 Added quasi-linear solving and consist-
- % ency conditions for simultaneous eqns
- % 11/9/90 V0.2 Added resimp in front of all subf, subsq
- % etc as temporary fix for subf bug.
- % 14/5/91 V0.3 Switched off factor (and on exp) in
- % various routines to make simplifications
- % work.
- % 22/5/91 V0.4 Added subs2 in front of all resimp as
- % temporary fix for unseen power LET rule
- % bug.
- % 26/11/91 V0.5 Altered algorithm in regchn so that
- % alpha coefficients are not chosen until
- % entire chain has been constructed.
- % 30/6/92 V1 Renamed exsys.red.
- % Radically altered exsolve to use modulo
- % rather than contraction. Eliminated need
- % for frame vectors. Added extra switches
- % to allow given, random or (as before)
- % generic combinations of the independence
- % 1-forms to be used to construct a
- % regular chain.
- % Removed many utilities to tools.red.
- % 23/7/92 V1.1 Added module `complete'
- % 14/3/94 V1.2 Renamed eds.red.
- % Modified for independent compilation,
- % and for compatibility with new xideal.
- % 25/4/96 V2.0 Total rewrite using parts of earlier
- % versions.
- % Added types for EDS and coframing.
- % 26/11/96 V2.1 Made cross a bundle product when arguments
- % share submanifold
- % 08/07/03 V2.2 Various bug fixes and updates for REDUCE 3.8
- %
- % Other packages which must be loaded at run-time.
- load_package solve,excalc,xideal;
-
- create!-package('(
-
- eds % Header module
- edseval % Definition and manipulation of eds structure for exterior systems
- edscfrm % Coframing structure for EDS
- systems % Operations on exterior differential systems
- tableaux % Definition and manipulation of tableaux using tab structure
- contact % Contact systems on jet bundles and Grassmann bundles
- invol % Cartan characters, reduced characters, involution test
- prolong % Prolonged systems, tableaux
- pullback % Pullback transformations
- restrict % Restrict to a subset of a coframing
- transfrm % Cobasis transformations
- edspde % PDE interface to EDS
- edsequiv % Check if EDS structures are equivalent
- edsuser % Miscellaneous user functions
- edsnorml % Converting exterior systems to internal form
- edssolve % Specialised solvers for EDS
- disjoin % Convert a variety to a disjoint union of sub-coframings
- element % Generate a random integral element
- edsaux % Miscellaneous support functions
- edsexptl % Experimental (algebraic mode) operators
- edspatch % Various patches for other parts of Reduce.
-
- ),'(contrib eds));
-
- % Switches
- fluid '(!*edsverbose !*edsdebug !*edssloppy !*edsdisjoint !*genpos
- !*ranpos);
- switch edsverbose; % prints calculation traces when on
- switch edsdebug; % prints debugging information when on
- switch edsdisjoint; % allows automatic variety decomposition when on
- switch edssloppy; % treat quasilinear systems as semilinear
- switch genpos; % Calculate characters with system in general
- % position
- switch ranpos; % Calculate characters with system in random
- % position
- put('genpos,'simpfg,'((t (setq !*ranpos nil))));
- put('ranpos,'simpfg,'((t (setq !*genpos nil))));
- % Global variables
- fluid '(cfrmcob!* cfrmcrd!* cfrmdrv!* cfrmrsx!* pullback_maps
- dependencies);
- cfrmcob!* := nil; % cobasis for background coframing
- cfrmcrd!* := nil; % coordinates for background coframing
- cfrmdrv!* := nil; % structure equations for background coframing
- cfrmrsx!* := nil; % restrictions for background coframing as pf
- pullback_maps:= makelist {}; % list of maps used by last call to prolong
- dependencies := makelist {}; % dependencies removed by pde2eds
- flag('(pullback_maps dependencies),'share);
-
- % Macros used throughout
- symbolic smacro procedure eds_sys s;
- cadr s;
- symbolic smacro procedure eds_ind s;
- caddr s;
- symbolic smacro procedure eds_cfrm s;
- cadddr s;
- symbolic smacro procedure eds_props s;
- car cddddr s;
- symbolic smacro procedure cfrm_cob m;
- cadr m;
- symbolic smacro procedure cfrm_crd m;
- caddr m;
- symbolic smacro procedure cfrm_drv m;
- cadddr m;
- symbolic smacro procedure cfrm_rsx m;
- nth(m,5);
- % Macro for edscall
- symbolic macro procedure edscall u;
- % evaluate form cadr u within edsprotect
- function edsprotect .
- foreach x in cdr u collect
- function list . mkquote car x . cdr x;
- %%%% Form function for edscall
- %%%
- %%%
- %%%put('edscall,'formfn,'formedscall);
- %%%
- %%%symbolic procedure formedscall(u,v,mode);
- %%% % evaluate form cadr u within edsprotect
- %%% function edsprotect .
- %%% foreach x in formlis(cdr u,v,mode) collect
- %%% function list . mkquote car x . cdr x;
- % Macros from excalc for compilation
- smacro procedure !*k2pf u;
- u .* (1 ./ 1) .+ nil;
- smacro procedure negpf u;
- multpfsq(u,(-1) ./ 1);
- smacro procedure lowerind u;
- list('minus,u);
-
- endmodule;
- end;
|