module crack;   % Top level CRACK module.

% Revised for development system by FJW, 28 July 1998
% May require more than one run to compile using Win32-PSL.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                   %
%   CRACK Version  21 March 96                                      %
%                                                                   %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

comment

Title: CRACK
Authors:

        Andreas Brand 
        Institut fuer Informatik 
        Friedrich Schiller Universitaet Jena  
        07740 Jena,  Germany 
        email: maa@hpux.rz.uni-jena.de
        tel.:  + 49 3641 631123 ,

        Thomas Wolf 
        School of Mathematical Sciences 
        Queen Mary and Westfield College 
        University of London 
        London E1 4NS 
        email: T.Wolf@maths.qmw.ac.uk
        tel.:  + 44 71 975 5493

Date of last change: 1996-03-21

Abstract:
CRACK is a package for solving overdetermined systems of partial or
ordinary differential equations (PDEs, ODEs). Examples of programs 
which make use of CRACK for investigating ODEs (finding symmetries, 
first integrals, an equivalent Lagrangian or a "differential 
factorization") are added. The manual CRACK.TEX gives further details.

REDUCE version: 3.6.
CRACK uses the package ODESOLVE of Malcolm MacCallum which is included
in REDUCE 3.6. 

T. Wolf, An Analytic Algorithm for Decoupling and Integrating
         systems of Nonlinear Partial Differential Equations, J. Comp. 
         Phys., no. 3, 60 (1985) 437-446.
T. Wolf, The Symbolic Integration of Exact PDEs, preprint.
M.A.H. MacCallum, An Ordinary Differential Equation Solver for REDUCE,
         Proc. ISAAC'88, Springer Lect. Notes in Comp Sci. 358, 
         196--205.

Keywords: partial differential equations, computer analytic

$

%% Additions by FJW.  The following are defined in PSL but not CSL.
%% (See also crstart.)

fluid '(promptstring!*)$

if getd 'setprop then flag('(setprop), 'lose);
% Could also use conditional parsing (!#if) for this.

% The following smacro definitions MUST be in this header file!

symbolic smacro procedure flag1(U, V);
   %% The identifier U is flagged V.
   %% FJW: Defined and flagged lose in PSL only.
   %% FJW: This implementation based on the PSL manual.
   flag({U}, V)$

symbolic smacro procedure remflag1(U, V);
   %% Remove V from the property list of identifier U.
   %% FJW: Defined and flagged lose in PSL only.
   %% FJW: This implementation based on the PSL manual.
   remflag({U}, V)$

%% !#if (equal version!* "REDUCE Development Version")
%% ACH: To build with the bootstrappping version need this test instead:
!#if (neq version!* "REDUCE 3.6")

% Taken from crinit, but needs to be here:
fluid '(REDUCEFUNCTIONS_ 
         cont_ odesolve_ print_ print_more print_all
         facint_ potint_ freeint_ level_ poly_only safeint_ solvealg_
         logoprint_ independence_ tr_gensep tr_decouple homogen_
         tr_genint tr_main contradiction_ stop_ fname_ nfct_ fnew_
         ftem_ genint_ gensep_ new_gensep ineq_ time_ adjust_fnc
         subst_0 subst_1 subst_2 subst_3 subst_4 cost_limit5
         pdelimit_0 pdelimit_1 pdelimit_2 pdelimit_3 pdelimit_4 
         length_inc tr_redlength proc_list_ full_proc_list_ to_do_list   
         !*batch_mode printmenu_ expert_mode repeat_mode 
	 dec_hist dec_hist_list depl_copy_ 
         nequ_ eqname_ allflags_ prop_list maxalgsys_ stepcounter_
	 batchcount_ crackrules_ userrules_ rulelist_ history_
         explog_ trig1_ trig2_ trig3_ trig4_ trig5_ trig6_ trig7_ trig8_
         max_red_len max_factor orderings_ tr_orderings simple_orderings
         lex_ collect_sol)$

create!-package('(
   crack
   crinit        %  initialisation and help
   crmain        %  main module	
   crdec         %  decouple module
   crsep         %  separation module
   crgensep      %  generalized separation module
   crint         %  integration of pde's module
   crsimp        %  simplification and substitution module
   crutil        %  procedures used in several modules
   crsimpso      %  simplification of the results
   %% FJW: crintfix is for REDUCE 3.6 (and earlier versions?)
   %% crintfix      %  patch for the integration
   crequsol      %  equivalence of solutions
   crshort       %  reductions in length
   crorder       %  orderings support
   crstart       %  FJW: Startup code (moved from module crack)
   ), nil);

!#else

% For distributed REDUCE:

% FJW: Load support packages, but not when compiling:
!#if (getd 'packages_to_load)
packages_to_load ezgcd,odesolve,factor,int,algint;
!#else                                  % for REDUCE 3.6
apply1('load_package, '(ezgcd odesolve factor int algint));
!#endif

in crinit!.red$        %  initialisation and help
in crmain!.red$        %  main module
in crdec!.red$         %  decouple module
in crsep!.red$         %  separation module
in crgensep!.red$      %  generalized separation module
in crint!.red$         %  integration of pde's module
in crsimp!.red$        %  simplification and substitution module
in crutil!.red$        %  procedures used in several modules
in crsimpso!.red$      %  simplification of the results

!#if (equal version!* "REDUCE 3.6")
in crintfix!.red$      %  patch for the integration
!#endif

in crequsol!.red$      %  equivalence of solutions
in crshort!.red$       %  reductions in length
in crorder!.red$       %  orderings support

%********************************************************************
%
% $Id: crack.red,v 1.1 1998/06/04 15:03:16 tw Exp tw $
%
%********************************************************************

setcrackflags()$
!*fullroots:=t$
!*dfprint:=t$

!#endif

endmodule;

end$
