! isingmodel.F - two dimensional Ising model ! 2005-01-02 NISHIMATSU Takeshi ! References: ! http://www.cp.tn.tudelft.nl/research/ising/ ! http://oscar.cacr.caltech.edu/Hrothgar/Ising/references.html ! http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CIP/ising.html !! #define N_MEASUREMENTS 2 #define N_CORRELATION 5 program isingmodel implicit none integer :: seed, relax, samples, n double precision :: T,T_from,T_to,T_by ! temperature (accurately, kT/J) integer, allocatable :: s(:) ! size -n:n*n+n-1 array for n*n sigma double precision :: measurements(N_MEASUREMENTS+N_CORRELATION) double precision :: sum1(N_MEASUREMENTS+N_CORRELATION) double precision :: avg(N_MEASUREMENTS+N_CORRELATION) double precision :: ran1, dummy external ran1 integer i, j character(20) :: fmt write(fmt,'(a,i1,a)') '(f5.3,', N_MEASUREMENTS+N_CORRELATION, 'e14.6)' ! read a few parameters read(5,*) seed read(5,*) relax read(5,*) samples read(5,*) n read(5,*) T_from read(5,*) T_to read(5,*) T_by write(6,'(a)') '# seed, relax, samples, n, T_from, T_to, T_by' write(6,'(a,4i7,3f6.2)') '#', seed, relax, samples, n, T_from, T_to, T_by dummy = ran1(seed) ! From Numerical Recipes, 1986, p. 196 allocate(s(-n:n*n+n*N_CORRELATION-1)) s = 1.0 ! initial magnetization 1.0 or -1.0 T = T_from do while (T