Я пытаюсь запустить этот код, но не понимаю, почему я получаю ошибку СЕГМЕНТАЦИИ для кода?
Видимо, когда я устанавливаю значение y, равное 2.718 (равно e), код работает нормально без каких-либо ошибок. Но когда я изменяю значение y, код выдает ошибку сегментации.
Я опробовал опции - fcheck для 'all' и 'bounds' для обоих опций, но мое устройство не вернуло ни одной ошибки. Я очень запутался тогда, почему код дает эту ошибку ?? Пожалуйста, помогите мне
program Trial
implicit none
integer :: i,j,L,a,b,c,d,niter,time,mm,nn,N,k,g1,g2,w ! n is iteration time
real :: r,h,E,Ei,Ef,f,E1,E2,S,y
real :: JE=1.0
integer, dimension(8) :: values
integer, dimension(:,:), allocatable :: spin
integer, dimension(:), allocatable :: seed
!integer, dimension(0:100) :: G, Hi
real, dimension(100) :: G,Hi,Hit, root
!integer, dimension(0:1) ::
character(len=30) :: charac_b
!seed=44589
charac_b = 'store_config'
print *,'Enter the number of lattice points:'
read *,L
print *, 'Enter number of iterations:'
read *,niter
!Initialisation of G & H. G is density of states and H is the Histogram
do i=1,101
G(i)=1.0
Hi(i)=0.0
Hit(i)=-200+4*(i-1)
end do
f=2.71828183
do i=1,21
root(i)=f
f=f**(0.5)
end do
! Min fn gives minimum of the value
allocate(spin(L,L))
E=0.0
S=0.0
N=L*L
!Generator of Random Numbers
call date_and_time(VALUES=values)
call random_seed(size=k)
allocate(seed(k))
seed(:)=values(:)
call random_seed(put=seed)
!Initialising Data
open(12,file="Data_initial.txt")
do i=1,L
do j=1,L
call RANDOM_NUMBER(r)
if(r<0.5) then
spin(i,j)=+1
else
spin(i,j)=-1
end if
write(12,*) float(i),float(j),float(spin(i,j))
end do
end do
close(12)
!Calculating energies
do i=1,L
do j=1,L
a=i+1;b=i-1;c=j+1;d=j-1
if(i==L)a=1
if(i==1)b=L
if(j==1)d=L
if(j==L)c=1
!M=M+spin(i,j)
E=E-JE*float((spin(i,j))*(spin(a,j)+spin(b,j)+spin(i,c)+spin(i,d)))
end do
end do
E=E*0.5
print *,'intial energy and per spin=',E,E/float(N)
!print *,'initial magnetisation and per spin=',M,mag
!Going for a random flipping now
!f=2.71828183
!do kt=1,21
y=root(2)
!y=2.5
do time=1,niter
do mm=1,L
do nn=1,L
call RANDOM_NUMBER(r); i=int(r*float(L))+1
call RANDOM_NUMBER(r); j=int(r*float(L))+1
a=i+1;b=i-1;c=j+1;d=j-1
if(i==L)a=1
if(i==1)b=L
if(j==1)d=L
if(j==L)c=1
Ei=-JE*float((spin(i,j))*(spin(a,j)+spin(b,j)+spin(i,c)+spin(i,d)))
spin(i,j)=-spin(i,j)
Ef=-JE*float((spin(i,j))*(spin(a,j)+spin(b,j)+spin(i,c)+spin(i,d)))
E1=E
E2=E1+(Ef-Ei)
g1=int((E1+200.0)/4)+1
g2=int((E2+200.0)/4)+1
if(g2<=g1) then
G(g2)=LOG(G(g2))+LOG(y)
!G(g2)=G(g2)*f
Hi(g2)=Hi(g2)+1
else
call RANDOM_NUMBER(h)
if(h<=G(g1)/G(g2)) then
G(g2)=LOG(G(g2))+LOG(y)
!G(g2)=G(g2)*f
Hi(g2)=Hi(g2)+1
else
G(g1)=LOG(G(g1))+LOG(y)
!G(g2)=G(g2)*f
Hi(g1)=Hi(g1)+1
spin(i,j)=-spin(i,j)
end if
end if
E=E2
end do
end do
end do
do i=1,101
S=S+(Hit(i)*Hi(i))
end do
do i=1,101
if(Hi(i) .lt. 0.95*(real(S/101.0))) then
print *,"No",i
exit
end if
end do
do j=1,101
Hi(j)=0.0
end do
!f=f**(0.5)
!end do
open(13,file="Data_final.txt")
do w=1,101
write(13,*) Hit(w), G(w), Hi(w)
end do
deallocate(spin)
deallocate(seed)
end program Trial