g2llg2
C G2LLG2 SOURCE CHAT 06/03/29 21:21:50 5360 C C > IGR2,NBLIG2,NBCOL2, > COORD,NBCOOR,IDIMC,INDICE,RAPP, > ITVL,NITMAX, > IGRI,NBLIGI,NBCOLI,ITRACE,iarr) C ********************************************************************** C OBJET G2LLG2 : CREER UNE GRILLE INTERMEDIAIRE (ENTRE 2 GRILLES) C C EN ENTREE : C C IGR1(NBLIG1,NBCOL1) : LA PREMIERE GRILLE C IGR CONTIENT LES NUMEROS DES NOEUDS C IGR2(NBLIG2,NBCOL2) : LA DEUXIEME GRILLE C COORD,NBCOORD,IDIMC : POSITION DES NOEUDS C C RAPP : RAPPORT DES DISTANCES ENTRE LES GRILLES C (IGRI-IGR1) / (IGR2-IGR1) C C ITVL : TABLEAU D'ENTIERS POUR LES CALCULS C NITMAX : TAILLE DE ITVL C ON A BESOIN DU TABLEAU DE TRAVAIL POUR COMPLETER IGR1 C LA PLACE NECESSAIRE EST DE : NBCOL1*NBLIG2 C C EN SORTIE : C C IGRI(NBLIGI,NBCOLI) : GRILLE SURFACIQUE INTERMEDIAIRE C NBLIGI = NBLIG2, NBCOLI = NBCOL1 C C INDICE : DU DERNIER NOEUD CREE C 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 (VOIR G2ORIG, G2ORIE) C AVEC NBCOL2 >= NBCOL1 ET NBLIG2 <= NBLIG1 C C ********************************************************************** IMPLICIT INTEGER(I-N) INTEGER IGR1(*),NBLIG1,NBCOL1 INTEGER IGR2(*),NBLIG2,NBCOL2 REAL*8 COORD(*),RAPP INTEGER IDIMC,NBCOOR,ITVL(*),NITMAX INTEGER INDICE INTEGER IGRI(*),NBLIGI,NBCOLI,ITRACE,iarr C INTEGER NBCO11,NBLG11,IGR11 INTEGER NBCOAJ(2),INCOAJ(2),NBLGAJ(2),INLGAJ(2),NBAJ(2) INTEGER INDXYZ,INCREM,ITRAV,I,J,K,NUM1,NUM2,IDECAL C REAL*8 COEF,CNBLG,CNBCO, REAL*8 XO,V12 C C =============================================== C --- 0. VERIFICATIONS DES CONDITIONS D'APPLICATION --- C =============================================== IF(NBCOL1.GT.NBCOL2)THEN iarr = -1 GOTO 9999 ENDIF C IF( ( MOD(NBCOL1+NBCOL2,2).NE.0 ).OR. > ( MOD(NBLIG1+NBLIG2,2).NE.0 ))THEN iarr = -1 GOTO 9999 ENDIF C IF((NBCOL1.LE.NBCOL2).AND.(NBLIG1.GE.NBLIG2))THEN iarr = -1 GOTO 9999 ENDIF C IF(ITRACE.GT.0) C C =============================================== C --- 1. CALCUL DE LA SURFACE INTERMEDIAIRE : GRI --- C GRI -> GR2 : ON AUGMENTE SEULEMENT LES COLONNES C GR1 -> GRI : ON AUGMENTE SEULEMENT LES LIGNES C =============================================== NBLIGI = NBLIG2 NBCOLI = NBCOL1 C ------------------------------------ C ---- 1.1 ON COMPLETE LES LIGNES DE GR1 --- C ------------------------------------ NBAJ(1) = 0 NBAJ(2) = 2 INLGAJ(1) = 1 NBLGAJ(1) = (NBLIG2-NBLIG1) / 2 NBLGAJ(2) = (NBLIG2-NBLIG1) / 2 INLGAJ(2) = -NBLIG1 C IGR11 = 1 ITRAV = 1 IF( NITMAX.LT. (IGR11-1+ NBCOL1*NBLIG2))THEN iarr = -2 GOTO 9999 ENDIF C INDICE = NBCOOR+1 IF(ITRACE.GT.0)THEN ENDIF C > NBAJ,NBCOAJ,INCOAJ,NBLGAJ,INLGAJ, > INDICE,INCREM,COORD,NBCOOR,IDIMC, > ITVL(ITRAV),0, > ITVL(IGR11),NBLG11,NBCO11,iarr) C IF(iarr.NE.0)THEN GOTO 9999 ENDIF C IF(ITRACE.GT.0)THEN ENDIF C C ----------------------------------------- C --- 1.2 CREATION D'UNE GRILLE 2D ET COLLAGE --- C ----------------------------------------- C IF(ITRACE.GT.0) > '2. CREATION DE LA GRILLES 3D ET COLLAGE : ',' ') C C CALL G2CRSP( NBLIGI,NBCOLI,INDICE,INCREM,IGRI ) DO 710 JG=1,(NBLIGI*NBCOLI) IGRI(JG)=INDICE 710 CONTINUE C ---------------------------- C --- 1.3 INTERPOLATION LINEAIRE C POUR LA GRILLE 2D --- C ---------------------------- C INDXYZ = NBCOOR + 1 IF(ITRACE.GT.0) C IDECAL = ( NBCOL2 - NBCOL1 ) / 2 C C --- INTERPOLATION REMPLISSAGE PAR LIGNE --- C DO 110 I=1,NBLG11 NUM1 = ITVL((I-1)*NBCO11+1+IGR11-1) NUM2 = IGR2((I-1)*NBCOL2+1) DO 70 K=1,IDIMC XO = COORD((NUM1-1)*IDIMC+K) V12 = COORD((NUM2-1)*IDIMC+K) - XO COORD((INDXYZ-1)*IDIMC+K) = V12*RAPP + XO 70 CONTINUE INDXYZ = INDXYZ + 1 DO 90 J=2,NBCOL1-1 C CORRECTION DU BUG : 1 => J NUM1 = ITVL((I-1)*NBCO11+J+IGR11-1) NUM2 = IGR2((I-1)*NBCOL2+J+IDECAL) DO 80 K=1,IDIMC XO = COORD((NUM1-1)*IDIMC+K) V12 = COORD((NUM2-1)*IDIMC+K) - XO COORD((INDXYZ-1)*IDIMC+K) = V12*RAPP + XO 80 CONTINUE INDXYZ = INDXYZ + 1 90 CONTINUE NUM1 = ITVL(I*NBCO11+IGR11-1) NUM2 = IGR2(I*NBCOL2) DO 100 K=1,IDIMC XO = COORD((NUM1-1)*IDIMC+K) V12 = COORD((NUM2-1)*IDIMC+K) - XO COORD((INDXYZ-1)*IDIMC+K) = V12*RAPP + XO 100 CONTINUE INDXYZ = INDXYZ + 1 110 CONTINUE C C 9999 END
© Cast3M 2003 - Tous droits réservés.
Mentions légales