C G2POLC SOURCE CHAT 06/03/29 21:22:18 5360 C SUBROUTINE G2POLC(IGR1,NBLIG1,NBCOL1, > NBAJ,NBCOAJ,INCOAJ,NBLGAJ,INLGAJ, > INDICE,INCREM,COORD,NBCOOR,IDIMC, > ITVL,NITMAX, > IGR,NBLIG,NBCOL,iarr) C ********************************************************************** C OBJET G2POLC : AJOUTE LIGNES ET COLONNES A UNE GRILLE GEOMETRIQUE C C EN ENTREE : C IGR1(NBCOL1,NBLIG1) : TABLEAU D'INDICES DES NOEUDS C IDIMC : DIMENSION DE L'ESPACE (=3) C COORD : TABLEAU DES COORDONNEES DES NOEUDS C NBCOOR: NOMBRE DE POINTS DANS LE TABLEAU COORD C C NBAJ(1) : NOMBRE D'AJOUTS DE COLONNES C INCOAJ() : TABLEAU DES POSITIONS D'AJOUT C NBCOAJ(I) : NOMBRE DE COLONNES A AJOUTER C AVANT INCOAJ(I) SI NEGATIF C APRES INCOAJ(I) SI POSITIF C NBAJ(2) : NOMBRE D'AJOUTS DE LIGNES C INLGAJ() : TABLEAU DES POSITIONS D'AJOUT C NBLGAJ(I) : NOMBRE DE LIGNES A AJOUTER C AVANT INLGAJ(I) SI NEGATIF C APRES INLGAJ(I) SI POSITIF C C INDICE : INDICE POUR REMPLIR LES NOUVELLES COLONNES C INCREM : INCREMENT DE L'INDICE C C ITVL : TABLEAU DE TRAVAIL (ENTIERS) C NITMAX: TAILLE DU TABLEAU ITVL C ON A BESOIN DU TABLEAU DE TRAVAIL SEULEMENT SI ON AJOUTE C SIMULTANEMENT DES LIGNES ET DES COLONNES. LA PLACE NECES- C SAIRE EST DE : (NBCOL1+NBCOAJ(i))*NBLIG1 C C EN SORTIE : C IGR(NBCOL,NBLIG) : TABLEAU D'INDICES MODIFIES C COORD,NBCOOR : POINTS AJOUTES C C ********************************************************************** IMPLICIT INTEGER(I-N) INTEGER IGR1(*),NBLIG1,NBCOL1 INTEGER NBCOAJ(*),INCOAJ(*),NBLGAJ(*),INLGAJ(*),NBAJ(*) REAL*8 COORD(*) INTEGER INDICE,INCREM,IDIMC,NBCOOR,ITVL(*),NITMAX INTEGER IGR(*),NBLIG,NBCOL,iarr C INTEGER INDXYZ,I,IGR11,NBCO11,NBLG11,IOP C INDXYZ = INDICE NBCOL = NBCOL1 NBLIG = NBLIG1 IGR11 = 1 C C ============================== C --- ON AJOUTE DES COLONNES A GR1 --- C ============================== C DO 10 I=1,NBAJ(1) NBCOL = NBCOL + NBCOAJ(I) 10 CONTINUE DO 20 I=1,NBAJ(2) NBLIG = NBLIG + NBLGAJ(I) 20 CONTINUE C IF( NBCOL.GT.NBCOL1 )THEN IF( NBLIG.GT.NBLIG1 )THEN C ---- ON A BESOIN D'UN TABLEAU TAMPON ---- IF( NITMAX.LT. (IGR11-1+NBCOL*NBLIG1))THEN iarr = -2 CALL DSERRE(1,iarr,'G2POLC',' POUR COMPLETER LA GRILLE ') CALL ESEINT(1,'PLACE NECESSAIRE ',NBCOL*NBLIG,1) GOTO 9999 ENDIF CALL G2MOCO(IGR1,NBLIG1,NBCOL1, > NBAJ(1),INCOAJ,NBCOAJ,INDICE,INCREM, > ITVL(IGR11),NBLG11,NBCO11) ELSE CALL G2MOCO(IGR1,NBLIG1,NBCOL1, > NBAJ(1),INCOAJ,NBCOAJ,INDICE,INCREM, > IGR,NBLIG,NBCOL) ENDIF C CALL G2POCO(IGR1,NBLIG1,NBCOL1, > NBAJ(1),INCOAJ,NBCOAJ,INDXYZ,INCREM, > COORD,IDIMC) NBCOOR = INDXYZ - 1 ENDIF C C ============================ C --- ON AJOUTE DES LIGNES A GR1 --- C ============================ C IF(NBLIG.EQ.NBLIG1)THEN IF(NBCOL.EQ.NBCOL1)THEN IOP = 1 CALL G2COPY(IGR1,NBCOL1,NBLIG1,IOP, > IGR,NBCOL,NBLIG ) ENDIF GOTO 9999 ENDIF C IF( NBCOL.EQ.NBCOL1 ) THEN CALL G2MOLG(IGR1,NBLIG1,NBCOL1, > NBAJ(2),INLGAJ,NBLGAJ,INDICE,INCREM, > IGR,NBLIG,NBCOL) CALL G2POLG(IGR1,NBLIG1,NBCOL1, > NBAJ(2),INLGAJ,NBLGAJ,INDXYZ,INCREM, > COORD,IDIMC) ELSE CALL G2MOLG(ITVL(IGR11),NBLG11,NBCO11, > NBAJ(2),INLGAJ,NBLGAJ,INDICE,INCREM, > IGR,NBLIG,NBCOL) C CORRECTION BUG : IGR11 REMPLACE PAR ITVL(IGR11) CALL G2POLG(ITVL(IGR11),NBLG11,NBCO11, > NBAJ(2),INLGAJ,NBLGAJ,INDXYZ,INCREM, > COORD,IDIMC) ENDIF NBCOOR = INDXYZ - 1 C 9999 END