[updated 30.Oct.2008]
Librairie syslin > Fichier fimlu.f |
SUBROUTINE FIMLU (NMMATR,NVMATR,SYMSTR,NPLCAT,NMFACT,NVFACT
& ,NIVIMP)
Auteurs : D.Martin (Octobre 1991)
Derniere modification : D.Martin (08 octobre 2008)
Version 2
Factorisation L.U incomplete, le cas echeant apres remplissage, d'une matrice
stockee 'Morse ligne' ou 'Bi-Morse'. Le remplissage consiste en la
concatenation des NPLCAT plages sous et sur-diagonales.
Le resultat est un terme stocke sous forme 'Bi-Morse'.
-- Arguments d'entree --
NMMATR nom du tableau contenant la matrice a factoriser
NVMATR son niveau
SYMSTR indicateur de structure symetrique de la matrice NMMATR,NVMATR
SYMSTR(1:1) = 'S' ==> Matrice symetrique en structure
NPLCAT nombre de plages sous et sur-diagonales concatenees avant factorisation
NMFACT nom du tableau devant contenir la matrice factorisee LU
NVFACT son niveau
NIVIMP niveau d'impression pour la matrice factorisee
IMPLICIT NONE
CHARACTER*(*) SYMSTR,NMMATR,NMFACT
INTEGER NVMATR,NPLCAT,NVFACT,NIVIMP
INCLUDE 'ALLOC'
INCLUDE 'CONTEX'
CHARACTER STODLN*6
INTEGER INDSYM
INTEGER ITYSNO,ITSYMA,INSTOK,MCMATR,MCFACT,NVBMOR,MCBMOR
& ,NBLIGN,NBPLAL,MCPLAL,MCPLIL,LGMORL,MCMATL,MCFACL
& ,NBCOLO,NBPLAU,MCPLAU,MCPLIU,LGMORU,MCMATU,MCFACU,NCPINC
LOGICAL NOTIDM
CHARACTER ERCODE*120,TYMATR*4,TYFACT*6,NMSTOK*6
COMMON/FORMAH/ERCODE
EQUIVALENCE (ERCODE(89:89),TYFACT),(ERCODE(97:97),TYMATR)
CALL PRFXMJ (1,'*FimLU*')
TYFACT='L.U'
ITYSNO=INDSYM (' ') !utilite
NOTIDM=NMMATR.NE.NMFACT.OR.NVMATR.NE.NVFACT
-- Cas d'une matrice stockee sous forme Morse-ligne ou Bi-Morse
CALL FIPREP (NMMATR,NVMATR,SYMSTR,NPLCAT,TYMATR,ITSYMA,INSTOK
& ,MCMATR,TYFACT,NMFACT,NVFACT,MCFACT,NVBMOR,MCBMOR
& ,NCPINC,NIVIMP,IMPSDR) !syslin
CALL EXBMOR (MCBMOR,IST(MCBMOR),NBLIGN,NBPLAL,MCPLAL,MCPLIL,LGMORL
& ,NBCOLO,NBPLAU,MCPLAU,MCPLIU,LGMORU) !sdexplo
-- Factorisation incomplete proprement dite
MCMATL=MCMATR+MIN (NBLIGN,NBCOLO)
MCMATU=MCMATL+LGMORL
La matrice a factoriser est:
soit identique a la factorisee L.U. non-symetrique,
soit a ete recopiee en entier dans la factorisee L.U. non-symetrique
MCFACL=MCFACT+MIN (NBLIGN,NBCOLO)
MCFACU=MCFACL+LGMORL
CALL LUIBM (TYMATR,NBLIGN,IST(MCPLAL),IST(MCPLIL),IST(MCPLAU)
& ,IST(MCPLIU),MCMATR,MCMATL,MCMATU,EPSMAC
& ,MCFACT,MCFACL,MCFACU,RST,CST) !syslin
IF (NIVIMP.GT.0) CALL PRTERM (NMFACT,NVFACT,NIVIMP,IMPSDR) !sdexplo
Sauvegarde des matrices
IF (NOTIDM) CALL TBSAVE ( NMMATR ,NVMATR)
CALL TBSAVE ( NMFACT ,NVFACT)
CALL TBSAVE ('&BMORS',NVBMOR)
IF ( NCPINC.GT.1 ) THEN
NMSTOK = STODLN (INSTOK,NCPINC,NCPINC) !utilite
CALL TBSAVE (NMSTOK,NVBMOR)
ENDIF
CALL PRFXMJ (-1,'*FimLU*')
-- File history
Version 2 : D.Martin (08 octobre 2008)
Changement de nom des structures en DL (appel de STODLN)
Version 1.0.1 : D.Martin (26 Juin 2001)
END !FimLU
fimlu est appelé dans (4 procédures)