Vous êtes sur la page 1sur 10

Unidad de Matemática y Física

MODELO DE ISING
Métodos computacionales

Heber E. Andrada
MODELO DE ISING
Introducción

Uno de los fenómenos más interesantes en física del estado sólido es el ferromagnetismo: en
algunos metales como el hierro o el níquel, una fracción finita de los espines asociados con cada
núcleo se polariza espontáneamente en determinada dirección, generando un momento
magnético macroscopio en ausencia de campo externo.
Esto ocurre solo a bajas temperaturas, a temperaturas elevadas los espines se orientan al azar,
produciendo una magnetización resultante nula.

Consideremos un sistema de N espines inter actuantes dispuestos regularmente en forma de


red.
En la presencia de un campo magnetico, B, el hamiltoniano del sistema puede ser escrito en una
primera aproximación como:
N
1
H0 J ij i j 0 H i
2 i, j i 1
vecinos

Donde μB es el momento magnético en la dirección del campo y J es la constante de


acoplamiento espin – espin.
Debe notarse que cuando Jij >0 se dice que el sistema es ferromagnético, mientras que si Jij <0
se dice que el sistema es antiferromagnetico.

Cuando Jij >0 obtenemos la configuración energéticamente mas favorable, que corresponde a
una en la cual todos los espines se encuentran alineados. Por ende podemos anticipar que por
debajo de una cierta temperatura el sistema presentara un momento magnético resultante
distinto de cero. Para comprobar la existencia del mismo se realizan medidas de magnetización
donde la misma esta dada por:

N
M
m 0 i
N i 1
Resultados de la simulación

Una de las primeras cosas a notar es que a temperaturas mayores de cero la magnetización es
nula, pues no existe una magnetización espontánea en la simulación del modelo 1D, como es
posible observar a partir de la grafica nro1 que tenemos debajo:

Grafica nro1 Magnetización vs Temperatura

1,0
MAGNETIZACION / NJ

0,5

0,0

-0,5

-1,0

0,0 0,2 0,4 0,6 0,8 1,0 1,2 1,4


TEMPERATURA NJ/K

Grafica nro2 de Energía vs Temperatura en el modelo 1D


En el modelo de ising 1D no se observa un cambio de fase notorio, esto es debido a que este
ocurre en las aproximaciones de T=0, en cambio en el modelo 2D el cambio de fase es notorio y
se ve el cambio de orden-desorden en los espines.

NO SE OBSERVA TRANSICION DE FASE


-0,6

-0,7
ENERGIA / NJ

-0,8

-0,9

-1,0

0,0 0,2 0,4 0,6 0,8 1,0 1,2 1,4 1,6


TEMPERATURA NJ/K
Transición de fase en Modelo de Ising 2D

En el Modelo de Ising 1D, no se observa transición de fase alguna, pero en el modelo 2D es fácil
de notar una transición de fase de orden-desorden a bajas temperaturas, cercanas a cero, como
puede deducirse de la grafica nro3.
Grafica nro3 Energía vs Temperatura en el Modelo de Ising 2D

-1,75
TRANSICION DE FASE

-1,80

-1,85
ENERGIA / NJ

-1,90

-1,95

-2,00

0,0 0,2 0,4 0,6 0,8 1,0 1,2 1,4 1,6


TEMPERATURA NJ/K

Orientación de los espines para las distintas temperaturas

Como podemos ver a T=0 todos los espines están orientados de forma ferromagnética (en forma
paralela y con igual espin), mientras que a temperatura mayores comienza a notarse un orden
aleatorio de los espines, es decir comienza a haber espines orientados antiparalelamente a otros
y mientras mas aumentamos la temperatura la distribución es al azar de los espines (up o down),
al principio todos tienen espin=1 y a medida que aumenta T algunos pasaran a tener espin=-1 y
viceversa.

1,5
SPINES T=0 J/K
1,0

0,5
ORIENTACION

0,0

-0,5

-1,0

-1,5
0 20 40 60 80 100
SPINES
1,0

0,5
T=10 NJ/K
ORIENTACION

0,0

-0,5

-1,0

0 20 40 60 80 100
SPINES

Los programas que me simula el Modelo de Ising en 1D y 2D son:


