versen
C VERSEN SOURCE PV 20/03/30 21:25:46 10567 C CE SOUS PROGRAMME TRES ATTENDU VERIFIE QUE DANS UN MAILLAGE C 1 DEUX ELEMENTS AU PLUS ONT UNE ARETE COMMUNE C 2 CETTE ARETE EST ORIENTE DE MANIERE OPPOSEE DANS CHACUN DES 2 C C CECI EXISTAIT DEJA DANS COCO (REALISATION THIERRY CHARRAS) C LA PRESENTE PROGRAMMATION EST HONTEUSEMENT INSPIREE DE CELLE C DE PRCONT C C COPYRIGHT P VERPEAUX & CEA/IRDI/DEDR/DEMT/SMTS/LAMS C C SG 2016/06/22 : on saute les elements de dimension 3 pour lesquels C la verification de sens des aretes ne semble pas avoir de sens C Peut-etre faudrait-il comparer l'orientation des faces plutot que des C aretes mais on ne le fait pas encore. C C SUBROUTINE VERSEN IMPLICIT INTEGER(I-N) -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SMELEME -INC SMCOORD SEGMENT ICPR(nbpts) SEGMENT KON(NBCON,NMAX,2) * *dbg write(ioimp,*) 'coucou versen' IF (IERR.NE.0) RETURN SEGINI ICPR ITE=0 SEGACT MELEME IPT1=MELEME DO 3 I=1,MAX(1,LISOUS(/1)) IF (LISOUS(/1).NE.0) THEN IPT1=LISOUS(I) SEGACT IPT1 ENDIF K=IPT1.ITYPEL * idiml=ldlr(k) if (idiml.eq.3) goto 3 * IDEP=NSPOS(K) IF (NBSOM(K).GT.0) THEN IFEP=IDEP+NBSOM(K)-1 ELSE C Cas du polygone IFEP=IDEP+NUM(/1)-1 ENDIF IF (IFEP.LT.IDEP) GOTO 3 DO 4 JJ=IDEP,IFEP J=IBSOM(JJ) DO 41 K=1,IPT1.NUM(/2) IPOIT=IPT1.NUM(J,K) IF (ICPR(IPOIT).EQ.0) THEN ITE=ITE+1 ICPR(IPOIT)=ITE ENDIF 41 CONTINUE 4 CONTINUE 3 CONTINUE IF (ite.eq.0) then C DO I=1,MAX(1,LISOUS(/1)) C IF (LISOUS(/1).NE.0) THEN C IPT1=LISOUS(I) C SEGDES IPT1 C ENDIF C ENDDO C SEGDES MELEME goto 101 ENDIF C ITE EST LE NOMBRE DE POINTS A CONSIDERER ICPR LE TABLEAU C ON VA MAINTENANT INITIALISER ET REMPLIR LE TABLEAU DES CONNECTIONS NBCON=7 NBCONR=NBCON-1 NMAX=(10*ITE)/NBCON+10 SEGINI KON C FABRICATION DU TABLEAU DES CONNECTIONS C 1 POINT FINAL C 2 POINT INTERMEDIAIRE EVENTUEL ET SENS ICHAIN=ITE DO 30 IO=1,MAX(1,LISOUS(/1)) IF (LISOUS(/1).NE.0) IPT1=LISOUS(IO) K=IPT1.ITYPEL KTYPEL=K C LE NOMBRE DE FACE EST 1 QUEL EST SON TYPE KK=LTEL(2,K) * POUR LE CAS DES LIGNE ON PREND LES FACES TRIANGLE CORRESPONDANTES IF (K.EQ.KDEGRE(K)) THEN KA=2*K KK=LTEL(2,KA) ENDIF IF (KK.EQ.0) GOTO 21 ITYP=LDEL(1,KK) IDEP=LDEL(2,KK) IF (ITYP.NE.6) THEN IFEP=IDEP+KDFAC(1,ITYP)-1 * SG 20160711 pour les faces TRI7 et QUA9, on ignore le dernier * point (centre de la face) IF (ITYP.EQ.7.OR.ITYP.EQ.8) IFEP=IFEP-1 ELSE C Cas du polygone IFEP= IDEP+IPT1.NUM(/1)-1 ENDIF NBNN=KDEGRE(K) IPAS=NBNN-1 IF (K.EQ.KDEGRE(K)) IFEP=IDEP DO 22 I=1,IPT1.NUM(/2) DO 221 J=IDEP,IFEP,IPAS NMIL=1 N1=ICPR(IPT1.NUM(LFAC(J),I)) JSUIV=J+IPAS IF (JSUIV.GT.IFEP.AND.(KTYPEL.NE.KDEGRE(KTYPEL))) THEN JSUIV=IDEP ENDIF N2=ICPR(IPT1.NUM(LFAC(JSUIV),I)) IF (IPAS.EQ.2) NMIL=IPT1.NUM(LFAC(J+1),I) NI=N1 NJ=N2 IF (N1*N2.EQ.0) GOTO 32 IPO=0 23 CONTINUE DO 25 K=1,NBCONR 25 CONTINUE GOTO 23 27 CONTINUE * 319 : Verification d'orientation impossible car une arete * appartient a plus de deux elements * 318 : Deux elements adjacents ont des orientations opposees * IF (IERR.NE.0) GOTO 32 GOTO 29 GOTO 29 28 ICHAIN=ICHAIN+1 IF (ICHAIN.GE.NMAX) THEN NMAX=NMAX+250 SEGADJ KON ENDIF K=1 NI=ICHAIN GOTO 26 29 IF (IPO.EQ.1) GOTO 221 NMIL=-NMIL NI=N2 NJ=N1 IPO=1 GOTO 23 221 CONTINUE 22 CONTINUE 21 CONTINUE C IF (LISOUS(/1).NE.0) SEGDES IPT1 30 CONTINUE GOTO 31 * Tache impossible. Probablement donnees erronees SEGSUP KON,ICPR C SEGDES MELEME RETURN 31 CONTINUE C SEGDES MELEME IF (IIMPI.EQ.2)WRITE (IOIMP,1122) (((KON(I,J,K),K=1,2),I=1,NBCON), # J=1,NMAX) 1122 FORMAT(1X,14I5) * TEST QUE LES ARETES RESTANTES TOURNENT DANS LE MEME SENS DO 100 I=1,ITE IF(IIMPI.EQ.123)WRITE(IOIMP,1122) KON(1,I,2),KON(2,I,2) 100 CONTINUE SEGSUP KON 101 CONTINUE CALL REFUS SEGSUP ICPR END
© Cast3M 2003 - Tous droits réservés.
Mentions légales