#! /bin/sh
######################################
##### Model Transformation Tools #####
######################################
# Bourne shell script: cse2csm_r
# Constrained-state equation to linear constrained-state matrices conversion
# P.J.Gawthrop 6th September 1991, May 1994
# Copyright (c) P.J.Gawthrop, 1991, 1994.
###############################################################
## Version control history
###############################################################
## $Id$
## $Log$
## Revision 1.5 1999/12/08 02:04:46 peterg
## Removed bug - uj := MTTU(j,1); not commented out
##
## Revision 1.4 1999/11/22 23:49:50 peterg
## Writes out the new MTTNx and MTTNy
##
## Revision 1.3 1999/11/22 23:38:51 peterg
## Now does scse 2 scsm as well.
## Uses mkid.
##
## Revision 1.2 1998/07/13 09:56:31 peterg
## Back under RCS for major revision
##
# Revision 1.1 1996/08/25 10:13:37 peter
# Initial revision
#
###############################################################
# Inform user
echo Creating $1_$2.r
case $2 in
csm)
rep=cse;
;;
scsm)
rep=scse;
;;
*)
echo Representation must be csm or scsm;
exit
esac
# Remove the old log file
rm -f cse2csm_r.log
# Use reduce to accomplish the transformation
reduce >cse2csm_r.log << EOF
in "$1_def.r";
in "$1_$rep.r";
%%in "$1_cr.r";
%%in "$1_sympar.r";
OFF Echo;
OFF Nat;
% Get rid of the old mttx and u - now use mkid instead
clear MTTx, MTTu;
% Find MTTA : the A matrix
matrix MTTA(MTTNx,MTTNx);
FOR j := 1:MTTNx DO
BEGIN
%xj := MTTX(j,1);
xj := mkid(MTTx,j);
FOR i := 1:MTTNx DO
MTTA(i,j) := df(MTTEdx(i,1), xj, 1);
END;
% Find MTTB : the B matrix
matrix MTTB(MTTNx,MTTNu);
FOR j := 1:MTTNu DO
BEGIN
%uj := MTTU(j,1);
uj := mkid(MTTu,j);
FOR i := 1:MTTNx DO
MTTB(i,j) := df(MTTEdx(i,1), uj, 1);
END;
% Find MTTC : the C matrix
matrix MTTC(MTTNy,MTTNx);
FOR i := 1:MTTNy DO
FOR j := 1:MTTNx DO
BEGIN
%xj := MTTX(j,1);
xj := mkid(MTTx,j);
MTTC(i,j) := df(MTTY(i,1), xj, 1);
END;
% Find MTTD : the D matrix
matrix MTTD(MTTNy,MTTNu);
FOR i := 1:MTTNy DO
FOR j := 1:MTTNu DO
BEGIN
%uj := MTTU(j,1);
uj := mkid(MTTu,j);
MTTD(i,j) := df(MTTY(i,1), uj, 1);
END;
%Substitute the ss values
in "$1_sspar.r";
%Create the output file
OUT "$1_$2.r";
% Constants
write "% New constants";
write "MTTNx := ", MTTNx, ";";
write "MTTNy := ", MTTNy, ";";
%Write out the matrices.
IF MTTNx>0 THEN
BEGIN
write "matrix MTTE(", MTTNx, ",", MTTNx, ");";
FOR i := 1:MTTNx DO
FOR j := 1:MTTNx DO IF MTTE(i,j) NEQ 0 THEN
write "MTTE(", i, ",", j, ") := ", MTTE(i,j);
write "matrix MTTA(", MTTNx, ",", MTTNx, ");";
FOR i := 1:MTTNx DO
FOR j := 1:MTTNx DO IF MTTA(i,j) NEQ 0 THEN
write "MTTA(", i, ",", j, ") := ", MTTA(i,j);
END;
IF MTTNx>0 THEN
IF MTTNu>0 THEN
BEGIN
write "matrix MTTB(", MTTNx, ",", MTTNu, ");";
FOR i := 1:MTTNx DO
FOR j := 1:MTTNu DO IF MTTB(i,j) NEQ 0 THEN
write "MTTB(", i, ",", j, ") := ", MTTB(i,j);
END;
%Write it out
IF MTTNy>0 THEN
IF MTTNx>0 THEN
BEGIN
write "matrix MTTC(", MTTNy, ",", MTTNx, ");";
FOR i := 1:MTTNy DO
FOR j := 1:MTTNx DO IF MTTC(i,j) NEQ 0 THEN
write "MTTC(", i, ",", j, ") := ", MTTC(i,j);
END;
IF MTTNy>0 THEN IF MTTNu>0 THEN
BEGIN
write "matrix MTTD(", MTTNy, ",", MTTNu, ");";
FOR i := 1:MTTNy DO
FOR j := 1:MTTNu DO IF MTTD(i,j) NEQ 0 THEN
write "MTTD(", i, ",", j, ") := ", MTTD(i,j);
END;
write "END;";
SHUT "$1_$2.r";
EOF
# Now invoke the standard error handling.
mtt_error_r cse2csm_r.log