j3fac0
C J3FAC0 SOURCE CB215821 18/09/13 21:15:40 9917 SUBROUTINE J3FAC0 C---------------------------------------------------- C TEST POUR LES FACES C PP 6/97 C Pierre Pegon/JRC Ispra C---------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMTABLE -INC SMELEME -INC SMCOORD -INC CCGEOME -INC CCNOYAU -INC CCASSIS C SEGMENT BLOCOM INTEGER POINT(NPOINT) REAL*8 YCOOR(IDIM+1,NPOINT) INTEGER MAILL(MM1) ENDSEGMENT POINTEUR BLOCO1.BLOCOM C SEGMENT VWORK INTEGER FWWORK(NFACE) ENDSEGMENT SEGMENT VWORK1.VWORK C SEGMENT WWORK REAL*8 PORIG(3),VNORM(3),VI(3),VJ(3) INTEGER FWORK INTEGER TWORK(NTROU) ENDSEGMENT C SEGMENT WORK REAL*8 XYC(2,NPTO) INTEGER IST(3,NPTO) REAL*8 DENS(NPTO) INTEGER JUN ENDSEGMENT C C LECTURE DE LA TABLE ET DE LA TOLERANCE C IF(IERR.NE.0) RETURN IF(IERR.NE.0) RETURN C C VERIFICATION DE LA DIMENSION C IF (IDIM.NE.3)THEN WRITE(IOIMP,*)'J3FAC0: on n"est pas en 3D' RETURN ENDIF C C VERIFICATIONS DIVERSES C SEGACT, MTABLE MM=MLOTAB C NFACE=MM-1 SEGINI,VWORK1 C NPOINT=0 MM1=NFACE SEGINI,BLOCOM C IIE1=0 if(nbesc.ne.0) segact ipiloc DO IE1=1,MM IF (MTABTI(IE1).EQ.'MOT ')THEN C C ON VERIFIE LA VALEUR DE L'INDICE MOT ET LE CONTENU C JF=IPCHAR(MTABII(IE1)+1) ID=IPCHAR(MTABII(IE1)) IF (ICHARA(ID:JF-1).NE.'SOUSTYPE')THEN WRITE(IOIMP,*)'J3FAC0: un indice de type mot est errone' GOTO 9999 ENDIF IF (MTABTV(IE1).NE.'MOT ')THEN WRITE(IOIMP,*)'J3FAC0: le SOUSTYPE doit etre un MOT' GOTO 9999 ENDIF JF=IPCHAR(MTABIV(IE1)+1) ID=IPCHAR(MTABIV(IE1)) IF (ICHARA(ID:JF-1).NE.'LISTE_DE_BLOCS')THEN WRITE(IOIMP,*)'J3FAC0: le SOUSTYPE doit etre LISTE_DE_BLOCS' GOTO 9999 ENDIF ELSEIF (MTABTI(IE1).EQ.'ENTIER ')THEN C C ON VERIFIE LE CONTENU DES INDICES ENTIERS C IF (MTABTV(IE1).NE.'TABLE')THEN WRITE(IOIMP,*)'J3FAC0: un indice entier n"est pas une table' GOTO 9999 ENDIF MTAB1=MTABIV(IE1) SEGACT,MTAB1 MM1=MTAB1.MLOTAB C NFACE=MM1-1 SEGINI,VWORK IIE1=IIE1+1 VWORK1.FWWORK(IIE1)=VWORK C IIE2=0 DO IE2=1,MM1 if(nbesc.ne.0) segact ipiloc IF (MTAB1.MTABTI(IE2).EQ.'MOT ')THEN IDM=MTAB1.MTABII(IE2) JF=IPCHAR(IDM+1) ID=IPCHAR(IDM) IF (ICHARA(ID:JF-1).NE.'SOUSTYPE')THEN WRITE(IOIMP,*)'J3FAC0: pas de sous-type' GOTO 9999 ENDIF IF (MTAB1.MTABTV(IE2).NE.'MOT ')THEN WRITE(IOIMP,*)'J3FAC0: sous-type de type incorrect' GOTO 9999 ENDIF IDF=MTAB1.MTABIV(IE2) JF=IPCHAR(IDF+1) ID=IPCHAR(IDF) IF (ICHARA(ID:JF-1).NE.'LISTE_DE_FACES')THEN WRITE(IOIMP,*)'J3FAC0: sous-type incorrect' GOTO 9999 ENDIF ELSEIF (MTAB1.MTABTI(IE2).EQ.'ENTIER ')THEN IF (MTAB1.MTABTV(IE2).NE.'MAILLAGE')THEN WRITE(IOIMP,*)'indice entier non maillage' GOTO 9999 ENDIF MELEME=MTAB1.MTABIV(IE2) SEGACT,MELEME IF(ITYPEL.NE.2)THEN WRITE(IOIMP,*)'maillage non de seg2' GOTO 9999 ENDIF C NPTO=ICOLOR(/1) IF(NUM(1,1).NE.NUM(2,NPTO))THEN WRITE(IOIMP,*)'maillage non ferme' GOTO 9999 ENDIF C NTROU=0 SEGINI,WWORK C SEGINI,WORK FWORK=WORK IIE2=IIE2+1 FWWORK(IIE2)=WWORK C IF(IRET.GT.0)GOTO 9999 IF(IRET.GT.0)GOTO 9999 IF(IIMPI.EQ.1789)THEN WRITE(IOIMP,*)'J3FAC0:LOAD DE LA FACE ',IIE1,IIE2 ENDIF C SEGDES,MELEME*NOMOD ELSE GOTO 9999 ENDIF ENDDO ELSE WRITE(IOIMP,*)'J3FAC0: un type d"indice est errone' GOTO 9999 ENDIF C C DANS MAILL SE TROUVE LE NOMBRE DE PT TOTAL CHARGE A C LA FIN DE CHAQUE BLOC C IF(IIE1.NE.0)MAILL(IIE1)=NPOINT ENDDO if(nbesc.ne.0) SEGDES,IPILOC C C ON VERIFIE QUE LES POINTS DE CHAQUE BLOK SONT 2 A 2 DISJOINTS C IF(IRET.GT.0) GOTO 9999 C C ON GENERE LA NOUVELLE ARBORESCENCE DE FACE C IF(IRET.GT.0) GOTO 9999 C C ON TRAITE LES CAS QUI PEUVENT DONNER DU SOUCIS A SURF C IF(IRET.GT.0) GOTO 9999 C C ON CHARGE LE RESULTAT DANS LA TABLE DE SORTIE MAIS LES POINTS C SONT MIS DANS UN BLOCOM C BLOCO1=BLOCOM C MTAB1=MTABLE SEGINI,MTABLE=MTAB1 SEGDES,MTAB1*NOMOD C MM1=0 NPOINT=0 SEGINI,BLOCOM C IIE1=0 DO IE1=1,MM IF (MTABTI(IE1).EQ.'ENTIER ')THEN IIE1=IIE1+1 VWORK=VWORK1.FWWORK(IIE1) M=FWWORK(/1)+1 SEGINI,MTAB1 MTAB1.MLOTAB=M MTABIV(IE1)=MTAB1 C IM=1 MTAB1.MTABTI(IM)='MOT ' MTAB1.MTABII(IM)=IDM MTAB1.MTABTV(IM)='MOT ' MTAB1.MTABIV(IM)=IDF C DO IE2=1,M-1 C WWORK=FWWORK(IE2) NTROU=TWORK(/1) WORK=FWORK C NBNN=2 NBELEM=XYC(/2) NBSOUS=0 NBREF=0 SEGINI,MELEME ITYPEL=2 C NPOINT1=NPOINT NPOINT=NPOINT+NBELEM MM1=MM1+1 SEGADJ,BLOCOM MAILL(MM1)=MELEME C DO IE3=1,NBELEM JE3=NPOINT1+IE3 DO IE4=1,3 YCOOR(IE4,JE3)=XYC(1,IE3)*VI(IE4)+XYC(2,IE3)*VJ(IE4) > +PORIG(IE4) ENDDO YCOOR(4 ,JE3)=DENS(IE3) DENS(IE3)=FLOAT(JE3) POINT(JE3)=JE3 ENDDO DO IE3=1,NBELEM NUM(1,IE3)=INT(DENS(IE3)) IF(IE3.EQ.NBELEM)THEN NUM(2,IE3)=INT(DENS(1)) ELSE NUM(2,IE3)=INT(DENS(IE3+1)) ENDIF ICOLOR(IE3)=IDCOUL ENDDO C IF(NTROU.NE.0)THEN DO IE3=1,NTROU NBELE1=NBELEM SEGSUP,WORK NBELE2=XYC(/2) NBELEM=NBELE1+NBELE2 SEGADJ,MELEME C NPOINT1=NPOINT NPOINT=NPOINT+NBELE2 SEGADJ,BLOCOM C DO IE4=1,NBELE2 JE4=NPOINT1+IE4 DO IE5=1,3 YCOOR(IE5,JE4)=XYC(1,IE4)*VI(IE5)+XYC(2,IE4)*VJ(IE5) > +PORIG(IE5) ENDDO YCOOR(4 ,JE4)=DENS(IE4) DENS(IE4)=FLOAT(JE4) POINT(JE4)=JE4 ENDDO DO IE4=1,NBELE2 NUM(1,NBELE1+IE4)=INT(DENS(IE4)) IF(IE4.EQ.NBELE2)THEN NUM(2,NBELE1+IE4)=INT(DENS(1)) ELSE NUM(2,NBELE1+IE4)=INT(DENS(IE4+1)) ENDIF ICOLOR(NBELE1+IE4)=IDCOUL ENDDO ENDDO ENDIF C C SEGDES,MELEME SEGSUP,WORK C IM=IM+1 MTAB1.MTABTI(IM)='ENTIER ' MTAB1.MTABII(IM)=IE2 MTAB1.MTABTV(IM)='MAILLAGE' MTAB1.MTABIV(IM)=MELEME ENDDO C SEGDES,MTAB1 SEGSUP,VWORK C ENDIF ENDDO C SEGDES,MTABLE SEGSUP,VWORK1 C C ON AJOUTE MAINTENANT LES POINT QUI TOMBENT SUR DES SEGMENTS C C C ON VERIFIE QUE LES POTS EN VIS A VIS ONT LA MEME DENSITE C ET ON REND LES COORDONNES IDENTIQUES C IF(IRET.NE.0)THEN SEGSUP,BLOCOM,BLOCO1,MTABLE GOTO 9998 ENDIF C C ON CHARGE MAINTENANT LES POINTS DANS LA PILE DES POINTS TOUT C EN ELIMINANT AVEC LES CAS EXISTANT ET EN TRAITANT LES CAS C TORDUS (POUR SURF) C SEGSUP,BLOCOM,BLOCO1 C C RETURN C 9999 SEGSUP,BLOCOM SEGDES,MTABLE*NOMOD RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales