GCC Code Coverage Report


Directory: src/lib/
File: src/lib/mod_initialiser_gaussian.f90
Date: 2024-06-28 12:51:18
Exec Total Coverage
Lines: 38 40 95.0%
Functions: 0 0 -%
Branches: 100 144 69.4%

Line Branch Exec Source
1 !!!#############################################################################
2 !!! Code written by Ned Thaddeus Taylor
3 !!! Code part of the ATHENA library - a feedforward neural network library
4 !!!#############################################################################
5 !!! module contains implementation of the Gaussian initialisation
6 !!!#############################################################################
7 module initialiser_gaussian
8 use constants, only: real12, pi
9 use custom_types, only: initialiser_type
10 implicit none
11
12
13 type, extends(initialiser_type) :: gaussian_type
14 contains
15 procedure, pass(this) :: initialise => gaussian_initialise
16 end type gaussian_type
17 type(gaussian_type) :: gaussian
18
19
20 private
21
22 public :: gaussian
23
24
25 contains
26
27 !!!#############################################################################
28 !!! Gaussian initialisation
29 !!!#############################################################################
30 20 subroutine gaussian_initialise(this, input, fan_in, fan_out)
31 implicit none
32 class(gaussian_type), intent(inout) :: this
33 real(real12), dimension(..), intent(out) :: input
34 integer, optional, intent(in) :: fan_in, fan_out
35
36 integer :: i, j, k, l, m, o
37
38
39 select rank(input)
40 rank(0)
41 2 call box_muller(input, this%mean, this%std)
42 rank(1)
43
2/2
✓ Branch 0 taken 30 times.
✓ Branch 1 taken 8 times.
38 do i=1, size(input)
44
2/4
✗ Branch 0 not taken.
✓ Branch 1 taken 30 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 30 times.
38 call box_muller(input(i), this%mean, this%std)
45 end do
46 rank(2)
47
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
4 do i=1, size(input,1)
48
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 2 times.
24 do j=1, size(input,2)
49
4/8
✗ Branch 0 not taken.
✓ Branch 1 taken 20 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 20 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 20 times.
22 call box_muller(input(i,j), this%mean, this%std)
50 end do
51 end do
52 rank(3)
53
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
4 do i=1, size(input,1)
54
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
6 do j=1, size(input,2)
55
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
6 do k=1, size(input,3)
56
6/12
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 2 times.
4 call box_muller(input(i,j,k), this%mean, this%std)
57 end do
58 end do
59 end do
60 rank(4)
61
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 2 times.
8 do i=1, size(input,1)
62
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 6 times.
26 do j=1, size(input,2)
63
2/2
✓ Branch 0 taken 54 times.
✓ Branch 1 taken 18 times.
78 do k=1, size(input,3)
64
2/2
✓ Branch 0 taken 1728 times.
✓ Branch 1 taken 54 times.
1800 do l=1, size(input,4)
65
8/16
✗ Branch 0 not taken.
✓ Branch 1 taken 1728 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1728 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1728 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1728 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 1728 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 1728 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 1728 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 1728 times.
1782 call box_muller(input(i,j,k,l), this%mean, this%std)
66 end do
67 end do
68 end do
69 end do
70 rank(5)
71
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 2 times.
8 do i=1, size(input,1)
72
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 6 times.
26 do j=1, size(input,2)
73
2/2
✓ Branch 0 taken 54 times.
✓ Branch 1 taken 18 times.
78 do k=1, size(input,3)
74
2/2
✓ Branch 0 taken 162 times.
✓ Branch 1 taken 54 times.
234 do l=1, size(input,4)
75
2/2
✓ Branch 0 taken 5184 times.
✓ Branch 1 taken 162 times.
5400 do m=1, size(input,5)
76 call box_muller(input(i,j,k,l,m), &
77
10/20
✗ Branch 0 not taken.
✓ Branch 1 taken 5184 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5184 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 5184 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 5184 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 5184 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 5184 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 5184 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 5184 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 5184 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 5184 times.
5346 this%mean, this%std)
78 end do
79 end do
80 end do
81 end do
82 end do
83 rank(6)
84
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
4 do i=1, size(input,1)
85
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
6 do j=1, size(input,2)
86
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
6 do k=1, size(input,3)
87
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
6 do l=1, size(input,4)
88
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
6 do m=1, size(input,5)
89
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
6 do o=1, size(input,6)
90 call box_muller(input(i,j,k,l,m,o), &
91
12/24
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
4 this%mean, this%std)
92 end do
93 end do
94 end do
95 end do
96 end do
97 end do
98 end select
99
100 20 end subroutine gaussian_initialise
101 !!!#############################################################################
102
103
104 !!!#############################################################################
105 !!! element-wise Gaussian initialisation
106 !!!#############################################################################
107 6968 subroutine box_muller(input, mean, std)
108 implicit none
109 real(real12), intent(out) :: input
110 real(real12), intent(in) :: mean, std
111
112 real(real12) :: r1, r2
113
114 6968 call random_number(r1)
115 6968 call random_number(r2)
116 6968 input = sqrt(-2._real12 * log(r1))
117 6968 input = input * cos(2._real12 * pi * r2)
118 6968 input = mean + std * input
119
120 6968 end subroutine box_muller
121 !!!#############################################################################
122
123
16/18
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 18 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 18 times.
✓ Branch 7 taken 8 times.
✓ Branch 8 taken 10 times.
✓ Branch 9 taken 2 times.
✓ Branch 10 taken 8 times.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 6 times.
✓ Branch 13 taken 2 times.
✓ Branch 14 taken 4 times.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
20 end module initialiser_gaussian
124 !!!#############################################################################
125