@@ -28,13 +28,7 @@ module function mean_1_${k1}$_dp(x) result(res)
28
28
${t1}$, intent(in) :: x(:)
29
29
real(dp) :: res
30
30
31
- integer :: i1
32
-
33
- res = 0.0_dp
34
- do i1 = 1, size(x)
35
- res = res + real(x(i1), dp)
36
- end do
37
- res = res / real(size(x), dp)
31
+ res = sum(real(x, dp)) / real(size(x), dp)
38
32
39
33
end function mean_1_${k1}$_dp
40
34
#:endfor
@@ -55,15 +49,7 @@ module function mean_2_all_${k1}$_dp(x) result(res)
55
49
${t1}$, intent(in) :: x(:,:)
56
50
real(dp) :: res
57
51
58
- integer :: i1, i2
59
-
60
- res = 0.0_dp
61
- do i2 = 1, size(x, 2)
62
- do i1 = 1, size(x, 1)
63
- res = res + real(x(i1, i2), dp)
64
- end do
65
- end do
66
- res = res / real(size(x), dp)
52
+ res = sum(real(x, dp)) / real(size(x), dp)
67
53
68
54
end function mean_2_all_${k1}$_dp
69
55
#:endfor
@@ -92,29 +78,15 @@ module function mean_2_${k1}$_dp(x, dim) result(res)
92
78
integer, intent(in) :: dim
93
79
real(dp) :: res(size(x)/size(x, dim))
94
80
95
- integer :: i1, i2
96
-
97
- res = 0.0_dp
98
-
99
81
select case(dim)
100
82
case(1)
101
- do i2 = 1, size(x, 2)
102
- do i1 = 1, size(x, 1)
103
- res(i2) = res(i2) + real(x(i1, i2), dp)
104
- end do
105
- end do
83
+ res = sum(real(x, dp), 1) / real(size(x, 1), dp)
106
84
case(2)
107
- do i2 = 1, size(x, 2)
108
- do i1 = 1, size(x, 1)
109
- res(i1) = res(i1) + real(x(i1, i2), dp)
110
- end do
111
- end do
85
+ res = sum(real(x, dp), 2) / real(size(x, 2), dp)
112
86
case default
113
87
call error_stop("ERROR (mean): wrong dimension")
114
88
end select
115
89
116
- res = res / real(size(x, dim), dp)
117
-
118
90
end function mean_2_${k1}$_dp
119
91
#:endfor
120
92
@@ -164,19 +136,7 @@ module function mean_${rank}$_all_${k1}$_dp(x) result(res)
164
136
${t1}$, intent(in) :: x${ranksuffix(rank)}$
165
137
real(dp) :: res
166
138
167
- integer :: ${varlist("i",1,rank)}$
168
-
169
- res = 0.0_dp
170
-
171
- #:for fj in range(rank,0,-1)
172
- ${" "* (rank - fj)}$do i${varsuffix(fj)}$ = 1, size(x, ${fj}$)
173
- #:endfor
174
- ${" "* (rank)}$res = res + real(x(${varlist("i",1,rank)}$), dp)
175
- #:for fj in range(rank,0,-1)
176
- ${" "* (fj-1)}$end do
177
- #:endfor
178
-
179
- res = res / real(size(x), dp)
139
+ res = sum(real(x, dp)) / real(size(x), dp)
180
140
181
141
end function mean_${rank}$_all_${k1}$_dp
182
142
#:endfor
@@ -217,27 +177,15 @@ module function mean_${rank}$_${k1}$_dp(x, dim) result(res)
217
177
#:endfor
218
178
merge(size(x,${rank-1}$),size(x,${rank}$),mask = ${rank-1}$ < dim ) )
219
179
220
- integer :: ${varlist("i",1,rank)}$
221
-
222
- res = 0.0_dp
223
-
224
180
select case(dim)
225
181
#:for fi in range(1,rank+1)
226
182
case(${fi}$)
227
- #:for fj in range(rank,0,-1)
228
- ${" "* (rank - fj)}$do i${varsuffix(fj)}$ = 1, size(x, ${fj}$)
229
- #:endfor
230
- ${" "* (rank)}$res(${varlistskip("i", rank, fi)}$) = res(${varlistskip("i", rank, fi)}$) + real(x(${varlist("i",1,rank)}$), dp)
231
- #:for fj in range(rank,0,-1)
232
- ${" "* (fj-1)}$end do
233
- #:endfor
183
+ res=sum(real(x, dp), ${fi}$) / real(size(x, ${fi}$), dp)
234
184
#:endfor
235
185
case default
236
186
call error_stop("ERROR (mean): wrong dimension")
237
187
end select
238
188
239
- res = res / real(size(x, dim), dp)
240
-
241
189
end function mean_${rank}$_${k1}$_dp
242
190
#:endfor
243
191
#:endfor
0 commit comments