1 : C PACALC SOURCE CHAT 05/01/13 02:08:40 5004 2 : c Sous-Programme du module MISTRAL1 3 : C -------------------------------------------------------------------------- 4 : SUBROUTINE PACALC (DXMI,DXMA,XMAX, II, DYMA,DYPRMA, 5 : & YP, DXA,YPA,NP, DX) 6 : C -------------------------------------------------------------------------- 7 : C Determination du pas de calcul DX en fonction : 8 : C - du minimum et du maximum imposes : DXMI et DXMA, 9 : C - de l'intervalle maximal de X considere XMAX, 10 : C - des increments maximaux autorises DYMA(I) des Y(I), 11 : C - des increments relatifs maximaux autorises DYPRMA(I) 12 : C de leurs derivees YP(I), 13 : C - des valeurs de ces derivees YP(I) en X, 14 : C et eventuellement, si NP est superieur ou egal a 1 : 15 : C - des derivees YPA(I) au X precedent, 16 : C - du pas de calcul precedent DXA, 17 : C II etant le nombre de variables Y considerees pour determiner DX. 18 : C -------------------------------------------------------------------------- 19 : IMPLICIT INTEGER(I-N) 20 : IMPLICIT REAL*8 (A-H, O-Z) 21 : DIMENSION DYMA(1:*),DYPRMA(1:*),YP(1:*),YPA(1:*) 22 : DX = DXMA 23 : IF (DXMI.GE.DXMA) RETURN 24 : IF (NP.EQ.0) THEN 25 : DO I = 1,II 26 : IF (ABS(YP(I))*DX.GT.DYMA(I)) THEN 27 : DX = DYMA(I)/ABS(YP(I)) 28 : END IF 29 : END DO 30 : ELSE 31 : DO I = 1,II 32 : AYPI = ABS(YP(I)) 33 : IF (AYPI*DX.GT.DYMA(I)) THEN 34 : AYSI = ABS((YP(I)-YPA(I))/DXA) 35 : DYPIMA = MAX(DYMA(I)/XMAX,AYPI*DYPRMA(I)) 36 : IF (AYSI*DX.GT.DYPIMA) THEN 37 : DXYI = DYMA(I)/AYPI 38 : DXYPI = DYPIMA/AYSI 39 : DX = MAX(DXYI,DXYPI) 40 : END IF 41 : END IF 42 : END DO 43 : END IF 44 : DX = MAX(DX,DXMI) 45 : RETURN 46 : END 47 : 48 :
© Cast3M 2003 - All rights reserved.
Disclaimer