C PREX1D SOURCE CHAT 07/10/29 21:25:56 5940 C======================================================================= C= P R E X 1 D = C= ----------- = C= Ce sousprogramme determine les "extremites" d'un maillage 1D. = C= Il est l'image en 1D des sousprogrammes PRCONT (2D) et PRENVE (3D).= C= Il est appele par les operateurs FLUX et PRESSION. = C======================================================================= SUBROUTINE PREX1D IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC CCOPTIO -INC CCGEOME -INC SMELEME -INC SMLENTI C* IF (IDIM.NE.1) THEN C* CALL ERREUR(xx) C* RETURN C* ENDIF C= Travail sur un maillage avec des SEG2 et/ou des POI C= C'est suffisant pour recuperer les points extremites CALL CHANLI IF (IERR.NE.0) RETURN CALL LIROBJ('MAILLAGE',ipmail,1,iOK) IF (IERR.NE.0) RETURN C= On determine les composantes connexes du maillage C= CCON cree un nouveau maillage, meme si ipmail est elementaire. C= On peut donc detruire les maillages pointes dans ilect. CALL CCON1(ipmail,ilect) IF (IERR.NE.0) RETURN C= On a alors au plus extremites = dimension de ilect * 2 MLENT1=ilect SEGACT,MLENT1 IG=MLENT1.LECT(/1) JG=2*IG SEGINI,MLENTI NBEXT=0 C= Recuperation des points extremites C= On ordonne le maillage de SEG2. C= Dans le cas ou la composante connexe retournee par CCON contient C= plusieurs objets (normalement 2 de type POI1 et SEG2), les elements C= POI1 sont en fait des noeuds inclus dans le maillage SEG2, qui ne C= necessitent donc pas de traitement. DO i=1,IG IPT1=MLENT1.LECT(i) SEGACT,IPT1 NSous=IPT1.LISOUS(/1) IF (NSous.NE.0) THEN C* MELEME=0 DO j=1,NSous IPT2=IPT1.LISOUS(j) SEGACT,IPT2 IF (IPT2.ITYPEL.EQ.2) MELEME=IPT2 SEGDES,IPT2 ENDDO C* IF (MELEME.EQ.0) --> ERREUR (a finir) SEGACT,MELEME ELSE MELEME=IPT1 ENDIF IF (ITYPEL.EQ.1) THEN NBEXT=NBEXT+1 LECT(NBEXT)=NUM(1,1) ELSE IF (ITYPEL.EQ.2) THEN CALL ORDON4(MELEME) SEGACT,MELEME NBEXT=NBEXT+1 LECT(NBEXT)=NUM(1,1) NBEXT=NBEXT+1 LECT(NBEXT)=NUM(2,NUM(/2)) ENDIF SEGSUP,IPT1 ENDDO C= Initialisation du maillage de POI1 resultat NBNN=1 NBELEM=NBEXT NBSOUS=0 NBREF=0 SEGINI,MELEME C= Remplissage du maillage ITYPEL=1 DO i=1,NBEXT NUM(1,i)=LECT(i) ICOLOR(i)=IDCOUL ENDDO SEGDES,MELEME C= Ecriture du maillage resultat ipmail=MELEME CALL ECROBJ('MAILLAGE',ipmail) C= Un peu de menage SEGSUP,MLENT1,MLENTI RETURN END