Aide fortran.

Discussions autour des nouvelles technologies : matériel informatique, sites internet, jeux, réseaux ... .
Répondre
Hiatus
Messages : 269
Enregistré le : 21 déc. 2012, 18:59

Aide fortran.

Message par Hiatus » 06 avr. 2016, 11:43

Eeeeeh salut !

Je tente ici aussi, on sait jamais même si j'ai peu d'espoir de trouver quelqu'un qui puisse m'aider :d.
Je cherche quelqu'un d'assez badass en mécanique statistique/quantique et qui s'y connait pas mal en fortran pour pouvoir m'aider à comprendre et à coder le modèle d'Ising à 2D, calculer le hamiltonien, magnétisation moyenne et la susceptibilité.
Alors j'ai déjà cherché partout sur internet et je comprends que dalle à ce que j'ai trouvé.
J'ai quand même fait un truc, mais je trouve un hamiltonien random (des fois -16, des fois -650000) alors je comprends pas trop :x Et à ce que j'ai lu faut aussi utilise la fonction de partition du système, pour pouvoir déterminer la magnétisation moyenne, 'fin je nage quoi :

Code : Tout sélectionner

    implicit none

      integer a, b, droite, gauche, nord, sud, i, N
      REAL*8 alea, kT, j, Ho, Hf, t
      character*32 ising
      character*32 energie
      integer, dimension(50,50) :: spin

      write(*,*)'Entrez le nom du fichier.xyz'
      read(5,*) ising
      write(*,*)'Entrez le nom du fichier.dat de stockage d energie'
      read(5,*) energie

      write(*,*)'Entrez le nombre d iteration'
      read(5,*) N

      write(*,*)'Entrez la valeur de kT'
      read(5,*) kT

      write(*,*)'Entrez la constante de couplage'
      read(5,*) j


      a = 0
      b = 0
      droite = 0
      gauche = 0
      nord = 0
      sud = 0
      alea = 0.0
      Hf = 0.0
      Ho = 0.0

      !initialisation des spins, ‚tat initial

      open(1, file=ising)
      write(1,*) 50*50 !rien
      write(1,*) ising !rien

      do a = 1,50
      do b = 1,50
        call random_number(alea)
        if (alea <= 0.5) then
            spin(a,b) = +1
            !write(1,'(A4,3i12.6)')'O ', a, b, 0
        else
            spin(a,b) = -1 !mettre +1 pour spin up et ainsi avoir tout les atomes en up
            !write(1,'(A4,3i12.6)')'Ar', a, b, 0
        end if
      enddo
      enddo

      !spin des 4 premiers voisins
      do i = 1, N

        do a=1,50
        do b=1,50

            droite = a+1
            gauche = a+1
            nord = b+1
            sud = b+1

            if (a == 1) then
                gauche = 50
            endif
            if (a == 50) then
                droite = 1
            endif
            if (b == 1) then
                nord = 50
            endif
            if (b == 50) then
                sud = 1
            endif
            enddo
            enddo
           !calcul de l'energie
           open(21, file = energie)
           do a=1,50
           do b=1,50
            Ho = -j*(spin(a,b) * spin(droite,b)
     *+ spin(a,b) * spin(gauche,b)
     *+ spin(a,b) * spin(a,nord)
     *+ spin(a,b) * spin(a,sud))

            Hf = -j*((-spin(a,b)) * spin(droite,b)
     *+ (-spin(a,b)) * spin(gauche,b)
     *+ (-spin(a,b)) * spin(a,nord)
     *+ (-spin(a,b)) * spin(a,sud))
      write(21,*)Ho, Hf
     
            !Algorithme de Metropolis
            if (Hf < Ho) then
            spin(a,b) = -spin(a,b)
            else
               call random_number(alea)
               t = exp(-(Hf-Ho)/kT)
            endif
            if (alea < t) then
                  spin(a,b) = -spin(a,b)
            end if
            !‚tat final
            if (spin(a,b) == -1) then
            write(1,'(A4,3i12.6)')'O ', a, b, 0
            else
            write(1,'(A4,3i12.6)')'Ar', a, b, 0
        end if

        enddo
        enddo
            !write(*,*)'Energie Ho=',Ho
      enddo

      write(*,*)'Energie H=',Ho + hf

      end
Je joue pas souvent, mais quand je joue j'envoie (c) DarkeN
------------------------------------
"zip": j'v connecter un autre zip tiens
"zip1": yo zip
"zip": yo zip
"zip1": rzm c un fdp
"zip1": a oé?
"zip": xd oé

Samchun
Messages : 1951
Enregistré le : 30 janv. 2010, 14:36
Localisation : Paris

Re: Aide fortran.

Message par Samchun » 06 avr. 2016, 23:06

J'ai pas très bien compris ce que tu cherchais, ni tes hypothèses. Je m'y connais pas en fortran, mais je m'y connais en Python, quantique, mécanique (j'ai le niveau 1ere année de prépa quoi). Donc si t'es apte à mieux expliquer ce que tu cherches, et à mieux expliciter tes hypothèses, et à te lancer dans un ptit projet en Python, je suis là :mrgreen:

<Vivaldi> dgw normalement, je perds pas
<Vivaldi> oui
<samchun> hm
<Vivaldi> j'ai perdu une seule fois de toute ma vie
<Vivaldi> c'était contre toi

http://www.urtstats.net/ -> dépression instantanée

Smooth & Turnpike as you don't know it

Hiatus
Messages : 269
Enregistré le : 21 déc. 2012, 18:59

Re: Aide fortran.

Message par Hiatus » 07 avr. 2016, 00:17

Nah c'est gentil de t'interessé mais ça dépasse large le cadre de la première année de prépa (j'suis en L3P donc bon x)). Le truc c'est que si un mec chevronné passe, il va savoir ce que c'est le modèle d'Ising directement, normalement j'ai pas besoin d'expliquer :d C'est en fait tu commences avec un réseau carré d'atomes de 50*50 en 2D ici, et tu initialises aléatoirement les spins des atomes spin up + 1 et down -1 et considerer les 4 proches voisins. Et tu vas faire chauffer le système et avec la fonction de partition (cst de bolzmann tout ça) et l'algorithme de Metropolis, tu vas avoir un système final.
C'est des trucs un peu poussé en phys. stat. mais c'est le bordel et j'ai du mal à expliquer encore :d
J'attends juste un mec qui connait déjà ça tombe du ciel en fait xd
Je joue pas souvent, mais quand je joue j'envoie (c) DarkeN
------------------------------------
"zip": j'v connecter un autre zip tiens
"zip1": yo zip
"zip": yo zip
"zip1": rzm c un fdp
"zip1": a oé?
"zip": xd oé

Samchun
Messages : 1951
Enregistré le : 30 janv. 2010, 14:36
Localisation : Paris

Re: Aide fortran.

Message par Samchun » 07 avr. 2016, 19:02

go sur futura-sciences, mais présentes mieux ton problème :p

<Vivaldi> dgw normalement, je perds pas
<Vivaldi> oui
<samchun> hm
<Vivaldi> j'ai perdu une seule fois de toute ma vie
<Vivaldi> c'était contre toi

http://www.urtstats.net/ -> dépression instantanée

Smooth & Turnpike as you don't know it

Répondre