excomp
C EXCOMP SOURCE PV090527 24/02/29 21:15:03 11854 SUBROUTINE EXCOMP C======================================================================= C C OPERATEUR EXTRACTION D UNE COMPOSANTE D UN CHPOINT C D UN MCHAML C DE QUELQUES COMPOSANTES D UN MCHAML C C CH2 = EXCO | MOT1 (MOT2) | (n1) (n2) ('NOID') CH1 ... C | LISM1 (LISM2) | C C ... ('NATURE' |'INDETER'| ) ; C |'DIFFUS' | C |'DISCRET'| C C======================================================================= IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMLMOTS -INC SMCHPOI -INC SMCHAML CHARACTER*4 NOVE(1),NATU(3) CHARACTER*(LOCOMP) MOT,MOT2,MOT3 DATA NOVE/'NOID'/ DATA NATU/'INDE','DIFF','DISC'/ C C LISTE DE MOT OU MOT SIMPLE C MOT =' ' LISM1= 0 LISM2= 0 C Syntaxe 2 : on tente de lire un LISTMOTS C Syntaxe 1 : si abscence de LISTMOTS, on lit un simple MOT IF(IRT1.EQ.0) THEN MOT2='SCAL' IF(IERR.NE.0) RETURN ENDIF C Cbp : Lecture eventuelle de l'harmonique de Fourier en entre /sortie IF(IRET1.NE.0) THEN IF(IRET2.EQ.0) NIF2=NIFOUR ELSE NIF1=NIFOUR NIF2=NIFOUR ENDIF IF(IERR.NE.0) RETURN C C Lecture de l'option 'NOID' * pv NOID automatique le 29/2/24 NOID=1 C C Pour la syntaxe 2, on tente la lecture d'un second LISTMLOTS IF(IRT1.NE.0) THEN ENDIF C C C----------------------------------------------- C CAS D'UN OBJET CHPOINT C----------------------------------------------- IF(IRT2.EQ.0) GOTO 100 C On essaie de lire le nouveau nom et la nature (facultatif) MCHPOI = IPCH1 JATT1 = JATTRI(1)+1 IF (IRETOU .GE. 1) THEN IF (MOT2(1:4) .EQ. 'NATU' ) THEN C jatt va stocker la nature IF(IERR.NE.0) RETURN MOT2='SCAL' ELSE C MOT2 est le nouveau nom de la composante C on essaie a nouveau de lire la nature IF (IRETOU .GE. 1) THEN IF (MOT3(1:4) .EQ. 'NATU' ) THEN IF(IERR.NE.0) RETURN ELSE C 'NATU' n'est pas specifie on continue... CALL REFUS ENDIF ENDIF ENDIF ENDIF C Syntaxe 1 (avec des MOTs simples) IF (LISM1.EQ.0) THEN IF(IERR.NE.0) RETURN C Syntaxe 2 (avec des LISTMOTS) ELSE MLMOTS=LISM1 SEGACT MLMOTS C Erreur si les deux LISTMOTS ne sont pas de meme dimension IF (LISM2.NE.0) THEN MLMOT2=LISM2 SEGACT,MLMOT2 RETURN ENDIF ENDIF IPCH2=0 C Erreur si le premier LISTMOTS est vide NAT =1 NSOUPO=0 SEGINI,MCHPOI IPCH2 =MCHPOI C On place un soucis avec le numero de l'erreur qu'on pourrait emettre MOTERR(1:8)='LISTMOTS' INTERR(1)=MLMOTS CALL SOUCIS(356) ELSE C On fait le job en bouclant sur les mots IF (LISM2.NE.0) THEN ELSE ENDIF IF(IERR.NE.0) RETURN IF(IPCH2.EQ.0) THEN IPCH2=IPCH3 ELSE IF(IERR.NE.0) RETURN IPCH2=IPCHR ENDIF ENDDO ENDIF ENDIF C On ajuste la nature du champ MCHPOI=IPCH2 mochde='CHPOINT cree par EXCOMP' mtypoi='SCALAIRE' JATTRI(1)=JATT1-1 C On ecrit le CHPOINT resultat dans la pile RETURN C --------------------------------------------- C CAS D'UN OBJET MCHAML C --------------------------------------------- 100 CONTINUE IF(IRT3.EQ.0) GO TO 300 IF(IRETOU.EQ.0) MOT2=MOT IF (LISM1.EQ.0) THEN C Syntaxe 1 (avec des MOTs simples) IF(IERR.NE.0) RETURN ELSE C Syntaxe 2 (avec des LISTMOTS) MLMOTS=LISM1 SEGACT MLMOTS C Erreur si les deux LISTMOTS ne sont pas de meme dimension IF (LISM2.NE.0) THEN MLMOT2=LISM2 SEGACT,MLMOT2 RETURN ENDIF ELSE MLMOT2 = MLMOTS ENDIF C Si le premier LISTMOTS est vide N1=0 N3=0 L1=8 SEGINI,MCHELM ICHE2 =MCHELM IFOCHE=IFOMOD TITCHE=' ' C On place un soucis avec le numero de l'erreur qu'on pourrait emettre MOTERR(1:8)='LISTMOTS' INTERR(1)=MLMOTS CALL SOUCIS(356) ELSE ENDIF ENDIF C On ecrit le MCHAML resultat dans la pile RETURN C C PAS D OPERANDE CORRECTE TROUVE C IF(IRETOU.NE.0) THEN ELSE ENDIF END
© Cast3M 2003 - Tous droits réservés.
Mentions légales