volos
C VOLOS SOURCE JK148537 24/08/05 21:15:03 11980 C ********************************************************************** C INTERFACE CASTEM 2000 C C GEO1 = SURF1 VOLOS SURF2 PO1 PO2 (N1) ('DINI' DENS1) ('DFIN' DENS2) ; C C C OBJET : C _______ C C L'OPERATEUR VOLOS RACCORDE DES MAILLAGES SURFACIQUES QUI ONT C DES STRUCTURES DE GRILLES. C C C DATE : 24.10.96 C ______ C C AUTEURS : O. STAB C _________ C C C ********************************************************************** IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C -INC PPARAM -INC CCOPTIO -INC SMELEME -INC SMCOORD -INC CCGEOME SEGMENT ITRAVX INTEGER ITVL (ITOTAI) ENDSEGMENT SEGMENT RTRAVX REAL*8 RTVL (ITOTAR) ENDSEGMENT SEGMENT ICPR (nbpts) SEGMENT ICPP (nbpts) C INTEGER NITMAX,NRTMAX,IERRDS C --- VARIABLES INTERNES --- INTEGER NBN,NBE,IDIMC,NBNMAX,IDE,NBPMAX,NBEMAX,ITRNOE INTEGER ITRVMX,ICOORD,NBCOOR INTEGER ITRNO1,ITRNO2,NBE1,NBE2,NBN1,NBN2 INTEGER I,J,IERCOD C INTEGER NBNL(4),ICOIN(8),NBLGMX,NBLGMN,NBCOMX,NBCOMN INTEGER NITNEC,NBRANG,NBCOUC INTEGER IORDR,ICODE1,ICODE2,ICODE5,INDSO(20),ISENS INTEGER ITRNO3,NBNO3,NBE3,IDE3,NBN3 INTEGER ITRNO4,NBNO4,NBE4,IDE4,NBN4 INTEGER ITRNO5,NBNO5,NBE5,IDE5 INTEGER ITRTRI,IDEE,NBNMX,NBCMX,NOETRI,ITRAV,NITMX2,NOEMAX REAL*8 DEN1,DEN2 C c DO 1111 I=1,50 c WRITE (6,*) I,NOMS(I) c 1111 CONTINUE c WRITE(6,*) 'NBCOU = ',NBCOU C IERRDS = 0 CALL DSINIT C ============================ C --- 1.LECTURE DES DENSITES --- C ============================ IF(DEN1.LT.0)THEN GOTO 9999 ENDIF IF(DEN2.LT.0)THEN GOTO 9999 ENDIF * * ============================ * LECTURE DES NUMEROS DES POINTS * ============================ * segact mcoord*mod NBANC = nbpts IF((N1.LE.0).OR.(N1.GT.NBANC ))THEN C WRITE (6,*)'ERREUR IL FAUT UN POINT DE DEPART' ENDIF IF((N2.LE.0).OR.(N2.GT.NBANC ))THEN C WRITE (6,*)'ERREUR IL FAUT UN POINT D ARRIVE' ENDIF C ============================ C --- 1.LECTURE DES MAILLAGE 2D --- C ============================ C * * LECTURE DU MAILLAGE 1 * =========================== C CALL LIROBJ('MAILLAGE',IPT1,1,IRETOU) c WRITE(6,*) ' LECTURE MAILLAGE ' ,IPT1 C IF(IERR.NE.0) RETURN SEGACT IPT1 * WRITE(6,*) 'ITYPEL =' , IPT1.ITYPEL C 8 = QUA4, 10 = QUA8 IORDR = 1 IF( IPT1.ITYPEL.EQ.10 )IORDR = 2 * WRITE(6,*) ' IERR ' ,IERR * WRITE(6,*) ' MCOORD ', MCOORD IF(IERR.NE.0) THEN SEGDES IPT1 RETURN ENDIF * * NBE1 = IPT1.NUM(/2) * * LECTURE DU MAILLAGE 2 * =========================== C CALL LIROBJ('MAILLAGE',IPT2,1,IRETOU) c WRITE(6,*) ' LECTURE MAILLAGE ' ,IPT2 IF(IERR.NE.0) RETURN SEGACT IPT2 * WRITE(6,*) 'ITYPEL =' , IPT2.ITYPEL * WRITE(6,*) ' IERR ' ,IERR * WRITE(6,*) ' MCOORD ', MCOORD IF(IERR.NE.0) THEN SEGDES IPT2 RETURN ENDIF C NBE2 = IPT2.NUM(/2) NBNMAX = IPT1.NUM(/1) NBANC = nbpts C NPOMAX = MAX(50000, NBANC) itravx = 0 10 CONTINUE if (itravx.ne.0) then segsup,itravx,icpr,icpp,rtravx npomax = 10 * npomax endif NITMAX = MAX((7*NPOMAX), 4*(NBE1+NBE2+NPOMAX)) IF(IORDR.EQ.2)THEN NITMAX = NITMAX + 8*(NBE1+NBE2+npomax) ENDIF NRTMAX = 3 * NPOMAX * * TRANSFERT DES MAILLAGE * ===================================== NBNMAX = IPT1.NUM(/1) NBCMAX = 4 IDE = 2 IDIMC = IDIM * * REMPLISSAGE DU TABLEAU DE CONNEXION * =================================== ITOTAI= NITMAX * WRITE(6,*) ' ITOTAI ' , ITOTAI SEGINI ITRAVX SEGINI,ICPR,ICPP ITOTAR = NRTMAX SEGINI RTRAVX C C --- TRANSFERT MAILLAGE --- RTVL, ITVL C ICOORD = 1 ITRNO1 = 1 INO = 0 DO I=1,NBE1 DO J=1,NBNMAX IA = IPT1.NUM(J,I) IF( ICPR(IA).EQ.0 ) THEN INO = INO+1 ICPR(IA) = INO ICPP(INO)= IA DO K=1,IDIMC RTVL((INO-1)*IDIMC+K+ICOORD-1)= > XCOOR((IA-1)*(IDIM+1)+K) ENDDO ENDIF ITVL((I-1)*NBNMAX +J+ITRNO1-1) = ICPR(IA) enddo enddo NBN1 = INO C C SEGDES IPT1 C C --- TRANSFERT MAILLAGE --- RTVL, ITVL C ITRNO2 = NBE1*NBNMAX+1 c write (6,*)'itrno2=',itrno2,nbnmax c segact,ipt2 DO I=1,NBE2 DO J=1,NBNMAX IA = IPT2.NUM(J,I) IF( ICPR(IA).EQ.0 ) THEN INO = INO+1 ICPR(IA) = INO ICPP(INO)= IA DO K=1,IDIMC RTVL((INO-1)*IDIMC+K+ICOORD-1)= > XCOOR((IA-1)*(IDIM+1)+K) ENDDO ENDIF ITVL((I-1)*NBNMAX +J+ITRNO2-1) = ICPR(IA) enddo enddo C NBN2 = INO - NBN1 C C SEGDES IPT2 * C WRITE (6,*) 'MAILLAGE LU : ' C WRITE (6,*) ' NBN1 , NBE1 ',NBN1, NBE1 C WRITE (6,*) ' NBN2 , NBE2 ',NBN2, NBE2 N1B = ICPR(N1) N2B = ICPR(N2) NBCOUC = NBCOU C C N2B = NBN1 + 1 C c WRITE (6,*) 'MAILLAGE 1 NBE1 = ',NBE1 c WRITE (6,*) (ITVL(ITRNO1+I-1),I=1,NBE1*4) c WRITE (6,*) 'MAILLAGE 2 NBE2 = ',NBE2 c WRITE (6,*) (ITVL(ITRNO2+I-1),I=1,NBE2*4) c WRITE (6,*) 'COORDONNEES NBCOOR = ',NBN1+NBN2 c WRITE (6,*) (RTVL(ICOORD+I-1),I=1,3*(NBN1+NBN2)) c WRITE (6,*) 'NOEUDS CONNECTE ',N1B,N2B c WRITE (6,*) 'NOMBRE DE COUCHES = ',NBCOUC IERRDS = 0 ITRACE = 0 C C ------------------------- C --- PASSAGE AU LINEAIRE --- C ------------------------- C IF(IORDR.EQ.2)THEN c WRITE(6,*) 'QUADRATIQUE 1' ITRNO3 = NBNMAX * (NBE1+NBE2) + 1 ICODE1 = 10 ICODE2 = 8 NBNO3 = 4 ISENS = -1 c WRITE(6,*) 'INDSO = ',(INDSO(I),I=1,NBSO) > ICODE2,INDSO,ISENS,IDE3,ITVL(ITRNO3), > NBNO3,NBE3,IERRDS) c WRITE(6,*) 'NBNO3,IDE3,IERR = ',NBNO3,IDE3,IERR c WRITE(6,*) c > ((ITVL((I-1)*NBNO3+J-1+ITRNO3),J=1,NBNO3) c > ,'/',I=1,NBE3) IF( IERRDS.NE.0 )THEN GOTO 9999 ENDIF C ITRNO4 = ITRNO3 + (NBE3 * NBNO3) NBNO4 = 4 > ICODE2,INDSO,ISENS,IDE4,ITVL(ITRNO4), > NBNO4,NBE4,IERRDS) c WRITE(6,*) 'NBNO4,IDE4,iIERR = ',NBNO4,IDE4,IERR c WRITE(6,*) c > ((ITVL((I-1)*NBNO4+J-1+ITRNO4),J=1,NBNO4) c > ,'/',I=1,NBE4) IF( IERRDS.NE.0 )THEN GOTO 9999 ENDIF ELSE ITRNO3 = ITRNO1 NBE3 = NBE1 ITRNO4 = ITRNO2 NBE4 = NBE2 ICODE1 = 8 ICODE2 = 8 ENDIF NBN3 = NBN1 NBN4 = NBN2 C C ------------------------- C --- CALCUL DE LA STRUCTURE --- C ------------------------- C NBCOOR = NBN1 + NBN2 NBEMAX = 0 ITRNOE = 1 NBPMAX = 0 ITRAV = ITRNO4 + (NBE4*4) ITRVMX = NITMAX - ITRAV NOSUPR = 0 raison=0.d0 C > RTVL(ICOORD),NBCOOR, > N1B,N2B,DEN1,DEN2,NBCOUC, > ITVL(ITRAV),ITRVMX,NOSUPR, > ITVL(ITRNOE),NBE,NBEMAX,NBPMAX, > NBNL,ICOIN,ITRACE,IERCOD,IERRDS,raison) C c IF(IERRDS.NE.0) c >WRITE (6,*) 'ERREUR PREMIER APPEL HEXOS',IERRDS C C ---- REPRISE SUR MANQUE DE MEMOIRE ---- C IF( IERRDS.EQ.-2)THEN IERRDS = 0 C ITOTAI = 4*(NBE1+NBE2+NBCOOR) C SEGADJ ITRAVX GOTO 10 ENDIF C C ---- MESSAGES D'ERREUR ---- C IF( IERRDS.EQ.-1)THEN IMESS = -IERCOD - 90 SEGSUP ITRAVX,RTRAVX,ICPR,ICPP GOTO 9999 ENDIF C C ---- EVALUATION DE LA PLACE NECESSAIRE ---- C NBLGMX = MAX(NBNL(2),NBNL(4)) NBLGMN = MIN(NBNL(2),NBNL(4)) NBCOMX = MAX(NBNL(1),NBNL(3)) NBCOMN = MIN(NBNL(1),NBNL(3)) NBRANG = NBCOUC+NBLGMX+NBCOMX-NBLGMN-NBCOMN NITNEC = (NBE1+NBE2)*4 + NBCOOR + NBN1 + NBN2 + MAX( 3*NBCOOR, > NBCOOR+ 2*(3+NBRANG)*NBCOMX*NBLGMX) IF(IORDR.EQ.2)THEN NITNEC = NITNEC + 8*(NBE1+NBE2) + > (20+8+6)*(NBRANG*NBCOMX*NBLGMX) + 7*NBCOOR ENDIF C IF( ITRACE.GT.0 )THEN WRITE (6,*) 'PLACE NECESSAIRE POUR LE TRAVAIL :',NITNEC WRITE (6,*) 'NOMBRE MAXIMUM DE LIGNES : ',NBLGMX WRITE (6,*) 'NOMBRE MAXIMUM DE COLONNES : ',NBCOMX WRITE (6,*) 'NOMBRE MAXIMUM DE RANGEES : ',NBRANG ENDIF C ITRNOE = ITRNO4 + (NBE4*4) NBEMAX = NBRANG*NBCOMX*NBLGMX ITRAV = ITRNOE + 8*NBEMAX ITRVMX = NITMAX - ITRAV NBPMAX = (NRTMAX - (NBCOOR*3)) / 3 NOSUPR = 0 C C ---- REPRISE SUR MANQUE DE MEMOIRE ---- C IF( (ITRVMX.LT.NITNEC).OR. > (NBPMAX.LT.((NBRANG+1)*(NBCOMX+1)*(NBLGMX+1))) )THEN IERRDS = -2 C WRITE (6,*) 'PLACE NECESSAIRE (ENTIERS): ', C > (NITNEC+8*NBEMAX) C WRITE (6,*) 'PLACE NECESSAIRE (REELS) : ', C > ((NBRANG+1)*(NBCOMX+1)*(NBLGMX+1)) IERDS = 0 C ITOTAI = 4*(NBE1+NBE2) + (NITNEC+8*NBEMAX) C SEGADJ ITRAVX C ITOTAR = (NBN1+NBN2)*3 + ((NBRANG+1)*(NBCOMX+1)*(NBLGMX+1)) C SEGADJ RTRAVX GOTO 10 ENDIF C > RTVL(ICOORD),NBCOOR, > N1B,N2B,DEN1,DEN2,NBCOUC, > ITVL(ITRAV),ITRVMX,NOSUPR, > ITVL(ITRNOE),NBE,NBEMAX,NBPMAX, > NBNL,ICOIN,ITRACE,IERCOD,IERRDS,raison) C C C ---- MESSAGES D'ERREUR ---- C IF( IERRDS.EQ.-1)THEN IMESS = -IERCOD - 90 SEGSUP ITRAVX,RTRAVX,ICPR,ICPP GOTO 9999 ENDIF c IF( IERRDS.EQ.-2)THEN c WRITE (6,*) 'MANQUE DE PLACE : ERREUR ANORMALE' c ENDIF C C ------------------------- C --- PASSAGE AU QUADRATIQUE --- C ------------------------- C IF(IORDR.EQ.2)THEN IDEE = 3 NBNMX5 = 8 NBCMX5 = 6 ITRTRI = ITRNOE + (NBE*NBNMX5) NOETRI = ITRTRI + (NBE*NBCMX5) ITRAV = NOETRI + NBCOOR NITMX2 = NITMAX - ITRAV c WRITE(6,*) 'NITMX2 = ',NITMX2 NOEMAX = NBCOOR > ITVL(ITRNOE),NBNMX5,ITVL(ITRTRI), > NBCMX5,ITVL(NOETRI),NOEMAX, > ITVL(ITRAV),NITMX2,IERRDS) IF( IERRDS.NE.0 )THEN GOTO 9999 ENDIF C C --- INDICE DES SOMMETS --------------------- C ICODE5 = 15 c WRITE(6,*) 'NBNO5 (20) = ',NBNO5 C C ---- ALLOCATION DE LA MEMOIRE -------------- C ITRNO5 = ITRAV ITRAV = ITRNO5 + (NBE * NBNO5) NITMX2 = NITMAX - ITRAV C C ---- CREATION DU MAILLAGE AVEC DES TROUS --- C ISENS = 1 > ICODE5,INDSO,ISENS,IDE5,ITVL(ITRNO5), > NBNO5,NBE5,IERRDS) IF( IERRDS.NE.0 )THEN GOTO 9999 ENDIF C C ---- TRANSFERT DES NOEUDS MILIEU -------------- C c WRITE(6,*) 'AVANT TRANSFERT ' c WRITE(6,*) c > ((ITVL((I-1)*NBNO5+J-1+ITRNO5),J=1,NBNO5) c > ,'/',I=1,NBE5) > ITVL(ITRNOE),NBNMX5,ITVL(ITRTRI), > NBCMX5,ITVL(NOETRI),NOEMAX, > ITVL(ITRAV),NITMX2, > ICODE5,IDE5,ITVL(ITRNO5),NBNO5,NBE5, > IERRDS) IF( IERRDS.NE.0 )THEN GOTO 9999 ENDIF > ITVL(ITRNOE),NBNMX5,ITVL(ITRTRI), > NBCMX5,ITVL(NOETRI),NOEMAX, > ITVL(ITRAV),NITMX2, > ICODE5,IDE5,ITVL(ITRNO5),NBNO5,NBE5, > IERRDS) C IF( IERRDS.NE.0 )THEN c WRITE(6,*) 'LE MAILLAGE A TRANSFERER ' c WRITE(6,*) c > ((ITVL((I-1)*NBNMAX+J-1+ITRNO2),J=1,NBNMAX) c > ,'/',I=1,NBE2) c WRITE(6,*) 'LE MAILLAGE TOPOLOGIQUE ' c WRITE(6,*) c > ((ITVL((I-1)*NBNMX5+J-1+ITRNOE),J=1,NBNMX5) c > ,'/',I=1,NBE5) C GOTO 9999 ENDIF C c WRITE(6,*) 'APRES TRANSFERT ' c WRITE(6,*) c > ((ITVL((I-1)*NBNO5+J-1+ITRNO5),J=1,NBNO5) c > ,'/',I=1,NBE5) C C C ---- CALCUL DES NOEUDS MILIEU -------------- C C > ITVL(ITRNOE),NBNMX5,ITVL(ITRTRI),NBCMX5, > ITVL(ITRAV),NITMX2, > RTVL(ICOORD),IDIMC,NBCOOR,NBPMAX,IERRDS) IF( IERRDS.NE.0 )THEN GOTO 9999 ENDIF c WRITE(6,*) 'APRES AJOUT NOEUDS ' c WRITE(6,*) c > ((ITVL((I-1)*NBNO5+J-1+ITRNO5),J=1,NBNO5) c > ,'/',I=1,NBE5) ELSE C ------------------------- C --- ON RESTE EN LINEAIRE --- C ------------------------- ITRNO5 = ITRNOE ICODE5 = 14 NBNO5 = 8 NBE5 = NBE ENDIF C * * REMPLISSAGE NOUVEL OBJET MAILLAGE ET TABLEAU DES COORDONNEES * ============================================================ C 40 CONTINUE c WRITE (6,*) '==== ON SORT ====' C C ---- TRANSFERT DES NOUVEAUX NOEUDS ---- C =============================== * c WRITE (6,*) 'ECRITURE DES NOEUDS = ',NBCOOR - INO NBPTS = NBANC + NBCOOR - INO c WRITE(6,*) ' MCOORD NBCOOR INO ', MCOORD,NBCOOR,INO,NBANC SEGADJ MCOORD DO 7781 I=1,NBCOOR-INO XCOOR((NBANC +I-1)*(IDIM+1)+1) = RTVL((INO+I-1)*IDIMC+1) XCOOR((NBANC +I-1)*(IDIM+1)+2) = RTVL((INO+I-1)*IDIMC+2) XCOOR((NBANC +I-1)*(IDIM+1)+3) = RTVL((INO+I-1)*IDIMC+3) XCOOR((NBANC +I-1)*(IDIM+1)+4) = DENSIT 7781 CONTINUE C C ---- TRANSFERT DES ELEMENTS ---- C ======================== c WRITE (6,*) 'ECRITURE DES ELEMENTS = ',NBE5 c WRITE (6,*) (ITVL(ITRNO5+I-1),I=1,NBE5*NBNO5) NBNN = NBNO5 NBREF = 0 NBSOUS = 0 NBELEM = NBE5 SEGINI IPT3 C 14 = CUB8, 15 = CU20 IPT3.ITYPEL = ICODE5 DO 7782 I=1,NBE5 DO 7783 J=1,NBNO5 IA=ITVL((I-1)*NBNO5 +J-1+ITRNO5) C C ON TESTE SI LE NOEUD EXISTE DEJA POUR RETROUVER LES NUMEROS CASTEM C IF ( IA .LE.INO) THEN IB = ICPP(IA) ELSE IB = IA -INO +NBANC ENDIF IPT3.NUM(J,I)=IB 7783 CONTINUE IPT3.ICOLOR(I) = IDCOUL 7782 CONTINUE C C --- FIN ET ECRITURE --- C ================= c WRITE (6,*) 'ECRITURE' c WRITE (6,*) 'DESACTIVATION' SEGDES, IPT3,ipt1,ipt2 SEGSUP ITRAVX,RTRAVX,ICPR,ICPP * CALL ECROBJ('MAILLAGE',IPT3) C C 9999 END
© Cast3M 2003 - Tous droits réservés.
Mentions légales