C PACALC    SOURCE    OF166741  26/05/11    21:15:20     12546          
c     Sous-Programme du module MISTRAL1
C     --------------------------------------------------------------------------
      SUBROUTINE PACALC (DXMI,DXMA,XMAX, II, DYMA,DYPRMA,
     &                   YP, DXA,YPA,NP, DX)
C     --------------------------------------------------------------------------
C     Determination du pas de calcul DX en fonction :
C     - du minimum et du maximum imposes : DXMI et DXMA,
C     - de l'intervalle maximal de X considere XMAX,
C     - des increments maximaux autorises DYMA(I) des Y(I),
C     - des increments relatifs maximaux autorises DYPRMA(I)
C     de leurs derivees YP(I),
C     - des valeurs de ces derivees YP(I) en X,
C     et eventuellement, si NP est superieur ou egal a 1 :
C     - des derivees YPA(I) au X precedent,
C     - du pas de calcul precedent DXA,
C     II etant le nombre de variables Y considerees pour determiner DX.
C     --------------------------------------------------------------------------
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H, O-Z)
-INC CCREEL
        DIMENSION DYMA(1:*),DYPRMA(1:*),YP(1:*),YPA(1:*)
      DX = DXMA
      IF (DXMI.GE.DXMA) RETURN
      IF (NP.EQ.0) THEN
        DO I = 1,II
          AYPI = ABS(YP(I))
          IF (AYPI*DX.GT.DYMA(I)) THEN
            DX = DYMA(I)/(AYPI+XPETIT)
          END IF
        END DO
      ELSE
        DO I = 1,II
          AYPI = ABS(YP(I))
          IF (AYPI*DX.GT.DYMA(I)) THEN
            AYSI = ABS((YP(I)-YPA(I))/DXA)
            DYPIMA = MAX(DYMA(I)/XMAX,AYPI*DYPRMA(I))
            IF (AYSI*DX.GT.DYPIMA) THEN
              DXYI  = DYMA(I)/(AYPI+XPETIT)
              DXYPI = DYPIMA/(AYSI+XPETIT)
              DX = MAX(DXYI,DXYPI)
            END IF
          END IF
        END DO
      END IF
      DX = MAX(DX,DXMI)

      RETURN
      END

 