Programa del Modelo de Ising 1D

!(MONTE CARLO MODELO DE ISING 1D)


PARAMETER (n=100)
DIMENSION is(n)
REAL*8 dseed,mag,magnetizacion,energia,ener,npasos,nblock,ip,de,T
DATA dseed /142761d0/
!NUMERO DE PASOS DE MONTECARLOS
npasos = 20000
nblock=100
OPEN(1,file="SALIDA1.dat")
OPEN(2,file="SALIDA2.dat")
!VARIACION DE TEMPERATURA
DO nT=1,30
T=0.05D0*nT
! DATOS DE ENERGIA Y MAGNETIZACION DE ENTRADA
mag =0.D0
magnetizacion=0.D0
ener =0.D0
energia=0.D0
!COMIENZO DE PROGRAMACION DEL MODELO DE ISING UNIDIMENSIONAL
DO i = 1, n
is(i)=1.d0
!LLAMO AL GENERADOR DE NUMEROS ALEATORIOS
CALL RAN (dseed,random)
IF(random.lt.0.5D0) is(i)=-1.D0
mag = mag + is(i)
END DO
magnetizacion= 0.D0
energia= 0.D0
DO i = 1, n
ip = i + 1.D0
IF (ip .gt. n) ip = 1.D0
ener = ener - is(i)*is(ip)
END DO
DO k = 1, npasos/nblock
DO l = 1, nblock
DO m = 1, 200
! LLAMO AL GENERADOR DE NUMEROS ALEATORIOS
CALL RAN (DSEED,RANDOM)
i=INT((n)*random+1.D0)
si = is(i)
ip = i + 1.d0
IF (ip.gt.n) ip=1.D0
im = i - 1.D0
IF(im.lt.1.D0) im=n
de = 2.D0*si*(is(ip)+is(im))
!LLAMO AL GENERADOR DE NUMEROS ALEATORIOS RAN
CALL RAN (dseed,random)
IF (DEXP(-de/T) .gt. random) THEN
is(i) = -si
mag = mag - 2.D0*si
ener = ener + de
END IF
END DO
END DO
energia = energia + ener
magnetizacion = magnetizacion + mag
END DO
!TEMPERATURA (NJ/K)VS MAGNETIZACION/N
WRITE(1,*)T,magnetizacion/(npasos/nblock*n)
!TEMPERATURA (NJ/K) VS ENERGIA/NJ
WRITE(2,*)T,energia/(npasos/nblock*n)
!TEMPERATURA (NJ/K) VS SPINES
!DO ii=1,n
!write(*,*)ii,is(ii)
!end do
END DO
END
C SUBRUTINA DE NUMEROS ALEATORIOS
SUBROUTINE RAN(dseed,r)
DOUBLE PRECISION z,d2p31m,d2pn31,dseed
DATA d2p31m/2147483647./,d2pn31/4.65661288D-10/
z = dseed
z = DMOD(16807.*z,d2p31m)
r = z * d2pn31
dseed = z
END
Programa de Modelo de Ising 2D

!MONTE CARLO PARA EL MODELO DE ISING 2D


