[Fortran] Programmer une équation

Fermé
soumaya2012 Messages postés 1 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 6 novembre 2007 - 6 nov. 2007 à 12:36
 lol - 24 févr. 2008 à 13:36
Bonjour,
je dois programmer une equation j'ai réalisé ce programme mais je n'ai pas obtenue des resultats corrects,
voici le programme réalisé sur fortran:
!programme principal
External taux,rzero,Vun,QTRAP,run,rdeux

Include 'comm.f'
delta=0.33
DNun=6.0
DNdeux=24.0
W=2.0
DL=8.0
ALPHA=2.0
PLMD=2.0
tauxun=delta*(DNun)
tauxdeux=delta*(DNun+1)
tauxtrois=delta*(DNdeux)
Do 50 Dm=1.0,5.0,1.0
if(Dm.EQ.1.0) then
deltam=0.74
Cm=10.0
ENDIF

if(Dm.EQ.2.0) then
deltam=0.41
Cm=30.0
ENDIF

if(Dm.EQ.3.0) then
deltam=0.20
Cm=60.0


ENDIF

if(Dm.EQ.4.0) then
deltam=0.09
Cm=100.0


ENDIF

if(Dm.EQ.5.0) then
deltam=0.04
Cm=160.0


ENDIF

!2éme terme de NB(W,L)
do 100 s=DNun+1.0,DNdeux-1.0,1.0
tauxj= delta*s
tauxNun= delta*(s+1)
do 90 Dj=0.0,s,1.0
if (Dj.EQ.0) then
V=0
else
V=V+ (deltam)*(taux(Dj)-taux(Dj-1))
endif
90 continue
Vj=V
A=Vj-tauxj
call QTRAP(rzero,tauxj,tauxNun,C)
if (s.EQ.0.0) then
somme=0.0
else
somme=C+somme
endif
100 continue
!1er terme de NB(W,L)
do 80 Dk=0.0,DNun,1.0
if (Dk.EQ.0) then
VNun=0
else
VNun=VNun+ (deltam)*(taux(Dk)-taux(Dk-1))
endif
80 continue
call QTRAP(run,W,tauxdeux,D)
!3éme terme de NB(W,L)
do 70 B=0.0,DNdeux,1.0
if (B.EQ.0.0) then
VNdeux=0.0
else
VNdeux=VNdeux+ (deltam)*(taux(B)-taux(B-1))
endif
70 continue
call QTRAP(rdeux,tauxtrois,DL,E)
G=C+D+E

do 60 Cr=20.0,500.0,20.0

R=(Cm*DNdeux)+(Cr*G)

write(6,*)Dm,Cr,R

60 continue
50 continue


END



!LA FONCTION DE tauxj
FUNCTION taux(X)
INCLUDE 'comm.f'

taux=delta*X
RETURN
END


! LA FONCTION DE taux de panne
FUNCTION rzero(T)

INCLUDE 'comm.f'
!write(6,*)Vj,tauxj

rzero = (PLMD/ALPHA)*(((Vj-tauxj+T)/ALPHA)**(PLMD-1))

RETURN

END

! LA FONCTION DE taux de panne
FUNCTION run(T)

INCLUDE 'comm.f'
!write(6,*)VNUN,tauxun

rdeux = (PLMD/ALPHA)*(((VNUN-tauxun+T)/ALPHA)**(PLMD-1))


RETURN

END

! LA FONCTION DE taux de panne
FUNCTION rdeux(T)

INCLUDE 'comm.f'
!write(6,*)VNdeux,tauxtrois

rdeux = (PLMD/ALPHA)*(((VNdeux-tauxtrois+T)/ALPHA)**(PLMD-1))


RETURN

END

!L’intégrateur QTRAP (calcul d’une intégrale simple à l’aide de la méthode du trapèze) :
SUBROUTINE QTRAP(FUNC,A,B,S)
PARAMETER (EPS=1.E-2, JMAX=20)


IF((B-A).LT.1.E-4) THEN
S = 1.E-6
RETURN
ENDIF


IF(B.EQ.0.0) THEN
B = 0.001
ENDIF


OLDS=-1.E30
DO 11 J=1,JMAX
CALL TRAPZD(FUNC,A,B,S,J)
IF (ABS(S-OLDS).LT.EPS*ABS(OLDS)) RETURN
OLDS=S
11 CONTINUE
! PAUSE 'Too many steps.'
END
!La méthode du trapèze : Méthode utilisée par l’intégrateur QTRAP

SUBROUTINE TRAPZD(FUNC,A,B,S,N)

! This routine computes the N'th stage of refinement of an extended
! trapezoidal rule. FUNC is input as the name of the function to be
! integrated between limits A and B, also input. When called with N=1
! the routine returns as S the crudest estimate of the integral.
! Subsequent calls with N=2,3,.. will improve the accuracy of S by
! adding 2**N-2 additional interior points. S should not be modified
! BETWEEN SEQUENTIAL CALLS.

! EXTERNAL FUNC

IF (N.EQ.1) THEN
S=0.5*(B-A)*(FUNC(A)+FUNC(B))
IT = 1

ELSE

TNM=IT
DEL=(B-A)/TNM
X=A+0.5*DEL
SUM=0.
DO 11 J=1,IT
SUM=SUM+FUNC(X)
X=X+DEL
11 CONTINUE
S=0.5*(S+(B-A)*SUM/TNM)
IT=2*IT
END IF
RETURN
END



!les dependencies
COMMON/PARAM/Dm,delta,DNun,DNdeux,W,DL,ALPHA,PLMD,deltam,Cm,Vj
COMMON/PARAM/tauxj,VNUN,tauxun,VNdeux,tauxtrois


merci pour votre aide.
A voir également:

2 réponses

bjour,jai un problem car j veu un programme en pascal ki permet de resoudre une equation du troisieme degré.stp,j'en ai besoin.merci d'avance..
0
bonjour:
je doit faire un programme fortran d'une equation thermodynamique qui me permetre de calculer x1,x2,x3 sachant que x1+x2+x3=1 et k=x2/x3 avec k=cost, aidez moi svp et merci à tous
0