modi
C MODI SOURCE PV 20/08/20 21:15:04 10699 C MODIFICATION INTERACTIVE DE MAILLAGE C SUBROUTINE MODI IMPLICIT INTEGER(I-N) -INC CCREEL -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SMELEME -INC SMCOORD SEGMENT ICPR(nbpts) SEGMENT IVU(ITE) SEGMENT NTSEG(LTSEGS) SEGMENT XPROJ(3,ITE) SEGMENT IDCP(ITE) SEGMENT IMILL(ITE) SEGMENT IBOUJ(ITE) COMMON /CMODI/LIGMAX,XPREC,YPREC DIMENSION XTR(40),YTR(40),ZTR(40) CHARACTER*4 JPROJ,CMOT CHARACTER*9 ZONE,ZONE1,ZONE2,ZONE3,ZONE4,ZONF1,ZONF2,ZONF3,ZONF4 CHARACTER*3 CREP LOGICAL VALEUR,FENET CHARACTER*4 ITOPT(5) LOGICAL LBLANC C# real*8 ddec real ddec DATA JPROJ/'PROJ'/,ITOPT/'PLAN','SPHE','CYLI','CONI','TORI'/ DATA LBLANC/.FALSE./ do i=1,40 ztr(i)=0 enddo LPROJ=0 IBOUJ=0 IPREM=0 INITIA=0 JOEIL=0 DIOCA2=DIOCAD LIGMAX=32 IMILL=0 ICPR=0 IDCP=0 IVU=0 NTSEG=0 SEGACT MCOORD*MOD FENET=.TRUE. ICACHE=0 IF (IDIM.EQ.3) ICACHE=1 IF (IERR.NE.0) RETURN SEGINI ICPR ITE=0 SEGACT MELEME IPT1=MELEME DO 40 I=1,MAX(1,LISOUS(/1)) IF (LISOUS(/1).NE.0) IPT1=LISOUS(I) SEGACT IPT1 DO J=1,IPT1.NUM(/1) DO K=1,IPT1.NUM(/2) IPOIT=IPT1.NUM(J,K) IF (ICPR(IPOIT).EQ.0) THEN ITE=ITE+1 ICPR(IPOIT)=ITE ENDIF ENDDO ENDDO 40 CONTINUE SEGINI XPROJ SEGINI IBOUJ IVPR=ICPR(/1) SEGINI IDCP DO 60 I=1,NBPTS IP=ICPR(I) IF (IP.EQ.0) GOTO 60 IDCP(IP)=I 60 CONTINUE * SI REAFFICHAGE IL SE FAIT A PARTIR D'ICI 1000 CONTINUE IF (IMILL.NE.0) SEGSUP IMILL SEGINI IMILL IPT1=MELEME NBCON=9 NBCONR=NBCON-1 NMAX=(12*ITE)/NBCON+200 SEGINI KON1 * KON EST INITIALISE A ZERO * REMPLISSAGE DU TABLEAU DES CONNECTIONS ICHAIN=ITE DO 285 IO=1,MAX(1,LISOUS(/1)) IF (LISOUS(/1).NE.0) IPT1=LISOUS(IO) SEGACT IPT1 K=IPT1.ITYPEL * IDEP=LPT(K) IFIN1=IDEP+2*LPL(K)-2 IFIN2=IFIN1 IF (LPL(K).EQ.0) THEN IF (LPT(K).EQ.0)THEN GOTO 270 ELSE C Polygone IFIN1=IDEP+2*IPT1.NUM(/1)-2 IFIN2=IFIN1 -2 ENDIF ENDIF DO 260 I=1,IPT1.NUM(/2) IS=1 DO 250 J=IDEP,IFIN1,2 IF (J.LE.IFIN2) THEN N1=ICPR(IPT1.NUM(KSEGM(J),I)) N2=ICPR(IPT1.NUM(KSEGM(J+1),I)) ELSE C Polygone N1=ICPR(IPT1.NUM(KSEGM(IFIN2+1),I)) N2=ICPR(IPT1.NUM(KSEGM(1),I)) ENDIF NI=N1 NJ=N2 IF (N1*N2.EQ.0) GOTO 290 IPO=0 110 CONTINUE NII=NI 120 DO 170 K=1,NBCONR KSAUV1=NJ GOTO 200 JJ=0 140 DO 150 II=1,NBCONR IF (KON(II,NJ).EQ.NII) THEN GOTO 160 ENDIF 150 CONTINUE IF (KON(NBCON,NJ).NE.0) THEN NJ=KON(NBCON,NJ) GOTO 140 ENDIF 160 CONTINUE GOTO 250 170 CONTINUE GOTO 120 180 KSAUV1=NJ 190 ICHAIN=ICHAIN+1 IF (ICHAIN.EQ.NMAX) GOTO 290 K=1 NI=ICHAIN KSAUV1=KSAUV IF (KSAUV.EQ.0) GOTO 240 KDEP=K+1 IF (KDEP.EQ.NBCON) GOTO 230 210 DO 220 KHE=KDEP,NBCONR IF (KSAUV.EQ.0) GOTO 240 KSAUV1=KSAUV 220 CONTINUE KDEP=1 GOTO 210 240 IF (NJ.NE.N2.OR.IPO.EQ.1) GOTO 250 NI=N2 NJ=N1 IPO=1 GOTO 110 250 CONTINUE 260 CONTINUE 270 CONTINUE 285 CONTINUE GOTO 300 RETURN 300 CONTINUE * C# XMIN=xgrand XMIN=xsgran XMAX=-XMIN YMIN=XMIN TMIN=XMIN YMAX=XMAX TMAX=XMAX DO 400 I=1,ITE XMIN=MIN(XMIN,XPROJ(1,I)) XMAX=MAX(XMAX,XPROJ(1,I)) YMIN=MIN(YMIN,XPROJ(2,I)) YMAX=MAX(YMAX,XPROJ(2,I)) TMIN=MIN(TMIN,XPROJ(3,I)) TMAX=MAX(TMAX,XPROJ(3,I)) 400 CONTINUE XDEC=XMAX-XMIN YDEC=YMAX-YMIN DDEC=MAX(XDEC,YDEC)*0.01 C# DDEC=MAX(DDEC,xpetit) DDEC=MAX(DDEC,xspeti) XMAX=XMAX+DDEC XMIN=XMIN-DDEC YMIN=YMIN-DDEC YMAX=YMAX+DDEC IF (INITIA.EQ.0) THEN INITIA=1 XMI=XMIN XMA=XMAX YMI=YMIN YMA=YMAX ENDIF * IF (IPREM.EQ.0.AND.IDIM.EQ.3) THEN CALL DFENET(0.,80.,0.,25.,-1.,1.,X1,X2,Y1,Y2,.TRUE.) IPREM=1 ENDIF 405 CONTINUE CALL DFENET(0.,80.,0.,25.,-1.,1.,X1,X2,Y1,Y2,.TRUE.) CALL CHCOUL(0) * OBTENIR LES BONNES VALEURS DU CADRE CALL TRLABL(0.,16.,0.,'Cadre actuel ci dessous',23,1.) CALL TRLABL(0.,2.,0.,' Xmin',7,1.) CALL TRLABL(0.,4.,0.,' Xmax',7,1.) CALL TRLABL(0.,6.,0.,' Ymin',7,1.) CALL TRLABL(0.,8.,0.,' Ymax',7,1.) WRITE (ZONE1,FMT='(G9.2)') XMI CALL TRLABL(40.,2.,0.,ZONE1,9,1.) WRITE (ZONE2,FMT='(G9.2)') XMA CALL TRLABL(40.,4.,0.,ZONE2,9,1.) WRITE (ZONE3,FMT='(G9.2)') YMI CALL TRLABL(40.,6.,0.,ZONE3,9,1.) WRITE (ZONE4,FMT='(G9.2)') YMA CALL TRLABL(40.,8.,0.,ZONE4,9,1.) GOTO 404 403 CONTINUE CALL TRMESS('Valeur incorrecte recommencez') 404 CONTINUE CALL TRAFF(ICLE) IF (ICLE.EQ.5) THEN INCLE=0 XMI=XMIN XMA=XMAX YMI=YMIN YMA=YMAX ELSEIF (ICLE.EQ.6) THEN INCLE=0 ELSEIF (ICLE.EQ.1) THEN CALL TRGET('NOUVELLE VALEUR DE XMIN :',ZONF1) INCLE=1 IF (ZONF1.NE.ZONE1) READ (ZONF1,FMT='(G9.2)',ERR=403) XMI ELSEIF (ICLE.EQ.2) THEN CALL TRGET('NOUVELLE VALEUR DE XMAX :',ZONF2) INCLE=1 IF (ZONF2.NE.ZONE2) READ (ZONF2,FMT='(G9.2)',ERR=403) XMA ELSEIF (ICLE.EQ.3) THEN CALL TRGET('NOUVELLE VALEUR DE YMIN :',ZONF3) INCLE=1 IF (ZONF3.NE.ZONE3) READ (ZONF3,FMT='(G9.2)',ERR=403) YMI ELSEIF (ICLE.EQ.4) THEN CALL TRGET('NOUVELLE VALEUR DE YMAX :',ZONF4) INCLE=1 IF (ZONF4.NE.ZONE4) READ (ZONF4,FMT='(G9.2)',ERR=403) YMA ENDIF IF (INCLE.EQ.1) GOTO 405 CALL DFENET(XMI,XMA,YMI,YMA,-1.,1.,X1,X2,Y1,Y2,FENET) * POUR TRAVAILLER EN NON SEGMENTE XPREC=(XMA-XMI)/100 YPREC=(YMA-YMI)/100 XPREC=MAX(XPREC,YPREC) YPREC=MAX(XPREC,YPREC) * INITIALISATION DE IVU * IVU=1 PT VU * IVU<>1 PT PAS VU IF (IVU.NE.0) SEGSUP IVU SEGINI IVU DO 410 I=1,ITE IVU(I)=1 410 CONTINUE IF (ICACHE.NE.0) THEN MCOUP=0 # TMIN,TMAX,MCOUP) SEGACT ICPR ENDIF IF (NTSEG.NE.0) SEGSUP NTSEG IF (ICACHE.EQ.1) THEN LTSEGS=1000 SEGINI NTSEG LTSEG=0 ENDIF CALL CHCOUL(2) ITR=1 KAUX=1 500 K=KAUX IF (IVU(KAUX).NE.1) GOTO 530 KAUXR=KAUX 510 DO 520 KL=1,NBCONR ITRA=KON(KL,K) IF (ITRA.LT.0) GOTO 520 IF (ITRA.EQ.0) GOTO 530 IF (IVU(ITRA).EQ.1) GOTO 540 520 CONTINUE K=KON(NBCON,K) IF (K.NE.0) GOTO 510 530 KAUX=KAUX+1 IF (KAUX.EQ.ITE+1) GOTO 630 GOTO 500 540 CONTINUE IF (ITR.GT.1) THEN CALL POLRL(ITR,XTR,YTR,ZTR) ENDIF ITR=1 XTR(1)=XPROJ(1,KAUXR) YTR(1)=XPROJ(2,KAUXR) KPRESS=KAUXR GOTO 560 550 KL=1 560 DO 570 L=KL,NBCONR M=KON(L,K) IF (M.EQ.0) GOTO 500 IF (M.LT.0) GOTO 570 IF (IVU(M).NE.1) GOTO 570 GOTO 580 570 CONTINUE K=KON(NBCON,K) IF (K.EQ.0) GOTO 500 GOTO 550 580 CONTINUE ITR=ITR+1 XTR(ITR)=XPROJ(1,M) YTR(ITR)=XPROJ(2,M) IF (ITR.EQ.40) THEN CALL POLRL(ITR,XTR,YTR,ZTR) XTR(1)=XTR(ITR) YTR(1)=YTR(ITR) ITR=1 ENDIF KON(L,K)=-KON(L,K) M1=M 590 DO 600 L=1,NBCONR IF (KON(L,M1).EQ.0) GOTO 620 600 CONTINUE M1=KON(NBCON,M1) IF (M1.EQ.0) GOTO 620 GOTO 590 610 KON(L,M1)=-KON(L,M1) K=KPRESS GOTO 550 630 CONTINUE IF (ITR.GT.1) CALL POLRL(ITR,XTR,YTR,ZTR) ITR=1 IF (ICACHE.EQ.0) GOTO 670 C ON REMPLIT ISEGM AVEC LES SEGMENTS EN PARTIE VU DO 660 K=1,ITE IF (IVU(K).NE.1) GOTO 660 KK=K 640 DO 650 KL=1,NBCONR ITRA=KON(KL,KK) IF (ITRA.LT.0) GOTO 650 IF (ITRA.EQ.0) GOTO 660 IF (LTSEGS-LTSEG.LT.10) THEN LTSEGS=LTSEGS+1000 SEGADJ NTSEG ENDIF NTSEG(LTSEG+1)=K NTSEG(LTSEG+2)=ITRA NTSEG(LTSEG+3)=2 LTSEG=LTSEG+3 650 CONTINUE KK=KON(NBCON,KK) IF (KK.NE.0) GOTO 640 660 CONTINUE 670 CONTINUE SEGDES KON1 IF (ICACHE.NE.0) THEN # YMIN,YMAX,IVU,NTSEG,NELEM,IDCOUL,IDCOUL,LBLANC,LTSEG) SEGACT MELEME DO 671 IO=1,LISOUS(/1) IPT1=LISOUS(IO) SEGACT IPT1 671 CONTINUE ENDIF 1010 CONTINUE CALL MENUU CALL TRAFF(ICLE) * DEMANDE DE REAFFICHAGE IF (ICLE.EQ.11) GOTO 1000 * DEPLACEMENT DE NOEUD IF (ICLE.EQ.1) THEN GOTO 1010 ENDIF * NOMMER UN NOEUD IF (ICLE.EQ.2) THEN GOTO 1010 ENDIF * SUPPRIMER UN ELEMENT IF (ICLE.EQ.3) THEN GOTO 1010 ENDIF * CREATION D'UN ELEMENT IF (ICLE.EQ.4) THEN GOTO 1010 ENDIF * NOMMER UN ENSEMBLE D'ELEMENT IF (ICLE.EQ.5) THEN GOTO 1010 ENDIF * ECRITURE COORDONNEES IF (ICLE.EQ.6) THEN GOTO 1010 ENDIF * AFFICHAGE NOMS DES POINTS IF (ICLE.EQ.7) THEN GOTO 1010 ENDIF * AFFICHAGE CONTOUR IF (ICLE.EQ.8) THEN GOTO 1010 ENDIF * DEMANDE DE ZOOM IF (ICLE.EQ.9) THEN CALL TRMESS('Entrez le premier point pour le zoom') CALL TRDIG(X1,Y1,INCLE) CALL TRMESS('Entrez le second point pour le zoom') CALL TRDIG(X2,Y2,INCLE) XMI=MIN(X1,X2) XMA=MAX(X1,X2) YMI=MIN(Y1,Y2) YMA=MAX(Y1,Y2) GOTO 1000 ENDIF * RECENTRAGE DES NOEUDS MILIEUX IF (ICLE.EQ.10) THEN GOTO 1000 ENDIF IF (ICLE.LT.0) GOTO 1010 IF (LPROJ.EQ.0) GOTO 2100 NBELEM=0 DO 2000 I=1,ITE IF (IBOUJ(I).EQ.0) GOTO 2000 NBELEM=NBELEM+1 2000 CONTINUE IF (NBELEM.EQ.0) GOTO 2100 NBNN=1 NBREF=0 NBSOUS=0 SEGINI MELEME ITYPEL=1 ICC=0 DO 2010 I=1,ITE IF (IBOUJ(I).EQ.0) GOTO 2010 ICC=ICC+1 NUM(1,ICC)=IDCP(I) 2010 CONTINUE * TORE IF (LPROJ.EQ.5) THEN * CONE ELSEIF (LPROJ.EQ.4) THEN * CYLINDRE ELSEIF (LPROJ.EQ.3) THEN * SPHERE ELSEIF (LPROJ.EQ.2) THEN * PLAN ELSEIF (LPROJ.EQ.1) THEN ENDIF CALL DEPLAC SEGSUP MELEME 2100 CONTINUE SEGSUP XPROJ,ICPR,IVU IF (NTSEG.NE.0) SEGSUP NTSEG IF (IDCP.NE.0) SEGSUP IDCP IF (IMILL.NE.0) SEGSUP IMILL IF (IBOUJ.NE.0) SEGSUP IBOUJ * LB CALL TRMFIN RETURN *LB END
© Cast3M 2003 - Tous droits réservés.
Mentions légales