pileps
C PILEPS SOURCE OF166741 24/10/03 21:15:28 12022 * * but : soit deux champs de epsilon il faut trouver le lambda max * tel que: eps1 + lambda*eps2 = signe(eps2) * crit * SUBROUTINE PILEPS IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMCHAML -INC SMLREEL SEGMENT MZONG INTEGER NZONG(0) ENDSEGMENT SEGMENT MZON1 INTEGER NZON1(0) ENDSEGMENT SEGMENT MZON2 INTEGER NZON2(0) ENDSEGMENT SEGMENT ITAFF INTEGER JTAFF(0) ENDSEGMENT SEGMENT NOMID CHARACTER*8 LESOBL(NBROBL),LESFAC(NBRFAC) ENDSEGMENT SEGMENT MPTVAL INTEGER IPOS(NS) ,NSOF(NS) INTEGER IVAL(NCOSOU) CHARACTER*16 TYVAL(NCOSOU) ENDSEGMENT PARAMETER ( NINF=3 ) INTEGER INFOS(NINF) CHARACTER*72 MOT CHARACTER*16 CONCH1,CONCH2 * lecture des champs et du flottant IF(IERR.NE.0) RETURN IF(IERR.NE.0) RETURN IF(IERR.NE.0) RETURN * fin de lecture XLAMB = 1.D+50 IF(IPCHE1.NE.IPCHE2) GOTO 1000 * * SI LES 2 POINTEURS SONT EGAUX TRAITEMENT SPECIAL * MCHELM=IPCHE1 NSOUS = IMACHE(/1) * DO 110 IA=1,NSOUS MCHAML=ICHAML(IA) ICHAML(IA)=MCHAML DO 111 ICOMP=1,IELVAL(/1) MELVAL = IELVAL(ICOMP) N1PTEL = VELCHE(/1) N1EL = VELCHE(/2) IF (N1PTEL.EQ.0) THEN RETURN ENDIF DO IB = 1, N1EL DO IGAU=1,N1PTEL r_z = VELCHE(IGAU,IB) IF ( r_z .NE. 0.D0 ) THEN XLA = (SIGN( XCRIT,r_z ) - r_z) / r_z XLAMB = MIN ( XLAMB , XLA ) ENDIF ENDDO ENDDO 111 CONTINUE 110 CONTINUE GOTO 777 *_______________________________________________________________________ * * CAS GENERAL *_______________________________________________________________________ 1000 CONTINUE MCHEL1=IPCHE1 MCHEL2=IPCHE2 * * ERREUR IMPOSSIBLE D ADDITIONNER DES CHPS/ELMTS * DE SS TYPE DIFFERENTS * IF (MCHEL1.IFOCHE.NE.MCHEL2.IFOCHE) THEN MOTERR(1:16)=MCHEL1.TITCHE(1:8)//MCHEL2.TITCHE(1:8) IPCHAD=0 GOTO 666 ENDIF NSOUS1=MCHEL1.ICHAML(/1) NSOUS2=MCHEL2.ICHAML(/1) * * QUELLE BIJECTION ENTRE LES SOUS PAQUETS SI OUI TRAITEMENT AMELIORE * IF (NSOUS1.NE.NSOUS2) GOTO 4000 * SEGINI ITAFF DO 17 ISOUS1=1,NSOUS1 IPMAI1 = MCHEL1.IMACHE(ISOUS1) CONCH1 = MCHEL1.CONCHE(ISOUS1) DO 18 ISOUS2=1,NSOUS2 ISOUS=ISOUS2 IPMAI2= MCHEL2.IMACHE(ISOUS) CONCH2= MCHEL2.CONCHE(ISOUS) IF(IPMAI1.EQ.IPMAI2.AND.CONCH1.EQ.CONCH2) THEN * * VERIFICATION POUR LES INFCHE * IF (IRTD.EQ.0) GOTO 18 IMINT1=MCHEL1.INFCHE(ISOUS1,4) IMINT2=MCHEL2.INFCHE(ISOUS2,4) IF (IMINT1.EQ.IMINT2) GOTO 171 IMINT1 = MCHEL1.INFCHE(ISOUS1,6) IMINT2 = MCHEL2.INFCHE(ISOUS2,6) IF (IMINT1.EQ.IMINT2) GOTO 171 * * ERREUR IMPOSSIBLE D ADDITIONNER DES CHPS/ELMTS * DE SS TYPE DIFFERENTS SEGSUP ITAFF RETURN ENDIF 18 CONTINUE SEGSUP ITAFF GOTO 4000 * 171 CONTINUE JTAFF(**)=MCHEL2.ICHAML(ISOUS) 17 CONTINUE * * ON A TROUVE UNE BIJECTION ET ON VECTORISE * N1=NSOUS1 DO 400 ISOUS=1,NSOUS1 MCHAML=MCHEL1.ICHAML(ISOUS) * IPCHA=MCHAML * MCHAM2=JTAFF(ISOUS) IPCHA2=MCHAM2 * IF (IPCHA.EQ.0) THEN SEGSUP ITAFF GOTO 9990 ENDIF * 400 CONTINUE SEGSUP ITAFF GOTO 777 *_______________________________________________________________________ * * ON A PAS TROUVE DE BIJECTION *_______________________________________________________________________ * 4000 CONTINUE SEGINI MZONG,MZON1,MZON2 DO 500 ISOUS1=1,NSOUS1 NZONG(**)=MCHEL1.IMACHE(ISOUS1) NZON1(**)=ISOUS1 NZON2(**)=0 500 CONTINUE IWRN=0 DO 510 ISOUS2=1,NSOUS2 IPMAI2 = MCHEL2.IMACHE(ISOUS2) CONCH2 = MCHEL2.CONCHE(ISOUS2) DO 520 ISOUS1=1,NSOUS1 IPMAI1= MCHEL1.IMACHE(ISOUS1) CONCH1= MCHEL1.CONCHE(ISOUS1) IF(IPMAI1.EQ.IPMAI2 .AND.CONCH1.EQ.CONCH2) THEN IF (IRTD.EQ.0) GOTO 520 * * VERIFICATION POUR LES MINTES * IF ( MCHEL1.INFCHE(ISOUS1,4).EQ. & MCHEL2.INFCHE(ISOUS2,4) ) GOTO 530 * * ERREUR SUR LES SUPPORTS DES MCHAML * SEGSUP MZONG,MZON1,MZON2 RETURN * ENDIF 520 CONTINUE IWRN=1 NZONG(**)=IPMAI2 NZON1(**)=0 NZON2(**)=ISOUS2 GOTO 510 * 530 CONTINUE NZON2(ISOUS1)=ISOUS2 510 CONTINUE * * WARNING LES SOUS ZONES GEOMETRIQUES NE SE CORRESPONDENT PAS 2 A 2 * NSOUS=NZONG(/1) N1=NSOUS * DO 540 ISOUS=1,NSOUS IF(NZON1(ISOUS).NE.0.AND.NZON2(ISOUS).NE.0) GOTO 550 * IF(NZON1(ISOUS).NE.0) THEN MCHAML=MCHEL1.ICHAML( NZON1(ISOUS) ) ENDIF IF(NZON2(ISOUS).NE.0) THEN MCHAML=MCHEL2.ICHAML( NZON2(ISOUS) ) ENDIF * GOTO 540 * 550 CONTINUE MCHAML=MCHEL1.ICHAML( NZON1(ISOUS) ) IPCHAD=MCHAML MCHAM2=MCHEL2.ICHAML( NZON2(ISOUS) ) IPCHA2=MCHAM2 * IF (IPCHA.EQ.0) THEN SEGSUP MZONG,MZON1,MZON2 GOTO 9990 ENDIF * 540 CONTINUE * SEGSUP MZONG,MZON1,MZON2 GOTO 666 * 9990 CONTINUE * * ERREUR DANS UNE SOUS ZONE : DESACTIVATION ET RETOUR * SEGSUP ITAFF RETURN * 666 CONTINUE 777 CONTINUE c RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales