histo1
C HISTO1 SOURCE BP208322 16/06/02 21:15:03 8937 SUBROUTINE HISTO1 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C----------------------------------------------------------------------C C SUBROUTINE DE L'OPERATEUR "HIST" : C C APPELEE PAR HISTOG DANS LE CAS DE LA SYNTAXE 1 C C----------------------------------------------------------------------C -INC PPARAM -INC CCOPTIO -INC SMLENTI -INC SMLREEL PARAMETER(MMAX=8,NCLE=2) INTEGER KVAL(MMAX),KCLASS(MMAX) CHARACTER*4 MCLE(NCLE) DATA MCLE/'CLAS','OCCU'/ LOGICAL ZCLE(NCLE) C----------------------- ACQUISITION DES ENTREES ----------------------- C INITIALISATION A 0 DES TABLEAUX DO IM=1,MMAX KVAL(IM)=0 KCLASS(IM)=0 ENDDO DO ICLE=1,NCLE ZCLE(ICLE)=.FALSE. ENDDO C LECTURE DE M COUPLES DE LISTREEL M=0 101 CONTINUE IF (IERR.NE.0) RETURN IF (IRET.EQ.0) GOTO 102 M=M+1 IF (IERR.NE.0) RETURN c ON VERIFIE QU'ON NE DEPASSE PAS IF(M.GT.MMAX) THEN WRITE(IOIMP,*) MMAX,' couples valeur-classe maximum' RETURN ENDIF c ON ENREGISTRE KVAL(M)=MLREE1 KCLASS(M)=MLREE2 GOTO 101 102 CONTINUE c AUCUN OBJET LU ==> ERREUR IF(M.EQ.0) THEN MOTERR(1:8)='MODELE ' MOTERR(9:16)='LISTREEL' c On attend un des objets : %M1:8 %M9:16 %M17:24 %M25:32 %M33:40 RETURN ENDIF c MOTS-CLES ILU=0 111 CONTINUE ICLE=0 IF (ICLE.EQ.0) GOTO 112 ILU=ILU+1 ZCLE(ICLE)=.TRUE. GOTO 111 112 CONTINUE c AUCUN MOT CLE LU : ON MET A VRAI LES 2 SORTIES IF(ILU.EQ.0) then ZCLE(1)=.TRUE. ZCLE(2)=.TRUE. ENDIF C--------------------------- INITIALISATIONS --------------------------- N=0 NPROD=1 C----------------------- BOUCLE SUR LES GRANDEURS ---------------------- DO 200 IM=1,M c ON OUVRE LES LISTREELS + QQ VERIF MLREE1=KVAL(IM) MLREE2=KCLASS(IM) SEGACT,MLREE1,MLREE2 c if(iimpi.ge.666) write(ioimp,*) '>>>>>> grandeur',IM,' / ',M c verif de la dimension des listreels de valeurs IF(IM.EQ.1) THEN c MLENT1= LISTENTI donnant la classe associee a un evenement JG=N SEGINI,MLENT1 WRITE(IOIMP,*) 'Les valeurs doivent compter le meme nombre', & ' d evenements' RETURN ENDIF c verif de l'ordre croissant strict des listreels de classe DO J=1,(NJ-1) RETURN ENDIF ENDDO C --------------- BOUCLE SUR LES EVENEMENTS DO 300 I=1,N c if(iimpi.ge.666) write(ioimp,*) '>>> evenement',I,'/',N,X c SI VALEUR HORS CLASSE, c deja reperee => on saute IF (IM.GT.1.AND.MLENT1.LECT(I).EQ.0) GOTO 300 c nouvelle valeur hors classe IF(IIMPI.GE.666) WRITE(IOIMP,*) I,'eme evenement de la', & IM,'eme grandeur hors classe' c c -> ERREUR c c %m1:8 = %r1 non compris entre %r2 et %r3 c MOTERR(1:8)='LISTREEL' c REAERR(1)=X c REAERR(2)=MLREE2.PROG(1) c REAERR(3)=MLREE2.PROG(NJ) c CALL ERREUR(42) c RETURN c -> on dit que l'evenement est dans la classe 0 MLENT1.LECT(I)=0 GOTO 300 ENDIF c RECHERCHE DE LA CLASSE JX JX=0 c write(ioimp,*) 'recherche dans',(MLREE2.PROG(jou),jou=1,NJ) DO 320 J=1,(NJ-1) c rem : 1 seul test car liste ordonnee et test si hors classe au debut JX=J GOTO 310 320 CONTINUE 310 CONTINUE c on a trouve la classe telle que : 0 < JX < NJ c if(iimpi.ge.666) write(ioimp,*) '>>> JX=',JX,' NPROD=',NPROD IF (IM.EQ.1) THEN MLENT1.LECT(I)=JX ELSE MLENT1.LECT(I)=MLENT1.LECT(I)+((JX-1)*NPROD) ENDIF 300 CONTINUE C ----------- FIN DE BOUCLE SUR LES EVENEMENTS NPROD=NPROD*(NJ-1) SEGDES,MLREE1,MLREE2 200 CONTINUE C-------------------- FIN DE BOUCLE SUR LES GRANDEURS ------------------ C--------------------- CALCUL DU NOMBRE D'OCCURENCES ------------------- c MLENT2= LISTENTI donnant le nombre d'occurence de chaque classe JG=NPROD SEGINI,MLENT2 NJX0=0 C --------------- BOUCLE SUR LES EVENEMENTS DO 600 I=1,N JX=MLENT1.LECT(I) IF(JX.EQ.0) THEN NJX0=NJX0+1 GOTO 600 ENDIF MLENT2.LECT(JX)=MLENT2.LECT(JX)+1 600 CONTINUE C --------------- FIN DE BOUCLE SUR LES EVENEMENTS IF(NJX0.NE.0) THEN IF (IIMPI.NE.0) & WRITE(IOIMP,*) NJX0,'evenements detectes hors classe !' ENDIF C--------------------- ECRITURE DES OBJETS RESULTATS ------------------- IF (ZCLE(2)) THEN SEGDES,MLENT2 ELSE SEGSUP,MLENT2 ENDIF IF (ZCLE(1)) THEN SEGDES,MLENT1 ELSE SEGSUP,MLENT1 ENDIF RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales