prase2
C PRASE2 SOURCE PV 22/04/22 21:15:12 11344 $ IMPR,IRET) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : PRASE2 C PROJET : Noyau linéaire NLIN C DESCRIPTION : Version raccourcie de prasem lorsqu'on connaît la C structure de la matrice assemblée (tableau de repérage C des ddl, renumérotation, profil Morse). On effectue C l'assemblage d'un ensemble de matrices élémentaires pour C faire une matrice Morse. C Ceci est la version raccourcie de prasem. C on a une autre matrice identique sauf pour les C valeurs des matrices élémentaires. C C LANGAGE : ESOPE C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF) C mél : gounand@semt2.smts.cea.fr C*********************************************************************** C APPELES : MKIZ2, MKIZT2 C APPELES (UTIL) : RSETXI, CREPER C APPELE PAR : KRES2 C*********************************************************************** C ENTREES : MATASS C ENTREES/SORTIES : MATELE C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 16/12/99, nouvelle version initiale C HISTORIQUE : v1, 16/12/99, création C HISTORIQUE : 09/04/04 rajout de idmatd C HISTORIQUE : C*********************************************************************** C Prière de PRENDRE LE TEMPS de compléter les commentaires C en cas de modification de ce sous-programme afin de faciliter C la maintenance ! C*********************************************************************** * MATASS est une matrice de préconditionnement déjà assemblée * permettant de sauter des étapes de l'assemblage -INC PPARAM -INC CCOPTIO -INC SMCOORD -INC SMELEME POINTEUR KJSPGT.MELEME POINTEUR MELPRI.MELEME POINTEUR MELDUA.MELEME -INC SMLENTI INTEGER JG POINTEUR KRSPGT.MLENTI POINTEUR KRINCP.MLENTI POINTEUR KRINCD.MLENTI POINTEUR IWORK.MLENTI -INC SMLMOTS INTEGER JGN,JGM POINTEUR LITOT.MLMOTS -INC SMMATRIK POINTEUR MATELE.MATRIK POINTEUR MATASS.MATRIK POINTEUR IMATEL.IMATRI POINTEUR KMINCT.MINC * POINTEUR IDMTOT.IDMAT POINTEUR IDMATP.IDMAT POINTEUR IDMATD.IDMAT POINTEUR PMTOT.PMORS POINTEUR PMTOT2.PMORS INTEGER NBVA POINTEUR IZATOT.IZA * INTEGER LNMOTS PARAMETER (LNMOTS=8) * INTEGER IMPR,IRET * INTEGER NMATE,NTTDDL,NNZTOT,NTOGPO,NTOTIN,NTOTPO INTEGER IMATE, ITOTIN INTEGER LNM,NME REAL*8 RDUMMY(1) * * Executable statements * IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans prase2' SEGACT MATASS SEGACT MATELE*MOD NMATE=MATASS.IRIGEL(/2) * Copie de IRIGEL(1,I) et IRIGEL(2,I) DO 1 IMATE=1,NMATE MELPRI=MATASS.IRIGEL(1,IMATE) MELDUA=MATASS.IRIGEL(2,IMATE) MATELE.IRIGEL(1,IMATE)=MELPRI MATELE.IRIGEL(2,IMATE)=MELDUA 1 CONTINUE * * Construire l'ensemble des points sur lesquels sont localisées des * inconnues (KSPGT). * KJSPGT=MATASS.KISPGT MATELE.KISPGT=KJSPGT MATELE.KISPGP=KJSPGT MATELE.KISPGD=KJSPGT * * Construire le repérage des inconnues KMINCT * KMINCT=MATASS.KMINC MATELE.KMINC=KMINCT MATELE.KMINCP=KMINCT MATELE.KMINCD=KMINCT * * Il faut reconstruire un profil Morse pour MATELE * NTTDDL=MATASS.KNTTT MATELE.KNTTT=NTTDDL MATELE.KNTTP=NTTDDL MATELE.KNTTD=NTTDDL IDMATP=MATASS.KIDMAT(1) IDMATD=MATASS.KIDMAT(2) MATELE.KIDMAT(1)=IDMATP MATELE.KIDMAT(2)=IDMATD PMTOT2=MATASS.KIDMAT(4) SEGINI,PMTOT=PMTOT2 MATELE.KIDMAT(4)=PMTOT NNZTOT=PMTOT.JA(/1) SEGDES PMTOT * * L'ensemble des inconnues * SEGACT KMINCT NTOTIN=KMINCT.LISINC(/2) JGN=LNMOTS JGM=NTOTIN SEGINI LITOT DO 3 ITOTIN=1,NTOTIN 3 CONTINUE SEGDES LITOT SEGDES KMINCT * * Le repérage dans KSPGT * SEGACT KJSPGT NTOTPO=KJSPGT.NUM(/2) NTOGPO=nbpts JG=NTOGPO SEGINI KRSPGT * SEGACT KRSPGT SEGDES KRSPGT SEGDES KJSPGT * * Ordonnancement du profil Morse total * SEGACT PMTOT*MOD NTTDDL=PMTOT.IA(/1)-1 NNZTOT=PMTOT.JA(/1) JG=MAX(NTTDDL+1,2*NNZTOT) SEGINI IWORK $ IWORK.LECT,.FALSE.) SEGSUP IWORK SEGDES PMTOT * * Assemblage des matrices élémentaires * SEGACT LITOT NBVA=NNZTOT SEGINI IZATOT SEGDES IZATOT DO 77 IMATE=1,NMATE MELPRI=MATELE.IRIGEL(1,IMATE) MELDUA=MATELE.IRIGEL(2,IMATE) IMATEL=MATELE.IRIGEL(4,IMATE) SEGACT IMATEL * repérage dans la primale JG=NME SEGINI KRINCP $ KRINCP.LECT, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * repérage dans la duale LNM=IMATEL.LISDUA(/1) NME=IMATEL.LISDUA(/2) JG=NME SEGINI KRINCD $ IMATEL.LISDUA,LITOT.MOTS, $ KRINCD.LECT, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 $ KRINCD,KRINCP,KMINCT,KRSPGT, $ PMTOT,IDMATP,IDMATD, $ IZATOT, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * * Cas particulier : celui des matrices CCt * ITYMAT=MATELE.IRIGEL(7,IMATE) IF (ITYMAT.EQ.4.OR.ITYMAT.EQ.-4) THEN $ KRINCD,KRINCP,KMINCT,KRSPGT, $ PMTOT,IDMATP,IDMATD, $ IZATOT, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ENDIF SEGSUP KRINCD SEGSUP KRINCP SEGDES IMATEL 77 CONTINUE SEGSUP LITOT SEGSUP KRSPGT MATELE.KIDMAT(5)=IZATOT SEGDES MATELE SEGDES MATASS * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine prase2' RETURN * * End of subroutine PRASE2 * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales