SUBROUTINE MTDS PURPOSE MULTIPLY A GENERAL MATRIX A ON THE LEFT OR RIGHT BY INVERSE(T),INVERSE(TRANSPOSE(T)) OR INVERSE(TRANSPOSE(T*T)) THE TRIANGULAR MATRIX T IS STORED COLUMNWISE IN COMPRESSED FORM, I.E. UPPER TRIANGULAR PART ONLY. USAGE CALL MTDS(A,M,N,T,IOP,IER) DESCRIPTION OF PARAMETERS A - GIVEN GENERAL MATRIX WHITH M ROWS AND N COLUMNS. M - NUMBER OF ROWS OF MATRIX A N - NUMBER OF COLUMNS OF MATRIX A T - GIVEN TRIANGULAR MATRIX STORED COLUMNWISE UPPER TRIANGULAR PART ONLY. ITS NUMBER OF ROWS AND COLUMNS K IS IMPLIED BY COMPATIBILITY. K = M IF IOP IS POSITIVE, K = N IF IOP IS NEGATIVE. T OCCUPIES K*(K+1)/2 STORAGE POSITIONS. IOP - INPUT VARIABLE FOR SELECTION OF OPERATION IOP = 1 - A IS REPLACED BY INVERSE(T)*A IOP =-1 - A IS REPLACED BY A*INVERSE(T) IOP = 2 - A IS REPLACED BY INVERSE(TRANSPOSE(T))*A IOP =-2 - A IS REPLACED BY A*INVERSE(TRANSPOSE(T)) IOP = 3 - A IS REPLACED BY INVERSE(TRANSPOSE(T)*T)*A IOP =-3 - A IS REPLACED BY A*INVERSE(TRANSPOSE(T)*T) IER - RESULTING ERROR PARAMETER IER =-1 MEANS M AND N ARE NOT BOTH POSITIVE AND/OR IOP IS ILLEGAL IER = 0 MEANS OPERATION WAS SUCCESSFUL IER = 1 MEANS TRIANGULAR MATRIX T IS SINGULAR REMARKS SUBROUTINE MTDS MAY BE USED TO CALCULATE THE SOLUTION OF A SYSTEM OF EQUATIONS WITH SYMMETRIC POSITIVE DEFINITE COEFFICIENT MATRIX. THE FIRST STEP TOWARDS THE SOLUTION IS TRIANGULAR FACTORIZATION BY MEANS OF MFSD, THE SECOND STEP IS APPLICATION OF MTDS. SUBROUTINES MFSD AND MTDS MAY BE USED IN ORDER TO CALCULATE THE PRODUCT TRANSPOSE(A)*INVERSE(B)*A WITH GIVEN SYMMETRIC POSITIVE DEFINITE B AND GIVEN A EFFICIENTLY IN THREE STEPS 1) TRIANGULAR FACTORIZATION OF B (B=TRANSPOSE(T)*T) 2) MULTIPLICATION OF A ON THE LEFT BY INVERSE(TRANSPOSE(T)) A IS REPLACED BY C=INVERSE(TRANSPOSE(T))*A 3) CALCULATION OF THE RESULT FORMING TRANSPOSE(C)*C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED NONE METHOD CALCULATION OF X = INVERSE(T)*A IS DONE USING BACKWARD SUBSTITUTION TO OBTAIN X FROM T*X = A. CALCULATION OF Y = INVERSE(TRANSPOSE(T))*A IS DONE USING FORWARD SUBSTITUTION TO OBTAIN Y FROM TRANSPOSE(T)*Y = A. CALCULATION OF Z = INVERSE(TRANSPOSE(T)*T)*A IS DONE SOLVING FIRST TRANSPOSE(T)*Y = A AND THEN T*Z = Y, IE. USING THE ABOVE TWO STEPS IN REVERSE ORDER