#! /bin/sh
######################################
##### Model Transformation Tools #####
######################################
# Bourne shell script: cse2csm_r
# Constrained-state equation to linear constrained-state matrices conversion
# Copyright (C) 2000 by Peter J. Gawthrop
## Modified from eailier version
# Language
if [ -n "$2" ]; then
lang=$2
else
lang="r"
fi
# Inform user
echo Creating $1_smx.$lang
#echo Creating $1_smxx.$lang
#echo Creating $1_smxtx.$lang
# Remove the old log file
rm -f cse2smx_r.log
rm -f $1_smx.$lang
rm -f $1_smxx.$lang
rm -f $1_smxtx.$lang
rm -f $1_smx.body
# Use reduce to accomplish the transformation
reduce << EOF >cse2smx_lang.log
lang := $lang;
in "$1_subs.r";
in "$1_def.r";
in "$1_cse.r";
in "$1_cr.r";
clear mttx; % Dont need this now - use mkid instead
OFF Echo;
% Load the general translator package
LOAD GENTRAN;
GENTRANLANG!* := 'Pascal;
ON GENTRANSEG;
MAXEXPPRINTLEN!* := 120;
TEMPVARNUM!* := 1;
TEMPVARNAME!* := 'mtt_t;
% Matrix output function
in"$MTTPATH/trans/lang_matrix.r";
%Set up output according to the language.
OFF NAT;
GENTRANOUT "$1_smx.body";
% Set up output according to the language.
IF (lang = r) THEN
BEGIN
write "matrix mtta(", mttnx, ",", mttnx, ");";
write "matrix mttb(", mttnx, ",", mttnu, ");";
write "matrix mttc(", mttny, ",", mttnx, ");";
write "matrix mttd(", mttny, ",", mttnu, ");";
END;
% find MTTA : the A matrix
FOR i := 1:MTTNx DO
BEGIN
mttAAx_i := 0;
FOR j := 1:MTTNx DO
BEGIN
ij := i + MTTNx*(j-1);
xj := mkid(mttx,j);
a_ij := df(MTTEdx(i,1), xj, 1);
aa_ij := MTTE(i,j) - mttt*a_ij;
IF (aa_ij NEQ 0) THEN
%%% GENTRAN mtta(i,j) ::=: aa_ij;
GENTRAN mtta(ij) ::=: aa_ij;
mttAAx_i := mttAAx_i + aa_ij*xj;
END;
IF (mttAAx_i NEQ 0) THEN
GENTRAN mttax(i) ::=: mttAAx_i;
END;
%Shut the output according to the language.
GENTRANSHUT "$1_smx.body";
EOF
if [ "$lang" = "m" ]; then
lang_header $1 smx m 'mttx,mttu,mttt,mttpar' '[mtta,mttax]' > $1_smx.m
echo '#====== Start of code ======#' >> $1_smx.m
cat $1_smx.body | mtt_p2m >> $1_smx.m
## Now do the separate files
## smxa
echo Creating $1_smxa.$lang
lang_header $1 smxa m 'mttx,mttu,mttt,mttpar' '[mtta]' > $1_smxa.m
echo '#====== Start of code ======#' >> $1_smxa.m
## This needs more work
cat $1_smx.body | grep 'mtta\[' | mtt_p2m >> $1_smxa.m
## smxax
echo Creating $1_smxax.$lang
lang_header $1 smxax m 'mttx,mttu,mttt,mttpar' '[mttax]' > $1_smxax.m
echo '#====== Start of code ======#' >> $1_smxax.m
## This needs more work
cat $1_smx.body |\
awk '{
if (match($1,"mtt")) {
printing=0
if (match($1,"mttax\\["))
printing=1;
}
if (printing) print $0
}' | mtt_p2m >> $1_smxax.m
#rm -f $1_smx.body
# mv $1_smxx.$lang mtt_junk
# lang_header $1 smxx m 'mttx,mttu,mttxx,mttdt' '[mttax]' > $1_smxx.m
# cat mtt_junk | mtt_p2m >> $1_smxx.m
# rm -f mtt_junk
#
# mv $1_smxtx.$lang mtt_junk
# lang_header $1 smxtx m 'mttx,mttu,mttxx,mttdt' '[mttax]' > $1_smxtx.m
# cat mtt_junk | mtt_p2m >> $1_smxtx.m
# rm -f mtt_junk
#
#
fi
# Now invoke the standard error handling.
mtt_error_r cse2smx_lang.log