j3unlo
C J3UNLO SOURCE PV 20/03/24 21:18:26 10554 C-------------------------------------------------------------------- C C CHARGEMENT DES POINTS AVEC ELIMINATION AVEC LES POINTS C ORIGINAUX C C PP /9/97 C Pierre Pegon/JRC Ispra C-------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C -INC PPARAM -INC CCOPTIO -INC SMELEME -INC SMTABLE -INC SMCOORD C SEGMENT BLOCOM INTEGER POINT(NPOINT) REAL*8 YCOOR(IDIM+1,NPOINT) INTEGER MAILL(MM1) ENDSEGMENT POINTEUR BLOCO1.BLOCOM C DIMENSION Y3(4) C SEGACT,MCOORD*MOD C TOL2=TOL**2 MM1=MLOTAB C C BOUCLE SUR LES BLOCKS (SEULS LES INDICES ENTIERS ... IIE1) C WARNING: IPOI DEBUT DES POINTS ORIGINAUX DANS BLOCO1 C IPOF FIN DES POINT ORIGINAUX DANS BLOCO1 C IIE1=0 IPOI=1 DO IE1=1,MM1 IF (MTABTI(IE1).EQ.'ENTIER ')THEN IIE1=IIE1+1 IPOF=BLOCO1.MAILL(IIE1) MTAB1=MTABIV(IE1) MM2=MTAB1.MLOTAB C C BOUCLE SUR LES FACES (SEULS LES INDICES ENTIERS ... ) C DO IE2=1,MM2 IF (MTAB1.MTABTI(IE2).EQ.'ENTIER ')THEN MELEME=MTAB1.MTABIV(IE2) NBELEM=ICOLOR(/1) C C BOUCLE SUR LES ELEMENTS DES FACES EN PARTICULIER LES 1ER POINTS C ITROU=1 DO IE3=1,NBELEM IPO3=NUM(1,IE3) DO IE4=1,IDIM+1 Y3(IE4)=YCOOR(IE4,IPO3) ENDDO C C ON REGARDE SI CE POINT PEUT ETRE CONFONDU AVEC UN POINT ORIGINAL C DO IE4=IPOI,IPOF NUME=BLOCO1.POINT(IE4) IREF=(NUME-1)*(IDIM+1) AAA=0.D0 DO IE5=1,IDIM AAA=AAA+(XCOOR(IE5+IREF)-Y3(IE5))**2 ENDDO IF(AAA.LT.TOL2)GOTO 1 ENDDO C C SI CE N'EST PAS LE CAS, ON L'AJOUTE ... C NBPTS=nbpts+1 IREF=(NBPTS-1)*(IDIM+1) NUME=NBPTS SEGADJ,MCOORD C C ... MAIS ON AJOURNE DANS TOUS LES CAS LES COORDONNEES (SURF+DISK!) C 1 CONTINUE DO IE4=1,IDIM+1 XCOOR(IE4+IREF)=Y3(IE4) ENDDO C C ON STOCKE LA REFERENCE AU NIVEAU DE LA FACE (ATTENTION AU TROU!) C NUM(1,IE3)=NUME IF(IE3.EQ.1)THEN ICAND=NBELEM ELSE ICAND=IE3-1 ENDIF IF(NUM(2,ICAND).EQ.IPO3)THEN NUM(2,ICAND)=NUME ELSE DO IE4=ITROU,NBELEM IF(NUM(2,IE4).EQ.IPO3)GOTO 2 ENDDO WRITE(IOIMP,*)'J3UNLO: IMPOSSIBLE !!!!' 2 CONTINUE ITROU=IE4+1 NUM(2,IE4)=NUME ENDIF C C FIN LOOP ELEMENT DE LA FACE C ENDDO C C ON RE-LOOP SUR LA FACE POUR AJOUTER DES POINTS REDONDANT (SURF!) C DO IE3=1,NBELEM-1 IPO3=NUM(1,IE3) IREF3=(IPO3-1)*(IDIM+1) DO IE4=IE3+1,NBELEM IF(NUM(1,IE4).EQ.IPO3)THEN NBPTS=nbpts+1 IREF=(NBPTS-1)*(IDIM+1) SEGADJ,MCOORD DO IE5=1,IDIM+1 XCOOR(IE5+IREF)=XCOOR(IE5+IREF3) ENDDO NUM(1,IE4)=NBPTS IF(NUM(2,IE4-1).NE.IPO3)THEN WRITE(IOIMP,*)'J3UNLO: IMPOSSIBLE (bis) !!!!' ENDIF NUM(2,IE4-1)=NBPTS ENDIF ENDDO ENDDO C C FIN LOOP FACE C SEGDES,MELEME ENDIF ENDDO C C FIN LOOP BLOCK C SEGDES,MTAB1 IPOI=IPOF+1 ENDIF ENDDO SEGDES,MTABLE C SEGACT,MCOORD C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales