GCC Code Coverage Report


Directory: src/lib/
File: src/lib/mod_normalisation.f90
Date: 2024-06-28 12:51:18
Exec Total Coverage
Lines: 31 31 100.0%
Functions: 0 0 -%
Branches: 90 150 60.0%

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 procedures for normalising input and output data
6 !!! module contains the following procedures:
7 !!! - linear_renormalise - renormalises input data to a range
8 !!! - renormalise_norm - renormalises input data to a unit norm
9 !!! - renormalise_sum - renormalises input data to a unit sum
10 !!!#############################################################################
11 module normalisation
12 use constants, only: real12
13 implicit none
14
15
16 private
17
18 public :: linear_renormalise
19 public :: renormalise_norm
20 public :: renormalise_sum
21
22 contains
23
24 !!!#############################################################################
25 !!!
26 !!!#############################################################################
27
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 subroutine linear_renormalise(input, min, max)
28 implicit none
29 real(real12), dimension(:), intent(inout) :: input
30 real(real12), optional, intent(in) :: min, max
31
32 real(real12) :: lower, width
33 real(real12) :: min_val, max_val
34
35
9/16
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 4 times.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 4 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 15 times.
✓ Branch 16 taken 4 times.
✓ Branch 17 taken 4 times.
✓ Branch 18 taken 11 times.
19 min_val = minval(input)
36
8/16
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 4 times.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 4 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 15 times.
✓ Branch 16 taken 4 times.
✓ Branch 17 taken 15 times.
✗ Branch 18 not taken.
19 max_val = maxval(input)
37
38
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
4 if(present(min))then
39 1 lower = min
40 else
41 3 lower = -1._real12
42 end if
43
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
4 if(present(max))then
44 1 width = max - min
45 else
46 3 width = 2._real12
47 end if
48
49
9/16
✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 4 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 4 times.
✓ Branch 21 taken 15 times.
✓ Branch 22 taken 4 times.
19 input = lower + width * (input - min_val)/(max_val - min_val)
50
51 4 end subroutine linear_renormalise
52 !!!#############################################################################
53
54
55 !!!#############################################################################
56 !!!
57 !!!#############################################################################
58
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 subroutine renormalise_norm(input, norm, mirror)
59 implicit none
60 real(real12), dimension(:), intent(inout) :: input
61 real(real12), optional, intent(in) :: norm
62 logical, optional, intent(in) :: mirror
63
64 real(real12) :: scale
65
66
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if(present(norm))then
67 1 scale = norm
68 else
69 1 scale = 1._real12
70 end if
71
72
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if(present(mirror))then
73
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 if(mirror) call linear_renormalise(input)
74 end if
75
18/32
✗ 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.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 2 times.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 2 times.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 39 not taken.
✓ Branch 40 taken 2 times.
✓ Branch 42 taken 10 times.
✓ Branch 43 taken 2 times.
✓ Branch 44 taken 10 times.
✓ Branch 45 taken 2 times.
22 input = input * scale/sqrt(dot_product(input,input))
76
77 2 end subroutine renormalise_norm
78 !!!#############################################################################
79
80
81 !!!#############################################################################
82 !!!
83 !!!#############################################################################
84
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 subroutine renormalise_sum(input, norm, mirror, magnitude)
85 implicit none
86 real(real12), dimension(:), intent(inout) :: input
87 real(real12), optional, intent(in) :: norm
88 logical, optional, intent(in) :: mirror, magnitude
89
90 logical :: magnitude_
91
92 real(real12) :: scale
93
94
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if(present(norm))then
95 1 scale = norm
96 else
97 1 scale = 1._real12
98 end if
99
100
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if(present(mirror))then
101
4/8
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
1 if(mirror) call linear_renormalise(input)
102 end if
103
104
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if(present(magnitude)) magnitude_ = magnitude
105
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if(present(magnitude))then
106
5/8
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 9 taken 3 times.
✓ Branch 10 taken 1 times.
4 scale = scale/sum(abs(input))
107 else
108
5/8
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 9 taken 3 times.
✓ Branch 10 taken 1 times.
4 scale = scale/sum(input)
109 end if
110
9/16
✗ 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.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 21 taken 6 times.
✓ Branch 22 taken 2 times.
8 input = input * scale
111
112 2 end subroutine renormalise_sum
113 !!!#############################################################################
114
115
116 end module normalisation
117 !!!#############################################################################
118