parameter (n=30)
dimension is(n,n)
real*8 dseed
data dseed /142761d0/
OPEN(1,FILE="SALIDA1.DAT")
OPEN(2,FILE="SALIDA2.DAT")
!NUMERO DE PASOS DE MONTECARLO
npasos= 20000
!TAMAÑO DE LA CAJA DE SIMULACION
nblock=100
n2 = n*n
T=1.0d0
!HAGO VARIAR LA TEMPERATURA HASTA 10 EN FORMA DE NJ/K
do NT=1,30
T=0.05D0*NT
!DATOS DE MAGNETIZACION Y ENERGIA DE ENTRADA
MAG = 0.D0
MAGNETIZACION = 0.D0
ENER = 0.D0
ENERGIA = 0.D0
!COMIENZO DEL PROGRAMA DE ISING BIDIMENSIONAL
do i = 1, n
do j = 1, n
is(i,j)=1.D0
!LLAMO A LA SUBRUTINA RAN DE NUMEROS ALEATORIOS
call ran (dseed,random)
if(random.lt.0.5D0) is(i,j)=-1.D0
MAG = MAG + is(i,j)
end do
end do
MAGNETIZACION = 0.D0
ENERGIA = 0.D0
do i = 1, n
ip = i + 1.D0
if (ip .gt. n) ip = 1.D0
do j = 1, n
jp = j + 1.D0
if (jp .gt. n) jp = 1.D0
ENER = ENER - is(i,j)*(is(ip,j)+is(i,jp))
end do
end do
do k = 1, npasos/nblock
do l = 1, nblock
do i = 1, n
do j = 1, n
sij = is(i,j)
ip = i + 1.D0
if (ip.gt.n) ip=1.D0
im = i - 1.D0
if (im.lt.1) im=n
jp = j + 1.D0
if (jp.gt.n) jp=1.D0
jm = j - 1.D0
if (jm.lt.1) jm=n
de = 2*sij*(is(ip,j)+is(im,j)+is(i,jp)+is(i,jm))
!LLAMO A LA SUBRUTINA RAN DE NUMEROS ALEATORIOS
call ran (dseed,random)
if (exp(-de/T).gt. random) then
is(i,j) = -sij
MAG = MAG - 2.D0*sij
ENER = ENER + de
end if
end do
end do
end do
ENERGIA = ENERGIA + ENER
MAGNETIZACION = MAGNETIZACION + MAG
end do
!GRAFICO TEMPERATURA (NJ/K) VS MAGNETIZACION/N
write(1,*) T, MAGNETIZACION/(npasos/nblock*n2)
!GRAFICO TEMPERATURA (NJ/K) VS ENERGIA/NJ
write(2,*)T,ENERGIA/(npasos/nblock*n2)
END DO
end
!SUBRUTINA RAN GENERADORA DE NUMEROS ALEATORIOS
subroutine ran(dseed,r)
double precision z,d2p31m,d2pn31,dseed
data d2p31m/2147483647./,d2pn31/4.65661288D-10/
z = dseed
z = dmod(16807.*z,d2p31m)
r = z * d2pn31
dseed = z
end
Función de correlación de espines

La función de correlación de espines nos da una idea de cómo afecta un espin a los de su
entorno, Este efecto es muy apreciable para distancias relativamente pequeñas, pues es donde
la interacción entre espines es importante.Es de esperarse un decaimiento exponencial la
correlación con la distancia entre los espines y también se puede predecir que el efecto de la
temperatura será disminuir la correlación, pues al aumentar la temperatura la interacción espin-
espin es menos significativa en comparación con la energía total del sistema.Este
comportamiento se puede ver a través de las graficas que se encuentran debajo:

Graficas de correlación vs distancia para distintas temperaturas

1,0

0,4 J/K
0,8
CORRELACION

0,6

0,4

0,2

0,0

0 20 40 60 80 100
J

1,0

0,6 J/K
0,8
CORRELACION

0,6

0,4

0,2

0,0

0 20 40 60 80 100
J
0,5

1,8 J/K
0,4
CORRELACION

0,3

0,2

0,1

0,0

0 20 40 60 80 100
J

El cuerpo del programa para simular la correlación entre espines en el Modelo de Ising fue:
Programa de simulación de correlación de espines

! CALCULO DE LA FUNCION DE CORRELACION PARA EL MODELO DE ISING 1D


