GCC Code Coverage Report


Directory: src/athena/
File: src/athena/athena_normalisation.f90
Date: 2026-04-15 16:08:59
Exec Total Coverage
Lines: 31 31 100.0%
Functions: 0 0 -%
Branches: 89 150 59.3%

Line Branch Exec Source
1 module athena__normalisation
2 !! Module containing procedures for normalising input and output data
3 use coreutils, only: real32
4 implicit none
5
6
7 private
8
9 public :: linear_renormalise
10 public :: renormalise_norm
11 public :: renormalise_sum
12
13
14
15 contains
16
17 !###############################################################################
18
1/2
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
4 subroutine linear_renormalise(input, min, max)
19 !! Renormalise input data to a specified range
20 implicit none
21
22 ! Arguments
23 real(real32), dimension(:), intent(inout) :: input
24 !! Input data to be renormalised
25 real(real32), optional, intent(in) :: min, max
26 !! Minimum and maximum values for renormalisation
27
28 ! Local variables
29 real(real32) :: lower, width
30 !! Lower bound and width of the range
31 real(real32) :: min_val, max_val
32 !! Minimum and maximum values of the input data
33
34
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 taken 4 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 11 times.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 11 times.
15 min_val = minval(input)
35
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 taken 4 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 11 times.
✓ Branch 16 taken 4 times.
✓ Branch 17 taken 11 times.
✗ Branch 18 not taken.
15 max_val = maxval(input)
36
37
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
4 if(present(min))then
38 1 lower = min
39 else
40 3 lower = -1._real32
41 end if
42
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
4 if(present(max))then
43 1 width = max - min
44 else
45 3 width = 2._real32
46 end if
47
48
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)
49 4 end subroutine linear_renormalise
50 !###############################################################################
51
52
53 !###############################################################################
54
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 subroutine renormalise_norm(input, norm, mirror)
55 !! Renormalise input data to a unit norm
56 implicit none
57
58 ! Arguments
59 real(real32), dimension(:), intent(inout) :: input
60 !! Input data to be renormalised
61 real(real32), optional, intent(in) :: norm
62 !! Desired norm value
63 logical, optional, intent(in) :: mirror
64 !! Boolean whether the data should be mirrored
65
66 ! Local variables
67 real(real32) :: scale
68 !! Scaling factor
69
70
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if(present(norm))then
71 1 scale = norm
72 else
73 1 scale = 1._real32
74 end if
75
76
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if(present(mirror))then
77
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)
78 end if
79
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))
80 2 end subroutine renormalise_norm
81 !###############################################################################
82
83
84 !###############################################################################
85
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 subroutine renormalise_sum(input, norm, mirror, magnitude)
86 !! Renormalise input data to a unit sum
87 implicit none
88
89 ! Arguments
90 real(real32), dimension(:), intent(inout) :: input
91 !! Input data to be renormalised
92 real(real32), optional, intent(in) :: norm
93 !! Desired sum value
94 logical, optional, intent(in) :: mirror, magnitude
95 !! Booleans whether the data should be mirrored or use magnitude
96
97 ! Local variables
98 logical :: magnitude_
99 !! Flag to indicate if magnitude should be used
100 real(real32) :: scale
101 !! Scaling factor
102
103
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if(present(norm))then
104 1 scale = norm
105 else
106 1 scale = 1._real32
107 end if
108
109
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if(present(mirror))then
110
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)
111 end if
112
113
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if(present(magnitude)) magnitude_ = magnitude
114
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if(present(magnitude))then
115
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))
116 else
117
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)
118 end if
119
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
120 2 end subroutine renormalise_sum
121 !###############################################################################
122
123 end module athena__normalisation
124