%*********************************************************************
module structural_eqns$
%*********************************************************************
% Routines for solving a system of structural equations
% Author: Thomas Wolf
% 1998
%
% $Id: crstruc.red $
%
%--> Necessary assignments in the application code in algebraic mode:
%
% lisp(struc_eqn:=t)$
% struc_done:={all functions for which the corresponding
% structural equations have already satisfied their
% integrability conditions}$
symbolic procedure ini_struc$
begin scalar done$
done:=algebraic struc_done$
% check initial data
if (not pairp done) or
(car done neq 'LIST) then
rederr("struc_done not properly initialized!")
else done:=cdr done$
% In order for structural equations to be used for formulating
% integrability conditions and not for substitutions, we need a
% `total differential order' ordering where the differential order
% has highest priority higher than the lex. order of functions
lex_fc:=nil$
% Although only first order derivatives occur in the structural
% equations, we will specify to order derivatives by their
% differential order and not lexicographically.
lex_df:=nil$
quick_decoup:=t$ % To do the first reduction found, not looking
% for other reductions or integrability conditions
proc_list_:='(
subst_level_03
alg_length_reduction
decoupling
subst_level_05
change_proc_list
)$
lisp(adjust_fnc:=t)$
end$
symbolic procedure change_proc_list(arglist)$
begin scalar fcts;
proc_list_:='(
to_do
subst_level_05
separation
quick_integration
full_integration
integration
subst_derivative
subst_level_4
undetlinode
gen_separation
decoupling
diff_length_reduction
undo_subst_derivative
)$
struc_eqn:=nil$
fcts:=union(cadr arglist,setdiff(ftem_,cadr arglist))$
if print_ then <<
terpri()$
write"The priority list of procedures is changed. The new one is:"$
priproli(proc_list_)$
terpri()$ write"The current situation:"$
print_statistic(car arglist,fcts);
print_pdes(car arglist);
print_ineq(ineq_);
struc_dim:=length fcts;
>>;
return arglist
end$
endmodule$
end$