Programme FORTRAN en C

Fermé
FortranNoobs - 29 mai 2009 à 18:30
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 - 3 juin 2009 à 00:29
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

==================================================

3 réponses

cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
30 mai 2009 à 12:33
Bonjour,

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.
0
FortranNoobs
2 juin 2009 à 19:12
Merci pour votre réponse. Cela m aide beaucoup.
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
3 juin 2009 à 00:29
Bonsoir,

Merci pour le retour. Si dans la limite de mes connaissances en Fortran je peux vous aider davantage, ça sera avec plaisir. Mais pour les équations, qu'elles soient différentielles ou non, ne comptez pas sur moi.
Bon courage !
0