cv2cp9
C CV2CP9 SOURCE GOUNAND 21/06/02 21:15:35 11022 $ MYFALS, $ MYCHPO, $ IMPR,IRET) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : CV2CP9 C DESCRIPTION : Transforme un MCHAEL en MCHPOI 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 : C APPELE PAR : PRLS92 C*********************************************************************** C ENTREES : * CGEOME (type MELEME) : maillage de QUAFs C partitionné. C * MYDISC (type CH*(4)) : nom d'espace de C discrétisation (cf. NOMFA dans l'include C SFALRF) C * MYFALS (type FALRFS) : segment de description C des familles d'éléments de références. C SORTIES : * MYMCHA (type MCHAEL) : champ par éléments de C la grandeur tensorielle (degrés de liberté de C la grandeur). C ENTREES/SORTIES : - C TRAVAIL : C (1, nb. ddl, NCOMPD, NCOMPP, 1, nb. élément) C C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 07/10/02, version initiale C HISTORIQUE : v1, 07/10/02, 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 SMCHPOI POINTEUR MYCHPO.MCHPOI -INC TMTRAV POINTEUR MYMTRA.MTRAV INTEGER NNIN,NNNOE -INC SMELEME POINTEUR SOUMAI.MELEME POINTEUR MELTOT.MELEME POINTEUR SMLTOT.MELEME POINTEUR ML1TOT.MELEME INTEGER NBNN,NBELEM,NBSOUS,NBREF -INC SMLMOTS POINTEUR MYLMOT.MLMOTS -INC SMLENTI POINTEUR KRIGEO.MLENTI INTEGER JG * * Includes persos * -INC TNLIN *-INC SMCHAEL POINTEUR MYMCHA.MCHAEL POINTEUR MZMCHA.MCHEVA *-INC SFALRF POINTEUR MYFALS.FALRFS *-INC SELREF POINTEUR MYLRF.ELREF * * Includes persos * * Liste de MELEME INTEGER NBMEL SEGMENT MELS POINTEUR LISMEL(NBMEL).MELEME ENDSEGMENT POINTEUR GPMELS.MELS * CHARACTER*(4) MYDISC INTEGER IMPR,IRET * INTEGER NDLIG,NDCOL,N2DLIG,N2DCOL,NDNOEU,NDELM INTEGER IDELM INTEGER IBEL,IDDL,ISOUS,ITQUAF INTEGER NBEL,NDDL,NSOUS INTEGER NNGLO,NNLOC,NNQUA INTEGER ININ,INNOE INTEGER NTOGPO * * Executable statements * IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans cv2cp9' * * Création de MELTOT maillage des points sur lesquels reposent les ddl * (il y a des doublons) * SEGACT MYMCHA * SEGPRT,MYMCHA NSOUS=MYMCHA.JMACHE(/1) * NBNN=0 NBELEM=0 NBSOUS=NSOUS NBREF=0 SEGINI,MELTOT DO 1 ISOUS=1,NSOUS SOUMAI=MYMCHA.JMACHE(ISOUS) SEGACT SOUMAI * On cherche l'élément fini correspondant au QUAF ITQUAF=SOUMAI.ITYPEL $ MYFALS, $ MYLRF, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 SEGACT MYLRF NDDL=MYLRF.NPQUAF(/1) * NBNN=NDDL NBELEM=NBEL NBSOUS=0 NBREF=0 SEGINI,SMLTOT DO IDDL=1,NDDL NNQUA=MYLRF.NPQUAF(IDDL) NNGLO=SOUMAI.NUM(NNQUA,IBEL) SMLTOT.NUM(IDDL,IBEL)=NNGLO ENDDO ENDDO SEGDES,SMLTOT MELTOT.LISOUS(ISOUS)=SMLTOT SEGDES,MYLRF SEGDES,SOUMAI 1 CONTINUE SEGDES,MELTOT SEGDES,MYMCHA * * On construit ML1TOT, ensemble des points de MELTOT * NBMEL=1 SEGINI,GPMELS GPMELS.LISMEL(1)=MELTOT $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 SEGSUP,GPMELS * * Destruction de MELTOT * SEGACT,MELTOT*MOD DO 3 ISOUS=1,NSOUS SMLTOT=MELTOT.LISOUS(ISOUS) * SEGACT,SMLTOT SEGSUP,SMLTOT 3 CONTINUE SEGSUP,MELTOT * * Initialisation de MYMTRA * SEGACT MYLMOT SEGACT ML1TOT NNNOE=ML1TOT.NUM(/2) SEGINI,MYMTRA * Remplissage de MYMTRA.INCO et MYMTRA.IGEO DO ININ=1,NNIN ENDDO DO INNOE=1,NNNOE MYMTRA.IGEO(INNOE)=ML1TOT.NUM(1,INNOE) ENDDO SEGSUP,ML1TOT SEGDES,MYLMOT * Création du segment de repérage dans MYMTRA.IGEO NTOGPO=nbpts JG=NTOGPO SEGINI,KRIGEO $ KRIGEO.LECT,NTOGPO, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 * Remplissage de MYMTRA.BB et MYMTRA.IBIN SEGACT,MYMCHA DO 5 ISOUS=1,NSOUS SOUMAI=MYMCHA.JMACHE(ISOUS) SEGACT,SOUMAI MZMCHA=MYMCHA.ICHEVA(ISOUS) IF (MZMCHA.NE.0) THEN SEGACT,MZMCHA * On cherche l'élément fini correspondant au QUAF ITQUAF=SOUMAI.ITYPEL $ MYFALS, $ MYLRF, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 SEGACT MYLRF NDDL=MYLRF.NPQUAF(/1) * Petits tests NDLIG=MZMCHA.WELCHE(/1) NDCOL=MZMCHA.WELCHE(/2) N2DLIG=MZMCHA.WELCHE(/3) N2DCOL=MZMCHA.WELCHE(/4) NDNOEU=MZMCHA.WELCHE(/5) NDELM=MZMCHA.WELCHE(/6) IF (.NOT.( (NDLIG.EQ.1.AND.NDCOL.EQ.NDDL) $ .OR. (NDLIG.EQ.NDDL.AND.NDCOL.EQ.1)) $ .OR.N2DLIG.NE.1 $ .OR.N2DCOL.NE.1.OR.NDNOEU.NE.1 WRITE(IOIMP,*) 'Erreur dims MZMCHA' GOTO 9999 ENDIF IF (NDELM.EQ.1) THEN IDELM=1 ELSE IDELM=IBEL ENDIF DO IDDL=1,NDDL IF (NDLIG.EQ.1) THEN ILIG=1 ICOL=IDDL ELSE ILIG=IDDL ICOL=1 ENDIF NNQUA=MYLRF.NPQUAF(IDDL) NNGLO=SOUMAI.NUM(NNQUA,IBEL) NNLOC=KRIGEO.LECT(NNGLO) IF (NNLOC.EQ.0) THEN WRITE(IOIMP,*) 'Erreur de programmation 1' GOTO 9999 ENDIF ININ=MYLRF.NUMCMP(IDDL) MYMTRA.IBIN(ININ,NNLOC)=1 MYMTRA.BB(ININ,NNLOC)=MYMTRA.BB(ININ,NNLOC) $ +MZMCHA.WELCHE(ILIG,ICOL,1,1,1,IDELM) ENDDO ENDDO SEGDES,MYLRF SEGDES,MZMCHA ENDIF SEGDES,SOUMAI 5 CONTINUE SEGDES,MYMCHA SEGSUP,KRIGEO * * Transformation l'objet MTRAV en chpoint * SEGSUP MYMTRA SEGACT MYCHPO*MOD MYCHPO.JATTRI(1)=2 SEGDES MYCHPO * IMPR=6 IF (IMPR.GT.3) THEN CALL PRLIST ENDIF * IMPR=0 * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine cv2cp9' RETURN * * End of subroutine CV2CP9 * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales