mschp1
C MSCHP1 SOURCE CB215821 20/11/25 13:34:33 10792 C======================================================================= C ENTREE C IPO1 = POINTEUR SUR LE PREMIER CHPO C IPO2 = POINTEUR SUR LE SECOND CHPO C IPO3 = POINTEUR SUR LE TROISIEME CHPO (OPTION "COMP") C X1 = VALEUR MIN OU MAX (OPTION "COMP") C IKO = 0 SI IPO2 PUIS IPO3, 1 SI X1 PUIS IPO2, -1 SI IPO2 PUIS X1 C ICLE = ENTIER CARACTERISANT LE TYPE DE COMPARAISON C ISOM = 1 SI ON VEUT LA SOMME, 0 SINON C SORTIE C IRET = POINTEUR SUR LE CHAMP RESULTAT SI ISOM=0 C IRET = SOMME DES 1 ET DES 0 SI ISOM=1 C======================================================================= IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC SMCHPOI -INC PPARAM -INC CCOPTIO -INC SMELEME -INC SMCOORD SEGMENT/MTRA/(NOPOIN(nbpts)) SEGMENT MTR1 CHARACTER*(LOCOMP) IPCOM(0) ENDSEGMENT SEGMENT/MTR4/(IPHAR(0)) SEGMENT/MTR2/(IC2CC(NC2)) SEGMENT MTR3 REAL*8 BB2(NNIN,NNNOE) ENDSEGMENT SEGMENT MTR5 REAL*8 BB3(NNIN,NNNOE) ENDSEGMENT C IKOK=IKO IF (IKOK.EQ.0.AND.IPO3.LE.0) IKOK=-1 C C ====================================================================== C REMPLISSAGE DE NOPOIN, IPCOM et BB2 C ====================================================================== C C ---------------------------------- C ON RECUPERE LES INFOS DU CHPOINT 2 C ---------------------------------- MCHPOI=IPO2 NSOUPO=IPCHP(/1) c PREDIMENSIONNEMENT DE IC2CC AU MAX POSSIBLE NC2=0 DO IA=1,NSOUPO MSOUPO=IPCHP(IA) NC2=NC2+NOCOMP(/2) ENDDO SEGINI,MTR2 c AUTRES INITIALISATIONS IK=0 KSOM=0 SEGINI,MTRA,MTR1,MTR4 C BOUCLE SUR LES ZONES DU CHPO 2 C DO 20 IA=1,NSOUPO MSOUPO=IPCHP(IA) * composantes + harmoniques --> liste locale NC=NOCOMP(/2) * boucle sur les composantes de cette zone du chpoint DO 40 IC=1,NC NCC=IPCOM(/2) * boucle sur les composantes deja enregistrees DO 50 ICC=1,NCC IF(IPCOM(ICC).NE.NOCOMP(IC)) GO TO 50 IF(IPHAR(ICC).EQ.NOHARM(IC)) GO TO 40 50 CONTINUE * nouvelle composante -> on l'enregistre dans la liste complete IPCOM(**)=NOCOMP(IC) IPHAR(**)=NOHARM(IC) NCC=NCC+1 ICC=NCC IC2CC(IC)=ICC NC2=MAX(IC,NC2) 40 CONTINUE * maillage --> numerotation locale NOPOIN MELEME=IGEOC NBNN=NUM(/1) NBELEM=NUM(/2) DO 30 IB=1,NBELEM K=NUM(1,IB) IF(NOPOIN(K).NE.0) GOTO 30 IK=IK+1 NOPOIN(K)=IK 30 CONTINUE 20 CONTINUE SEGADJ,MTR2 C ---------------------------------------------- C ON RECUPERE LES INFOS DU CHPOINT 3 (SI BESOIN) C ---------------------------------------------- IF (IKOK.EQ.0) THEN MCHPOI=IPO3 NSOUPO=IPCHP(/1) c PREDIMENSIONNEMENT DE IC2CC AU MAX POSSIBLE DO IA=1,NSOUPO MSOUPO=IPCHP(IA) NC2=NC2+NOCOMP(/2) ENDDO SEGADJ,MTR2 C BOUCLE SUR LES ZONES DU CHPO 2 C DO 120 IA=1,NSOUPO MSOUPO=IPCHP(IA) * composantes + harmoniques --> liste locale NC=NOCOMP(/2) * boucle sur les composantes de cette zone du chpoint DO 140 IC=1,NC NCC=IPCOM(/2) * boucle sur les composantes deja enregistrees DO 150 ICC=1,NCC IF(IPCOM(ICC).NE.NOCOMP(IC)) GOTO 150 IF(IPHAR(ICC).EQ.NOHARM(IC)) GOTO 140 150 CONTINUE * nouvelle composante -> on l'enregistre dans la liste complete IPCOM(**)=NOCOMP(IC) IPHAR(**)=NOHARM(IC) NCC=NCC+1 ICC=NCC IC2CC(IC)=ICC NC2=MAX(IC,NC2) 140 CONTINUE * maillage --> numerotation locale NOPOIN MELEME=IGEOC NBNN=NUM(/1) NBELEM=NUM(/2) DO 130 IB=1,NBELEM K=NUM(1,IB) IF(NOPOIN(K).NE.0) GOTO 130 IK=IK+1 NOPOIN(K)=IK 130 CONTINUE 120 CONTINUE SEGADJ,MTR2 ENDIF C ----------------------------------------------------- C CREATION ET REMPLISSAGE DE BB2 = VALEURS DU CHPOINT 2 C ----------------------------------------------------- MCHPOI=IPO2 NSOUPO=IPCHP(/1) NNIN=NC2 NNNOE=IK SEGINI,MTR3 DO 21 IA=1,NSOUPO MSOUPO=IPCHP(IA) * maillage ET valeur MPOVA2=IPOVAL MELEME=IGEOC NBNN=NUM(/1) NBELEM=NUM(/2) DO 31 IB=1,NBELEM K=NUM(1,IB) IK=NOPOIN(K) * on en profite pour enregistrer les valeurs du chpo 2 * --> stockee dans tableau local BB2 DO 32 IC=1,NC ICC=IC2CC(IC) BB2(ICC,IK)=MPOVA2.VPOCHA(IB,IC) 32 CONTINUE 31 CONTINUE 21 CONTINUE C ----------------------------------------------------------------- C CREATION ET REMPLISSAGE DE BB3 = VALEURS DU CHPOINT 3 (SI BESOIN) C ----------------------------------------------------------------- IF (IKOK.EQ.0) THEN MCHPOI=IPO3 NSOUPO=IPCHP(/1) NNIN=NC2 NNNOE=IK SEGINI,MTR5 DO 121 IA=1,NSOUPO MSOUPO=IPCHP(IA) * maillage ET valeur MPOVA2=IPOVAL MELEME=IGEOC NBNN=NUM(/1) NBELEM=NUM(/2) DO 131 IB=1,NBELEM K=NUM(1,IB) IK=NOPOIN(K) * on en profite pour enregistrer les valeurs du chpo 2 * --> stockee dans tableau local BB2 DO 132 IC=1,NC ICC=IC2CC(IC) BB3(ICC,IK)=MPOVA2.VPOCHA(IB,IC) 132 CONTINUE 131 CONTINUE 121 CONTINUE ENDIF C ====================================================================== C CREATION DU CHPOINT RESULTAT DEPUIS LE 1ER CHPOINT C ====================================================================== C MCHPO1=IPO1 SEGINI,MCHPOI=MCHPO1 ICHPOI=MCHPOI MOCHDE='CHPOINT CREE PAR MASQ' NSOUPO=IPCHP(/1) C BOUCLE SUR LES ZONES DO 60 IA=1,NSOUPO MSOUP1=IPCHP(IA) SEGINI,MSOUPO=MSOUP1 IPCHP(IA)=MSOUPO NC=NOCOMP(/2) MPOVA1=IPOVAL SEGINI,MPOVAL=MPOVA1 IPOVAL=MPOVAL MELEME=IGEOC NBELEM=NUM(/2) C BOUCLE SUR LES COMPOSANTES DO 70 IC=1,NC C recherche dans la liste cree depuis le 2eme chpoint DO 71 ICC=1,IPCOM(/2) IF(IPCOM(ICC).NE.NOCOMP(IC)) GOTO 71 IF(IPHAR(ICC).EQ.NOHARM(IC)) GOTO 72 71 CONTINUE c on n'a pas trouve de composantes adequates <=> ICC=0 ICC=0 72 CONTINUE c on a trouve ICC c BOUCLE SUR LES NOEUDS (le maillage reste le meme que 1er CHPOINT) DO 80 IB=1,NBELEM K=NUM(1,IB) IK=NOPOIN(K) c si ik=0 OU ICC=0, le point OU la composante n'existe pas c dans les autres chpoints ==> x2=x3=0 par convention IF (ICC.EQ.0.OR.IK.EQ.0) THEN IF (IKOK.EQ.0) THEN X2=0.D0 X3=0.D0 ELSEIF (IKOK.GT.0) THEN X2=X1 X3=0.D0 ELSE X2=0.D0 X3=X1 ENDIF ELSE IF (IKOK.EQ.0) THEN X2=BB2(ICC,IK) X3=BB3(ICC,IK) ELSEIF (IKOK.GT.0) THEN X2=X1 X3=BB2(ICC,IK) ELSE X2=BB2(ICC,IK) X3=X1 ENDIF ENDIF * C COMPARAISON PROPREMENT DITE * * ----------------------------------------- * SOIT ON VEUT UN MASQUE POINT PAR POINT... * ----------------------------------------- * IF (ISOM.EQ.0) THEN * * MOT-CLE "SUPE" IF (ICLE.EQ.1) THEN IF (VPOCHA(IB,IC).GT.X2) THEN VPOCHA(IB,IC)=1.D0 ELSE VPOCHA(IB,IC)=0.D0 ENDIF * * MOT-CLE "EGSU" ELSEIF (ICLE.EQ.2) THEN IF (VPOCHA(IB,IC).GE.X2) THEN VPOCHA(IB,IC)=1.D0 ELSE VPOCHA(IB,IC)=0.D0 ENDIF * * MOT-CLE "EGAL" ELSEIF (ICLE.EQ.3) THEN IF (VPOCHA(IB,IC).EQ.X2) THEN VPOCHA(IB,IC)=1.D0 ELSE VPOCHA(IB,IC)=0.D0 ENDIF * * MOT-CLE "EGIN" ELSEIF (ICLE.EQ.4) THEN IF (VPOCHA(IB,IC).LE.X2) THEN VPOCHA(IB,IC)=1.D0 ELSE VPOCHA(IB,IC)=0.D0 ENDIF * * MOT-CLE "INFE" ELSEIF (ICLE.EQ.5) THEN IF (VPOCHA(IB,IC).LT.X2) THEN VPOCHA(IB,IC)=1.D0 ELSE VPOCHA(IB,IC)=0.D0 ENDIF * * MOT-CLE "DIFF" ELSEIF (ICLE.EQ.6) THEN IF (VPOCHA(IB,IC).NE.X2) THEN VPOCHA(IB,IC)=1.D0 ELSE VPOCHA(IB,IC)=0.D0 ENDIF * * MOT-CLE "COMP" ELSEIF (ICLE.EQ.7) THEN IF (VPOCHA(IB,IC).GE.X2.AND.VPOCHA(IB,IC).LE.X3) THEN VPOCHA(IB,IC)=1.D0 ELSE VPOCHA(IB,IC)=0.D0 ENDIF ENDIF * * ----------------------------------------- * SOIT ON CHERCHE SEULEMENT LA SOMME... * ----------------------------------------- ELSEIF(ISOM.EQ.1) THEN * * MOT-CLE "SUPE" IF (ICLE.EQ.1) THEN IF (VPOCHA(IB,IC).GT.X2) KSOM=KSOM+1 * * MOT-CLE "EGSU" ELSEIF(ICLE.EQ.2) THEN IF (VPOCHA(IB,IC).GE.X2) KSOM=KSOM+1 * * MOT-CLE "EGAL" ELSEIF(ICLE.EQ.3) THEN IF (VPOCHA(IB,IC).EQ.X2) KSOM=KSOM+1 * * MOT-CLE "EGIN" ELSEIF(ICLE.EQ.4) THEN IF (VPOCHA(IB,IC).LE.X2) KSOM=KSOM+1 * * MOT-CLE "INFE" ELSEIF(ICLE.EQ.5) THEN IF (VPOCHA(IB,IC).LT.X2) KSOM=KSOM+1 * * MOT-CLE "DIFF" ELSEIF(ICLE.EQ.6) THEN IF (VPOCHA(IB,IC).NE.X2) KSOM=KSOM+1 * * MOT-CLE "COMP" ELSEIF(ICLE.EQ.7) THEN IF (VPOCHA(IB,IC).GE.X2.AND.VPOCHA(IB,IC).LE.X3) & KSOM=KSOM+1 ENDIF ENDIF 80 CONTINUE 70 CONTINUE 60 CONTINUE C----------------------------------------------------------------------- C NETTOYAGE ET FIN DE PROGRAMME C----------------------------------------------------------------------- C SEGSUP MTRA,MTR1,MTR4,MTR2,MTR3 IF (IKOK.EQ.0) SEGSUP,MTR5 IF (ISOM.EQ.1) THEN SEGSUP,MCHPOI IRET=KSOM ELSE IRET=ICHPOI ENDIF RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales