Convertir un programme en fortan en C ou C++

Résolu
simojames Messages postés 2 Date d'inscription mardi 2 mars 2010 Statut Membre Dernière intervention 2 mars 2010 - 2 mars 2010 à 02:15
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 - 2 mars 2010 à 15:48
voila le programme en fortran , j'aimerai bien et je serai reconnaissant si qlq puisse le réécrire sous c ou C++


cristal de programme
implicite aucun
character*80 : : Nom de fichier
à double précision : : alat, displac
nombre entier : : nx, ny, nz
appel Generate_Crystal (nom de fichier (1 de Read_Parameters d'appel (nom de fichier, alat, nx, ny, nz, displac) : len_trim (nom de fichier)), et alat, nx, ny, nz, displac)
cristal de programme de fin
sous-routine Read_Parameters (nom de fichier, alat, nx, ny, nz, displac)
!
! Obtenez tous les paramètres d'utilisateur. Les paramètres potentiels
! sont inclus dans cette routine pour guider seulement l'utilisateur vers
! choix appropriés.
!
implicite aucun
nombre entier, paramètre : : crtout = 6
character* (*) : : Nom de fichier
à double précision : : alat, displac
nombre entier : : nx, ny, nz, ielement
logique : : AlreadyThere
nombre entier, paramètre : : Nelements = 4
character*2, paramètre, dimension (Nelements) : : élément (/ » de « LJ », de « Al », de « Au », « de Pb/) character*36, paramètre, dimension (Nelements) : : description (/et
« Lennard-Jones a tronqué au sigma 2,5 », et
« Aluminium, potentiel de colle », et
« Or, potentiel de colle », et
« Fil, » de potentiel de colle/)
à double précision, paramètre, dimension (Nelements) : : et
espaçant = (/1,5496, 4,032, 4,0704, 4,9095/)
à double précision, paramètre, dimension (Nelements) : : et
coupure = (/2.5d0,5.55805441821810d0,3.9d0,5.5030d0/)
écrivez (crtout, « (/, d'a/) ") « le cristal : produisez des coordonnées de FCC »
écrivez (crtout, « (a) ") « les éléments soutenus :  »
faites l'ielement = 1, Nelements
écrivez (crtout, « (a, i1,5a, f6.4) ") « Code= », ielement, « :  », élément (ielement), et « - », description (ielement), « - coupure Rc = », enddo de coupure (ielement)
écrivez (crtout, « () ")
ielement = 0
faites tandis que (ielement < 1 ielement > Nelements de .or)
écrivez (crtout, « (a, i1, a) », advance='NO') le « code d'élément (1", Nelements, ") = » a lu (*, *, end=900) l'ielement
enddo
écrivez (crtout, « (a, a, f7.4) ") l'élément (ielement), et
« : l'espacement en cristal de trellis d'équilibre à P=0 est a_eq = », espacement (ielement) écrivent (le crtout, « (a) », advance='NO') « trellis espaçant a = » a lu (*, *, end=900) l'alat
écrivez (crtout, « (/, a, i3,3a, f7.4/) ") et
« Rappel : l'image minimum exige au moins », et
international (2.d0*cutoff (ielement) /alat) + 1, « cellules le long de x, y, z pour », et
élément (ielement), « @ », alat
écrivez (crtout, « (a) », advance='NO') « nombre des cellules le long de x = » (*, *, end=900) nx lu
écrivez (crtout, « (a) », advance='NO') « nombre des cellules le long de y = » (*, *, end=900) ny lu
écrivez (crtout, « (a) », advance='NO') « nombre des cellules le long de z = » (*, *, end=900) nz lu
écrivez (crtout, « (a) », advance='NO') « déplacement aléatoire maximum = » (*, *, end=900) displac lu
800 continuent
écrivez (crtout, « (a) », advance='NO') « nom de dossier de coordonnées = » (*, « (a) », end=900) nom de fichier lu
!
! vérifiez immédiatement si le nom de fichier existe déjà
!
enquérez-vous (file=FileName (1 : len_trim (nom de fichier)), exist=AlreadyThere) si (AlreadyThere) puis
écrivez (crtout, « (2a) ") le nom de fichier (1 : len_trim (nom de fichier)), et
« déjà existe, satisfait choisissent un autre nom. »
allez à 800
endif
retour ! sortie régulière
900 continuent ! entrée inachevée d'utilisateur
arrêt
sous-routine Read_Parameters de fin
sous-routine Generate_Crystal (nom de fichier, alat, nx, ny, nz, displac)
!
! Effectue le travail réel de produire des coordonnées atomiques
!
implicite aucun
nombre entier, paramètre : : crtout = 6
character* (*) : : Nom de fichier
à double précision : : alat, displac
à double précision, dimension (3) : : BoxSize, couche-points
nombre entier : : nx, ny, nz
nombre entier : : N, I, j, k, L
à double précision : : X, y, z
nombre entier, paramètre : : nbase 4 ! nombre d'atomes en cellule de FCC à double précision, dimension (3,4), paramètre : : rcell et ! coords de reshape d'atomes ((/0.0d0, 0.0d0, 0.0d0, et
0.5d0, 0.5d0, 0.0d0, et
0.0d0, 0.5d0, 0.5d0, et
0.5d0, 0.0d0, 0.5d0/), (/3,4/))

!
! Fichier ouvert pour des coordonnées
!
ouvrez-vous (unit=1, file=FileName, status='new', form='formatted', et
action='write', position='rewind', err=700)
!
! Définissez et écrivez le nombre des particules N, et la taille de boîte le long de x, y, z
! sur la première ligne du dossier
!
N = 4*nx*ny*nz
BoxSize (1) = nx*alat
BoxSize (2) = ny*alat
BoxSize (3) = nz*alat
!
! Le « % » signale pour ignorer cette ligne à la production de programme de salle de bal ! une image de la simulation
!
écrivez (1, « (A1, L2, I7,3E23.15) », err=800) « % », .FALSE., N, BoxSize
!
! Produisez des coordonnées atomiques et écrivez-les
!
faites k=0, nz-1
faites j=0, ny-1
faites i=0, nx-1
faites L=1, nbase
appelez le random_number (couche-points) ! obtenez 3 nombres aléatoires dans (0,1) x alat * (I + rcell (1, L)) + 2.d0*displac* (couche-points (1) - 0.5d0) y alat * (j + rcell (2, L)) + 2.d0*displac* (couche-points (2) - 0.5d0) z = alat * (k + rcell (3, L)) + 2.d0*displac* (les couche-points (3) - 0.5d0) écrivent (1, « (1X, 3E23.15) », err=800) x, y, z
enddo
enddo
enddo
enddo
endfile (unit=1) ! c'est parce que nous pouvons recouvrir une fin de dossier précédente et plus longue (unit=1)
print*, N, « coordonnées écrites sur », nom de fichier
retour
700 continuent
print*, « Generate_Crystal : MORTEL : ne peut pas s'ouvrir », le nom de fichier
arrêt
800 continuent
print*, « Generate_Crystal : MORTEL : écrivez l'erreur dans », nom de fichier
fermez-vous (unit=1)
arrêtez
finissez la sous-routine Generate_Crystal

1 réponse

cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
2 mars 2010 à 15:48
Bonjour,

J'avais aussi un problème de transcription et j'ai utilisé f2c qui convertit le fortran en C.
le code transcrit m'a donné toute satisfaction.
Donc recherche f2c


louis14
3