xkm
C XKM SOURCE CB215821 16/04/21 21:18:42 8920 C C =============================================================== C CE SOUS-PROGRAMME EST APPELE PAR ENDOM1. C IL CALCULE LES COEFF. K ET M DE LA FONCTION DECRIVANT LA COURBE C DE TRACTION: Y=K*X**(1/M) OU X EST UNE DEFORM. ET Y UNE CONTR. C C ENTREES: C ------- C NCOURB = NBR. DE PTS. DE LA COURBE DE TRACTION C TRAC(2*NCOURB)= COURBE DE TRACTION C C SORTIES: C ------- C XK= COEFF. K C XM= COEFF. M C ================================================================ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) DIMENSION TRAC(*),B(2),C(2),W(*) DIMENSION A(2,2),F(NCOURB,2) C DATA TOL,MAXITE/1.D-3,15/ C C C ========================================== C CAS OU LA COURBE DE TRACTION N'A QUE 2 PTS C ========================================== IF (NCOURB.EQ.2) THEN XK=(TRAC(3)-TRAC(1))/(TRAC(4)-TRAC(2)) XM=1.D0 GOTO 100 ENDIF C ======================================= C METHODE DES MOINDRES CARRES PONDERES C ON LINEARISE: LOG(Y)=LOG(K)+1/M*LOG(X) C C'EST DE LA FORME: YY=C1*F1(X)+C2*F2(X) C ON RESOUD: A(2,2)C(2)=B(2) C ======================================= DO 10 I=1,NCOURB 10 CONTINUE C C C ............................................................... C DS. LA SUITE, LE 1ER PT. DE LA COURBE EST OMIS CAR TRAC(1)=SIGY C ET TRAC(2)=0 CE QUI POSE PB. POUR LE CALCUL DES LOGARITHMES C ............................................................... DO 30 I=2,NCOURB A(1,1)=A(1,1)+W(I) A(1,2)=A(1,2)+W(I)*LOG(TRAC(2*I)) A(2,2)=A(2,2)+W(I)*LOG(TRAC(2*I))*LOG(TRAC(2*I)) 30 CONTINUE XK=EXP(C(1)) XM=1.D0/C(2) C C ---------------------------------------------------------------- C SI LA METHODE DE GAUSS-NEWTON NE CONVERGE PAS, ON RETIENT, COMME C SOLUTIONS DU PB., XK ET XM CALCULES PAR LA METHODE PRECEDENTE, C QU'ON STOCKE DS. XK0 ET XM0: C ---------------------------------------------------------------- XK0=XK XM0=XM C C ======================= C METHODE DE GAUSS-NEWTON C ======================= NITER=0 40 DO 50 I=2,NCOURB F(I,1)=TRAC(2*I)**(1.D0/XM) F(I,2)=-(XK/XM**2.D0)*LOG(TRAC(2*I))*(TRAC(2*I)**(1.D0/XM)) 50 CONTINUE C DO 60 I=1,2 DO 60 J=1,2 A(I,J)=0.D0 DO 60 K=2,NCOURB A(I,J)=A(I,J)+F(K,I)*F(K,J) 60 CONTINUE C DO 70 I=1,2 B(I)=0.D0 DO 70 K=2,NCOURB B(I)=B(I)+F(K,I)*(TRAC(2*K-1)-SIGY-XK*TRAC(2*K)**(1.D0/XM)) 70 CONTINUE C C C ------------------------------------------------------------- C CALCUL DE L'ERREUR AV. (Z1) ET APRES (Z2) LA MAJ. DE XK ET XM C ------------------------------------------------------------- Z1=0.D0 DO 80 K=2,NCOURB ZZ1=TRAC(2*K-1)-SIGY-XK*(TRAC(2*K)**(1.D0/XM)) ZZ1=ZZ1*ZZ1 Z1=Z1+ZZ1 80 CONTINUE C XK=XK+DXK XM=XM+DXM C Z2=0.D0 DO 90 K=2,NCOURB ZZ2=TRAC(2*K-1)-SIGY-XK*(TRAC(2*K)**(1.D0/XM)) ZZ2=ZZ2*ZZ2 Z2=Z2+ZZ2 90 CONTINUE C C ---------------------------- C TESTS D'ARRET DES ITERATIONS C ---------------------------- NITER=NITER+1 C ARRET=ABS(Z2-Z1)/Z2 C IF (ARRET.LT.TOL) GOTO 100 IF (NITER.LT.MAXITE) GOTO 40 C C --------------------------------------------------------------- C SI ON PASSE ICI, C'EST QUE G-NEWTON N'A PAS CONVERGE AU BOUT DE C MAXITE ITER.: LA SOL. EST CELLE CALCULEE PAR LA METHODE DES C MOINDRES CARRES PONDERES C --------------------------------------------------------------- XK=XK0 XM=XM0 100 CONTINUE RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales