Skip to content
Snippets Groups Projects
Commit 4068b3bc authored by David Ramos Salamanca's avatar David Ramos Salamanca
Browse files

add docstrings to functions

parent 3933a5f8
No related branches found
No related tags found
No related merge requests found
import numpy as np import numpy as np
from timeit import default_timer as timer from timeit import default_timer as timer
from parameters import t_min, t_max, nt, eqSteps, mcSteps, Ns
from parameters import * from sampling import finite_ising
from observables import *
#from metropolis import *
from sampling import *
T = np.linspace(t_min, t_max, nt) T = np.linspace(t_min, t_max, nt)
Ns = np.array(Ns) Ns = np.array(Ns)
...@@ -15,6 +12,7 @@ for N in Ns: ...@@ -15,6 +12,7 @@ for N in Ns:
result = finite_ising(N,mcSteps,eqSteps,T) result = finite_ising(N,mcSteps,eqSteps,T)
end = timer() end = timer()
print('Time the code takes to run for a lattice size of ' + str(N) + ': ' + str((end - start) / 60) + ' minutes.') print('Time the code takes to run for a lattice of size ' + str(N),
+ ': ' + str((end - start) / 60) + ' minutes.')
np.savetxt("data/data_ising_" + str(N) + ".csv" , result.T, delimiter=",") np.savetxt("data/data_ising_" + str(N) + ".csv" , result.T, delimiter=",")
\ No newline at end of file
import numpy as np import numpy as np
def pi_0(N): def pi_0(N):
"""Genera un arreglo NxN de numpy con valores 1 o -1 escogidos aleatoriamente.
Argumentos:
N -- int
tamaño de la red
"""
Pi_0 = 2*np.random.randint(2 , size = (N,N)) - 1 Pi_0 = 2*np.random.randint(2 , size = (N,N)) - 1
return Pi_0 return Pi_0
def MC_metropolis(arreglo, beta, N): def MC_metropolis(arreglo, beta, N):
"""Ejecuta un paso de monte carlo sobre una configuración de espines
Argumentos:
arreglo -- arreglo NxN de numpy
valores del espin en cada sitio
beta -- flotante
inverso de la temperatura en unidades donde kb = J = 1
N -- int
"""
for i in range(0, 2 * N**2): for i in range(0, 2 * N**2):
a, b = np.random.randint(0,N), np.random.randint(0,N) a, b = np.random.randint(0,N), np.random.randint(0,N)
rand_spin = arreglo[a, b] rand_spin = arreglo[a, b]
vecinos = arreglo[(a+1)%N, b] + arreglo[a, (b+1)%N] + arreglo[(a-1)%N, b] + arreglo[a, (b-1)%N] vecinos = arreglo[(a+1)%N, b] + arreglo[a, (b+1)%N] + \
arreglo[(a-1)%N, b] + arreglo[a, (b-1)%N]
delta_energia = 2 * rand_spin * vecinos delta_energia = 2 * rand_spin * vecinos
if delta_energia < 0: if delta_energia < 0:
arreglo[a,b] *= -1 arreglo[a,b] *= -1
......
import numpy as np import numpy as np
def energia(arreglo, N): def energia(arreglo, N):
"""Devuelve la energia de una configuración de espines.
Argumentos:
arreglo -- arreglo NxN de numpy
valores del espin en cada sitio
N -- entero
tamaño de la red
"""
energia = 0 energia = 0
for i in range(0,N): for i in range(0,N):
for j in range(0,N): for j in range(0,N):
spin = arreglo[i,j] spin = arreglo[i,j]
vecinos = arreglo[(i+1)%N, j] + arreglo[i, (j+1)%N] + arreglo[(i-1)%N, j] + arreglo[i, (j-1)%N] vecinos = arreglo[(i+1)%N, j] + arreglo[i, (j+1)%N] + \
arreglo[(i-1)%N, j] + arreglo[i, (j-1)%N]
energia += - spin * vecinos energia += - spin * vecinos
return energia / 2 return energia / 2
def magnetizacion(arreglo): def magnetizacion(arreglo):
"""Devuelve la magnetización de una configuración de espines.
Argumentos:
arreglo -- arreglo NxN de numpy
valores del espin en cada sitio
"""
magnetizacion = np.sum(arreglo) magnetizacion = np.sum(arreglo)
return abs(magnetizacion) return abs(magnetizacion)
\ No newline at end of file
import numpy as np import numpy as np
from parameters import * from observables import energia, magnetizacion
from observables import * from metropolis import pi_0, MC_metropolis
from metropolis import *
def finite_ising(N,mcSteps,eqSteps,T): def finite_ising(N,mcSteps,eqSteps,T):
"""Devuelve los observables físicos para los valores de temperatura
y tamaño de la red dados.
Argumentos:
N -- entero
tamaño de la red
eqSteps -- entero
numero de pasos de Monte Carlo para termalización
mcSteps -- entero
numero de pasos de Monte Carlo para realizar el muestreo
T -- arreglo de numpy
conjunto de temperaturas para las que se calcularan las cantidades fisicas
"""
nt = len(T) nt = len(T)
E,M,C,X,U = np.zeros(nt), np.zeros(nt), np.zeros(nt), np.zeros(nt), np.zeros(nt)#, np.zeros(nt) E,M,C,X,U = np.zeros(nt), np.zeros(nt), np.zeros(nt), np.zeros(nt), np.zeros(nt)
N2 = N*N N2 = N*N
for t in range(nt): for t in range(nt):
...@@ -17,21 +30,13 @@ def finite_ising(N,mcSteps,eqSteps,T): ...@@ -17,21 +30,13 @@ def finite_ising(N,mcSteps,eqSteps,T):
if t > 1.5 and t < 4.5: if t > 1.5 and t < 4.5:
eqSteps_p = eqSteps eqSteps_p = eqSteps
for i in range(eqSteps_p): # esto es supuestamente para llevarlo al equilibrio for i in range(eqSteps_p):
arreglo = MC_metropolis(arreglo, beta, N) arreglo = MC_metropolis(arreglo, beta, N)
#magn = magnetizacion(arreglo)
#energ = energia(arreglo)
#full_M.append(magn/N2)
#full_E.append(energ)
else: else:
for i in range(eqSteps): # esto es supuestamente para llevarlo al equilibrio for i in range(eqSteps):
arreglo = MC_metropolis(arreglo, beta, N) arreglo = MC_metropolis(arreglo, beta, N)
#magn = magnetizacion(arreglo)
#energ = energia(arreglo)
#full_M.append(magn/N2)
#full_E.append(energ)
for i in range(mcSteps): # y aquí supuestamente el sistema se está desenvolviendo en el equilibrio for i in range(mcSteps):
arreglo = MC_metropolis(arreglo,beta, N) arreglo = MC_metropolis(arreglo,beta, N)
energ = energia(arreglo, N) energ = energia(arreglo, N)
magn = magnetizacion(arreglo) magn = magnetizacion(arreglo)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment