adchve
C ADCHVE SOURCE SP204843 24/10/25 21:15:03 12048 *_______________________________________________________________________ * * POUR VECTORISER L ADDITION DES CHAMELEMS * * ENTREE : * ________ * * IELVA1 POINTEUR SUR LE MELVAL DU 1IER CHAMELEM * IELVA2 POINTEUR SUR LE MELVA DU 2IEME CHAMELEM * XX COEFFICIENTS MULTIPLICATEUR * ICOD =1 --> MELVAL DE POINTEUR SUR MLREEL * =2 --> MELVAL DE POINTEUR SUR UN POINT * =3 --> MELVAL DE POINTEUR SUR UN EVOLUTIOn * =0 --> AUTRE CAS * * * SORTIES : * --------- * * IMELVA POINTEUR SUR LE MELVAL RESULTAT * IRET = 0 SI OK / =1 SINON * =104 POUR DECLENCHER LE MESSAGE D'ERREUR 104 * =197 POUR DECLENCHER LE MESSAGE D'ERREUR 197 * * EBERSOLT DECEMBRE 86 * * PASSAGE AUX NOUVEAUX CHAMELEM PAR JM CAMPENON LE 29 10 90 * +PP EXTENSION ADDITION P.PEGON 23/11/92 * *______________________________________________________________________ * IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMCHAML -INC SMLREEL -INC SMCOORD -INC SMEVOLL * IRET=0 MELVA1=IELVA1 MELVA2=IELVA2 SEGACT MELVA1 SEGACT MELVA2 * NBP1=MELVA1.VELCHE(/1) IF (NBP1.LE.0) THEN NBP1=MELVA1.IELCHE(/1) IF (NBP1.LE.0) THEN C write(6,*) 'IELVA1,IELVA2=',IELVA1,IELVA2 C write(6,*) '*** Dans adchve' RETURN ENDIF NBP2=MELVA2.IELCHE(/1) NEL1=MELVA1.IELCHE(/2) NEL2=MELVA2.IELCHE(/2) N1PTEL=0 N1EL =0 N2PTEL=MAX(NBP1,NBP2) N2EL =MAX(NEL1,NEL2) SEGINI MELVAL IF (ICOD.EQ.1) THEN DO 1 IB = 1, N2EL IBMN1 = MIN(IB ,NEL1) IBMN2 = MIN(IB ,NEL2) DO 11 IGAU = 1, N2PTEL IGMN1 = MIN(IGAU,NBP1) IGMN2 = MIN(IGAU,NBP2) * MLREE1 = MELVA1.IELCHE(IGMN1,IBMN1) MLREE2 = MELVA2.IELCHE(IGMN2,IBMN2) * IF (MLREE1.EQ.0) THEN MLREEL = MLREE2 ELSE IF (MLREE2.EQ.0) THEN MLREEL = MLREE1 ELSE SEGACT,MLREE1,MLREE2 IJG = MIN(JG1,JG2) * JG=MAX(JG1,JG2) SEGINI MLREEL DO 2 IPROG=1,IJG 2 CONTINUE IF (JG.GT.IJG) THEN IF (IJG.EQ.JG1) THEN DO 10 IPROG=IJG+1,JG2 10 CONTINUE ELSE DO 20 IPROG=IJG+1,JG1 20 CONTINUE ENDIF ENDIF ENDIF IELCHE(IGAU,IB)=MLREEL 11 CONTINUE 1 CONTINUE ELSE IF (ICOD.EQ.2) THEN IDIMP1 = IDIM + 1 mcoact=0 DO 3 IB=1,N2EL IBMN1 = MIN(IB ,NEL1) IBMN2 = MIN(IB ,NEL2) DO 31 IGAU=1,N2PTEL IGMN1 = MIN(IGAU,NBP1) IGMN2 = MIN(IGAU,NBP2) * IP1 = MELVA1.IELCHE(IGMN1,IBMN1) IP2 = MELVA2.IELCHE(IGMN2,IBMN2) * IF (IP1.EQ.0) THEN NUMNOE = IP2 ELSE IF (IP2.EQ.0) THEN NUMNOE = IP1 ELSE C- Si les numeros des points sont differents, on va tester s'ils C- n'ont pas les memes coordonnees. Si non, on cree un nouveau point C- mais risque de probleme en //... IF (IP1.NE.IP2) THEN IREF1 = (IP1-1) * IDIMP1 IREF2 = (IP2-1) * IDIMP1 i_z = 0 if (mcoact.eq.0) then mcoact=1 segact mcoord endif DO IC = 1, IDIM r_z1 = MAX( ABS(XCOOR(IREF1+IC)) , & ABS(XCOOR(IREF2+IC)) ) r_z2 = ABS( XCOOR(IREF1+IC) - XCOOR(IREF2+IC) ) IF (r_z2 .GT. 1.D-9*r_z1) i_z = i_z + 1 ENDDO * * ON CREE UN NOUVEAU POINT : * IF (i_z.GT.0) THEN if (mcoact.ne.2) then mcoact=2 segact mcoord*mod endif IREFC = NBPTS * IDIMP1 NBPTS = NBPTS + 1 SEGADJ,MCOORD DO 4 IC = 1, IDIMP1 XCOOR(IREFC+IC) = XCOOR(IREF1+IC) & +XX * XCOOR(IREF2+IC) 4 CONTINUE NUMNOE = NBPTS ENDIF ENDIF ENDIF 31 CONTINUE 3 CONTINUE if (mcoact.ne.0) SEGDES,MCOORD ELSE IF (ICOD.EQ.3) THEN I_XX = INT(XX) DO 6 IB=1,N2EL IBMN1 = MIN(IB ,NEL1) IBMN2 = MIN(IB ,NEL2) DO 61 IGAU=1,N2PTEL IGMN1 = MIN(IGAU,NBP1) IGMN2 = MIN(IGAU,NBP2) * MEVOL1 = MELVA1.IELCHE(IGMN1,IBMN1) MEVOL2 = MELVA2.IELCHE(IGMN2,IBMN2) IF (IPEVAD.EQ.0) IRET=1 IELCHE(IGAU,IB) = IPEVAD 61 CONTINUE 6 CONTINUE ELSE * * Y-A-T'IL UN DES DEUX POINTEURS NUL ? * DO IB=1,N2EL IBMN1 = MIN(IB ,NEL1) IBMN2 = MIN(IB ,NEL2) DO IGAU=1,N2PTEL IGMN1 = MIN(IGAU,NBP1) IGMN2 = MIN(IGAU,NBP2) IEL1=MELVA1.IELCHE(IGMN1,IBMN1) IEL2=MELVA2.IELCHE(IGMN2,IBMN2) IF (IEL1.EQ.0)THEN IELCHE(IGAU,IB)=IEL2 ELSEIF(IEL2.EQ.0)THEN IELCHE(IGAU,IB)=IEL1 ELSE * * NOM DE COMPOSANTE NON RECONNU * IRET=197 SEGSUP MELVAL RETURN ENDIF ENDDO ENDDO ENDIF IMELVA=MELVAL ELSE NBP1=MELVA1.VELCHE(/1) NBP2=MELVA2.VELCHE(/1) NEL1=MELVA1.VELCHE(/2) NEL2=MELVA2.VELCHE(/2) N1PTEL=MAX(NBP1,NBP2) N1EL =MAX(NEL1,NEL2) N2PTEL=0 N2EL =0 SEGINI MELVAL DO 50 IB=1,N1EL IBMN1 = MIN(IB ,NEL1) IBMN2 = MIN(IB ,NEL2) DO 51 IGAU=1,N1PTEL IGMN1 = MIN(IGAU,NBP1) IGMN2 = MIN(IGAU,NBP2) VELCHE(IGAU,IB)= MELVA1.VELCHE(IGMN1,IBMN1)+ & XX*MELVA2.VELCHE(IGMN2,IBMN2) 51 CONTINUE 50 CONTINUE IMELVA=MELVAL ENDIF END
© Cast3M 2003 - Tous droits réservés.
Mentions légales