IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

pb utilisation d'un code fortran90


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Par défaut pb utilisation d'un code fortran90
    Bonjour,
    j'ai besoin dans mon boulot d'utiliser (de compiler) un code écrit en fortran90.
    Premier problème : fortran, kézako ? Je ne suis pas programmeur, ni très calé en langage informatique des années 90^^

    j'ai bien cherché à droite à gauche, j'ai vaguement compris, etc.

    J'ai récupéré un compilateur fortran (Force2.0), je ne sais pas s'il est bien, mais en tout cas, je n'arrive pas à "compiler" mon code. Il paraît que quand je l'aurai compilé, ça me donnera un programme en .exe...

    Je ne comprends pas pourquoi ce petit programme en .exe n'existe pas directement, mais ça, ce n'est pas le problème.

    J'ouvre bêtement mon code dans mon petit logiciel, et je clique sur compiler, là, ça ne marche pas, et je ne sais pas pourquoi.

    Comme j'avais peur de ne pas savoir utiliser un code, j'ai aussi copié celui
    présenté dans wikipédia dans mon logiciel, et j'ai essayé de compiler. ça a marché.
    Je ne sais donc pas ce que je fais, ou ce que je ne fais pas qui m'empêche de faire fonctionner le code...


    pour info, le code que je dois compiler... (qui est libre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    Program nonorthoSA
    !
    ! This program calculates the accessible surface area by using a simple Monte
    ! Carlo integration for both orthorhombic and non-orthorhombic unit cells. 
    ! To run the program the following files are needed:
    ! 1) an input file containing the name of the file containing the diameters of 
    !    the atoms, the name of the file containing the coordinates of the 
    !    framework atoms, the diameter of the probe, the number of random trials
    !    around each framework atom, the lenghts of the unit cells (a, b, c), the
    !    cell angles (alpha, beta and gamma) and the crystal density.
    ! 2) A file containing the diameters of the framework atoms. The program is
    !    written to read in an xyz file. Please note that the coordinates of all
    !    framework atoms need to be specified (P1) as the program does not handle
    !    symmetry operations.
    !
    ! Things that you might have to change:
    ! - The maximum number of framework atoms 5000 at the moment. Change the value
    !   of max_no if your unit cells contains more atoms.
    !
    ! Changes to the code
    ! 
    ! 9/3/2009   Tina Duren
    !            fixed a bug that wrote the error message to a file rather than
    !            the screen if an atom type was not specified in the diameter list
    !            Thanks to Kenji Sumida from the University of Berkeley for 
    !            pointing this out.
    !      
    Use matrix
    Use defaults
     
    Implicit None
     
    !
    ! Maximum number of atoms in your unit cell. Increase if your unit cell 
    ! contains more atoms.
    !
    Integer, Parameter   :: max_no = 5000
     
    Character(len = 3)   :: atom
    Character(len = 2)   :: symbol
    Character(len = 10)  :: atomname(1:max_no), atomtype(1:100)
    Character(len = 100) :: atom_file, coord_file, output_file
     
    Type(MatrixType)     :: lij, lijinv
     
    Real(kind=RDbl)      :: sigmatype(1:100), atomsigma(1:4000)
    Real(kind=RDbl)      :: x(1:max_no), y(1:max_no), z(1:max_no)
    Real(kind=RDbl)      :: xnew(1:max_no), ynew(1:max_no), znew(1:max_no)
    Real(kind=RDbl)      :: alpha, beta, gamma, alpha_r, beta_r, gamma_r
    Real(kind=RDbl)      :: a, b, c, ai, bi, ci, aj, bj, cj, ak, bk, ck
    Real(kind=RDbl)      :: xpoint, ypoint, zpoint, xpointnew, ypointnew, zpointnew
    Real(kind=RDbl)      :: phi, costheta, theta
    Real(kind=RDbl)      :: rho_crys, dprobe, Nsample
    Real(kind=RDbl)      :: dx, dy, dz, dx_trans, dy_trans, dz_trans, dist2 
    Real(kind=RDbl)      :: sjreal, stotal, sfrac, uc_volume, stotalreduced
    Real(kind=RDbl)      :: ran_num1, ran_num2, trash
    Real(kind=RDBL)      :: ran0
     
    Integer              :: seed, N, ntypes, i, j, k, ncount
    Integer              :: ierror
     
    Logical              :: match, deny
    !
    ! Seed for the random number generator, change if you want to start from a 
    ! different random number
    !      
    seed = -52907
    !
    ! to properly initialise the random number generator, a negative seed is 
    ! needed
    !
    If (seed> 0) seed = -1 * seed
    !
    ! Read the data from the input file
    !
    Read(*,('(A)')) atom_file      ! file containing the diameters of atoms
    Read(*,('(A)')) coord_file     ! file containing the cartesian coordinates
    Read(*,*) dprobe                 ! diameter of probe in A
    Read(*,*) Nsample                ! Number of trials per framework atom 
    Read(*,*) a, b, c                ! Cell parameters in A
    Read(*,*) alpha, beta, gamma     ! cell angles
    Read(*,*) rho_crys               ! density of crystal in g / cm3
     
     
    alpha_r = alpha*degtorad
    beta_r = beta*degtorad
    gamma_r = gamma*degtorad
     
    ai = a
    aj = 0
    ak = 0
    bi = b*cos(gamma_r)
    bj = b*sin(gamma_r)
    bk = 0
    ci = c*cos(beta_r)
    cj = (b*c*cos(alpha_r)-bi*ci)/bj
    ck = sqrt(c**2-ci**2-cj**2)
     
    lij%comp = 0
    lij%comp(1,1) = ai
    lij%comp(1,2) = bi
    lij%comp(1,3) = ci
    lij%comp(2,1) = aj
    lij%comp(2,2) = bj
    lij%comp(2,3) = cj
    lij%comp(3,1) = ak
    lij%comp(3,2) = bk
    lij%comp(3,3) = ck
     
    lijinv=matrix_inverse(lij)
     
    !
    ! Open the files and read the data
    !
    Open(10, file=atom_file, status='old', IOSTAT = ierror)
    If (ierror /= 0) Then
        Write(*,*) 'Error opening file: ',atom_file
        Write(*,*) 'Make sure it exists or check the spelling of the filename'
    END IF
     
     
    ntypes = 0
     
    Do
       Read(10,*) atom
       IF(Trim(atom) == 'EOF') EXIT
       ntypes = ntypes + 1
    END DO
     
    Rewind(10)
     
    Do i = 1, ntypes
       Read(10,*) atomtype(i), sigmatype(i)
    End do
     
    !
    ! Openeing and reading the coord file
    !
    Open(20, file=coord_file, status='old', IOSTAT = ierror)
    If (ierror /= 0) Then
        Write(*,*) 'Error opening file: ',coord_file
        Write(*,*) 'Make sure it exists or check the spelling of the filename'
    END IF
    !
    ! The first line contains the number of framework atoms
    !
    Read(20,*) N
    !
    ! Skip the blank line of the xyz file
    !
    Read(20,*)   
    Do i=1, N
    !
    ! The format of the coordinate file corresponds to an xyz file as exported 
    ! from Diamond.
    ! x(i), y(i), z(i): x,y,z coordinates in Angstrom
    ! symbol: chemical symbol of framework atom.
    !
    ! Change the following read statement if you want to use a different
    ! file format. But ensure that you end up with the coordinates in A and
    ! the name of the framework atoms!
     
     
       Read(20,*) symbol, x(i), y(i), z(i)
     
    !
    ! The diameters of the framework atoms are stored together with the atom
    ! name. So assign atom name according to chemical symbol.
    !
      symbol = Trim(symbol)
      SELECT CASE(symbol)
        CASE('H')
          atomname(i) = 'Hydrogen'
        CASE('C')
          atomname(i) = 'Carbon'
        CASE('O')
           atomname(i) = 'Oxygen'
        CASE('Zn')
           atomname(i) = 'Zinc'
        CASE('Cr')
           atomname(i) = 'Chromium'
        CASE('Cd')
           atomname(i) = 'Cadmium'
        CASE default
           Write(*,*) symbol ,' not in list' 
           Write(*,*) 'List can be found in nonorthoSA.F90'
      END SELECT
     
     
    ! Transform molecules coordinates
       xnew(i) = x(i)*lijinv%comp(1,1) + y(i)*lijinv%comp(1,2) + &
                 z(i)*lijinv%comp(1,3)
       ynew(i) = x(i)*lijinv%comp(2,1) + y(i)*lijinv%comp(2,2) + &
                 z(i)*lijinv%comp(2,3)
       znew(i) = x(i)*lijinv%comp(3,1) + y(i)*lijinv%comp(3,2) + &
                 z(i)*lijinv%comp(3,3) 
       xnew(i) = a*xnew(i)
       ynew(i) = b*ynew(i)
       znew(i) = c*znew(i)
     
    ! Translate the transformed coordinates so they lie in the box a,b,c
     
        If(xnew(i)<0.0) xnew(i) = xnew(i) + a
        If(xnew(i)>=a) xnew(i) = xnew(i) - a
        If(ynew(i)<0.0) ynew(i) = ynew(i) + b
        If(ynew(i)>=b) ynew(i) = ynew(i) - b
        If(znew(i)<0.0) znew(i) = znew(i) + c
        If(znew(i)>=c) znew(i) = znew(i) - c
     
    ! Match sigmas with coordinates            
     
        atomname(i)=Trim(atomname(i))
     
        match=.False.
     
        Do j=1, ntypes
           If(atomname(i)==atomtype(j)) Then
              atomsigma(i)=sigmatype(j)+dprobe
              match=.True.
              Exit
           End If
        End Do
     
        If(.Not.match) Then
          Write(*,*) 'Could not find match for atom: ', i, ' ', atomname(i)
          Write(*,*) 'The name is either read in incorrectly or does not exist'
          Write(*,*) 'in the list of available atoms in ',atom_file
          Stop
        End If
     
     End Do
     
    Write(*,*) 
    Write(*,*) 'Calculating the accessible surface area for the following input parameters'
    Write(*,*) '-------------------------------------------------------------------------'
    Write(*,*) 'File with framework coordinates: ',TRIM(coord_file)
    Write(*,*) 'File with atom diameters: ', TRIM(atom_file)
    Write(*,'(A,F12.3)') ' Probe diameter in A: ',dprobe
     
    ! Main sampling cycle
     
    stotal=0.0
     
    Do i=1, N ! Loop over all framework atoms
     
        ncount=0
     
        Do j=1, Nsample ! Number of trial positions around each framework atom
    !                 
    ! Generate random vector of length 1
    ! First generate phi 0:+2pi
    !
           phi = ran0(seed)*twopi
    !
    !
    ! Generate cosTheta -1:1 to allow for even distribution of random vectors
    ! on the unit sphere.See <a href="http://mathworld.wolfram.com/SpherePointPicking.html" target="_blank">http://mathworld.wolfram.com/SpherePointPicking.html</a>
    ! for further explanations
    !
           costheta = 1 - ran0(seed) * 2.0
           theta = Acos(costheta)
           xpoint = sin(theta)*cos(phi)
           ypoint = sin(theta)*sin(phi)
           zpoint = costheta
     
     
    ! Make this vector of (sigma+probe_diameter)/2.0 length
     
           xpoint=xpoint*atomsigma(i)/2.0
           ypoint=ypoint*atomsigma(i)/2.0
           zpoint=zpoint*atomsigma(i)/2.0
     
    ! Transform random vector
     
           xpointnew = xpoint*lijinv%comp(1,1) + ypoint*lijinv%comp(1,2) &
                       + zpoint*lijinv%comp(1,3)
           ypointnew = xpoint*lijinv%comp(2,1) + ypoint*lijinv%comp(2,2) &
                       + zpoint*lijinv%comp(2,3)
           zpointnew = xpoint*lijinv%comp(3,1) + ypoint*lijinv%comp(3,2) &
                       + zpoint*lijinv%comp(3,3) 
           xpointnew = a*xpointnew
           ypointnew = b*ypointnew
           zpointnew = c*zpointnew
     
    ! Translate the center of coordinate to the particle i center and apply PBC
     
           xpointnew = xpointnew + xnew(i)
           ypointnew = ypointnew + ynew(i)
           zpointnew = zpointnew + znew(i)
     
           If(xpointnew < 0.0) xpointnew = xpointnew + a
           If(xpointnew >= a) xpointnew = xpointnew - a
           If(ypointnew < 0.0) ypointnew = ypointnew + b
           If(ypointnew >= b) ypointnew = ypointnew - b
           If(zpointnew < 0.0) zpointnew = zpointnew + c
           If(zpointnew >= c) zpointnew = zpointnew - c
     
    ! Now we check for overlap 
     
           deny=.False.
     
           Do k=1,N
              if(k==i) cycle
              dx = xpointnew - xnew(k)
              dx = dx - a*int(2.0*dx/a)
              dy = ypointnew - ynew(k)
              dy = dy - b*int(2.0*dy/b)
              dz = zpointnew-znew(k)
              dz = dz-c*int(2.0*dz/c)
     
              dx = dx / a
              dy = dy / b
              dz = dz / c
     
              dx_trans = dx*lij%comp(1,1) + dy*lij%comp(1,2) + dz*lij%comp(1,3)
              dy_trans = dx*lij%comp(2,1) + dy*lij%comp(2,2) + dz*lij%comp(2,3)
              dz_trans = dx*lij%comp(3,1) + dy*lij%comp(3,2) + dz*lij%comp(3,3)
     
              dist2=dx_trans*dx_trans+dy_trans*dy_trans+dz_trans*dz_trans
     
              If(sqrt(dist2)<0.999*atomsigma(k)/2.0) then
                 deny=.True.
                 Exit
              End If
           End Do
     
           If(deny) Cycle
     
           ncount=ncount+1
     
        End Do
     
     
    ! Fraction of the accessible surface area for sphere i
     
        sfrac=Real(ncount)/Real(Nsample)
     
    ! Surface area for sphere i in real units (A^2)
     
        sjreal=pi*atomsigma(i)*atomsigma(i)*sfrac
        stotal=stotal+sjreal
     
    End Do
     
    ! Converting stotal on Surface per Volume
    ! Unit volume calculated from the absolute value of the determinate of the 3x3 
    ! matrix containing the vectors defining the unit cell. 
    ! See e.g. Marsden, et al. "Basic Multivariable Calculus" 1993 pg. 53
     
    uc_volume=abs(ai*(bj*ck-bk*cj)-aj*(bi*ck-bk*ci)+ak*(bi*cj-bj*ci))
    stotalreduced=stotal/uc_volume*1.E4
     
    ! Report results
     
     
    Write(*,'(A,F12.2)') ' Total surface area in Angstroms^2: ', stotal
    Write(*,'(A,F12.2)') ' Total surface area per volume in m^2/cm^3: ', &
                          stotalreduced
    Write(*,'(A,F12.2)') ' Total surface area per volume in m^2/g: ', &
                                stotalreduced / rho_crys
     
     
    End Program NonorthoSA
     
    !----------------FUNCTIONS-------------------------------------
     
    FUNCTION ran0(idum)
    !
    ! Random number generator from W.H. Press et al, Numerical Recipes in
    ! FORTRAN, Cambridge University Press, 1992
    !
     INTEGER idum,IA,IM,IQ,IR,NTAB,NDIV
     REAL(kind = 8) ran0,AM,EPS,RNMX
     PARAMETER (IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836, &
       NTAB=32,NDIV=1+(IM-1)/NTAB,EPS=1.2e-7,RNMX=1.-EPS)
     INTEGER j,k,iv(NTAB),iy
     
     SAVE iv,iy
     DATA iv /NTAB*0/, iy /0/
     if (idum.le.0.or.iy.eq.0) then
         idum=max(-idum,1)
         do 11 j=NTAB+8,1,-1
            k=idum/IQ
            idum=IA*(idum-k*IQ)-IR*k
              if (idum.lt.0) idum=idum+IM
              if (j.le.NTAB) iv(j)=idum
    11   continue
         iy=iv(1)
    endif
    k=idum/IQ
    idum=IA*(idum-k*IQ)-IR*k
    if (idum.lt.0) idum=idum+IM
    j=1+iy/NDIV
    iy=iv(j)
    iv(j)=idum
    ran0=min(AM*iy,RNMX)
    return
     
    END FUNCTION ran0
    Bon, pour moi, ça ressemble à un truc que mon chat aurait tapé en sautant sur mon clavier^^... Pour ceux qui liront, ce sera peut-être plus parlant...

    Je ne sais pas si je dois modifier quelque chose avant de compiler, mais quand je ne modifie rien, j'ai ce message d'erreur.

    C:\xxxadresse\nonorthoSA.F90:28.10:

    Use matrix
    1
    Fatal Error: Can't open module file 'matrix.mod' for reading at (1): No such file or directory
    gfortran.exe: Internal error: Aborted (program f951)
    Please submit a full bug report.
    See <http://gcc.gnu.org/bugs.html> for instructions.

    Il y a sur le site ou j'ai récupéré le code (qui sert à simuler la porosité de molécules chimiques) propose une sorte de pack avec un exemple, etc. Si un érudit arrivait à faire fonctionner le truc, ça m'aiderait sacrément...

    Pour info, le pack code est à télécharger là :
    http://www.see.ed.ac.uk/~tduren/research/surface_area/non_ortho/

    ça serait peut-être plus simple avec le compilateur intel pour lequel ça a visiblement été écrit, mais je suis sous windows, donc...

    J'ai écrit une tartine, mais pas forcément les éléments importants pour résoudre mon problème, donc n'hésitez pas à me demander des précisions, je ferai au miex, j'ai de toute façon besoin d'utiliser ce code pour ma thèse...

    Merci d'avance !
    Un chimiste perdu...

  2. #2
    Membre émérite
    Avatar de Ladgalen
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 466
    Par défaut
    Bonjour

    Pour commencer quelques petites remarques :

    Fortran n'est pas un langage des années 90. Il a été créé en 1950 et est encore aujourd'hui en 2010 l'un des langages les plus utilisé (voir le plus) pour les calculs scientifiques (étant chimiste tu connais peut être gaussian qui est entièrement écrit en Fortran).

    Force2.0 n'est pas un compilateur. C'est un environnement de développement, c'est à dire une interface graphique qui te permet de compiler en cliquant sur des boutons et de gérer des projets. Sous windows je ne connais pas bien d'autres de donnerons peut être des conseils. Sinon tu peux essayer en utilisant cygwin.

    Pour t'aider un peu :

    Je ne connais pas bien force2.0 mais il me semble qu'il est limité au fortran77 or ton programme est écrit en fortran 90.

    D'après ton erreur et les premières lignes de ton programme tu peux voir des "use matrix" et "use defaults". Ton programme fait appel à des modules, il te le les faut pour compiler ton code. Retourne voir sur ton site (ton lien ne fonctionne pas) et regarde si tu n'as pas un matrix.f90 et un default.f90 disponnibles.

    Pour compiler il faudra que tu compile en premier les modules puis que tu compiles ton programme. Pour faire ça avec force2.0 je ne sais pas faire. Si tu es dans un labo essaye de trouver un chimiste théoricien ou un informaticien ou une personne pour t'aider si tu ne connais ni la programmation ni fortran ça risque d'être un peu dur. Au cas où je te donne quand même quelques commandes à exécuter dans un console :

    si tu utilise gfortran comme compilateur fortran, avec matrix.f90, defaults.f90 et main.f90 qui sont respectivement tes modules et ton programme que tu as donné sur ton post :

    1) tu compiles les modules
    gfortran -c matrix.f90 defaults.f90

    tu obtiendras des fichier "objets" matrix.o et defaults.o

    2) tu compiles ton programme
    gfortran -c main.f90

    => main.o

    3) édition de lien, en gros tu relies les différents fichier en leur permettant de partager ce qu'il contiennent (c'est une explication très grossière)

    gfortran matrix.o defaults.o main.o

    attention l'ordre des étapes est importante et il faut que tous les fichiers soient dans le même dossier.

    Bon courage

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Par défaut
    Merci,

    Vi, je savais que c'est un langage bien plus vieux que 90, mais comme le mien est en fortran 90...

    Bref, de ce que j'avais compris en récupérant force2.0, c'est que cette version pouvait gérer le fortran90 et également le 95. (d'ailleurs il ouvre mes fichiers par un simple double clic sans que je n'ai eu besoin de lui assigner les fichiers.f90)

    J'ai également les fichiers matrix.f90 et default.f90, dans le même dossier... ainsi qu'un fichier makefile sans extension, dans lequel je dois -si j'ai bien compris- changer le ifort (de intel) en je ne sais quoi (de mon compilateur). Mais de toute façon, je ne sais pas quoi faire de ce fichier...

    Je vais essayer de récupérer sygwin et d'installer gfortran (c'est bien ce que tu m'as conseillé ?)

    Pour le lien, je comprends pas, j'avais fait un ctrlC ctrlV de l'adresse^^
    J'ai testé et ça marche... Un bug passager peut-être...

    http://www.see.ed.ac.uk/~tduren/rese...rea/non_ortho/

    Pour ce qui est de mes compétences, j'ai dû avoir en tout et pour tout un TP de matlab dans mon cursus, et je me suis récemment intéressé au html, php, css... Bref, pas grand chose...
    Les théoriciens avec lesquels on collabore ne sont pas du tout basés au même endroit (Montpellier - Versailles...)

    Merci en tout cas pour ta réponse... Je vais essayer d'avancer un peu.

  4. #4
    Membre émérite
    Avatar de Ladgalen
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 466
    Par défaut
    Re

    J'ai réussi à voir le contenu de l'archive de ton code. Je pense franchement que le plus simple serai que tu installe cygwin

    http://www.cygwin.com/

    Comme tu le verras ça te permet de créer un environnement linux sous windows (faute de pouvoir installer linux pour de vrai ou de le virtualiser avec quelque chose comme virtual box si tu veux rester sous windows).

    Ensuite la solution c'est le fameux fichier makefile. Quand tu as un programme qui contient plusieurs fichier, le makefile traduit ce que tu dois faire pour compiler dans le bon ordre. Donc sous linux il suffira que tu tappes make et tout ira pour le mieux

    Regarde j'ai écris quelques remarque dans le fichier makefile, elle commance par des # :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    # ici c'est la liste des fichiers objets
    OBJS   = defaults.o \
             matrixops.o \
             matrix.o \
             nonorthoSA.o 
     
    # ça c'est un option de compilation
    FOPS = -g 
     
    # là tu vas fabriquer nonorthoSA.exe à partir des fichiers objets que tu as 
    # défini plus haut (regarde la 3eme ligne)
    nonorthoSA: $(OBJS) 
    	@echo "Linking nonorthoSA.exe ..."
    	@ifort $(FOPS) $(OBJS) -o nonorthoSA.exe
    	@echo "done"
     
    # nettoyage  rm = remove
    clean:;	@ rm -f *.o *.mod
     
    # ça ça veut dire pour tous les fichiers fortran (.f90) je fabrique
    # un fichier objet (.o)
    # tu remarque le ifort -c ou gfortran -c dont je t'avais parlé
    %.o: %.F90
    	ifort -c $(FOPS) $^
    En conclusion :

    Soit tu trouves quelqu'un qui sais utiliser force2.0 et tu arrives à créer un projet dans lequel tu inclus TOUS les fichier .F90 et tu arrives à les compiler (il faut juste que tu compiles nonorthoSA.F90 en dernier).

    Soit tu installe cygwin tu copie tous tes fichiers dans le home que cygwin aura créé. Ensuite dans le fichier makefile tu remplace ifort par le compilateur fortran qui sera disponnible (g95 ou gfortran) et tu tappe simplement "make" dans la console. Le problème pour toi c'est d'apprendre un minimum sur le terminal de linux pour pouvoir le faire, il te faudra quelques commandes de bases ...

    Pour faire de la programmation linux est assez pratique car l'accés à la console (ou terminal) est plus facile que sous windows et il existe plus d'outils pour éditer des fichiers textes. Si tu veux, sur ma page web il y a un petit texte avec trois ou quatres commandes linux que j'avais donné à des stagiaires de L3 M1 pendant ma thèse. Si les chimistes théoriciens sont trop loin c'est pas grave il suffit que tu trouve quelqu'un qui connaisse linux un minimun (ou cygwin) dans une fac je peux pas croire que ça n'existe pas.

    Avant de te lancer attend peut être un peu. Moi je connais mal windows, dés que j'ai commencé à bosser dans un labo j'ai était sous linux. Peut être que make existe sous windows ou qu'il y a un moyen de l'utiliser... Je crois qu'il y a quelqu'un sur ce forum qui fait des cours fortran et qui utilise Force justement ou qui l'a utilisé.

    Bon courage

    PS : de ce que j'ai vu ton programme calcule la surface d'une molécule et identifie les zones accessibles à des substrats de taille donné. Je crois que des outils comme VMD, ou chimera font ça (pour des systèmes bio) à voir si tu ne peux pas faire ce que tu veux avec.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Par défaut
    Merci beaucoup...
    Je fais du step by step pour le moment...
    J'ai installé cygwin, j'ai installé g95 dans cygwin (enfin je me comprends) : j'ai tapé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tar -xvzf g95-x86-cygwin.tgz
    et ça n'a pas mis d'insulte...

    j'ai remplacé ifort par g95 dans mon makefile, qui se trouve, comme mes fichiers f90 dans home/user

    J'ai tapé make, mais là, il veut pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bash: make: command not found
    J'ai forcément dû rater une étape toute bête, mais laquelle ?^^
    Est-ce que je dois "lancer" g95 qui se trouve dans home/user/usr/local/bin/ ?

    Je sais qu'il existe différents programmes pour calculer l'accessibilité, etc., mais celui ci a été optimisé pour le type de molécules avec lesquelles je bosse...
    (type MOFs) et j'ai déjà des data obtenues avec ce programme (par mes collègues de Montpellier que je voudrais délester de cette partie, sans pour autant que ça leur prenne trois fois plus de temps de m'expliquer que de me faire le calcul...)

  6. #6
    Membre émérite
    Avatar de Ladgalen
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 466
    Par défaut
    make est un programme, comme g95 donc il faut les installer. Visiblement il ne sont pas installé par défaut par cygwin. Ce que tu as fait pour g95 c'est le décompresser, tu ne l'as pas installé.

    Avec cygwin, le plus simple pour installer quelque chose c'est de relancer le setup d'installation de cygwin. Là tu as du soit choisir des paquets spécifiques, soit passer une étape ou tu pouvais sélectionner des choses. Juste après le choix du point de téléchargement il me semble me souvenir qu'il te propose de choisir des paquets à installer. Entre autre il faut que tu sélectionnes le programme make et g95 ils sont peut être disponnibles. Ne décoche rien de ce qui est coché et coche juste des choses en plus. Normalement cygwin se chargera de télécharger et installer les nouveaux paquets et de mettre à jour ceux qui existent si une mise à jour existe. En plus en faisant comme ça cygwin gère les dépendances. Par exemple si tu as besoin de X et que X à besoin de Y pour fonctionner, en cliquant sur X cygwin sélectionnera Y pour toi. Si tu ne fais pas comme ça tu risque d'installer des choses qui ne fonctionnerons pas.

    Un conseil, met le moins de choses possibles dans ton home. Si tu as des soucis par la suite ça te permet de tout virer et de recommencer.

    Pour éditer des fichier texte (les ouvrir) par défaut vim (vi) doit être installé par défaut. Pour commencer c'est peut être un peut compliquer. Je te conseille gedit ou nedit qui doivent être disponnible et ressemble plus à ce qui existe sous windows.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Par défaut
    Re bonjour,
    Après un bon bout de temps loin de cygwin, fortran etc., je m'y remet.
    Je suis ne m'en suis pas encore complètement sorti, mais j'ai bien avancé !

    Je suis donc sous cygwin avec G95, et j'essaye toujours de compiler le code précédent.

    Quand je tape "make" dans la ligne de commande, voila ce qui s'affiche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    g95 -c -g nonorthoSA.F90
    In file nonorthoSA.F90:248
     
           Do j=1, Nsample ! Number of trial positions around each framework atom
                      1
    Error: REAL End expression in DO loop at (1) - to enable REAL loop parameters use -freal-loops
    make: *** [nonorthoSA.o] Error 1

    D'après ce que j'ai compris, il y a un problème de boucle.
    Mais ça ne me parle pas plus que ça...

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 32
    Par défaut
    Bonjour,
    Tu arrives dans la partie où tu peux être confronté à des erreurs de programmations. En l'occurrence, celle qui t'est signalée veut dire qu'à la ligne 248, tu fais appel à une variable (Nsample) qui est définie comme un réel. Mais elle est utilisée comme variable d'indexation d'une boucle "do", qui n'accepte que des entiers comme variable d'indexation. Pour éviter ce problème, tu peux:
    -changer la nature de ta variable (ce qui serait possible dans la partie de déclaration de toutes les variables, dans les lignes suivant le mot clé "program"; ta variable Nsample doit se trouver dans une ligne commençant par "real" )
    -ou plus simplement utiliser la fonction interne "nint" en remplaçant Nsample par nint(Nsample).
    J'espère que cette variable Nsample est bien un entier...
    Je te souhaite qu'il n'y ait pas trop d'autres erreurs!

Discussions similaires

  1. Comment utiliser des sources en fortran90 sous JAVA?
    Par dante66 dans le forum Général Java
    Réponses: 6
    Dernier message: 21/02/2007, 15h25
  2. utilisation de polices codes à barres
    Par ojouan dans le forum Jasper
    Réponses: 2
    Dernier message: 17/01/2007, 17h23
  3. utilisation d'un code VB en C++
    Par mrous dans le forum C++
    Réponses: 1
    Dernier message: 17/05/2006, 11h07
  4. utilisation de tableaux : code correct ?
    Par kuzloka dans le forum C++
    Réponses: 5
    Dernier message: 25/12/2005, 20h16
  5. Réponses: 7
    Dernier message: 13/01/2005, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo