ADDED   mttroot/mtt/bin/trans/sm2can_r
Index: mttroot/mtt/bin/trans/sm2can_r
==================================================================
--- /dev/null
+++ mttroot/mtt/bin/trans/sm2can_r
@@ -0,0 +1,97 @@
+#! /bin/sh
+
+     ###################################### 
+     ##### Model Transformation Tools #####
+     ######################################
+
+# Bourne shell script: csm2sm_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, 1996
+
+###############################################################
+## Version control history
+###############################################################
+## $Id$
+## $Log$
+## Revision 1.2  1996/08/25 10:11:32  peter
+## Added END in output file.
+## Error handling.
+##
+## Revision 1.1  1996/08/19 15:06:16  peter
+## Initial revision
+##
+###############################################################
+
+# Inform user
+echo Creating $1_sm.r
+
+# Remove the old log file
+rm -f csm2sm_r.log
+
+# Use reduce to accomplish the transformation
+reduce >csm2sm_r.log << EOF
+
+in "$1_def.r";
+in "$1_csm.r";
+in "$1_cr.r";
+in "$1_sympar.r";
+
+OFF Echo;
+OFF Nat;
+
+% Find MTTA and MTTB : the A and B matrices
+
+MTTinvE := MTTE^(-1);
+MTTA := MTTinvE*MTTA;
+MTTB := MTTinvE*MTTB;
+
+
+%Create the output file
+OUT "$1_sm.r";
+
+%Write out the matrices.
+IF MTTNx>0 THEN
+BEGIN
+  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_sm.r";
+quit;
+
+EOF
+
+# Now invoke the standard error handling.
+mtt_error_r csm2sm_r.log