Я пытаюсь использовать fortran для вычисления значения из данных.
program signifikansi
implicit none
integer :: N_energi, N_sudut, i, N
double precision,allocatable :: theta1(:), theta_lab1(:), dsig1(:), dsig_lab1(:), pol1(:), dpolxx1(:), dpolxz1(:), phase1(:), t1(:)
double precision,allocatable :: theta2(:), theta_lab2(:), dsig2(:), dsig_lab2(:), pol2(:), dpolxx2(:), dpolxz2(:), phase2(:), t2(:)
double precision,allocatable :: signif(:)
double precision :: signif_total,signif2
write(*,*)"Masukkan jumlah energi"
read(*,*)N_energi
write(*,*)"Masukkan jumlah sudut pada setiap energi"
read(*,*)N_sudut
N=N_sudut*N_energi
write(*,*)"Total data adalah",N
open(unit=10, file='kminpobs.dat', status="old", action="read")
allocate(theta1(N))
allocate(theta_lab1(N))
allocate(dsig1(N))
allocate(dsig_lab1(N))
allocate(pol1(N))
allocate(dpolxx1(N))
allocate(dpolxz1(N))
allocate(phase1(N))
allocate(t1(N))
do i=1,N
read(10,*) theta1(i), theta_lab1(i), dsig1(i), dsig_lab1(i), pol1(i), dpolxx1(i), dpolxz1(i), phase1(i), t1(i)
end do
close(10)
open(unit=10, file='kminpnoscalar.dat', status="old", action="read")
allocate(theta2(N))
allocate(theta_lab2(N))
allocate(dsig2(N))
allocate(dsig_lab2(N))
allocate(pol2(N))
allocate(dpolxx2(N))
allocate(dpolxz2(N))
allocate(phase2(N))
allocate(t2(N))
do i=1,N
read(10,*) theta2(i), theta_lab2(i), dsig2(i), dsig_lab2(i), pol2(i), dpolxx2(i), dpolxz2(i), phase2(i), t2(i)
end do
close(10)
do i=1,N
signif(i) = (ABS(dsig2(i)-dsig1(i)))/dsig1(i)
end do
signif_total = SUM(signif)
signif2 = signif_total/N
write(*,*)"Hasil signifikansi untuk partikel tersebut adalah",signif2
deallocate(theta1)
deallocate(theta_lab1)
deallocate(dsig1)
deallocate(dsig_lab1)
deallocate(pol1)
deallocate(dpolxx1)
deallocate(dpolxz1)
deallocate(phase1)
deallocate(t1)
deallocate(theta2)
deallocate(theta_lab2)
deallocate(dsig2)
deallocate(dsig_lab2)
deallocate(pol2)
deallocate(dpolxx2)
deallocate(dpolxz2)
deallocate(phase2)
deallocate(t2)
end program signifikansi
вот мой код, но все, что я получаю, это сообщение об ошибке, подобное этому
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:
#0 0x7F0C2BFC2777
#1 0x7F0C2BFC2D7E
#2 0x7F0C2BC1AD3F
#3 0x403034 in MAIN__ at signifikansi1.f90:?
Segmentation fault
N_energi для ввода - 39, а N_sudut - 120. Я получил значение N на выходе, но мой код не может рассчитать дальнейший результат.
Может кто-нибудь помочь мне с этим? Спасибо. Я предполагаю, что размер массива, который я использовал, слишком велик.