%
% SQRMTX produces a minimal realization of the TF : (T12)'(T11)(T21)',
%      (T12p)'(T11)(T21)', (T12)'(T11)(T21p)', and (T12p)'(T11)(T21p)'
%      for H-inf phase (III) computation.  This will replace the 
%      lengthy model reduction work.

% R. Y. Chiang & M. G. Safonov 1/8/88
% Copyright (c) 1988 by the MathWorks, Inc.
% All Rights Reserved.

%      (Ver. 1.1, rewritten on Jan. 8, 1987 for considering the four 
%       different cases).
%
asqm  = at11;
%
% -------------------------------------------- Square Case :
%
bsqm1 = bt11;
bsqm2  = [bt12;zeros(rat0,cbt1)];
%
csqm1 = ct11;
csqm2  = [zeros(rct2,rat1) ct21];
%
dsqm11 = dt11;
dsqm12 = dt12;
dsqm21 = dt21;
dsqm22 = zeros(rct2,cbt1);
%
% ---------------------------------------- Nonsquare Cases :
%
if case == 2
   [rbt1p,cbt1p] = size(bt1p);
   bsqm2 = [bt12 bt1p;zeros(rat0,(cbt1+cbt1p))];
   dsqm12 = [dt12 dt1p];
   dsqm22 = zeros(rct2,(cbt1+cbt1p));
end
%
if case == 3
   [rct2p,cct2p] = size(ct2p);
   csqm2 = [csqm2;zeros(rct2p,rat1) ct2p];
   dsqm21 = [dt21;dt2p];
   dsqm22 = zeros((rct2+rct2p),cbt1);
end
%
if case == 4
   [rbt1p,cbt1p] = size(bt1p);
   [rct2p,cct2p] = size(ct2p);
   bsqm2 = [bt12 bt1p;zeros(rat0,(cbt1+cbt1p))];
   csqm2 = [csqm2;zeros(rct2p,rat1) ct2p];
   dsqm12 = [dt12 dt1p];
   dsqm21 = [dt21;dt2p];
   dsqm22 = zeros((rct2+rct2p),(cbt1+cbt1p));
end
%
bsqm = [bsqm1 bsqm2];
csqm = [csqm1;csqm2];
%
[rdsq12,cdsq12] = size(dsqm12);
dsqm12 = dsqm12 + eye(rdsq12);
[rdsq21,cdsq21] = size(dsqm21);
dsqm21 = dsqm21 + eye(rdsq21);
dsqm = [dsqm11 dsqm12;dsqm21 dsqm22];
%
% ------------------------------------------- Block Feedback :
%
fbk = [zeros(rdsq21,rdsq12) eye(rdsq21);...
       eye(rdsq12) zeros(rdsq12,rdsq21)];
minp = [eye(rdsq21);zeros(rdsq12,rdsq21)];
noutp = [eye(rdsq12) zeros(rdsq12,rdsq21)];
[Acl,Bcl,Ccl,Dcl] = interc(asqm,bsqm,csqm,dsqm,minp,noutp,fbk);
%
% --------------------------------------- State Space of Htt :
%
ahtt = Acl; 
bhtt = Bcl(:,1:cbt2); 
chtt = Ccl(1:cbt2,:); 
dhtt = dt12'*dt11*dt21';
%
[rDcl,cDcl] = size(Dcl);
[rbt12p,cbt12p] = size(bt1p);
[rct21p,cct21p] = size(ct2p);
%
% ----------------------------------- State Space of G1 & G2 :
%                                     (depends on each case)
%
if case == 2
   ag2 = Acl; 
   bg2 = Bcl;
   cg2 = Ccl((rDcl-cbt12p+1):rDcl,:); 
   dg2 = dt1p'*dt11*dt21';
end
%
if case == 3
   ag1 = Acl; 
   bg1 = Bcl(:,(cDcl-rct21p+1):cDcl);
   cg1 = Ccl; 
   dg1 = dt12'*dt11*dt2p';
end
%
if case == 4
   ag2 = Acl; 
   bg2 = Bcl(:,1:cbt2);
   cg2 = Ccl((rDcl-cbt12p+1):rDcl,:); 
   dg2 = dt1p'*dt11*dt21';
   ag1 = Acl; 
   bg1 = Bcl(:,(cDcl-rct21p+1):cDcl);
   cg1 = Ccl(1:cbt2,:); 
   dg1 = dt12'*dt11*dt2p';
end
%
