File: MPRD.FT of Tape: Various/ETH/eth11-1
(Source file text)
C .................................................................. C C SUBROUTINE MPRD C C PURPOSE C MULTIPLY TWO MATRICES TO FORM A RESULTANT MATRIX C C USAGE C CALL MPRD(A,B,R,N,M,MSA,MSB,L) C C DESCRIPTION OF PARAMETERS C A - NAME OF FIRST INPUT MATRIX C B - NAME OF SECOND INPUT MATRIX C R - NAME OF OUTPUT MATRIX C N - NUMBER OF ROWS IN A AND R C M - NUMBER OF COLUMNS IN A AND ROWS IN B C MSA - ONE DIGIT NUMBER FOR STORAGE MODE OF MATRIX A C 0 - GENERAL C 1 - SYMMETRIC C 2 - DIAGONAL C MSB - SAME AS MSA EXCEPT FOR MATRIX B C L - NUMBER OF COLUMNS IN B AND R C C REMARKS C MATRIX R CANNOT BE IN THE SAME LOCATION AS MATRICES A OR B C NUMBER OF COLUMNS OF MATRIX A MUST BE EQUAL TO NUMBER OF ROW C OF MATRIX B C C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED C LOC C C METHOD C THE M BY L MATRIX B IS PREMULTIPLIED BY THE N BY M MATRIX A C AND THE RESULT IS STORED IN THE N BY L MATRIX R. THIS IS A C ROW INTO COLUMN PRODUCT. C THE FOLLOWING TABLE SHOWS THE STORAGE MODE OF THE OUTPUT C MATRIX FOR ALL COMBINATIONS OF INPUT MATRICES C A B R C GENERAL GENERAL GENERAL C GENERAL SYMMETRIC GENERAL C GENERAL DIAGONAL GENERAL C SYMMETRIC GENERAL GENERAL C SYMMETRIC SYMMETRIC GENERAL C SYMMETRIC DIAGONAL GENERAL C DIAGONAL GENERAL GENERAL C DIAGONAL SYMMETRIC GENERAL C DIAGONAL DIAGONAL DIAGONAL C C .................................................................. C SUBROUTINE MPRD(A,B,R,N,M,MSA,MSB,L) DIMENSION A(1),B(1),R(1) C C SPECIAL CASE FOR DIAGONAL BY DIAGONAL C MS=MSA*10+MSB IF(MS-22) 30,10,30 10 DO 20 I=1,N 20 R(I)=A(I)*B(I) RETURN C C ALL OTHER CASES C 30 IR=1 DO 90 K=1,L DO 90 J=1,N R(IR)=0 DO 80 I=1,M IF(MS) 40,60,40 40 CALL LOC(J,I,IA,N,M,MSA) CALL LOC(I,K,IB,M,L,MSB) IF(IA) 50,80,50 50 IF(IB) 70,80,70 60 IA=N*(I-1)+J IB=M*(K-1)+I 70 R(IR)=R(IR)+A(IA)*B(IB) 80 CONTINUE 90 IR=IR+1 RETURN END C