- #1

s_hy

- 61

- 0

dear all,

i have a code with line segmentation fault error. please anyone advice me how to debug this code. thank you...

i have a code with line segmentation fault error. please anyone advice me how to debug this code. thank you...

**Mentor note**: Added code tags, combined numerous variable declarations, and indented some do loops
Fortran:

```
!##################################################################
Program Main
IMPLICIT NONE
call fd1d
return
END PROGRAM Main! 1d scalar wave equation with fd method and stability condition = 1
SUBROUTINE fd1d
implicit none
real,dimension(1) :: x
real :: x_delta, t_delta, c, xlast, xinit, tinit, tlast
real :: k, x0
real,dimension(:,,allocatable :: u
real :: alpha
integer :: iinit, ilast, ninit, nlast, i, n
real, parameter :: pi = 3.141592654
allocate (u(0:200,0:600))
!initialisation
c = 300
x_delta = 0.005
t_delta = x_delta/c
alpha = c*t_delta/x_delta
xlast = 1.0
xinit = 0
iinit = 0
ilast = int ((xlast-xinit)/x_delta)
tlast = 0.01
tinit = 0
ninit = 0
nlast = int ((tlast-tinit)/t_delta)
x(iinit) = xinit
x(ilast) = xlast
!initial profile
k = 1000.0
x0 = 0.3
do i = iinit,ilast
u(i,0) = 0.0
u(i,-1) = 0.0
end do
open (unit=100,file='n0.dat',action='write')
do i = iinit, ilast
x(i) = x(iinit) + i*x_delta
u(i,0) = exp (-k*(x(i)-x0)**2)
u(i,-1) = exp (-k*(x(i)-x0)**2)
Print *, u(i,0)
write (*,*) u(i,0)
end do
close (unit = 100)
open (unit=110,file='n1.dat',action='write')
do n = 0, nlast
do i = iinit, ilast
u(i,n+1) = 2*(1-(alpha**2))*u(i,n)-u(i,n-1)+(alpha**2)*(u(i+1,n)+u(i-1,n))
end do !i
!boundary condition
u(0,n+1) = 0
u(ilast,n+1) = 0
!end of boundary condition
!export data
print *, u(i,n+1)
write (110,*) u(i,n+1)
end do !n
close (unit = 110)
return
end SUBROUTINE fd1d
```

Last edited by a moderator: