SUBROUTINE MATZ(A,LDA,M,N,IDA,JOB,IERR) INTEGER LDA,M,N,IDA(1),JOB,IERR DOUBLE PRECISION A(LDA,N) C C ACCESS MATLAB VARIABLE STACK C A IS AN M BY N MATRIX, STORED IN AN ARRAY WITH C LEADING DIMENSION LDA. C IDA IS THE NAME OF A. C IF IDA IS AN INTEGER K LESS THAN 10, THEN THE NAME IS 'A'K C OTHERWISE, IDA(1:4) IS FOUR CHARACTERS, FORMAT 4A1. C JOB = 0 GET REAL A FROM MATLAB, C = 1 PUT REAL A INTO MATLAB, C = 10 GET IMAG PART OF A FROM MATLAB, C = 11 PUT IMAG PART OF A INTO MATLAB. C RETURN WITH NONZERO IERR AFTER MATLAB ERROR MESSAGE. C C USES MATLAB ROUTINES STACKG, STACKP AND ERROR DOUBLE PRECISION STKR(5005),STKI(5005) INTEGER IDSTK(4,48),LSTK(48),MSTK(48),NSTK(48),VSIZE,LSIZE,BOT,TOP INTEGER ALFA(52),ALFB(52),ALFL,CASE INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE INTEGER SYM,SYN(4),BUF(256),CHAR,FLP(2),FIN,FUN,LHS,RHS,RAN(2) COMMON /VSTK/ STKR,STKI,IDSTK,LSTK,MSTK,NSTK,VSIZE,LSIZE,BOT,TOP COMMON /ALFS/ ALFA,ALFB,ALFL,CASE COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE COMMON /COM/ SYM,SYN,BUF,CHAR,FLP,FIN,FUN,LHS,RHS,RAN C INTEGER ID(4),SEMI,BLANK,ACHAR LOGICAL IMG DATA SEMI/39/,BLANK/36/,ACHAR/10/ C IF (IDA(1).LT.0 .OR. IDA(1).GE.10) GO TO 10 ID(1) = ACHAR ID(2) = IDA(1) ID(3) = BLANK ID(4) = BLANK GO TO 15 10 DO 12 I = 1, 4 ID(I) = BLANK DO 11 J = 1, BLANK IF (IDA(I).EQ.ALFA(J) .OR. IDA(I).EQ.ALFB(J)) ID(I) = J-1 11 CONTINUE 12 CONTINUE C 15 RHS = 0 LPT(2) = LPT(1) ERR = 0 IERR = 0 IMG = JOB/10 .NE. 0 IF (MOD(JOB,10) .NE. 0) GO TO 30 C C GET FROM MATLAB 20 CALL STACKG(ID) IF (FIN .EQ. 0) CALL ERROR(4) IF (ERR .GT. 0) GO TO 50 L = LSTK(TOP) M = MSTK(TOP) N = NSTK(TOP) DO 22 J = 1, N DO 21 I = 1, M IJ = L + I-1 + (J-1)*M A(I,J) = STKR(IJ) IF (IMG) A(I,J) = STKI(IJ) 21 CONTINUE 22 CONTINUE TOP = TOP - 1 RETURN C C PUT INTO MATLAB 30 ERR = M*N - LSTK(BOT) IF (ERR .GT. 0) CALL ERROR(17) IF (ERR .GT. 0) GO TO 50 TOP = TOP + 1 LSTK(TOP) = 1 MSTK(TOP) = M NSTK(TOP) = N DO 32 J = 1, N DO 31 I = 1, M IJ = I + (J-1)*M STKR(IJ) = A(I,J) STKI(IJ) = 0.0D0 IF (IMG) STKR(IJ) = 0.0D0 IF (IMG) STKI(IJ) = A(I,J) 31 CONTINUE 32 CONTINUE SYM = SEMI CALL STACKP(ID) IF (ERR .GT. 0) GO TO 50 RETURN C 50 IERR = ERR RETURN END