relr13
C RELR13 SOURCE PV 20/03/30 21:23:57 10567 $ MINCP,MINCD, $ IMPR,IRET) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : RELR13 C DESCRIPTION : * * Construction des tableaux de correspondance ddl <-> (point, nom de * variable) : * - pour les inconnues primales : MINCP * - pour les inconnues duales : MINCD * C C C C LANGAGE : ESOPE C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF) C mél : gounand@semt2.smts.cea.fr C*********************************************************************** C APPELES : C APPELES (E/S) : C APPELES (BLAS) : C APPELES (CALCUL) : C APPELE PAR : C*********************************************************************** C SYNTAXE GIBIANE : C ENTREES : C ENTREES/SORTIES : C SORTIES : C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 27/06/2003, version initiale C HISTORIQUE : v1, 27/06/2003, création C HISTORIQUE : 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*********************************************************************** -INC PPARAM -INC CCOPTIO -INC SMCOORD -INC SMRIGID POINTEUR MLIN.MRIGID POINTEUR DES.DESCR -INC SMELEME POINTEUR MEL.MELEME * Includes persos CBEGININCLUDE SMMINC SEGMENT MINC INTEGER NPOS(NPT+1) INTEGER MPOS(NPT,NBI+1) ENDSEGMENT SEGMENT IMINC INTEGER LNUPO (NDDL) INTEGER LNUINC(NDDL) ENDSEGMENT CENDINCLUDE SMMINC POINTEUR MINCP.MINC POINTEUR MINCD.MINC * -INC SMLENTI POINTEUR KJSPGP.MLENTI POINTEUR KJSPGD.MLENTI POINTEUR KRSPGP.MLENTI POINTEUR KRSPGD.MLENTI POINTEUR KRINCP.MLENTI POINTEUR KRINCD.MLENTI -INC SMLMOTS POINTEUR LINCP.MLMOTS POINTEUR LINCD.MLMOTS * INTEGER IMPR,IRET * LOGICAL LEXIST * * Executable statements * IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans relr13.eso' SEGACT MLIN NRIG=MLIN.IRIGEL(/2) * * Primale * * Construction du segment de repérage dans l'ensemble des points SEGACT KJSPGP NPOPRI=KJSPGP.LECT(/1) JG=nbpts SEGINI KRSPGP SEGDES KJSPGP SEGACT LINCP * Initialisation de MINCP NPT=NPOPRI NBI=NINCP SEGINI MINCP DO IRIG=1,NRIG MEL=MLIN.IRIGEL(1,IRIG) SEGACT MEL NEL=MEL.NUM(/2) DES=MLIN.IRIGEL(3,IRIG) SEGACT DES NDDL=DES.NOELEP(/1) * Construction du segment de repérage dans les inconnues primales JG=DES.LISINC(/2) SEGINI KRINCP $ DES.LISINC,LINCP.MOTS, $ KRINCP.LECT, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 DO IEL=1,NEL DO IDDL=1,NDDL IPO=KRSPGP.LECT(MEL.NUM(DES.NOELEP(IDDL),IEL)) IINC=KRINCP.LECT(IDDL) * On cherche si l'inconnue n'existe pas déjà dans MPOS LEXIST=(MINCP.MPOS(IPO,IINC).NE.0) * Sinon, on la rajoute... IF (.NOT.LEXIST) THEN NPOINC=MINCP.MPOS(IPO,NINCP+1)+1 MINCP.MPOS(IPO,NINCP+1)=NPOINC MINCP.MPOS(IPO,IINC) =NPOINC ENDIF ENDDO ENDDO SEGSUP KRINCP SEGDES DES SEGDES MEL ENDDO * Remplisssage de NPOS MINCP.NPOS(1)=1 DO IPOPRI=1,NPOPRI MINCP.NPOS(IPOPRI+1)=MINCP.NPOS(IPOPRI) $ + MINCP.MPOS(IPOPRI,NINCP+1) ENDDO SEGDES MINCP SEGDES LINCP SEGSUP KRSPGP * * Duale (copie conforme de ci-dessus) * * Construction du segment de repérage dans l'ensemble des points SEGACT KJSPGD NPODUA=KJSPGD.LECT(/1) JG=nbpts SEGINI KRSPGD SEGDES KJSPGD SEGACT LINCD * Initialisation de MINCP NPT=NPODUA NBI=NINCD SEGINI MINCD DO IRIG=1,NRIG MEL=MLIN.IRIGEL(1,IRIG) SEGACT MEL NEL=MEL.NUM(/2) DES=MLIN.IRIGEL(3,IRIG) SEGACT DES NDDL=DES.NOELED(/1) * Construction du segment de repérage dans les inconnues primales JG=DES.LISDUA(/2) SEGINI KRINCD $ DES.LISDUA,LINCD.MOTS, $ KRINCD.LECT, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 DO IEL=1,NEL DO IDDL=1,NDDL IPO=KRSPGD.LECT(MEL.NUM(DES.NOELED(IDDL),IEL)) IINC=KRINCD.LECT(IDDL) * On cherche si l'inconnue n'existe pas déjà dans MPOS LEXIST=(MINCD.MPOS(IPO,IINC).NE.0) * Sinon, on la rajoute... IF (.NOT.LEXIST) THEN NPOINC=MINCD.MPOS(IPO,NINCD+1)+1 MINCD.MPOS(IPO,NINCD+1)=NPOINC MINCD.MPOS(IPO,IINC) =NPOINC ENDIF ENDDO ENDDO SEGSUP KRINCD SEGDES DES SEGDES MEL ENDDO * Remplisssage de NPOS MINCD.NPOS(1)=1 DO IPODUA=1,NPODUA MINCD.NPOS(IPODUA+1)=MINCD.NPOS(IPODUA) $ + MINCD.MPOS(IPODUA,NINCD+1) ENDDO SEGDES MINCD SEGDES LINCD SEGSUP KRSPGD SEGDES MLIN * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine relr13' RETURN * * End of subroutine RELR13 * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales