C Q4ORG2 SOURCE CHAT 06/03/29 21:30:57 5360 C C SUBROUTINE Q4ORG2(ITRNO1,NBNMX1,ITRTR1,NBCMX1,NBE1, > ITRNO2,NBNMX2,ITRTR2,NBCMX2,NBE2,N1,N2, > COORD,NBCOOR,IDIMC, > ITVL,NITMAX, > IGR1,NGRMX1,IGR2,NGRMX2,ICOIN,NBNL,ITRACE,iarr) C ********************************************************************** C OBJET Q4ORG2 : TRANSFORME 2 MAILLAGES Q4 EN 2 GRILLES COMPATIBLES C C EN ENTREE : C C ITRNOE1 : INDICE DES NOEUDS DES ELEMENTS DU PREMIER MAILLAGE C NBNMX1 : NOMBRE MAX. DE NOEUDS PAR ELEMENTS (4 OU +) C NBE1 : NOMBRE D'ELEMENTS DU PREMIER MAILLAGE C C ITRNOE2,NBNMX2,NBE2 : DEUXIEME MAILLAGE C C N1,N2 : N1 EST LE NUMERO DU NOEUD DU PREMIER MAILLAGE QUI DOIT C ETRE CONNECTE AU NOEUD N2 DANS LE DEUXIEME MAILLAGE C C COORD : COORDONNEES DES NOEUDS C IDIMC : DIMENSION DE L'ESPACE C NBCOOR : NOMBRE DE NOEUDS C C ITVL : TABLEAU D'ENTIERS POUR LES CALCULS C NTIMAX : TAILLE DU TABLEAU ITVL C ON A BESOIN DU TABLEAU DE TRAVAIL SEULEMENT SI ON CHANGE C SIMULTANEMENT L'ORIGINE ET L'ORIENTATION DU MAILLAGE. C LA PLACE NECESSAIRE EST ALORS DE : NBCOL*NBLIG = NBN C QUI EST TOUJOURS INFERIEUR A : 3+2*MAX(NBE1,NBE2) C C EN SORTIE : C C IGR1 : GRILLE ORIGINE C IGR2 : GRILLE DESTINATION C ICOIN : LES INDICES DES COINS DES 2 GRILLES C NBNL : NOMBRE DE COLONNES ET DE LIGNES DES 2 GRILLES C iarr : CODE D'ERREUR -1 SI DONNEES INCORRECTES C -2 SI TABLEAUX INSUFFISANTS C C REMARQUES : LES GRILLES IGR1 ET IGR2 SONT ORIENTEES DE LA MEME FACON C AVEC UNE ORIGINE COMPATIBLE, C AVEC NBCOL2 >= NBCOL1 ET NBLIG2 <= NBLIG1 C C ********************************************************************** IMPLICIT INTEGER(I-N) INTEGER ITRNO1(*),NBNMX1,ITRTR1(*),NBCMX1,NBE1 INTEGER ITRNO2(*),NBNMX2,ITRTR2(*),NBCMX2,NBE2,N1,N2 REAL*8 COORD(*) INTEGER IDIMC,NBCOOR,ITVL(*),NITMAX INTEGER IGR1(*),NGRMX1,IGR2(*),NGRMX2 INTEGER ICOIN(*),NBNL(*),ITRACE,iarr C REAL*8 VK(3),XNVK,ZERO INTEGER NBLIG1,NBCOL1,NBLIG2,NBCOL2,NBCOL,NBLIG INTEGER I,IOP,ITAMPO EXTERNAL XNORVE REAL*8 XNORVE C IF(ITRACE.GT.0) > CALL ESECHA(1,'* PRETRAITEMENT : ', > ' CALCUL DES GRILLES SURFACIQUES ') C DO 10 I=1,8 ICOIN(I) = 0 10 CONTINUE DO 20 I=1,4 NBNL(I) = 0 20 CONTINUE C C ========================= C --- CALCUL DE L'ORIENTATION --- C ========================= C ZERO = 1.E-6 C CALL DIFFVE(COORD((N2-1)*IDIMC+1), C > COORD((N1-1)*IDIMC+1), C > IDIMC,VK) DO 730 JG=1,IDIMC 730 VK(JG)=COORD((N2-1)*IDIMC+JG) - COORD((N1-1)*IDIMC+JG) XNVK = XNORVE(VK,IDIMC) IF( XNVK.LT.ZERO )THEN iarr = -1 CALL DSERRE(1,iarr,'Q4ORG2', > ' LES NOEUDS (N1,N2) SONT CONFONDUS ') GOTO 9999 ENDIF C CALL MUSCVE( VK,XNVK,IDIMC, VK ) DO 710 JG=1,IDIMC 710 VK(JG)=VK(JG)*XNVK C C =========================== C --- CALCUL DE LA 1IERE GRILLE --- C =========================== C CALL G2ORQ4(ITRNO1,NBNMX1,ITRTR1,NBCMX1,NBE1, > COORD,IDIMC,N1,VK, > ITVL,NITMAX, > IGR1,NBCOL1,NBLIG1,NGRMX1, > ICOIN,iarr ) C NBNL(1) = NBCOL1 NBNL(2) = NBLIG1 C IF(ITRACE.GT.0)THEN CALL ESECHA(1,'-> DU MAILLAGE 1 A LA GRILLE 1',' ') CALL ESEINT(1,'NUMERO DES COINS : ',ICOIN,4) CALL ESEINT(1,'COLONNES,LIGNES : ',NBNL,2) ENDIF IF( iarr.NE. 0 )THEN CALL DSERRE(1,iarr,'Q4ORG2',' APPEL G2ORQ4') CALL DSERRE(1,iarr,'Q4ORG2', > ' PASSAGE PREMIER MAILLAGE EN GRILLE ') GOTO 9999 ENDIF C C =========================== C --- CALCUL DE LA 2IERE GRILLE --- C =========================== C CALL G2ORQ4(ITRNO2,NBNMX2,ITRTR2,NBCMX2,NBE2, > COORD,IDIMC,N2,VK, > ITVL ,NITMAX, > IGR2,NBCOL2,NBLIG2,NGRMX2, > ICOIN(5),iarr ) C NBNL(3) = NBCOL2 NBNL(4) = NBLIG2 C IF(ITRACE.GT.0)THEN CALL ESECHA(1,'-> DU MAILLAGE 2 A LA GRILLE 2',' ') CALL ESEINT(1,'NUMERO DES COINS : ',ICOIN(5),4) CALL ESEINT(1,'COLONNES,LIGNES : ',NBNL(3),2) ENDIF IF( iarr.NE. 0 )THEN CALL DSERRE(1,iarr,'Q4ORG2',' APPEL G2ORQ4') CALL DSERRE(1,iarr,'Q4ORG2', > ' PASSAGE DU DEUXIEME MAILLAGE EN GRILLE ') GOTO 9999 ENDIF C C ==================================================== C ---- INVERSION DES LIGNES ET DES COLONNES DES 2 GRILLES ---- C ==================================================== C IF((NBCOL1.GT.NBCOL2 ).AND.(NBLIG1.GT.NBLIG2))THEN iarr = -1 NBNL(1) = NBCOL1 NBNL(2) = NBLIG1 NBNL(3) = NBCOL2 NBNL(4) = NBLIG2 GOTO 9999 ENDIF C IF((NBCOL1.GT.NBCOL2 ).OR.(NBLIG2.GT.NBLIG1))THEN C IF(ITRACE.GT.0) > CALL ESECHA(1,' REORIENTATION : ', > ' ROTATION DES GRILLES SURFACIQUES ') C IF( ( (NITMAX - NBCOL1*NBLIG1).LT.0 ).OR. > ( (NITMAX - NBCOL2*NBLIG2).LT.0 ) )THEN iarr = -2 CALL DSERRE(1,iarr,'Q4ORG2', > ' POUR LA REORIENTATION DES GRILLES ') GOTO 9999 ENDIF C IOP = 2 CALL G2COPY(IGR1,NBCOL1,NBLIG1,IOP, > ITVL,NBCOL,NBLIG ) IOP = 1 CALL G2COPY(ITVL,NBCOL,NBLIG,IOP, > IGR1,NBCOL1,NBLIG1 ) ITAMPO = ICOIN(1) ICOIN(1) = ICOIN(4) ICOIN(4) = ICOIN(3) ICOIN(3) = ICOIN(2) ICOIN(2) = ITAMPO NBNL(1) = NBCOL1 NBNL(2) = NBLIG1 C IOP = 2 CALL G2COPY(IGR2,NBCOL2,NBLIG2,IOP, > ITVL,NBCOL,NBLIG ) IOP = 1 CALL G2COPY(ITVL,NBCOL,NBLIG,IOP, > IGR2,NBCOL2,NBLIG2 ) ITAMPO = ICOIN(5) ICOIN(5) = ICOIN(8) ICOIN(8) = ICOIN(7) ICOIN(7) = ICOIN(6) ICOIN(6) = ITAMPO NBNL(3) = NBCOL2 NBNL(4) = NBLIG2 C IF(ITRACE.GT.0)THEN CALL ESECHA(1,'-> GRILLE 1 REOREINTEE ',' ') CALL ESEINT(1,'COLONNES,LIGNES : ',NBNL,2) CALL ESECHA(1,'-> GRILLE 2 REORIENTEE ',' ') CALL ESEINT(1,'COLONNES,LIGNES : ',NBNL(3),2) ENDIF ENDIF C 9999 END