liravs
C LIRAVS SOURCE FANDEUR 22/01/12 21:15:02 11265 SUBROUTINE LIRAVS CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C BUT: Lecture des données provenant de AVS sous forme de C fichier UCD (Unstructured Cell Data) ASCII. Les données C sont logées dans une table qui est renvoyée comme C résultat. C C Auteur : Michel Bulik C Septembre 1994 C C Appelé par : LIREFI C C FA7902 Modifications ordre des noeuds pour TE10 C (2014/01) Ajout lecture commentaires entete du fichier CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCREDLE -INC SMCOORD -INC SMELEME -INC SMTABLE -INC SMCHAML -INC SMCHPOI CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SEGMENT LISTMA POINTEUR PTMA(NBSZEL).MELEME INTEGER TYPDEL(NBSZEL) INTEGER NUMEMA(NOMBEL) INTEGER NUMELE(NOMBEL) ENDSEGMENT C C Description du segment LISTMA (LISTe des MAillages) C C Paramètres : NBSZEL - NomBre de Sous Zones ELémentaires C NOMBEL - NOMBre total des ELéments C C Tableaux : PTMA - PoinTeurs sur des MAillages élémentaires C MATER - numéros des MATERiaux des sous-zones C TYPDEL - TYPes Des ELéments des sous-zones (=ITYPEL) C NUMEMA - NUMEros des MAillages auquels appartiennent C les éléments (1..NBSZEL) C NUMELE - le NUMéro de l'ELEment dans sa sous zone C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SEGMENT LISTCO ENDSEGMENT C C Description du segment LISTCO (LISTe des COmposantes du MCHAML) C C Paramètres : NBCOMP - le NomBre des COMPosantes C NBDELE - le NomBre D'ELEments C C Tableaux : LESNOM - LES NOMs des composantes C LESCOM - LES COMposantes elles memes C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SEGMENT LISGRC INTEGER LESGRC(NBGRCO) ENDSEGMENT C C Description du segment LISGRC (LISTe des GRoupes de Composantes) C C Paramètres : NBGRCO - le NomBre de GRoupes de COmposantes C C Tableaux : LESGRC - LES GRoupes des Composantes C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CHARACTER*8 MTYPEL C ... Tableau où on stocke temporairement les connectivités lues ... INTEGER ICONNT(20) C ... Conversion MAJUSCULE/minuscule CHARACTER*26 MINU,MAJU C ... Tableaux de conversion de connectivités (IC<nom_élément>) ... DIMENSION ICPOI1( 1) DIMENSION ICSEG2( 2) DIMENSION ICSEG3( 3) DIMENSION ICTRI3( 3) DIMENSION ICTRI6( 6) DIMENSION ICQUA4( 4) DIMENSION ICQUA8( 8) DIMENSION ICCUB8( 8) DIMENSION ICCU20(20) DIMENSION ICPRI6( 6) DIMENSION ICPR15(15) DIMENSION ICTET4( 4) DIMENSION ICTE10(10) DIMENSION ICPYR5( 5) DIMENSION ICPY13(13) DATA ICPOI1 / 1/ DATA ICSEG2 / 1, 2/ DATA ICSEG3 / 1, 3, 2/ DATA ICTRI3 / 1, 2, 3/ DATA ICTRI6 / 1, 4, 2, 5, 3, 6/ DATA ICQUA4 / 1, 2, 3, 4/ DATA ICQUA8 / 1, 5, 2, 6, 3, 7, 4, 8/ DATA ICCUB8 / 1, 2, 3, 4, 5, 6, 7, 8/ DATA ICCU20 / 1, 9, 2,10, 3,11, 4,12,17,18, & 19,20, 5,13, 6,14, 7,15, 8,16/ DATA ICPRI6 / 1, 2, 3, 4, 5, 6/ DATA ICPR15 / 1, 7, 2, 8, 3, 9,14,13,15, 4, & 10, 5,11, 6,12/ DATA ICTET4 / 1, 2, 3, 4/ DATA ICTE10 / 1, 5, 2, 8, 3, 6, 7,10, 9, 4/ DATA ICPYR5 / 2, 3, 4, 5, 1/ DATA ICPY13 / 2,10, 3,11, 4,12, 5,13, 6, 7, & 8, 9, 1/ DATA MINU / 'abcdefghijklmnopqrstuvwxyz' / DATA MAJU / 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' / C ... Sauvetage de la lecture ... C* Dans le cas ou la dimension n'est pas connue (IDIM=0), il faudrait C* qu'elle le soit a la lecture du fichier selon les coordonnees lues ! C* Voir par exemple ce qui est fait dans LIRUNV.eso ! IF(IDIM.EQ.0) IDIM=3 LISTMA=0 C ... Création de la table de sortie ... C ... Lecture de la première ligne ... 9010 CONTINUE READ(IOCAR,3000,ERR=9999,END=9999) TEXT(1:256) C ... On saute les lignes de commentaires qui n'existent qu'en entete ... IF (TEXT(1:1).EQ.'#') GOTO 9010 3000 FORMAT(A256) CNONF77 READ(LIGNE,*,ERR=9999) NBNPTS,NBELTS,NBCONO,NBCOEL,NBCOGL NRAN=0 ICOUR=256 IFINAN=257 IF(IRE.EQ.1) THEN NBNPTS=NFIX ELSE GOTO 9999 ENDIF IF(IRE.EQ.1) THEN NBELTS=NFIX ELSE GOTO 9999 ENDIF IF(IRE.EQ.1) THEN NBCONO=NFIX ELSE GOTO 9999 ENDIF IF(IRE.EQ.1) THEN NBCOEL=NFIX ELSE GOTO 9999 ENDIF IF(IRE.EQ.1) THEN NBCOGL=NFIX ELSE GOTO 9999 ENDIF CDEBUG write(ioimp,*) 'NBNPTS = ',NBNPTS CDEBUG write(ioimp,*) 'NBELTS = ',NBELTS CDEBUG write(ioimp,*) 'NBCONO = ',NBCONO CDEBUG write(ioimp,*) 'NBCOEL = ',NBCOEL C ... Lecture des coordonnées ... SEGACT MCOORD*mod NBANC=nbpts NBNOUV=NBANC+NBNPTS NBPTS=NBNOUV SEGADJ MCOORD NDEBB=NBANC+1 NBC=IDIM+1 DO 3020 J=NDEBB,NBNOUV READ (IOCAR,3000,ERR=9999,END=9999) TEXT(1:256) IF (TEXT(1:1).EQ.'#') GOTO 9999 CMB ... AVS donne toujours 3 coordonnées ... CNONF77 READ (LIGNE,*,ERR=9999) IKK,(XCOOR((J-1)*NBC+I),I=1,3) NRAN=0 ICOUR=256 IFINAN=257 IF(IRE.EQ.1) THEN IKK=NFIX ELSE GOTO 9999 ENDIF c* On suppose que J = NBANC + IKK ! NUMNO = (J-1) * NBC C ... On ne lit que IDIM coordonnees (et non systematiquement 3 !) DO 3015 I=1,IDIM IF(IRE.EQ.1.OR.IRE.EQ.2) THEN ELSE GOTO 9999 ENDIF 3015 CONTINUE C ... On met la densite a 0 XCOOR(NUMNO+NBC)=0.D0 3020 CONTINUE CDEBUG write(ioimp,*) 'Lecture des noeuds terminée' C ... Préparation du support des champs de vitesses (composé des POI1) ... IPT2=0 NBELEM=NBNPTS NBNN=1 NBSOUS=0 NBREF=0 SEGINI IPT2 IPT2.ITYPEL=1 DO 3025 I=NBANC+1,NBANC+NBNPTS IPT2.NUM(1,I-NBANC)=I c* IPT2.ICOLOR(I-NBANC)=0 3025 CONTINUE & 'MAILLAGE',0,0.d0,' ',.FALSE.,IPT2) SEGDES IPT2 CDEBUG write(ioimp,*) 'Préparation du support du CHPOINT terminée' C ... Lecture du maillage ... NBSZEL=0 NOMBEL=NBELTS SEGINI LISTMA DO 3030 I=1,NBELTS READ(IOCAR,3000,ERR=9999,END=9999) TEXT(1:256) IF (TEXT(1:1).EQ.'#') GOTO 9999 CNONF77 READ(LIGNE,*,ERR=9999) INUMEL,INUMAT,MTYPEL NRAN=0 ICOUR=256 IFINAN=257 IF(IRE.EQ.1) THEN INUMEL=NFIX ELSE GOTO 9999 ENDIF IF(IRE.EQ.1) THEN INUMAT=NFIX ELSE GOTO 9999 ENDIF IF(IRE.EQ.3) THEN DO 3031 IAUX=1, NCAR IRAL=INDEX(MAJU,MOT(IAUX:IAUX)) IF (IRAL.NE.0) MOT(IAUX:IAUX)=MINU(IRAL:IRAL) 3031 CONTINUE MTYPEL=MOT(1:NCAR) ELSE GOTO 9999 ENDIF IF (MTYPEL.EQ.'pt ') THEN CNONF77 READ(LIGNE,*,END=9999) INUMEL,INUMAT,MTYPEL, CNONF77 & ICONNT(1) IF(IRE.EQ.1) THEN ICONNT(1)=NFIX ELSE GOTO 9999 ENDIF ITELAC=1 GOTO 3030 ELSE IF(MTYPEL.EQ.'line ') THEN CNONF77 READ(LIGNE,*,END=5299) INUMEL,INUMAT,MTYPEL, CNONF77 & (ICONNT(J),J=1,3) NBENT=0 DO 5250 J=1,3 IF(IRE.EQ.1) THEN ICONNT(J)=NFIX ELSE GOTO 5299 ENDIF NBENT=J 5250 CONTINUE C ... C'est un SEG3 ... ITELAC=3 GOTO 3030 C ... C'est un SEG2 ... 5299 IF(NBENT.NE.2) GOTO 9999 ITELAC=2 GOTO 3030 ELSE IF(MTYPEL.EQ.'tri ') THEN CNONF77 READ(LIGNE,*,END=5399) INUMEL,INUMAT,MTYPEL, CNONF77 & (ICONNT(J),J=1,6) NBENT=0 DO 5350 J=1,6 IF(IRE.EQ.1) THEN ICONNT(J)=NFIX ELSE GOTO 5399 ENDIF NBENT=J 5350 CONTINUE C ... C'est un TRI6 ... ITELAC=6 GOTO 3030 C ... C'est un TRI3 ... 5399 IF(NBENT.NE.3) GOTO 9999 ITELAC=4 GOTO 3030 ELSE IF(MTYPEL.EQ.'quad ') THEN CNONF77 READ(LIGNE,*,END=5499) INUMEL,INUMAT,MTYPEL, CNONF77 & (ICONNT(J),J=1,8) NBENT=0 DO 5450 J=1,8 IF(IRE.EQ.1) THEN ICONNT(J)=NFIX ELSE GOTO 5499 ENDIF NBENT=J 5450 CONTINUE C ... C'est un QUA8 ... ITELAC=10 GOTO 3030 C ... C'est un QUA4 ... 5499 IF(NBENT.NE.4) GOTO 9999 ITELAC=8 GOTO 3030 ELSE IF(MTYPEL.EQ.'tet ') THEN CNONF77 READ(LIGNE,*,END=5599) INUMEL,INUMAT,MTYPEL, CNONF77 & (ICONNT(J),J=1,10) NBENT=0 DO 5550 J=1,10 IF(IRE.EQ.1) THEN ICONNT(J)=NFIX ELSE GOTO 5599 ENDIF NBENT=J 5550 CONTINUE C ... C'est un TE10 ... ITELAC=24 GOTO 3030 C ... C'est un TET4 ... 5599 IF(NBENT.NE.4) GOTO 9999 ITELAC=23 GOTO 3030 ELSE IF(MTYPEL.EQ.'pyr ') THEN CNONF77 READ(LIGNE,*,END=5699) INUMEL,INUMAT,MTYPEL, CNONF77 & (ICONNT(J),J=1,13) NBENT=0 DO 5650 J=1,13 IF(IRE.EQ.1) THEN ICONNT(J)=NFIX ELSE GOTO 5699 ENDIF NBENT=J 5650 CONTINUE C ... C'est un PY13 ... ITELAC=26 GOTO 3030 C ... C'est un PYR5 ... 5699 IF(NBENT.NE.5) GOTO 9999 ITELAC=25 GOTO 3030 ELSE IF(MTYPEL.EQ.'prism ') THEN CNONF77 READ(LIGNE,*,END=5799) INUMEL,INUMAT,MTYPEL, CNONF77 & (ICONNT(J),J=1,15) NBENT=0 DO 5750 J=1,15 IF(IRE.EQ.1) THEN ICONNT(J)=NFIX ELSE GOTO 5799 ENDIF NBENT=J 5750 CONTINUE C ... C'est un PR15 ... ITELAC=17 GOTO 3030 C ... C'est un PRI6 ... 5799 IF(NBENT.NE.6) GOTO 9999 ITELAC=16 GOTO 3030 ELSE IF(MTYPEL.EQ.'hex ') THEN CNONF77 READ(LIGNE,*,END=5899) INUMEL,INUMAT,MTYPEL, CNONF77 & (ICONNT(J),J=1,20) NBENT=0 DO 5850 J=1,20 IF(IRE.EQ.1) THEN ICONNT(J)=NFIX ELSE GOTO 5899 ENDIF NBENT=J 5850 CONTINUE C ... C'est un CU20 ... ITELAC=15 GOTO 3030 C ... C'est un CUB8 ... 5899 IF(NBENT.NE.8) GOTO 9999 ITELAC=14 GOTO 3030 ELSE MOTERR(1:8)=MTYPEL GOTO 9000 ENDIF 3030 CONTINUE CDEBUG WRITE(IOIMP,*) 'Maillage lu' CDEBUG WRITE(IOIMP,*) ' NBSZEL = ',NBSZEL C ... On décale les connectivités ... DO 3035 K=1,NBSZEL IPT5=LISTMA.PTMA(K) SEGACT IPT5*MOD NBNN=IPT5.NUM(/1) NBELEM=IPT5.NUM(/2) DO I=1,NBNN DO J=1,NBELEM IPT5.NUM(I,J)=IPT5.NUM(I,J)+NBANC ENDDO ENDDO SEGDES IPT5 3035 CONTINUE CDEBUG WRITE(IOIMP,*) 'Connectivités décalées' C ... Création du chapeau des sous-maillages ... IF (NBSZEL.EQ.1) THEN MELEME = LISTMA.PTMA(1) ELSE MELEME=0 NBELEM=0 NBNN=0 NBSOUS=NBSZEL NBREF=1 SEGINI MELEME ITYPEL=0 LISREF(1)=IPT2 DO 3032 I=1,NBSZEL LISOUS(I)=LISTMA.PTMA(I) 3032 CONTINUE SEGDES MELEME ENDIF CDEBUG WRITE(IOIMP,*) 'Chapeau des maillages créé' & 'MAILLAGE',0,0.d0,' ',.FALSE.,MELEME) C ... On met les sous maillages dans une sous table indicée par leur numéros ... & 'TABLE ',0,0.d0,' ',.FALSE.,MTAB1) DO 3033 I=1,NBSZEL IPT8=LISTMA.PTMA(I) & 'MAILLAGE',0,0.d0,' ',.FALSE.,IPT8) 3033 CONTINUE CDEBUG WRITE(IOIMP,*) 'Maillages mis dans la table' C ... Lecture du CHPOINT ... IF(NBCONO.GT.0) THEN READ(IOCAR,3000,ERR=9999,END=9999) TEXT(1:256) IF (TEXT(1:1).EQ.'#') GOTO 9999 CNONF77 READ(LIGNE,*,ERR=9999) NBGRCO NRAN=0 ICOUR=256 IFINAN=257 IF(IRE.EQ.1) THEN NBGRCO=NFIX ELSE GOTO 9999 ENDIF SEGINI LISGRC CNONF77 READ(LIGNE,*,ERR=9999) NBGRCO,(LESGRC(I),I=1,NBGRCO) DO 3034 I=1,NBGRCO IF(IRE.EQ.1) THEN LESGRC(I)=NFIX ELSE GOTO 9999 ENDIF 3034 CONTINUE CDEBUG write(IOIMP,*) NBGRCO,(LESGRC(I),I=1,NBGRCO) NAT=1 NSOUPO=1 MCHPOI=0 SEGINI MCHPOI MTYPOI=' ' MOCHDE=' ' & //' ' JATTRI(1)=1 IFOPOI=IFOUR NC=NBCONO SEGINI MSOUPO IPCHP(1)=MSOUPO K = 0 DO 3079 I=1,NBGRCO READ(IOCAR,3000,ERR=9999,END=9999) TEXT(1:256) IF (TEXT(1:1).EQ.'#') GOTO 9999 DO 3077 J=1,LESGRC(I) K = K + 1 CNONF77 READ(LIGNE,*,END=3076) NOCOMP(K) CNONF77 3076 CONTINUE NRAN=0 ICOUR=256 IFINAN=257 IF(IRE.EQ.3) THEN NOCOMP(K)=MOT(1:NCAR) CDEBUG write(ioimp,*) 'Composante N° ',J,' = ',NOCOMP(K) ELSE GOTO 9999 ENDIF C ... Attention à la virgule qui n'est pas considérée comme un C séparateur par REDLEC ... DO 3075 INUMC=1,4 IF(NOCOMP(K)(INUMC:INUMC).EQ.',') THEN NOCOMP(K)(INUMC:4)=' ' GOTO 3076 ENDIF 3075 CONTINUE 3076 CONTINUE IF(LESGRC(I).GT.1) THEN IKK=LEN(NOCOMP(K)) ENDIF 3077 CONTINUE C ... Attention !!! Les noms des composantes des champs scalaires risquent de ne pas etre uniques C si la différence se trouve au délà du 4ème caractère !!! ... 3079 CONTINUE SEGSUP LISGRC IGEOC=IPT2 DO 3080 I=1,NC NOHARM(I)=0 3080 CONTINUE N=NBNPTS SEGINI MPOVAL IPOVAL=MPOVAL DO 3090 I=1,N READ(IOCAR,3000,ERR=9999,END=9999) TEXT(1:256) IF (TEXT(1:1).EQ.'#') GOTO 9999 CDEBUG write(ioimp,*) 'Ligne avec les composantes N°',I,' lue' CNONF77 READ(LIGNE,*,ERR=9999) IKK,(VPOCHA(I,J),J=1,NC) NRAN=0 ICOUR=256 IFINAN=257 IF(IRE.EQ.1) THEN IKK=NFIX ELSE GOTO 9999 ENDIF DO 30901 J=1,NC IF(IRE.EQ.1.OR.IRE.EQ.2) THEN ELSE GOTO 9999 ENDIF 30901 CONTINUE 3090 CONTINUE & 'CHPOINT ',0,0.d0,' ',.FALSE.,MCHPOI) SEGDES MPOVAL SEGDES MSOUPO SEGDES MCHPOI ENDIF CDEBUG WRITE(IOIMP,*) 'CHPOINT lu' C ... Lecture du champ par élément à NBCOEL composantes ... IF(NBCOEL.GT.0) THEN READ(IOCAR,3000,ERR=9999,END=9999) TEXT(1:256) IF (TEXT(1:1).EQ.'#') GOTO 9999 CNONF77 READ(LIGNE,*,ERR=9999) NBGRCO NRAN=0 ICOUR=256 IFINAN=257 IF(IRE.EQ.1) THEN NBGRCO=NFIX ELSE GOTO 9999 ENDIF SEGINI LISGRC CNONF77 READ(LIGNE,*,ERR=9999) NBGRCO,(LESGRC(I),I=1,NBGRCO) DO 3091 I=1,NBGRCO IF(IRE.EQ.1) THEN LESGRC(I)=NFIX ELSE GOTO 9999 ENDIF 3091 CONTINUE C ... On lit les noms et les valeurs des composantes ... NBCOMP=NBCOEL NBDELE=NBELTS SEGINI LISTCO K = 0 DO 3038 I=1,NBGRCO READ(IOCAR,3000,ERR=9999,END=9999) TEXT(1:256) IF (TEXT(1:1).EQ.'#') GOTO 9999 DO 3037 J=1,LESGRC(I) K = K + 1 CNONF77 READ(LIGNE,*,END=3099) LESNOM(K) CNONF77 3099 CONTINUE NRAN=0 ICOUR=256 IFINAN=257 IF(IRE.EQ.3) THEN LESNOM(K)=MOT(1:MIN(LOCOMP,NCAR)) ELSE GOTO 9999 ENDIF C ... Attention à la virgule qui n'est pas considérée comme un C séparateur par REDLEC ... DO 3092 INUMC=1,MIN(LOCOMP,NCAR) IF(LESNOM(K)(INUMC:INUMC).EQ.',') THEN LESNOM(K)(INUMC:MIN(LOCOMP,NCAR))=' ' GOTO 3093 ENDIF 3092 CONTINUE 3093 CONTINUE IF(LESGRC(I).GT.1) THEN IKK=LEN(LESNOM(K)) ENDIF 3037 CONTINUE 3038 CONTINUE SEGSUP LISGRC DO 3039 I=1,NBELTS READ(IOCAR,3000,ERR=9999,END=9999) TEXT(1:256) IF (TEXT(1:1).EQ.'#') GOTO 9999 CNONF77 READ(LIGNE,*,END=9999) IKK,(LESCOM(I,J),J=1,NBCOEL) NRAN=0 ICOUR=256 IFINAN=257 IF(IRE.EQ.1) THEN IKK=NFIX ELSE GOTO 9999 ENDIF DO 30391 J=1,NBCOEL IF(IRE.EQ.1.OR.IRE.EQ.2) THEN ELSE GOTO 9999 ENDIF 30391 CONTINUE 3039 CONTINUE C ... On prépare la structure des données ... MCHELM=0 L1=16 N1=NBSZEL N3=6 SEGINI MCHELM TITCHE='CARACTERISTIQUES' IFOCHE=IFOUR DO 3040 I=1,N1 CONCHE(I)=' ' IMACHE(I)=LISTMA.PTMA(I) INFCHE(I,1)=0 INFCHE(I,2)=0 INFCHE(I,3)=0 INFCHE(I,4)=0 INFCHE(I,5)=0 INFCHE(I,6)=2 MCHAML=0 N2=NBCOEL SEGINI MCHAML ICHAML(I)=MCHAML DO 3041 J=1,N2 NOMCHE(J)=LESNOM(J) TYPCHE(J)='REAL*8 ' MELVAL=0 N1PTEL=1 IPT9=LISTMA.PTMA(I) SEGACT IPT9 N1EL=IPT9.NUM(/2) SEGDES IPT9 N2PTEL=0 N2EL=0 SEGINI MELVAL IELVAL(J)=MELVAL 3041 CONTINUE 3040 CONTINUE C ... On n'a pas désactivé de segments MCHAML et MELVAL, ce sera fait + tard ... C ... Le transfert du LESCOM aux VELCHE correspondants ... DO I=1,NBCOEL DO J=1,NBELTS IKK=LISTMA.NUMEMA(J) MCHAM1=ICHAML(IKK) MELVA1=MCHAM1.IELVAL(I) MELVA1.VELCHE(1,LISTMA.NUMELE(J))=LESCOM(J,I) ENDDO ENDDO & 'MCHAML ',0,0.d0,' ',.FALSE.,MCHELM) C ... A la fin on désactive le MCHAML avec les dépendances ... DO 3046 I=1,NBSZEL MCHAM1=ICHAML(I) DO 3047 J=1,NBCOEL MELVA1=MCHAM1.IELVAL(J) SEGDES MELVA1 3047 CONTINUE SEGDES MCHAM1 3046 CONTINUE SEGDES MCHELM SEGSUP LISTCO ENDIF CDEBUG WRITE(IOIMP,*) 'MCHAML lu' C ... Lecture des composantes globales ... IF(NBCOGL.GT.0) THEN C ... Le nombre de groupes de composantes ... READ(IOCAR,3000,ERR=9999,END=9999) TEXT(1:256) IF (TEXT(1:1).EQ.'#') GOTO 9999 CNONF77 READ(LIGNE,*,ERR=9999) NBGRCO NRAN=0 ICOUR=256 IFINAN=257 IF(IRE.EQ.1) THEN NBGRCO=NFIX ELSE GOTO 9999 ENDIF C ... permet d'initialiser LISGRC ... SEGINI LISGRC C ... que l'on remplit par la suite ... CNONF77 READ(LIGNE,*,ERR=9999) NBGRCO,(LESGRC(I),I=1,NBGRCO) DO 3191 I=1,NBGRCO IF(IRE.EQ.1) THEN LESGRC(I)=NFIX ELSE GOTO 9999 ENDIF 3191 CONTINUE C ... ensuite on lit les noms des composantes ... NBCOMP=NBCOGL NBDELE=1 SEGINI LISTCO K = 0 DO 3138 I=1,NBGRCO READ(IOCAR,3000,ERR=9999,END=9999) TEXT(1:256) IF (TEXT(1:1).EQ.'#') GOTO 9999 DO 3137 J=1,LESGRC(I) K = K + 1 CNONF77 READ(LIGNE,*,END=3099) LESNOM(K) CNONF77 3099 CONTINUE NRAN=0 ICOUR=256 IFINAN=257 IF(IRE.EQ.3) THEN LESNOM(K)=MOT(1:NCAR) ELSE GOTO 9999 ENDIF C ... Attention à la virgule qui n'est pas considérée comme un C séparateur par REDLEC ... DO 3192 INUMC=1,MIN(4,NCAR) IF(LESNOM(K)(INUMC:INUMC).EQ.',') THEN LESNOM(K)(INUMC:MIN(4,NCAR))=' ' GOTO 3193 ENDIF 3192 CONTINUE 3193 CONTINUE C ... en leur ajoutant (si besoin est) leur N° dans le groupe ... IF(LESGRC(I).GT.1) THEN IKK=LEN(LESNOM(K)) ENDIF 3137 CONTINUE 3138 CONTINUE SEGSUP LISGRC C ... Puis, on on lit les composantes elles-mêmes ... READ(IOCAR,3000,ERR=9999,END=9999) TEXT(1:256) IF (TEXT(1:1).EQ.'#') GOTO 9999 CNONF77 READ(LIGNE,*,END=9999) IKK,(LESCOM(I,J),J=1,NBCOEL) NRAN=0 ICOUR=256 IFINAN=257 IF(IRE.EQ.1) THEN IKK=NFIX ELSE GOTO 9999 ENDIF DO 31391 J=1,NBCOGL IF(IRE.EQ.1.OR.IRE.EQ.2) THEN ELSE GOTO 9999 ENDIF 31391 CONTINUE C ... À la fin on les met dans la table ... DO 31392 J=1,NBCOGL MTYPEL(1:4) = LESNOM(J) VALFLO = LESCOM(1,J) & 'MOT ',0, 0.d0,MTYPEL(1:4),.FALSE.,0, & 'FLOTTANT',0,VALFLO, ' ',.FALSE.,0) 31392 CONTINUE SEGSUP LISTCO ENDIF C ... Sortie de la table ... SEGDES MTABLE C ... Fin du traitement du fichier AVS ... GOTO 9000 9999 CONTINUE 9000 CONTINUE IF(LISTMA.NE.0) THEN SEGSUP LISTMA ENDIF segsup sredle END
© Cast3M 2003 - Tous droits réservés.
Mentions légales