Programme FORTRAN en C
FortranNoobs
-
cchristian Messages postés 921 Date d'inscription Statut Membre Dernière intervention -
cchristian Messages postés 921 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai un petit problème, je connais absolument pas le FORTRAN et je voulais savoir si quelqu'un pouvait m'aider à traduire ce code en C ou C++ ou au moins m'expliquer les grandes lignes. Ce code est censé résoudre un système d'équations différentielles.
Merci pour vos réponses.
=====================================================
NN=250000
c
time=140.0d0
dt=time/dble(float(NN))
c
c
c starting values for active en0, nonactive en1 and daughter endd
c
c
eN0=1.0d0
eN1=0.000002d0
endd=3.0d0/100.0d0*eN0
do k=1,NN
t=dble(float(k))*dt
c
w=0.885d0
ff=p*(1.0d0+1.0d0*cos(w*t))
c
dn0=-(p_ec+p_loss+p_bp+ff)*eN0+p_01*eN1
dn0=dn0*dt
c
dn1=ff*eN0-(p_01+p_bp+p_loss)*eN1
dn1=dn1*dt
c
dnd=p_ec*eN0-p_loss*endd
dnd=dnd*dt
c
eN0=en0+dn0
eN1=eN1+dn1
endd=endd+dnd
enddo
==================================================
j'ai un petit problème, je connais absolument pas le FORTRAN et je voulais savoir si quelqu'un pouvait m'aider à traduire ce code en C ou C++ ou au moins m'expliquer les grandes lignes. Ce code est censé résoudre un système d'équations différentielles.
Merci pour vos réponses.
=====================================================
NN=250000
c
time=140.0d0
dt=time/dble(float(NN))
c
c
c starting values for active en0, nonactive en1 and daughter endd
c
c
eN0=1.0d0
eN1=0.000002d0
endd=3.0d0/100.0d0*eN0
do k=1,NN
t=dble(float(k))*dt
c
w=0.885d0
ff=p*(1.0d0+1.0d0*cos(w*t))
c
dn0=-(p_ec+p_loss+p_bp+ff)*eN0+p_01*eN1
dn0=dn0*dt
c
dn1=ff*eN0-(p_01+p_bp+p_loss)*eN1
dn1=dn1*dt
c
dnd=p_ec*eN0-p_loss*endd
dnd=dnd*dt
c
eN0=en0+dn0
eN1=eN1+dn1
endd=endd+dnd
enddo
==================================================
A voir également:
- Programme FORTRAN en C
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Message programmé iphone - Guide
- Programme word gratuit - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
3 réponses
Bonjour,
Voici quelques remarques sur cette portion de code Fortran :
Cordialement.
Cchristian.
Voici quelques remarques sur cette portion de code Fortran :
C Dans un programme Fortran, si l'option IMPLICIT NONE n'est pas C active, toutes les variables dont la première lettre est I,J, C K,L,M, ou N sont considérées de type INTEGER*4 (représentation C interne sur 4 octets). C Les autres variables sont considérées REAL*4 (représentation C intene sur 4 octets). Ici NN=25000 aurait très bien pu être C défini de la manière suivante : INTEGER NN /250000/ C Dans cet extrait de programme Fortran l'option IMPLICIT NONE C n'est vraisemblablement pas activée. NN=250000 print *, time pause C Ici les variables time et dt sont des variable de type REAL*8 car C le paramètre d ou (D) = double précision est codé dans la partie C fractionnaire. Il induit le type REAL*8 (représentation interne C sur 8 octets). time=140.0d0 C Pour la compatibilité du calcul NN est converti en REAL*4 grâce C à la fonction intrinsèque FLOAT. dt=time/dble(float(NN)) c c c starting values for active en0, nonactive en1 and daughter endd c c eN0=1.0d0 eN1=0.000002d0 endd=3.0d0/100.0d0*eN0 C Boucle équivalente à une boucle FOR (k = 1, k < NN; k++) { ..... do k=1,NN t=dble(float(k))*dt w=0.885d0 C Fonction intrinsèque COSinus. ff=p*(1.0d0+1.0d0*cos(w*t)) C Opérations classiques : dn0=-(p_ec+p_loss+p_bp+ff)*eN0+p_01*eN1 dn0=dn0*dt dn1=ff*eN0-(p_01+p_bp+p_loss)*eN1 dn1=dn1*dt dnd=p_ec*eN0-p_loss*endd dnd=dnd*dt eN0=en0+dn0 eN1=eN1+dn1 endd=endd+dnd C équivalent: "}" d'une boucle FOR. enddo
Cordialement.
Cchristian.