module precision_module implicit none integer, parameter :: long = selected_real_kind(15,307) end module precision_module module maths_module use precision_module implicit none real (long), parameter :: c = 299792458.0_long ! units m s-1 real (long), parameter :: e = 2.71828182845904523_long real (long), parameter :: g = 9.812420_long ! 9.780 356 m s-2 at sea level on the equator ! 9.812 420 m s-2 at sea level in london ! 9.832 079 m s-2 at sea level at the poles real (long), parameter :: pi = 3.14159265358979323_long end module maths_module module sub1_module implicit none contains subroutine sub1(radius,area,circum) use precision_module use maths_module implicit none real (long), intent (in) :: radius real (long), intent (out) :: area, circum area = pi*radius*radius circum = 2.0_long*pi*radius end subroutine sub1 end module sub1_module program ch2101 use precision_module use sub1_module implicit none real (long) :: r, a, c integer :: i do i = 1, 5 print *, 'radius?' read *, r call sub1(r,a,c) print *, ' for radius = ', r print *, ' area = ', a print *, ' circumference = ', c end do end program ch2101