PARAMETER (N=100)
DIMENSION is(n),CORRELACION(N-1)
REAL*8 dseed
DATA dseed /142761d0/
!NUMERO DE PASOS DE MONTECARLO
npasos =20000
nblock=100
OPEN(1,FILE="correlacion.dat")
!INGRESO LA TEMPERATURA POR PANTALLA CON ALGUN VALOR ENTRE 0.4 Y 3,
!ME BASTA PARA VER LOS CAMBIOS EN LA CURVA
WRITE(*,*)"TEMPERATURA NJ/K"
READ(*,*)T
!COMIENZO A PROGRAMAR LA FUNCION DE CORRELACION ENTRE SPINES VECINOS
DO R=1,n-1
CORRELACION(R)=0.D0
ENDDO
DO i = 1, n
is(i)=1.D0
CALL RAN (dseed,random)
if(random.lt.0.5D0) is(i)=-1.D0
R=1.D0
!LAS SENTENCIAS EN EL CUERPO SERAN REPETIDAS MIENTRAS LA CONDICION EN EL CICLO WHILE SE CUMPLA
DO WHILE (I+R.LE.N)
!EN LA CORRELACION TOMO PRIMEROS SEGUNDOS Y TERCEROS VECINOS YA QUE ESTA SERA APRECIABLE
!PARA DISTANCIAS PEQUEÑAS PUES ES DONDE LA INTERACCION ENTRE ESPINES ES RELEVANTE
CORRELACION(R) = CORRELACION(R)+(IS(I)*IS(I+R))
R=R+1.D0
END DO
END DO
!DO R=1,N-1
!SPINI=0.D0
!SPINJ=0.D0
!SPINIJ=0.D0
!NUM=0.D0
!I=1.D0
!DO WHILE(I+R.LE.N)
!NUN=NUN+1.D0
!SPINI=SPINI+IS(I)
!SPINJ=SPINJ+IS(I+R)
!SPINIJ=SPINIJ+(IS(I)*IS(I+R)
!I=I+1.D0
!END DO
!CORRELACION(R)=(1.D0/NUM)*(SPINIJ-SPINI*SPINJ)
DO k = 1, npasos/nblock
DO l = 1, nblock
DO m = 1, 200
!LLAMO AL GENERADOR DE NUMEROS ALEATORIOS RAN
CALL RAN (DSEED,RANDOM)
i=INT((n)*random+1.d0)
si = is(i)
ip = i + 1.D0
IF (ip.gt.n) ip=1.D0
im = i - 1.D0
IF (im.lt.1.D0) im=n
de = 2.D0*si*(is(ip)+is(im))
!LLAMO AL GENERADOR DE NUMEROS ALEATORIOS RAN
CALL RAN (dseed,random)
IF (EXP(-de/T).gt. random) THEN
is(i) = -si
END IF
R=1.D0
!APLICO UN DO CONDICIONADO
DO WHILE (I+R.LE.N)
CORRELACION(R) = CORRELACION(R)+(IS(I)*IS(I+R))
R=R+1.D0
END DO
END DO
END DO
END DO
DO R=1,n-1
!PARA QUE ME DEN BIEN LAS GRAFICAS AGRANDO EL SISTEMA DANDOLE MAS BLOCKS(200)
!ASI NO ME VUELVE A DAR EL MISMO VALOR QUE CON EL PRIMER SPIN
WRITE(1,*)R,(1.D0/(npasos*200))*CORRELACION(R)
END DO
END
!GENERADOR DE NUMEROS ALEATORIOS
SUBROUTINE RAN(dseed,r)
DOUBLE PRECISION z,d2p31m,d2pn31,dseed
DATA d2p31m/2147483647./,d2pn31/4.65661288D-10/
z = dseed
z = DMOD(16807.*z,d2p31m)
r = z * d2pn31
dseed = z
END

Cuestiones sobre la programación del Modelo de Ising:


Durante el desarrollo del programa me tope con la difícil tarea de programar el modelo y llegar a
entender que es lo que esta pasando entre los espines al variar la temperatura, arme un
proyecto que me mostrara la magnetización y la energía de los espines para una cadena de
espines (modelo 1D) y para una red cuadrada(modelo 2D),el problema principal es que el
programa necesita para darme mayor precisión un gran numero de pasos de Montecarlo, lo cual
me exigió mucho demanda de tiempo computacional, me limite a usar el mínimo de 20000 pasos
ya que mas pasos involucraban muchísimo tiempo, las graficas con esta cantidad de pasos dan
una aproximación buena de lo que es el Modelo de Ising , por otro lado me empeñe en armar
otro programa en el modelo 1D que mostrara lo que ocurría con la orientación de los espines al a
variar T desde cero a T mayores e ir viendo que ocurría con los mismos.
La otra parte de mi proyecto consistió en desarrollar un programa que me diera una idea de
cómo era la correlación entre estos espines y como varia esta con la temperatura.
Tengo la idea de haber aprendido muchos detalles de programación durante el desarrollo del
mismo, cosas que quizás no me daba cuenta de cómo funcionaban al programarlas y me
costaba entenderlas.

Vous aimerez peut-être aussi