MINVT TITLE 'MINVT - MATRIX INVERSION SUBROUTINE' 00010001 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** SPACE 2 00020000 *TITLEMINVT -- MATRIX INVERSION SUBROUTINE 00030001 *********************************************************************** 00040001 *A AUTHOR HENRY LAVALLET 00050001 *A DESIGNER JIM BROWN,RALPH MCMILLAN 00060001 *A LANGUAGE S/370 ASSEMBLER F 00070001 *A SYSTEM IBM (SEE CRAY) 00071001 *A WRITTEN 03-26-80 00080001 ** REVISED 00090001 *A 00100001 ** CALLING SEQUENCE: (FROM FORTRAN PROGRAM - SAMIGR) 00110001 *A CALL MINVT (A, B, C, N, E, DEN) 00120001 *A INPUT A = LOWER DIAGONAL OF TRI-DIAGONAL MATRIX R4 00130001 *A INPUT B = DIAGONAL ELEMENTS OF TRI-DIAG. MATRIX R4 00140001 *A INPUT C = UPPER DIAGONAL OF TRI-DIAGONAL MATRIX R4 00150001 *A INPUT N = NUMBER OF ELEMMENTS IN A,B,C I4 00160001 *A OUTPUT E = RATIO OF 2 AUX COEFFICIENTS FOR R4 00170001 *A MATRIX SOLUTION 00180001 *A OUTPUT DEN = AUX ARRAY USED TO SOLVE TRI-DIAGONAL R4 00190001 *A SYSTEM 00200001 *A THIS SUBROUTINE PERFORMS A MATRIX INVERSION AND IS A REWRITE OF 00210001 *A FORTRAN VERSIONS MAINVT AND MASOLV. 00220001 *A 00230001 *********************************************************************** 00240001 EJECT 00250001 *********************************************************************** 00260001 * * 00270001 ** REGISTER EQUATES * 00280001 * * 00290001 *********************************************************************** 00300001 SPACE 2 00310001 R0 EQU 0 00320000 R1 EQU 1 00330000 R2 EQU 2 00340000 R3 EQU 3 00350000 R4 EQU 4 00360000 R5 EQU 5 00370000 R6 EQU 6 00380000 R7 EQU 7 00390000 R8 EQU 8 00400000 R9 EQU 9 00410000 R10 EQU 10 00420000 R11 EQU 11 00430000 R12 EQU 12 00440000 R13 EQU 13 00450000 R14 EQU 14 00460000 R15 EQU 15 00470000 * 00480000 FPR0 EQU 0 FLOATING PT REG 0 00490000 FPR2 EQU 2 FLOATING PT REG 2 00500000 FPR4 EQU 4 FLOATING PT REG 4 00510000 FPR6 EQU 6 FLOATING PT REG 6 00520000 * 00530000 EJECT 00540000 *********************************************************************** 00550001 * * 00560001 * MAINLINE * 00570001 * * 00580001 *********************************************************************** 00590001 SPACE 1 00600001 MINVT CSECT 00610001 USING *,R15 00620001 B START 00630001 DC XL1'07' 00640001 DC CL7'MINVT ' 00650001 START DS 0H 00660001 STM R14,R12,12(R13) SAVE CALLERS REGISTERS 00670001 ST R13,MYSAVE SAVE CALLERS SAVE AREA ADDRESS 00680001 SPACE 1 00690001 *********************************************************************** 00700001 * * 00710001 * BEGIN PROCESSING * 00720001 * * 00730001 *********************************************************************** 00740001 SPACE 1 00750001 LM R3,R8,0(R1) LOAD ADDRS OF INPUT PARMS AS FOLLOWS 00760001 *** R3=ADDR(A) 00770001 *** R4=ADDR(B) 00780001 *** R5=ADDR(C) 00790001 *** R6=ADDR(N) 00800001 *** R7=ADDR(E) 00810001 *** R8=ADDR(DEN) 00820001 LE FPR0,FPK1 00830001 STE FPR0,0(R7) SET E(1) = FLT PT 1. 00840001 L R6,0(R6) LOAD N VALUE 00850001 S R6,K2 SET LOOP CNTL = N-2 00860001 SR R10,R10 CLEAR R10 FOR DISPLACEMENT REG 00870001 SPACE 1 00880001 *********************************************************************** 00890001 * * 00900001 * BEGIN LOOP FOR CALCULATIONS * 00910001 * * 00920001 *********************************************************************** 00930001 SPACE 1 00940001 LOOP DS 0H 00950001 LE FPR2,4(R10,R3) LOAD A(I) WHERE I=2ND LOC IN A TBL 00960001 ME FPR2,0(R10,R7) A(I) * E(I-1) 00970001 AE FPR2,4(R10,R4) THEN ADD B(I) AND SAVE RESULT 00980001 STE FPR2,4(R10,R8) IN DEN(I) 00990001 LE FPR4,4(R10,R5) SET UP TO DIVIDE C(I) BY DEN(I) 01000001 DER FPR4,FPR2 01010001 LCER FPR0,FPR4 AND MULT BY -1 TO CHANGE SIGNS 01020001 STE FPR0,4(R10,R7) THEN SAVE IT IN E(I) 01030001 LA R10,4(R10) BUMP DISPL BY 4 TO ACCESS NEXT 01040001 ** LOCATION IN TABLES 01050001 BCT R6,LOOP CONTINUE LOOP UNTIL WE HAVE GONE 01060001 ** THRU N-1 TIMES 01070001 L R13,MYSAVE PREPARE TO RESTORE REGS AND 01080001 L R14,12(R13) RETURN TO CALLER 01090001 MVI 12(R13),X'FF' 01100001 LM R2,R12,28(R13) 01110001 BR R14 RETURN 01120001 ** 01130001 SPACE 2 01140001 *********************************************************************** 01150001 * * 01160001 * CONSTANTS AND SAVE AREA * 01170001 * * 01180001 *********************************************************************** 01190001 SPACE 1 01200001 MYSAVE DC F'0' 01210001 FPK1 DC E'+1.0' FLT PT CONSTANT 1. 01220001 K2 DC F'2' CONSTANT 2 01230001 LTORG 01240001 END MINVT 01250001