Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

[Fortrran] Some help with a code error: Segmentation Fault

  1. Jul 13, 2012 #1
    Hi,
    I am having a segmentation fault error just when I ask the code to print the value ipos in the program. However, If I change the print to the module, the segmentation fault does not appear. Could anyone can help know, why I can not transfer the variable ipos from the module to the main program or how eliminate that segmentation fault once I request print the variable in the program? Thanks.

    !---------------------------------------------------
    Program pro
    Use Random
    Implicit None

    real*8 , Allocatable , Dimension (:) :: ipos
    integer :: i , m
    Real*8 :: u , t

    m = 20
    t = 1

    do i = 1 , m
    call Particle_alloc (ipos, m)
    Print*, ipos (i)
    end do

    End Program pro

    !----------------------------------------------------




    Module Random

    Implicit None
    CONTAINS

    !---------------------------------------------------------------------------------------------------
    Subroutine Particle_alloc (ipos , m)

    Implicit None

    integer*4 :: m , j
    real*8, Allocatable, dimension(:) :: ipos

    Allocate (ipos (m))


    do j = 1 , m

    call init_random_seed
    ! Generate random number for position
    call random_number(ipos)

    end do

    deallocate (ipos)
    End Subroutine Particle_alloc
    !---------------------------------------------------------------------------------------------------


    Subroutine init_random_seed
    !-----------------------------------------------------------------------
    ! Subroutine obtained from: http://gcc.gnu.org/onlinedocs/gfortran/RANDOM_005fSEED.html
    !-----------------------------------------------------------------------
    integer :: i, n, clock

    integer, dimension(:), allocatable :: rseed
    call random_seed(size = n)

    allocate( rseed(n) )

    call system_clock(count=clock)
    rseed = clock + 37 * (/ (i - 1, i = 1, n) /)
    call random_seed(PUT = rseed)

    deallocate(rseed)
    End Subroutine
    !-----------------------------------------------------------------------------------------------------


    End Module Random
     
  2. jcsd
  3. Jul 13, 2012 #2

    chiro

    User Avatar
    Science Advisor

    Re: Some help with a code error: Segmentation Fault

    Hey yomar and welcome to the forums.

    It looks like you actually haven't allocated the variable, but just defined the type and declared to be allocatable without actually allocating it.
     
  4. Jul 14, 2012 #3
    Re: Some help with a code error: Segmentation Fault

    Hi Chiro, thanks for you advises, even so
    If I eliminate the allocate and deallocate statement, I also obtain the segmentation fault error, but without any result. At least, as is show here, it gave the ipos values from the print statement on the module. However, I still not find the way to made it from the main program.
     
  5. Jul 14, 2012 #4

    chiro

    User Avatar
    Science Advisor

    Re: Some help with a code error: Segmentation Fault

    No that's not what I mean: you have to actually use the ALLOCATE statement in fortran: Example:

    Code (Text):
     ALLOCATE(ipos(N))
    for some value of N.
     
  6. Jul 14, 2012 #5
    Re: Some help with a code error: Segmentation Fault

    I see 2 separate ipos variables declared, one in the main program and another one in the module inside the subroutine....so, I think you have some kind of namespace problem.

    Stop declaring the one in the main program
    Move the declaration to the module, but not inside the subroutine; place the declaration between "implicit none" and "contains"
    When a variable is declared in a module is like a global variable as such, you will be able to refer to it in the main program. Also, you will be able to allocate it within the subroutine, but also, you need to eliminate the declaration of the local ipos inside the sub
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: [Fortrran] Some help with a code error: Segmentation Fault
  1. Segmentation Fault (Replies: 9)

Loading...