! The following defines a module. This is a container for a collection
! of variables or sub programs that we can use in other pieces of code.
! This one is really simple.
module constants

  Implicit None ! Everything in the module will be given a specific type
                ! i.e. integer, real, logical or character.

  ! This defines an integer 'dp' which we can use whenever
  ! we want to define a number as double precision
  integer,parameter   :: dp = selected_real_kind(p=15,r=300)
  
  ! This one speaks for itself
  real(kind=dp),parameter :: Pi = 3.141592653589793238462643383279502884197_dp
  
  ! Note that both of these have been declared with the parameter keyword.
  ! This means they can NOT be changed by any code which uses this module. 
  
end module constants