import java.util.*;
public class Ferromagnetico {
static final int DIM=25;
int espin[][]=new int[DIM+2][DIM+2];
//semilla de números aleatorios
Random rnd=new Random();
private double p[]=new double[5];
public Ferromagnetico() {
//situación inicial
for(int i=1; i<=DIM; i++){
for(int j=1; j<=DIM; j++){
espin[i][j]=1;
}
}
toroidal();
}
//condiciones de contorno toroidales
private void toroidal(){
for(int i=1; i<=DIM; i++){
espin[i][0]=espin[i][DIM];
espin[i][DIM+1]=espin[i][1];
}
for(int j=1; j<=DIM; j++){
espin[0][j]=espin[DIM][j];
espin[DIM+1][j]=espin[1][j];
}
}
void setNuevo(double T, double eInteraccion){
//0.01 eV/cte Boltzman da 115.492
double E=eInteraccion*115.492;
p[4]=Math.exp(-4*E/T);
p[2]=Math.exp(-2*E/T);
p[0]=1.0;
}
void configuracion(){
int suma; //suma de los espines de cuatro elementos
int i, j;
for(int k=0; k<DIM*DIM; k++){
i=1+(int)(rnd.nextDouble()*DIM);
j=1+(int)(rnd.nextDouble()*DIM);
suma=espin[i+1][j]+espin[i-1][j]+espin[i][j-1]+espin[i][j+1];
if(espin[i][j]*suma<=0){
aceptar(i, j);
}else if(rnd.nextDouble()<p[Math.abs(suma)]){
aceptar(i, j);
}
}
}
void aceptar(int i, int j){
espin[i][j]=-espin[i][j];
//condiciones de contorno toroidales
if(i==1) espin[DIM+1][j]=espin[1][j];
if(i==DIM) espin[0][j]=espin[DIM][j];
if(j==1) espin[i][DIM+1]=espin[i][1];
if(j==DIM) espin[i][0]=espin[i][DIM];
}
}
|