C ADPAS SOURCE FANDEUR 22/05/02 21:15:01 11359 SUBROUTINE ADPAS(DS,DSMIN,DSMAX,ITS,ITERMY,ANGMIN,ANGMAX,N,t0,tp) * *======================================================================= * Adaptation automatique de la longueur du pas tangent *======================================================================= * IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) REAL*8 DS,DSMIN,DSMAX,ITERMY,ANGMIN,ANGMAX,t0(N),tp(N) REAL*8 COEFF,ANGLE,nt0,ntp,psc0p,nrmPS INTEGER ITS,N REAL*8 XPI PARAMETER(XPI=3.141592653589793D0) REAL*8 DNRM2, DDOT EXTERNAL DNRM2, DDOT * * WRITE(*,*) 'DSINI =',DS *===== TEST SUR LE NOMBRE D'ITERATION ================================== COEFF = 2.0D0**((ITERMY-ITS)/2) * augmentation de +20% maxi entre 2 pas COEFF=MIN(COEFF,1.2D0) c COEFF1=COEFF *===== TEST SUR L'ANGLE ================================================ nt0 = DNRM2(N,t0,1) ntp = DNRM2(N,tp,1) psc0p = DDOT(N,tp,1,t0,1) nrmPS = psc0p/(nt0*ntp) * nrmPS = MIN(nrmPS,1.D0) ANGLE = ABS(ACOS(nrmPS))*180.D0/XPI IF (ANGLE.GT.ANGMAX) THEN c DS = DS/4. COEFF=0.25D0 ENDIF IF (ANGLE.LT.ANGMIN) THEN c DS = DS*1.5 COEFF=1.5D0 cbp : pourquoi pas 1.2 ? ENDIF *===== MISE A JOUR BORNEE ============================================== * mise a jour DS = DS*COEFF DS=MIN(DS,DSMAX) DS=MAX(DS,DSMIN) c WRITE(*,*) '>>> DS=',DS,COEFF,COEFF1,ANGLE,ANGMIN,ANGMAX c RETURN END