Skip to content

Commit a3530af

Browse files
committed
refac(mod_random): mv procedure defs to submodule
1 parent f49d95f commit a3530af

File tree

2 files changed

+39
-23
lines changed

2 files changed

+39
-23
lines changed

src/mod_random.f90

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,22 @@ module mod_random
1010
private
1111
public :: randn
1212

13-
real(rk), parameter :: pi = 4 * atan(1._rk)
14-
1513
interface randn
16-
module procedure :: randn1d, randn2d
17-
end interface randn
1814

19-
contains
20-
21-
function randn1d(n) result(r)
22-
!! Generates n random numbers with a normal distribution.
23-
integer(ik), intent(in) :: n
24-
real(rk) :: r(n), r2(n)
25-
call random_number(r)
26-
call random_number(r2)
27-
r = sqrt(-2 * log(r)) * cos(2 * pi * r2)
28-
end function randn1d
29-
30-
function randn2d(m, n) result(r)
31-
!! Generates m x n random numbers with a normal distribution.
32-
integer(ik), intent(in) :: m, n
33-
real(rk) :: r(m, n), r2(m, n)
34-
call random_number(r)
35-
call random_number(r2)
36-
r = sqrt(-2 * log(r)) * cos(2 * pi * r2)
37-
end function randn2d
15+
module function randn1d(n) result(r)
16+
!! Generates n random numbers with a normal distribution.
17+
implicit none
18+
integer(ik), intent(in) :: n
19+
real(rk) :: r(n)
20+
end function randn1d
21+
22+
module function randn2d(m, n) result(r)
23+
!! Generates m x n random numbers with a normal distribution.
24+
implicit none
25+
integer(ik), intent(in) :: m, n
26+
real(rk) :: r(m, n)
27+
end function randn2d
28+
29+
end interface randn
3830

3931
end module mod_random

src/mod_random_submodule.f90

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
submodule(mod_random) mod_random_submodule
2+
implicit none
3+
4+
real(rk), parameter :: pi = 4 * atan(1._rk)
5+
6+
contains
7+
8+
module function randn1d(n) result(r)
9+
integer(ik), intent(in) :: n
10+
real(rk) :: r(n), r2(n)
11+
call random_number(r)
12+
call random_number(r2)
13+
r = sqrt(-2 * log(r)) * cos(2 * pi * r2)
14+
end function randn1d
15+
16+
module function randn2d(m, n) result(r)
17+
integer(ik), intent(in) :: m, n
18+
real(rk) :: r(m, n), r2(m, n)
19+
call random_number(r)
20+
call random_number(r2)
21+
r = sqrt(-2 * log(r)) * cos(2 * pi * r2)
22+
end function randn2d
23+
24+
end submodule mod_random_submodule

0 commit comments

Comments
 (0)