diff --git a/CMakeLists.txt b/CMakeLists.txt index b858ebd6b..a99f32292 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,7 @@ endif() include(CheckFortranSourceCompiles) include(CheckFortranSourceRuns) check_fortran_source_compiles("error stop i; end" f18errorstop SRC_EXT f90) +check_fortran_source_compiles("real, allocatable :: array(:, :, :, :, :, :, :, :, :, :); end" f03rank SRC_EXT f90) check_fortran_source_runs("use, intrinsic :: iso_fortran_env, only : real128; real(real128) :: x; x = x+1; end" f03real128) add_subdirectory(src) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4a8d3fe03..32e46f617 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -23,6 +23,14 @@ else() target_sources(fortran_stdlib PRIVATE f08estop.f90) endif() +if(f03rank) + target_sources(fortran_stdlib PRIVATE f03_stdlib_experimental_stats.f90) + target_sources(fortran_stdlib PRIVATE f03_stdlib_experimental_stats_mean.f90) +else() + target_sources(fortran_stdlib PRIVATE f90_stdlib_experimental_stats.f90) + target_sources(fortran_stdlib PRIVATE f90_stdlib_experimental_stats_mean.f90) +endif() + add_subdirectory(tests) install(TARGETS fortran_stdlib diff --git a/src/Makefile.manual b/src/Makefile.manual index 0807f3ff1..e61ee5a08 100644 --- a/src/Makefile.manual +++ b/src/Makefile.manual @@ -3,7 +3,9 @@ SRC = stdlib_experimental_ascii.f90 \ stdlib_experimental_io.f90 \ stdlib_experimental_optval.f90 \ stdlib_experimental_kinds.f90 \ - f18estop.f90 + f18estop.f90 \ + f03_stdlib_experimental_stats.f90 \ + f03_stdlib_experimental_stats_mean.f90 LIB = libstdlib.a @@ -34,3 +36,7 @@ stdlib_experimental_io.o: \ stdlib_experimental_optval.o \ stdlib_experimental_kinds.o stdlib_experimental_optval.o: stdlib_experimental_kinds.o +f03_stdlib_experimental_stats_mean.o: \ + stdlib_experimental_optval.o \ + stdlib_experimental_kinds.o \ + f03_stdlib_experimental_stats.o diff --git a/src/f03_stdlib_experimental_stats.f90 b/src/f03_stdlib_experimental_stats.f90 new file mode 100644 index 000000000..7685b49a5 --- /dev/null +++ b/src/f03_stdlib_experimental_stats.f90 @@ -0,0 +1,1667 @@ +module stdlib_experimental_stats + + +use stdlib_experimental_kinds, only: sp, dp, qp, & + int8, int16, int32, int64 +implicit none +private +! Public API +public :: mean + +interface mean + module function mean_1_sp_sp(x) result(res) + real(sp), intent(in) :: x(:) + real(sp) :: res + end function mean_1_sp_sp + module function mean_1_dp_dp(x) result(res) + real(dp), intent(in) :: x(:) + real(dp) :: res + end function mean_1_dp_dp + module function mean_1_qp_qp(x) result(res) + real(qp), intent(in) :: x(:) + real(qp) :: res + end function mean_1_qp_qp + + module function mean_1_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:) + real(dp) :: res + end function mean_1_int8_dp + module function mean_1_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:) + real(dp) :: res + end function mean_1_int16_dp + module function mean_1_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:) + real(dp) :: res + end function mean_1_int32_dp + module function mean_1_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:) + real(dp) :: res + end function mean_1_int64_dp + + + module function mean_2_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:) + real(sp) :: res + end function mean_2_all_sp_sp + module function mean_2_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:) + real(dp) :: res + end function mean_2_all_dp_dp + module function mean_2_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:) + real(qp) :: res + end function mean_2_all_qp_qp + + module function mean_2_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:) + real(dp) :: res + end function mean_2_all_int8_dp + module function mean_2_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:) + real(dp) :: res + end function mean_2_all_int16_dp + module function mean_2_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:) + real(dp) :: res + end function mean_2_all_int32_dp + module function mean_2_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:) + real(dp) :: res + end function mean_2_all_int64_dp + + module function mean_2_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(sp) :: res(size(x)/size(x, dim)) + end function mean_2_sp_sp + module function mean_2_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + end function mean_2_dp_dp + module function mean_2_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(qp) :: res(size(x)/size(x, dim)) + end function mean_2_qp_qp + + module function mean_2_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + end function mean_2_int8_dp + module function mean_2_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + end function mean_2_int16_dp + module function mean_2_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + end function mean_2_int32_dp + module function mean_2_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + end function mean_2_int64_dp + + + + + +module function mean_3_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:) + real(sp) :: res +end function mean_3_all_sp_sp +module function mean_4_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:) + real(sp) :: res +end function mean_4_all_sp_sp +module function mean_5_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:) + real(sp) :: res +end function mean_5_all_sp_sp +module function mean_6_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:) + real(sp) :: res +end function mean_6_all_sp_sp +module function mean_7_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:) + real(sp) :: res +end function mean_7_all_sp_sp +module function mean_8_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:) + real(sp) :: res +end function mean_8_all_sp_sp +module function mean_9_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(sp) :: res +end function mean_9_all_sp_sp +module function mean_10_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(sp) :: res +end function mean_10_all_sp_sp +module function mean_11_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(sp) :: res +end function mean_11_all_sp_sp +module function mean_12_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(sp) :: res +end function mean_12_all_sp_sp +module function mean_13_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(sp) :: res +end function mean_13_all_sp_sp +module function mean_14_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(sp) :: res +end function mean_14_all_sp_sp +module function mean_15_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(sp) :: res +end function mean_15_all_sp_sp +module function mean_3_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:) + real(dp) :: res +end function mean_3_all_dp_dp +module function mean_4_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:) + real(dp) :: res +end function mean_4_all_dp_dp +module function mean_5_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:) + real(dp) :: res +end function mean_5_all_dp_dp +module function mean_6_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res +end function mean_6_all_dp_dp +module function mean_7_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res +end function mean_7_all_dp_dp +module function mean_8_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_8_all_dp_dp +module function mean_9_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_9_all_dp_dp +module function mean_10_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_10_all_dp_dp +module function mean_11_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_11_all_dp_dp +module function mean_12_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_12_all_dp_dp +module function mean_13_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_13_all_dp_dp +module function mean_14_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_14_all_dp_dp +module function mean_15_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_15_all_dp_dp +module function mean_3_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:) + real(qp) :: res +end function mean_3_all_qp_qp +module function mean_4_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:) + real(qp) :: res +end function mean_4_all_qp_qp +module function mean_5_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:) + real(qp) :: res +end function mean_5_all_qp_qp +module function mean_6_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:) + real(qp) :: res +end function mean_6_all_qp_qp +module function mean_7_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:) + real(qp) :: res +end function mean_7_all_qp_qp +module function mean_8_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:) + real(qp) :: res +end function mean_8_all_qp_qp +module function mean_9_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(qp) :: res +end function mean_9_all_qp_qp +module function mean_10_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(qp) :: res +end function mean_10_all_qp_qp +module function mean_11_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(qp) :: res +end function mean_11_all_qp_qp +module function mean_12_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(qp) :: res +end function mean_12_all_qp_qp +module function mean_13_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(qp) :: res +end function mean_13_all_qp_qp +module function mean_14_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(qp) :: res +end function mean_14_all_qp_qp +module function mean_15_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(qp) :: res +end function mean_15_all_qp_qp + +module function mean_3_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:) + real(dp) :: res +end function mean_3_all_int8_dp +module function mean_4_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:) + real(dp) :: res +end function mean_4_all_int8_dp +module function mean_5_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:) + real(dp) :: res +end function mean_5_all_int8_dp +module function mean_6_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res +end function mean_6_all_int8_dp +module function mean_7_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res +end function mean_7_all_int8_dp +module function mean_8_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_8_all_int8_dp +module function mean_9_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_9_all_int8_dp +module function mean_10_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_10_all_int8_dp +module function mean_11_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_11_all_int8_dp +module function mean_12_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_12_all_int8_dp +module function mean_13_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_13_all_int8_dp +module function mean_14_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_14_all_int8_dp +module function mean_15_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_15_all_int8_dp +module function mean_3_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:) + real(dp) :: res +end function mean_3_all_int16_dp +module function mean_4_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:) + real(dp) :: res +end function mean_4_all_int16_dp +module function mean_5_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:) + real(dp) :: res +end function mean_5_all_int16_dp +module function mean_6_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res +end function mean_6_all_int16_dp +module function mean_7_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res +end function mean_7_all_int16_dp +module function mean_8_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_8_all_int16_dp +module function mean_9_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_9_all_int16_dp +module function mean_10_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_10_all_int16_dp +module function mean_11_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_11_all_int16_dp +module function mean_12_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_12_all_int16_dp +module function mean_13_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_13_all_int16_dp +module function mean_14_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_14_all_int16_dp +module function mean_15_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_15_all_int16_dp +module function mean_3_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:) + real(dp) :: res +end function mean_3_all_int32_dp +module function mean_4_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:) + real(dp) :: res +end function mean_4_all_int32_dp +module function mean_5_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:) + real(dp) :: res +end function mean_5_all_int32_dp +module function mean_6_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res +end function mean_6_all_int32_dp +module function mean_7_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res +end function mean_7_all_int32_dp +module function mean_8_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_8_all_int32_dp +module function mean_9_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_9_all_int32_dp +module function mean_10_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_10_all_int32_dp +module function mean_11_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_11_all_int32_dp +module function mean_12_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_12_all_int32_dp +module function mean_13_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_13_all_int32_dp +module function mean_14_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_14_all_int32_dp +module function mean_15_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_15_all_int32_dp +module function mean_3_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:) + real(dp) :: res +end function mean_3_all_int64_dp +module function mean_4_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:) + real(dp) :: res +end function mean_4_all_int64_dp +module function mean_5_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:) + real(dp) :: res +end function mean_5_all_int64_dp +module function mean_6_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res +end function mean_6_all_int64_dp +module function mean_7_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res +end function mean_7_all_int64_dp +module function mean_8_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_8_all_int64_dp +module function mean_9_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_9_all_int64_dp +module function mean_10_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_10_all_int64_dp +module function mean_11_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_11_all_int64_dp +module function mean_12_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_12_all_int64_dp +module function mean_13_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_13_all_int64_dp +module function mean_14_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_14_all_int64_dp +module function mean_15_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res +end function mean_15_all_int64_dp + +module function mean_3_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_sp_sp +module function mean_4_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_sp_sp +module function mean_5_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_sp_sp +module function mean_6_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_sp_sp +module function mean_7_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_sp_sp +module function mean_8_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) +end function mean_8_sp_sp +module function mean_9_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) +end function mean_9_sp_sp +module function mean_10_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) +end function mean_10_sp_sp +module function mean_11_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) +end function mean_11_sp_sp +module function mean_12_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) +end function mean_12_sp_sp +module function mean_13_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) +end function mean_13_sp_sp +module function mean_14_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) +end function mean_14_sp_sp +module function mean_15_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) +end function mean_15_sp_sp +module function mean_3_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_dp_dp +module function mean_4_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_dp_dp +module function mean_5_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_dp_dp +module function mean_6_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_dp_dp +module function mean_7_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_dp_dp +module function mean_8_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) +end function mean_8_dp_dp +module function mean_9_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) +end function mean_9_dp_dp +module function mean_10_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) +end function mean_10_dp_dp +module function mean_11_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) +end function mean_11_dp_dp +module function mean_12_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) +end function mean_12_dp_dp +module function mean_13_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) +end function mean_13_dp_dp +module function mean_14_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) +end function mean_14_dp_dp +module function mean_15_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) +end function mean_15_dp_dp +module function mean_3_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_qp_qp +module function mean_4_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_qp_qp +module function mean_5_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_qp_qp +module function mean_6_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_qp_qp +module function mean_7_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_qp_qp +module function mean_8_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) +end function mean_8_qp_qp +module function mean_9_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) +end function mean_9_qp_qp +module function mean_10_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) +end function mean_10_qp_qp +module function mean_11_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) +end function mean_11_qp_qp +module function mean_12_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) +end function mean_12_qp_qp +module function mean_13_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) +end function mean_13_qp_qp +module function mean_14_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) +end function mean_14_qp_qp +module function mean_15_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) +end function mean_15_qp_qp + +module function mean_3_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_int8_dp +module function mean_4_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_int8_dp +module function mean_5_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_int8_dp +module function mean_6_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_int8_dp +module function mean_7_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_int8_dp +module function mean_8_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) +end function mean_8_int8_dp +module function mean_9_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) +end function mean_9_int8_dp +module function mean_10_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) +end function mean_10_int8_dp +module function mean_11_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) +end function mean_11_int8_dp +module function mean_12_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) +end function mean_12_int8_dp +module function mean_13_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) +end function mean_13_int8_dp +module function mean_14_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) +end function mean_14_int8_dp +module function mean_15_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) +end function mean_15_int8_dp +module function mean_3_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_int16_dp +module function mean_4_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_int16_dp +module function mean_5_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_int16_dp +module function mean_6_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_int16_dp +module function mean_7_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_int16_dp +module function mean_8_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) +end function mean_8_int16_dp +module function mean_9_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) +end function mean_9_int16_dp +module function mean_10_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) +end function mean_10_int16_dp +module function mean_11_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) +end function mean_11_int16_dp +module function mean_12_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) +end function mean_12_int16_dp +module function mean_13_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) +end function mean_13_int16_dp +module function mean_14_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) +end function mean_14_int16_dp +module function mean_15_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) +end function mean_15_int16_dp +module function mean_3_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_int32_dp +module function mean_4_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_int32_dp +module function mean_5_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_int32_dp +module function mean_6_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_int32_dp +module function mean_7_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_int32_dp +module function mean_8_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) +end function mean_8_int32_dp +module function mean_9_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) +end function mean_9_int32_dp +module function mean_10_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) +end function mean_10_int32_dp +module function mean_11_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) +end function mean_11_int32_dp +module function mean_12_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) +end function mean_12_int32_dp +module function mean_13_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) +end function mean_13_int32_dp +module function mean_14_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) +end function mean_14_int32_dp +module function mean_15_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) +end function mean_15_int32_dp +module function mean_3_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_int64_dp +module function mean_4_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_int64_dp +module function mean_5_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_int64_dp +module function mean_6_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_int64_dp +module function mean_7_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_int64_dp +module function mean_8_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) +end function mean_8_int64_dp +module function mean_9_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) +end function mean_9_int64_dp +module function mean_10_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) +end function mean_10_int64_dp +module function mean_11_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) +end function mean_11_int64_dp +module function mean_12_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) +end function mean_12_int64_dp +module function mean_13_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) +end function mean_13_int64_dp +module function mean_14_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) +end function mean_14_int64_dp +module function mean_15_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) +end function mean_15_int64_dp + +end interface + +end module diff --git a/src/f03_stdlib_experimental_stats_mean.f90 b/src/f03_stdlib_experimental_stats_mean.f90 new file mode 100644 index 000000000..8726d35b5 --- /dev/null +++ b/src/f03_stdlib_experimental_stats_mean.f90 @@ -0,0 +1,25050 @@ +submodule (stdlib_experimental_stats) stdlib_experimental_stats_mean + + +use stdlib_experimental_error, only: error_stop +implicit none + +contains + +module function mean_1_sp_sp(x) result(res) + real(sp), intent(in) :: x(:) + real(sp) :: res + + integer :: i1 + + res = 0.0_sp + do i1 = 1, size(x) + res = res + x(i1) + end do + res = res / real(size(x), sp) + +end function mean_1_sp_sp +module function mean_1_dp_dp(x) result(res) + real(dp), intent(in) :: x(:) + real(dp) :: res + + integer :: i1 + + res = 0.0_dp + do i1 = 1, size(x) + res = res + x(i1) + end do + res = res / real(size(x), dp) + +end function mean_1_dp_dp +module function mean_1_qp_qp(x) result(res) + real(qp), intent(in) :: x(:) + real(qp) :: res + + integer :: i1 + + res = 0.0_qp + do i1 = 1, size(x) + res = res + x(i1) + end do + res = res / real(size(x), qp) + +end function mean_1_qp_qp + +module function mean_1_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:) + real(dp) :: res + + integer :: i1 + + res = 0.0_dp + do i1 = 1, size(x) + res = res + real(x(i1), dp) + end do + res = res / real(size(x), dp) + +end function mean_1_int8_dp +module function mean_1_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:) + real(dp) :: res + + integer :: i1 + + res = 0.0_dp + do i1 = 1, size(x) + res = res + real(x(i1), dp) + end do + res = res / real(size(x), dp) + +end function mean_1_int16_dp +module function mean_1_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:) + real(dp) :: res + + integer :: i1 + + res = 0.0_dp + do i1 = 1, size(x) + res = res + real(x(i1), dp) + end do + res = res / real(size(x), dp) + +end function mean_1_int32_dp +module function mean_1_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:) + real(dp) :: res + + integer :: i1 + + res = 0.0_dp + do i1 = 1, size(x) + res = res + real(x(i1), dp) + end do + res = res / real(size(x), dp) + +end function mean_1_int64_dp + + +module function mean_2_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:) + real(sp) :: res + + integer :: i1, i2 + + res = 0.0_sp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1, i2) + end do + end do + res = res / real(size(x), sp) + +end function mean_2_all_sp_sp +module function mean_2_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:) + real(dp) :: res + + integer :: i1, i2 + + res = 0.0_dp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1, i2) + end do + end do + res = res / real(size(x), dp) + +end function mean_2_all_dp_dp +module function mean_2_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:) + real(qp) :: res + + integer :: i1, i2 + + res = 0.0_qp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1, i2) + end do + end do + res = res / real(size(x), qp) + +end function mean_2_all_qp_qp + +module function mean_2_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:) + real(dp) :: res + + integer :: i1, i2 + + res = 0.0_dp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1, i2), dp) + end do + end do + res = res / real(size(x), dp) + +end function mean_2_all_int8_dp +module function mean_2_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:) + real(dp) :: res + + integer :: i1, i2 + + res = 0.0_dp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1, i2), dp) + end do + end do + res = res / real(size(x), dp) + +end function mean_2_all_int16_dp +module function mean_2_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:) + real(dp) :: res + + integer :: i1, i2 + + res = 0.0_dp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1, i2), dp) + end do + end do + res = res / real(size(x), dp) + +end function mean_2_all_int32_dp +module function mean_2_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:) + real(dp) :: res + + integer :: i1, i2 + + res = 0.0_dp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1, i2), dp) + end do + end do + res = res / real(size(x), dp) + +end function mean_2_all_int64_dp + +module function mean_2_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(sp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_sp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + x(i1, i2) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + x(i1, i2) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_2_sp_sp +module function mean_2_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_dp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + x(i1, i2) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + x(i1, i2) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_2_dp_dp +module function mean_2_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(qp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_qp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + x(i1, i2) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + x(i1, i2) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_2_qp_qp + +module function mean_2_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_dp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + real(x(i1, i2), dp) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + real(x(i1, i2), dp) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_2_int8_dp +module function mean_2_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_dp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + real(x(i1, i2), dp) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + real(x(i1, i2), dp) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_2_int16_dp +module function mean_2_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_dp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + real(x(i1, i2), dp) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + real(x(i1, i2), dp) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_2_int32_dp +module function mean_2_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_dp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + real(x(i1, i2), dp) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + real(x(i1, i2), dp) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_2_int64_dp + + + +!As proposed by @arady + + + + +module function mean_3_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:) + real(sp) :: res + + integer :: i1,i2,i3 + + res = 0.0_sp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3) + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_3_all_sp_sp +module function mean_4_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_sp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4) + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_4_all_sp_sp +module function mean_5_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_sp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_5_all_sp_sp +module function mean_6_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_sp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_6_all_sp_sp +module function mean_7_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_sp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_7_all_sp_sp +module function mean_8_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_sp + + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_8_all_sp_sp +module function mean_9_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_sp + + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_9_all_sp_sp +module function mean_10_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_sp + + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_10_all_sp_sp +module function mean_11_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_sp + + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_11_all_sp_sp +module function mean_12_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_sp + + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_12_all_sp_sp +module function mean_13_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_sp + + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_13_all_sp_sp +module function mean_14_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_sp + + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_14_all_sp_sp +module function mean_15_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_sp + + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_15_all_sp_sp +module function mean_3_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:) + real(dp) :: res + + integer :: i1,i2,i3 + + res = 0.0_dp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3) + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_3_all_dp_dp +module function mean_4_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4) + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_4_all_dp_dp +module function mean_5_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_5_all_dp_dp +module function mean_6_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_6_all_dp_dp +module function mean_7_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_7_all_dp_dp +module function mean_8_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_dp + + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_8_all_dp_dp +module function mean_9_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_dp + + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_9_all_dp_dp +module function mean_10_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_dp + + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_10_all_dp_dp +module function mean_11_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_dp + + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_11_all_dp_dp +module function mean_12_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_dp + + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_12_all_dp_dp +module function mean_13_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_dp + + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_13_all_dp_dp +module function mean_14_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_dp + + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_14_all_dp_dp +module function mean_15_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_dp + + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_15_all_dp_dp +module function mean_3_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:) + real(qp) :: res + + integer :: i1,i2,i3 + + res = 0.0_qp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3) + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_3_all_qp_qp +module function mean_4_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_qp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4) + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_4_all_qp_qp +module function mean_5_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_qp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_5_all_qp_qp +module function mean_6_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_qp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_6_all_qp_qp +module function mean_7_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_qp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_7_all_qp_qp +module function mean_8_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_qp + + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_8_all_qp_qp +module function mean_9_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_qp + + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_9_all_qp_qp +module function mean_10_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_qp + + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_10_all_qp_qp +module function mean_11_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_qp + + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_11_all_qp_qp +module function mean_12_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_qp + + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_12_all_qp_qp +module function mean_13_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_qp + + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_13_all_qp_qp +module function mean_14_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_qp + + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_14_all_qp_qp +module function mean_15_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_qp + + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_15_all_qp_qp + +module function mean_3_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:) + real(dp) :: res + + integer :: i1,i2,i3 + + res = 0.0_dp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3), dp) + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_3_all_int8_dp +module function mean_4_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_4_all_int8_dp +module function mean_5_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_5_all_int8_dp +module function mean_6_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_6_all_int8_dp +module function mean_7_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_7_all_int8_dp +module function mean_8_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_dp + + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_8_all_int8_dp +module function mean_9_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_dp + + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_9_all_int8_dp +module function mean_10_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_dp + + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_10_all_int8_dp +module function mean_11_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_dp + + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_11_all_int8_dp +module function mean_12_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_dp + + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_12_all_int8_dp +module function mean_13_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_dp + + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_13_all_int8_dp +module function mean_14_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_dp + + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_14_all_int8_dp +module function mean_15_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_dp + + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_15_all_int8_dp +module function mean_3_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:) + real(dp) :: res + + integer :: i1,i2,i3 + + res = 0.0_dp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3), dp) + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_3_all_int16_dp +module function mean_4_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_4_all_int16_dp +module function mean_5_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_5_all_int16_dp +module function mean_6_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_6_all_int16_dp +module function mean_7_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_7_all_int16_dp +module function mean_8_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_dp + + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_8_all_int16_dp +module function mean_9_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_dp + + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_9_all_int16_dp +module function mean_10_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_dp + + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_10_all_int16_dp +module function mean_11_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_dp + + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_11_all_int16_dp +module function mean_12_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_dp + + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_12_all_int16_dp +module function mean_13_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_dp + + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_13_all_int16_dp +module function mean_14_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_dp + + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_14_all_int16_dp +module function mean_15_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_dp + + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_15_all_int16_dp +module function mean_3_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:) + real(dp) :: res + + integer :: i1,i2,i3 + + res = 0.0_dp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3), dp) + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_3_all_int32_dp +module function mean_4_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_4_all_int32_dp +module function mean_5_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_5_all_int32_dp +module function mean_6_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_6_all_int32_dp +module function mean_7_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_7_all_int32_dp +module function mean_8_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_dp + + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_8_all_int32_dp +module function mean_9_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_dp + + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_9_all_int32_dp +module function mean_10_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_dp + + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_10_all_int32_dp +module function mean_11_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_dp + + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_11_all_int32_dp +module function mean_12_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_dp + + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_12_all_int32_dp +module function mean_13_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_dp + + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_13_all_int32_dp +module function mean_14_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_dp + + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_14_all_int32_dp +module function mean_15_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_dp + + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_15_all_int32_dp +module function mean_3_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:) + real(dp) :: res + + integer :: i1,i2,i3 + + res = 0.0_dp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3), dp) + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_3_all_int64_dp +module function mean_4_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_4_all_int64_dp +module function mean_5_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_5_all_int64_dp +module function mean_6_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_6_all_int64_dp +module function mean_7_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_7_all_int64_dp +module function mean_8_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_dp + + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_8_all_int64_dp +module function mean_9_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_dp + + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_9_all_int64_dp +module function mean_10_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_dp + + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_10_all_int64_dp +module function mean_11_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_dp + + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_11_all_int64_dp +module function mean_12_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_dp + + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_12_all_int64_dp +module function mean_13_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_dp + + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_13_all_int64_dp +module function mean_14_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_dp + + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_14_all_int64_dp +module function mean_15_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_dp + + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_15_all_int64_dp + +module function mean_3_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_sp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + x(i1,i2,i3) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + x(i1,i2,i3) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + x(i1,i2,i3) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_3_sp_sp +module function mean_4_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_sp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_4_sp_sp +module function mean_5_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_sp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_5_sp_sp +module function mean_6_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_sp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_6_sp_sp +module function mean_7_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_sp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_7_sp_sp +module function mean_8_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_sp + + select case(dim) + case(1) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8) = res(i2,i3,i4,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8) = res(i1,i3,i4,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8) = res(i1,i2,i4,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8) = res(i1,i2,i3,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8) = res(i1,i2,i3,i4,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8) = res(i1,i2,i3,i4,i5,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8) = res(i1,i2,i3,i4,i5,i6,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7) = res(i1,i2,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_8_sp_sp +module function mean_9_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_sp + + select case(dim) + case(1) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9) = res(i2,i3,i4,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9) = res(i1,i3,i4,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9) = res(i1,i2,i4,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9) = res(i1,i2,i3,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9) = res(i1,i2,i3,i4,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9) = res(i1,i2,i3,i4,i5,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9) = res(i1,i2,i3,i4,i5,i6,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9) = res(i1,i2,i3,i4,i5,i6,i7,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8) = res(i1,i2,i3,i4,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_9_sp_sp +module function mean_10_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_sp + + select case(dim) + case(1) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_10_sp_sp +module function mean_11_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_sp + + select case(dim) + case(1) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_11_sp_sp +module function mean_12_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_sp + + select case(dim) + case(1) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_12_sp_sp +module function mean_13_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_sp + + select case(dim) + case(1) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_13_sp_sp +module function mean_14_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_sp + + select case(dim) + case(1) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_14_sp_sp +module function mean_15_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_sp + + select case(dim) + case(1) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(15) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_15_sp_sp +module function mean_3_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_dp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + x(i1,i2,i3) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + x(i1,i2,i3) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + x(i1,i2,i3) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_3_dp_dp +module function mean_4_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_4_dp_dp +module function mean_5_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_5_dp_dp +module function mean_6_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_6_dp_dp +module function mean_7_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_7_dp_dp +module function mean_8_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_dp + + select case(dim) + case(1) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8) = res(i2,i3,i4,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8) = res(i1,i3,i4,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8) = res(i1,i2,i4,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8) = res(i1,i2,i3,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8) = res(i1,i2,i3,i4,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8) = res(i1,i2,i3,i4,i5,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8) = res(i1,i2,i3,i4,i5,i6,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7) = res(i1,i2,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_8_dp_dp +module function mean_9_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_dp + + select case(dim) + case(1) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9) = res(i2,i3,i4,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9) = res(i1,i3,i4,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9) = res(i1,i2,i4,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9) = res(i1,i2,i3,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9) = res(i1,i2,i3,i4,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9) = res(i1,i2,i3,i4,i5,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9) = res(i1,i2,i3,i4,i5,i6,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9) = res(i1,i2,i3,i4,i5,i6,i7,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8) = res(i1,i2,i3,i4,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_9_dp_dp +module function mean_10_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_dp + + select case(dim) + case(1) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_10_dp_dp +module function mean_11_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_dp + + select case(dim) + case(1) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_11_dp_dp +module function mean_12_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_dp + + select case(dim) + case(1) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_12_dp_dp +module function mean_13_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_dp + + select case(dim) + case(1) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_13_dp_dp +module function mean_14_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_dp + + select case(dim) + case(1) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_14_dp_dp +module function mean_15_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_dp + + select case(dim) + case(1) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(15) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_15_dp_dp +module function mean_3_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_qp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + x(i1,i2,i3) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + x(i1,i2,i3) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + x(i1,i2,i3) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_3_qp_qp +module function mean_4_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_qp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_4_qp_qp +module function mean_5_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_qp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_5_qp_qp +module function mean_6_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_qp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_6_qp_qp +module function mean_7_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_qp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_7_qp_qp +module function mean_8_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_qp + + select case(dim) + case(1) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8) = res(i2,i3,i4,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8) = res(i1,i3,i4,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8) = res(i1,i2,i4,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8) = res(i1,i2,i3,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8) = res(i1,i2,i3,i4,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8) = res(i1,i2,i3,i4,i5,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8) = res(i1,i2,i3,i4,i5,i6,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7) = res(i1,i2,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7,i8) + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_8_qp_qp +module function mean_9_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_qp + + select case(dim) + case(1) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9) = res(i2,i3,i4,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9) = res(i1,i3,i4,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9) = res(i1,i2,i4,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9) = res(i1,i2,i3,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9) = res(i1,i2,i3,i4,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9) = res(i1,i2,i3,i4,i5,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9) = res(i1,i2,i3,i4,i5,i6,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9) = res(i1,i2,i3,i4,i5,i6,i7,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8) = res(i1,i2,i3,i4,i5,i6,i7,i8) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_9_qp_qp +module function mean_10_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_qp + + select case(dim) + case(1) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_10_qp_qp +module function mean_11_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_qp + + select case(dim) + case(1) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_11_qp_qp +module function mean_12_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_qp + + select case(dim) + case(1) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_12_qp_qp +module function mean_13_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_qp + + select case(dim) + case(1) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_13_qp_qp +module function mean_14_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_qp + + select case(dim) + case(1) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i& + &14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13& + &) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_14_qp_qp +module function mean_15_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_qp + + select case(dim) + case(1) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,& + &i11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(15) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i& + &11,i12,i13,i14,i15) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_15_qp_qp + +module function mean_3_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_dp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + real(x(i1,i2,i3), dp) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_3_int8_dp +module function mean_4_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_4_int8_dp +module function mean_5_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_5_int8_dp +module function mean_6_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_6_int8_dp +module function mean_7_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_7_int8_dp +module function mean_8_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_dp + + select case(dim) + case(1) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8) = res(i2,i3,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8) = res(i1,i3,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8) = res(i1,i2,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8) = res(i1,i2,i3,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8) = res(i1,i2,i3,i4,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8) = res(i1,i2,i3,i4,i5,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8) = res(i1,i2,i3,i4,i5,i6,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7) = res(i1,i2,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_8_int8_dp +module function mean_9_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_dp + + select case(dim) + case(1) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9) = res(i2,i3,i4,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9) = res(i1,i3,i4,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9) = res(i1,i2,i4,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9) = res(i1,i2,i3,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9) = res(i1,i2,i3,i4,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9) = res(i1,i2,i3,i4,i5,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9) = res(i1,i2,i3,i4,i5,i6,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9) = res(i1,i2,i3,i4,i5,i6,i7,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8) = res(i1,i2,i3,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_9_int8_dp +module function mean_10_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_dp + + select case(dim) + case(1) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_10_int8_dp +module function mean_11_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_dp + + select case(dim) + case(1) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_11_int8_dp +module function mean_12_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_dp + + select case(dim) + case(1) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_12_int8_dp +module function mean_13_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_dp + + select case(dim) + case(1) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_13_int8_dp +module function mean_14_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_dp + + select case(dim) + case(1) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_14_int8_dp +module function mean_15_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_dp + + select case(dim) + case(1) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(15) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_15_int8_dp +module function mean_3_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_dp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + real(x(i1,i2,i3), dp) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_3_int16_dp +module function mean_4_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_4_int16_dp +module function mean_5_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_5_int16_dp +module function mean_6_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_6_int16_dp +module function mean_7_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_7_int16_dp +module function mean_8_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_dp + + select case(dim) + case(1) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8) = res(i2,i3,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8) = res(i1,i3,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8) = res(i1,i2,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8) = res(i1,i2,i3,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8) = res(i1,i2,i3,i4,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8) = res(i1,i2,i3,i4,i5,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8) = res(i1,i2,i3,i4,i5,i6,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7) = res(i1,i2,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_8_int16_dp +module function mean_9_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_dp + + select case(dim) + case(1) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9) = res(i2,i3,i4,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9) = res(i1,i3,i4,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9) = res(i1,i2,i4,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9) = res(i1,i2,i3,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9) = res(i1,i2,i3,i4,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9) = res(i1,i2,i3,i4,i5,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9) = res(i1,i2,i3,i4,i5,i6,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9) = res(i1,i2,i3,i4,i5,i6,i7,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8) = res(i1,i2,i3,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_9_int16_dp +module function mean_10_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_dp + + select case(dim) + case(1) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_10_int16_dp +module function mean_11_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_dp + + select case(dim) + case(1) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_11_int16_dp +module function mean_12_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_dp + + select case(dim) + case(1) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_12_int16_dp +module function mean_13_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_dp + + select case(dim) + case(1) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_13_int16_dp +module function mean_14_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_dp + + select case(dim) + case(1) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_14_int16_dp +module function mean_15_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_dp + + select case(dim) + case(1) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(15) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_15_int16_dp +module function mean_3_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_dp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + real(x(i1,i2,i3), dp) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_3_int32_dp +module function mean_4_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_4_int32_dp +module function mean_5_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_5_int32_dp +module function mean_6_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_6_int32_dp +module function mean_7_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_7_int32_dp +module function mean_8_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_dp + + select case(dim) + case(1) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8) = res(i2,i3,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8) = res(i1,i3,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8) = res(i1,i2,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8) = res(i1,i2,i3,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8) = res(i1,i2,i3,i4,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8) = res(i1,i2,i3,i4,i5,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8) = res(i1,i2,i3,i4,i5,i6,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7) = res(i1,i2,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_8_int32_dp +module function mean_9_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_dp + + select case(dim) + case(1) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9) = res(i2,i3,i4,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9) = res(i1,i3,i4,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9) = res(i1,i2,i4,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9) = res(i1,i2,i3,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9) = res(i1,i2,i3,i4,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9) = res(i1,i2,i3,i4,i5,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9) = res(i1,i2,i3,i4,i5,i6,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9) = res(i1,i2,i3,i4,i5,i6,i7,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8) = res(i1,i2,i3,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_9_int32_dp +module function mean_10_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_dp + + select case(dim) + case(1) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_10_int32_dp +module function mean_11_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_dp + + select case(dim) + case(1) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_11_int32_dp +module function mean_12_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_dp + + select case(dim) + case(1) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_12_int32_dp +module function mean_13_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_dp + + select case(dim) + case(1) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_13_int32_dp +module function mean_14_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_dp + + select case(dim) + case(1) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_14_int32_dp +module function mean_15_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_dp + + select case(dim) + case(1) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(15) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_15_int32_dp +module function mean_3_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_dp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + real(x(i1,i2,i3), dp) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_3_int64_dp +module function mean_4_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_4_int64_dp +module function mean_5_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_5_int64_dp +module function mean_6_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_6_int64_dp +module function mean_7_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_7_int64_dp +module function mean_8_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8 + + res = 0.0_dp + + select case(dim) + case(1) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8) = res(i2,i3,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8) = res(i1,i3,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8) = res(i1,i2,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8) = res(i1,i2,i3,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8) = res(i1,i2,i3,i4,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8) = res(i1,i2,i3,i4,i5,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8) = res(i1,i2,i3,i4,i5,i6,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7) = res(i1,i2,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7,i8), dp) + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_8_int64_dp +module function mean_9_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9 + + res = 0.0_dp + + select case(dim) + case(1) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9) = res(i2,i3,i4,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9) = res(i1,i3,i4,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9) = res(i1,i2,i4,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9) = res(i1,i2,i3,i5,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9) = res(i1,i2,i3,i4,i6,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9) = res(i1,i2,i3,i4,i5,i7,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9) = res(i1,i2,i3,i4,i5,i6,i8,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9) = res(i1,i2,i3,i4,i5,i6,i7,i9) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8) = res(i1,i2,i3,i4,i5,i6,i7,i8) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_9_int64_dp +module function mean_10_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10 + + res = 0.0_dp + + select case(dim) + case(1) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_10_int64_dp +module function mean_11_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11 + + res = 0.0_dp + + select case(dim) + case(1) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_11_int64_dp +module function mean_12_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12 + + res = 0.0_dp + + select case(dim) + case(1) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_12_int64_dp +module function mean_13_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13 + + res = 0.0_dp + + select case(dim) + case(1) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12) +& + & real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_13_int64_dp +module function mean_14_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14 + + res = 0.0_dp + + select case(dim) + case(1) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i& + &14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13) = res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13& + &) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_14_int64_dp +module function mean_15_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:,:,:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ), & + merge(size(x,7),size(x,8),mask = 7 < dim ), & + merge(size(x,8),size(x,9),mask = 8 < dim ), & + merge(size(x,9),size(x,10),mask = 9 < dim ), & + merge(size(x,10),size(x,11),mask = 10 < dim ), & + merge(size(x,11),size(x,12),mask = 11 < dim ), & + merge(size(x,12),size(x,13),mask = 12 < dim ), & + merge(size(x,13),size(x,14),mask = 13 < dim ), & + merge(size(x,14),size(x,15),mask = 14 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15 + + res = 0.0_dp + + select case(dim) + case(1) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(2) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(3) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(4) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(5) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(6) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i7,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(7) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i8,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(8) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i9,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(9) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i10,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9& + &,i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(10) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i11,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(11) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i12,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(12) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i13,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(13) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i14,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(14) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i15) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case(15) + do i15 = 1, size(x, 15) + do i14 = 1, size(x, 14) + do i13 = 1, size(x, 13) + do i12 = 1, size(x, 12) + do i11 = 1, size(x, 11) + do i10 = 1, size(x, 10) + do i9 = 1, size(x, 9) + do i8 = 1, size(x, 8) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) =& + & res(i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14) + real(x(i1,i2,i3,i4,i5,i6,i7,i8,i9,& + &i10,i11,i12,i13,i14,i15), dp) + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_15_int64_dp + +end submodule diff --git a/src/f90_stdlib_experimental_stats.f90 b/src/f90_stdlib_experimental_stats.f90 new file mode 100644 index 000000000..861efe174 --- /dev/null +++ b/src/f90_stdlib_experimental_stats.f90 @@ -0,0 +1,575 @@ +module stdlib_experimental_stats + + +use stdlib_experimental_kinds, only: sp, dp, qp, & + int8, int16, int32, int64 +implicit none +private +! Public API +public :: mean + +interface mean + module function mean_1_sp_sp(x) result(res) + real(sp), intent(in) :: x(:) + real(sp) :: res + end function mean_1_sp_sp + module function mean_1_dp_dp(x) result(res) + real(dp), intent(in) :: x(:) + real(dp) :: res + end function mean_1_dp_dp + module function mean_1_qp_qp(x) result(res) + real(qp), intent(in) :: x(:) + real(qp) :: res + end function mean_1_qp_qp + + module function mean_1_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:) + real(dp) :: res + end function mean_1_int8_dp + module function mean_1_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:) + real(dp) :: res + end function mean_1_int16_dp + module function mean_1_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:) + real(dp) :: res + end function mean_1_int32_dp + module function mean_1_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:) + real(dp) :: res + end function mean_1_int64_dp + + + module function mean_2_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:) + real(sp) :: res + end function mean_2_all_sp_sp + module function mean_2_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:) + real(dp) :: res + end function mean_2_all_dp_dp + module function mean_2_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:) + real(qp) :: res + end function mean_2_all_qp_qp + + module function mean_2_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:) + real(dp) :: res + end function mean_2_all_int8_dp + module function mean_2_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:) + real(dp) :: res + end function mean_2_all_int16_dp + module function mean_2_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:) + real(dp) :: res + end function mean_2_all_int32_dp + module function mean_2_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:) + real(dp) :: res + end function mean_2_all_int64_dp + + module function mean_2_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(sp) :: res(size(x)/size(x, dim)) + end function mean_2_sp_sp + module function mean_2_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + end function mean_2_dp_dp + module function mean_2_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(qp) :: res(size(x)/size(x, dim)) + end function mean_2_qp_qp + + module function mean_2_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + end function mean_2_int8_dp + module function mean_2_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + end function mean_2_int16_dp + module function mean_2_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + end function mean_2_int32_dp + module function mean_2_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + end function mean_2_int64_dp + + + + + +module function mean_3_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:) + real(sp) :: res +end function mean_3_all_sp_sp +module function mean_4_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:) + real(sp) :: res +end function mean_4_all_sp_sp +module function mean_5_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:) + real(sp) :: res +end function mean_5_all_sp_sp +module function mean_6_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:) + real(sp) :: res +end function mean_6_all_sp_sp +module function mean_7_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:) + real(sp) :: res +end function mean_7_all_sp_sp +module function mean_3_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:) + real(dp) :: res +end function mean_3_all_dp_dp +module function mean_4_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:) + real(dp) :: res +end function mean_4_all_dp_dp +module function mean_5_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:) + real(dp) :: res +end function mean_5_all_dp_dp +module function mean_6_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res +end function mean_6_all_dp_dp +module function mean_7_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res +end function mean_7_all_dp_dp +module function mean_3_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:) + real(qp) :: res +end function mean_3_all_qp_qp +module function mean_4_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:) + real(qp) :: res +end function mean_4_all_qp_qp +module function mean_5_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:) + real(qp) :: res +end function mean_5_all_qp_qp +module function mean_6_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:) + real(qp) :: res +end function mean_6_all_qp_qp +module function mean_7_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:) + real(qp) :: res +end function mean_7_all_qp_qp + +module function mean_3_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:) + real(dp) :: res +end function mean_3_all_int8_dp +module function mean_4_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:) + real(dp) :: res +end function mean_4_all_int8_dp +module function mean_5_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:) + real(dp) :: res +end function mean_5_all_int8_dp +module function mean_6_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res +end function mean_6_all_int8_dp +module function mean_7_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res +end function mean_7_all_int8_dp +module function mean_3_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:) + real(dp) :: res +end function mean_3_all_int16_dp +module function mean_4_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:) + real(dp) :: res +end function mean_4_all_int16_dp +module function mean_5_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:) + real(dp) :: res +end function mean_5_all_int16_dp +module function mean_6_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res +end function mean_6_all_int16_dp +module function mean_7_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res +end function mean_7_all_int16_dp +module function mean_3_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:) + real(dp) :: res +end function mean_3_all_int32_dp +module function mean_4_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:) + real(dp) :: res +end function mean_4_all_int32_dp +module function mean_5_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:) + real(dp) :: res +end function mean_5_all_int32_dp +module function mean_6_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res +end function mean_6_all_int32_dp +module function mean_7_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res +end function mean_7_all_int32_dp +module function mean_3_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:) + real(dp) :: res +end function mean_3_all_int64_dp +module function mean_4_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:) + real(dp) :: res +end function mean_4_all_int64_dp +module function mean_5_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:) + real(dp) :: res +end function mean_5_all_int64_dp +module function mean_6_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res +end function mean_6_all_int64_dp +module function mean_7_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res +end function mean_7_all_int64_dp + +module function mean_3_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_sp_sp +module function mean_4_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_sp_sp +module function mean_5_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_sp_sp +module function mean_6_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_sp_sp +module function mean_7_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_sp_sp +module function mean_3_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_dp_dp +module function mean_4_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_dp_dp +module function mean_5_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_dp_dp +module function mean_6_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_dp_dp +module function mean_7_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_dp_dp +module function mean_3_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_qp_qp +module function mean_4_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_qp_qp +module function mean_5_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_qp_qp +module function mean_6_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_qp_qp +module function mean_7_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_qp_qp + +module function mean_3_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_int8_dp +module function mean_4_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_int8_dp +module function mean_5_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_int8_dp +module function mean_6_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_int8_dp +module function mean_7_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_int8_dp +module function mean_3_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_int16_dp +module function mean_4_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_int16_dp +module function mean_5_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_int16_dp +module function mean_6_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_int16_dp +module function mean_7_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_int16_dp +module function mean_3_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_int32_dp +module function mean_4_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_int32_dp +module function mean_5_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_int32_dp +module function mean_6_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_int32_dp +module function mean_7_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_int32_dp +module function mean_3_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) +end function mean_3_int64_dp +module function mean_4_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) +end function mean_4_int64_dp +module function mean_5_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) +end function mean_5_int64_dp +module function mean_6_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) +end function mean_6_int64_dp +module function mean_7_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) +end function mean_7_int64_dp + +end interface + +end module diff --git a/src/f90_stdlib_experimental_stats_mean.f90 b/src/f90_stdlib_experimental_stats_mean.f90 new file mode 100644 index 000000000..7d69d5d5e --- /dev/null +++ b/src/f90_stdlib_experimental_stats_mean.f90 @@ -0,0 +1,4206 @@ +submodule (stdlib_experimental_stats) stdlib_experimental_stats_mean + + +use stdlib_experimental_error, only: error_stop +implicit none + +contains + +module function mean_1_sp_sp(x) result(res) + real(sp), intent(in) :: x(:) + real(sp) :: res + + integer :: i1 + + res = 0.0_sp + do i1 = 1, size(x) + res = res + x(i1) + end do + res = res / real(size(x), sp) + +end function mean_1_sp_sp +module function mean_1_dp_dp(x) result(res) + real(dp), intent(in) :: x(:) + real(dp) :: res + + integer :: i1 + + res = 0.0_dp + do i1 = 1, size(x) + res = res + x(i1) + end do + res = res / real(size(x), dp) + +end function mean_1_dp_dp +module function mean_1_qp_qp(x) result(res) + real(qp), intent(in) :: x(:) + real(qp) :: res + + integer :: i1 + + res = 0.0_qp + do i1 = 1, size(x) + res = res + x(i1) + end do + res = res / real(size(x), qp) + +end function mean_1_qp_qp + +module function mean_1_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:) + real(dp) :: res + + integer :: i1 + + res = 0.0_dp + do i1 = 1, size(x) + res = res + real(x(i1), dp) + end do + res = res / real(size(x), dp) + +end function mean_1_int8_dp +module function mean_1_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:) + real(dp) :: res + + integer :: i1 + + res = 0.0_dp + do i1 = 1, size(x) + res = res + real(x(i1), dp) + end do + res = res / real(size(x), dp) + +end function mean_1_int16_dp +module function mean_1_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:) + real(dp) :: res + + integer :: i1 + + res = 0.0_dp + do i1 = 1, size(x) + res = res + real(x(i1), dp) + end do + res = res / real(size(x), dp) + +end function mean_1_int32_dp +module function mean_1_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:) + real(dp) :: res + + integer :: i1 + + res = 0.0_dp + do i1 = 1, size(x) + res = res + real(x(i1), dp) + end do + res = res / real(size(x), dp) + +end function mean_1_int64_dp + + +module function mean_2_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:) + real(sp) :: res + + integer :: i1, i2 + + res = 0.0_sp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1, i2) + end do + end do + res = res / real(size(x), sp) + +end function mean_2_all_sp_sp +module function mean_2_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:) + real(dp) :: res + + integer :: i1, i2 + + res = 0.0_dp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1, i2) + end do + end do + res = res / real(size(x), dp) + +end function mean_2_all_dp_dp +module function mean_2_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:) + real(qp) :: res + + integer :: i1, i2 + + res = 0.0_qp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1, i2) + end do + end do + res = res / real(size(x), qp) + +end function mean_2_all_qp_qp + +module function mean_2_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:) + real(dp) :: res + + integer :: i1, i2 + + res = 0.0_dp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1, i2), dp) + end do + end do + res = res / real(size(x), dp) + +end function mean_2_all_int8_dp +module function mean_2_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:) + real(dp) :: res + + integer :: i1, i2 + + res = 0.0_dp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1, i2), dp) + end do + end do + res = res / real(size(x), dp) + +end function mean_2_all_int16_dp +module function mean_2_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:) + real(dp) :: res + + integer :: i1, i2 + + res = 0.0_dp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1, i2), dp) + end do + end do + res = res / real(size(x), dp) + +end function mean_2_all_int32_dp +module function mean_2_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:) + real(dp) :: res + + integer :: i1, i2 + + res = 0.0_dp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1, i2), dp) + end do + end do + res = res / real(size(x), dp) + +end function mean_2_all_int64_dp + +module function mean_2_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(sp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_sp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + x(i1, i2) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + x(i1, i2) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_2_sp_sp +module function mean_2_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_dp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + x(i1, i2) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + x(i1, i2) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_2_dp_dp +module function mean_2_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(qp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_qp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + x(i1, i2) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + x(i1, i2) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_2_qp_qp + +module function mean_2_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_dp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + real(x(i1, i2), dp) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + real(x(i1, i2), dp) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_2_int8_dp +module function mean_2_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_dp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + real(x(i1, i2), dp) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + real(x(i1, i2), dp) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_2_int16_dp +module function mean_2_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_dp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + real(x(i1, i2), dp) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + real(x(i1, i2), dp) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_2_int32_dp +module function mean_2_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_dp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + real(x(i1, i2), dp) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + real(x(i1, i2), dp) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_2_int64_dp + + + +!As proposed by @arady + + + + +module function mean_3_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:) + real(sp) :: res + + integer :: i1,i2,i3 + + res = 0.0_sp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3) + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_3_all_sp_sp +module function mean_4_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_sp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4) + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_4_all_sp_sp +module function mean_5_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_sp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_5_all_sp_sp +module function mean_6_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_sp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_6_all_sp_sp +module function mean_7_all_sp_sp(x) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:) + real(sp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_sp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), sp) + +end function mean_7_all_sp_sp +module function mean_3_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:) + real(dp) :: res + + integer :: i1,i2,i3 + + res = 0.0_dp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3) + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_3_all_dp_dp +module function mean_4_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4) + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_4_all_dp_dp +module function mean_5_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_5_all_dp_dp +module function mean_6_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_6_all_dp_dp +module function mean_7_all_dp_dp(x) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_7_all_dp_dp +module function mean_3_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:) + real(qp) :: res + + integer :: i1,i2,i3 + + res = 0.0_qp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3) + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_3_all_qp_qp +module function mean_4_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_qp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4) + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_4_all_qp_qp +module function mean_5_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_qp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_5_all_qp_qp +module function mean_6_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_qp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_6_all_qp_qp +module function mean_7_all_qp_qp(x) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:) + real(qp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_qp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), qp) + +end function mean_7_all_qp_qp + +module function mean_3_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:) + real(dp) :: res + + integer :: i1,i2,i3 + + res = 0.0_dp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3), dp) + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_3_all_int8_dp +module function mean_4_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_4_all_int8_dp +module function mean_5_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_5_all_int8_dp +module function mean_6_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_6_all_int8_dp +module function mean_7_all_int8_dp(x) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_7_all_int8_dp +module function mean_3_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:) + real(dp) :: res + + integer :: i1,i2,i3 + + res = 0.0_dp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3), dp) + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_3_all_int16_dp +module function mean_4_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_4_all_int16_dp +module function mean_5_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_5_all_int16_dp +module function mean_6_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_6_all_int16_dp +module function mean_7_all_int16_dp(x) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_7_all_int16_dp +module function mean_3_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:) + real(dp) :: res + + integer :: i1,i2,i3 + + res = 0.0_dp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3), dp) + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_3_all_int32_dp +module function mean_4_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_4_all_int32_dp +module function mean_5_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_5_all_int32_dp +module function mean_6_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_6_all_int32_dp +module function mean_7_all_int32_dp(x) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_7_all_int32_dp +module function mean_3_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:) + real(dp) :: res + + integer :: i1,i2,i3 + + res = 0.0_dp + + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3), dp) + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_3_all_int64_dp +module function mean_4_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_4_all_int64_dp +module function mean_5_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_5_all_int64_dp +module function mean_6_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_6_all_int64_dp +module function mean_7_all_int64_dp(x) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:) + real(dp) :: res + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + + res = res / real(size(x), dp) + +end function mean_7_all_int64_dp + +module function mean_3_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_sp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + x(i1,i2,i3) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + x(i1,i2,i3) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + x(i1,i2,i3) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_3_sp_sp +module function mean_4_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_sp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_4_sp_sp +module function mean_5_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_sp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_5_sp_sp +module function mean_6_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_sp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_6_sp_sp +module function mean_7_sp_sp(x, dim) result(res) + real(sp), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(sp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_sp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), sp) + +end function mean_7_sp_sp +module function mean_3_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_dp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + x(i1,i2,i3) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + x(i1,i2,i3) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + x(i1,i2,i3) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_3_dp_dp +module function mean_4_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_4_dp_dp +module function mean_5_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_5_dp_dp +module function mean_6_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_6_dp_dp +module function mean_7_dp_dp(x, dim) result(res) + real(dp), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_7_dp_dp +module function mean_3_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_qp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + x(i1,i2,i3) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + x(i1,i2,i3) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + x(i1,i2,i3) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_3_qp_qp +module function mean_4_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_qp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + x(i1,i2,i3,i4) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_4_qp_qp +module function mean_5_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_qp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + x(i1,i2,i3,i4,i5) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_5_qp_qp +module function mean_6_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_qp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + x(i1,i2,i3,i4,i5,i6) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_6_qp_qp +module function mean_7_qp_qp(x, dim) result(res) + real(qp), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(qp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_qp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + x(i1,i2,i3,i4,i5,i6,i7) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), qp) + +end function mean_7_qp_qp + +module function mean_3_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_dp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + real(x(i1,i2,i3), dp) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_3_int8_dp +module function mean_4_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_4_int8_dp +module function mean_5_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_5_int8_dp +module function mean_6_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_6_int8_dp +module function mean_7_int8_dp(x, dim) result(res) + integer(int8), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_7_int8_dp +module function mean_3_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_dp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + real(x(i1,i2,i3), dp) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_3_int16_dp +module function mean_4_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_4_int16_dp +module function mean_5_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_5_int16_dp +module function mean_6_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_6_int16_dp +module function mean_7_int16_dp(x, dim) result(res) + integer(int16), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_7_int16_dp +module function mean_3_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_dp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + real(x(i1,i2,i3), dp) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_3_int32_dp +module function mean_4_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_4_int32_dp +module function mean_5_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_5_int32_dp +module function mean_6_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_6_int32_dp +module function mean_7_int32_dp(x, dim) result(res) + integer(int32), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_7_int32_dp +module function mean_3_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ) ) + + integer :: i1,i2,i3 + + res = 0.0_dp + + select case(dim) + case(1) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3) = res(i2,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(2) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3) = res(i1,i3) + real(x(i1,i2,i3), dp) + end do + end do + end do + case(3) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2) = res(i1,i2) + real(x(i1,i2,i3), dp) + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_3_int64_dp +module function mean_4_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ) ) + + integer :: i1,i2,i3,i4 + + res = 0.0_dp + + select case(dim) + case(1) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4) = res(i2,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(2) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4) = res(i1,i3,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(3) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4) = res(i1,i2,i4) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case(4) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3) = res(i1,i2,i3) + real(x(i1,i2,i3,i4), dp) + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_4_int64_dp +module function mean_5_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ) ) + + integer :: i1,i2,i3,i4,i5 + + res = 0.0_dp + + select case(dim) + case(1) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5) = res(i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(2) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5) = res(i1,i3,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(3) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5) = res(i1,i2,i4,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(4) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5) = res(i1,i2,i3,i5) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case(5) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4) = res(i1,i2,i3,i4) + real(x(i1,i2,i3,i4,i5), dp) + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_5_int64_dp +module function mean_6_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6 + + res = 0.0_dp + + select case(dim) + case(1) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6) = res(i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(2) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6) = res(i1,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(3) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6) = res(i1,i2,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(4) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6) = res(i1,i2,i3,i5,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(5) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6) = res(i1,i2,i3,i4,i6) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case(6) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5) = res(i1,i2,i3,i4,i5) + real(x(i1,i2,i3,i4,i5,i6), dp) + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_6_int64_dp +module function mean_7_int64_dp(x, dim) result(res) + integer(int64), intent(in) :: x(:,:,:,:,:,:,:) + integer, intent(in) :: dim + real(dp) :: res( & + merge(size(x,1),size(x,2),mask = 1 < dim ), & + merge(size(x,2),size(x,3),mask = 2 < dim ), & + merge(size(x,3),size(x,4),mask = 3 < dim ), & + merge(size(x,4),size(x,5),mask = 4 < dim ), & + merge(size(x,5),size(x,6),mask = 5 < dim ), & + merge(size(x,6),size(x,7),mask = 6 < dim ) ) + + integer :: i1,i2,i3,i4,i5,i6,i7 + + res = 0.0_dp + + select case(dim) + case(1) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2,i3,i4,i5,i6,i7) = res(i2,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(2) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i3,i4,i5,i6,i7) = res(i1,i3,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(3) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i4,i5,i6,i7) = res(i1,i2,i4,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(4) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i5,i6,i7) = res(i1,i2,i3,i5,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(5) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i6,i7) = res(i1,i2,i3,i4,i6,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(6) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i7) = res(i1,i2,i3,i4,i5,i7) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case(7) + do i7 = 1, size(x, 7) + do i6 = 1, size(x, 6) + do i5 = 1, size(x, 5) + do i4 = 1, size(x, 4) + do i3 = 1, size(x, 3) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1,i2,i3,i4,i5,i6) = res(i1,i2,i3,i4,i5,i6) + real(x(i1,i2,i3,i4,i5,i6,i7), dp) + end do + end do + end do + end do + end do + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_7_int64_dp + +end submodule diff --git a/src/stdlib_experimental_stats.fypp b/src/stdlib_experimental_stats.fypp new file mode 100644 index 000000000..385177564 --- /dev/null +++ b/src/stdlib_experimental_stats.fypp @@ -0,0 +1,124 @@ +module stdlib_experimental_stats + +#:set VERSION90 = defined('VERSION90') +#:set REALKINDS = ["sp", "dp", "qp"] +#:set INTKINDS = ["int8", "int16", "int32", "int64"] +#:set REALTYPES = ["real({})".format(k) for k in REALKINDS] +#:set INTTYPES = ["integer({})".format(k) for k in INTKINDS] +#:set iktr = list(zip(range(len(REALKINDS)), REALKINDS, REALTYPES)) +#:set ikti = list(zip(range(len(INTKINDS)), INTKINDS, INTTYPES)) + +use stdlib_experimental_kinds, only: sp, dp, qp, & + int8, int16, int32, int64 +implicit none +private +! Public API +public :: mean + +interface mean +#:for i1, k1, t1 in iktr + module function mean_1_${k1}$_${k1}$(x) result(res) + ${t1}$, intent(in) :: x(:) + ${t1}$ :: res + end function mean_1_${k1}$_${k1}$ +#:endfor + +#:for i1, k1, t1 in ikti + module function mean_1_${k1}$_dp(x) result(res) + ${t1}$, intent(in) :: x(:) + real(dp) :: res + end function mean_1_${k1}$_dp +#:endfor + + +#:for i1, k1, t1 in iktr + module function mean_2_all_${k1}$_${k1}$(x) result(res) + ${t1}$, intent(in) :: x(:,:) + ${t1}$ :: res + end function mean_2_all_${k1}$_${k1}$ +#:endfor + +#:for i1, k1, t1 in ikti + module function mean_2_all_${k1}$_dp(x) result(res) + ${t1}$, intent(in) :: x(:,:) + real(dp) :: res + end function mean_2_all_${k1}$_dp +#:endfor + +#:for i1, k1, t1 in iktr + module function mean_2_${k1}$_${k1}$(x, dim) result(res) + ${t1}$, intent(in) :: x(:,:) + integer, intent(in) :: dim + ${t1}$ :: res(size(x)/size(x, dim)) + end function mean_2_${k1}$_${k1}$ +#:endfor + +#:for i1, k1, t1 in ikti + module function mean_2_${k1}$_dp(x, dim) result(res) + ${t1}$, intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + end function mean_2_${k1}$_dp +#:endfor + + +#:def ranksuffix(rank) +#{if rank > 0}#(${":" + ",:" * (rank - 1)}$)#{endif}# +#:enddef + +#:if VERSION90 +#:set ranks = range(3,8) +#:else +#:set ranks = range(3,16) +#:endif + + +#:for i1, k1, t1 in iktr +#:for rank in ranks +module function mean_${rank}$_all_${k1}$_${k1}$(x) result(res) + ${t1}$, intent(in) :: x${ranksuffix(rank)}$ + ${t1}$ :: res +end function mean_${rank}$_all_${k1}$_${k1}$ +#:endfor +#:endfor + +#:for i1, k1, t1 in ikti +#:for rank in ranks +module function mean_${rank}$_all_${k1}$_dp(x) result(res) + ${t1}$, intent(in) :: x${ranksuffix(rank)}$ + real(dp) :: res +end function mean_${rank}$_all_${k1}$_dp +#:endfor +#:endfor + +#:for i1, k1, t1 in iktr +#:for rank in ranks +module function mean_${rank}$_${k1}$_${k1}$(x, dim) result(res) + ${t1}$, intent(in) :: x${ranksuffix(rank)}$ + integer, intent(in) :: dim + ${t1}$ :: res( & +#:for imerge in range(1,rank-1) + merge(size(x,${imerge}$),size(x,${imerge + 1}$),mask = ${imerge}$ < dim ), & +#:endfor + merge(size(x,${rank-1}$),size(x,${rank}$),mask = ${rank-1}$ < dim ) ) +end function mean_${rank}$_${k1}$_${k1}$ +#:endfor +#:endfor + +#:for i1, k1, t1 in ikti +#:for rank in ranks +module function mean_${rank}$_${k1}$_dp(x, dim) result(res) + ${t1}$, intent(in) :: x${ranksuffix(rank)}$ + integer, intent(in) :: dim + real(dp) :: res( & +#:for imerge in range(1,rank-1) + merge(size(x,${imerge}$),size(x,${imerge + 1}$),mask = ${imerge}$ < dim ), & +#:endfor + merge(size(x,${rank-1}$),size(x,${rank}$),mask = ${rank-1}$ < dim ) ) +end function mean_${rank}$_${k1}$_dp +#:endfor +#:endfor + +end interface + +end module diff --git a/src/stdlib_experimental_stats.md b/src/stdlib_experimental_stats.md new file mode 100644 index 000000000..4cb850a5c --- /dev/null +++ b/src/stdlib_experimental_stats.md @@ -0,0 +1,43 @@ +# Descriptive statistics + +## Implemented + + * `mean` + +## `mean` - mean of array elements + +### Description + +Returns the mean of all the elements of `array`, or of the elements of `array` along dimension `dim` if provided. + +### Syntax + +`result = mean(array)` + +`result = mean(array, dim)` + +### Arguments + +`array`: Shall be an array of type `integer`, or `real`. + +`dim`: Shall be a scalar of type `integer` with a value in the range from 1 to n, where n is the rank of `array`. + +### Return value + +If `array` is of type `real`, the result is of the same type as `array`. +If `array` is of type `integer`, the result is of type `double precision`. + +If `dim` is absent, a scalar with the mean of all elements in `array` is returned. Otherwise, an array of rank n-1, where n equals the rank of `array`, and a shape similar to that of `array` with dimension `dim` dropped is returned. + +### Example + +```fortran +program test + use stdlib_experimental_stats, only: mean + implicit none + real :: x(1:6) = [ 1., 2., 3., 4., 5., 6. ] + print *, mean(x) !returns 21. + print *, mean( reshape(x, [ 2, 3 ] )) !returns 21. + print *, mean( reshape(x, [ 2, 3 ] ), 1) !returns [ 3., 7., 11. ] +end program +``` diff --git a/src/stdlib_experimental_stats_mean.fypp b/src/stdlib_experimental_stats_mean.fypp new file mode 100644 index 000000000..7b7bf9430 --- /dev/null +++ b/src/stdlib_experimental_stats_mean.fypp @@ -0,0 +1,297 @@ +submodule (stdlib_experimental_stats) stdlib_experimental_stats_mean + +#:set VERSION90 = defined('VERSION90') +#:set REALKINDS = ["sp", "dp", "qp"] +#:set INTKINDS = ["int8", "int16", "int32", "int64"] +#:set REALTYPES = ["real({})".format(k) for k in REALKINDS] +#:set INTTYPES = ["integer({})".format(k) for k in INTKINDS] +#:set iktr = list(zip(range(len(REALKINDS)), REALKINDS, REALTYPES)) +#:set ikti = list(zip(range(len(INTKINDS)), INTKINDS, INTTYPES)) + +use stdlib_experimental_error, only: error_stop +implicit none + +contains + +#:for i1, k1, t1 in iktr +module function mean_1_${k1}$_${k1}$(x) result(res) + ${t1}$, intent(in) :: x(:) + ${t1}$ :: res + + integer :: i1 + + res = 0.0_${k1}$ + do i1 = 1, size(x) + res = res + x(i1) + end do + res = res / real(size(x), ${k1}$) + +end function mean_1_${k1}$_${k1}$ +#:endfor + +#:for i1, k1, t1 in ikti +module function mean_1_${k1}$_dp(x) result(res) + ${t1}$, intent(in) :: x(:) + real(dp) :: res + + integer :: i1 + + res = 0.0_dp + do i1 = 1, size(x) + res = res + real(x(i1), dp) + end do + res = res / real(size(x), dp) + +end function mean_1_${k1}$_dp +#:endfor + + +#:for i1, k1, t1 in iktr +module function mean_2_all_${k1}$_${k1}$(x) result(res) + ${t1}$, intent(in) :: x(:,:) + ${t1}$ :: res + + integer :: i1, i2 + + res = 0.0_${k1}$ + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + x(i1, i2) + end do + end do + res = res / real(size(x), ${k1}$) + +end function mean_2_all_${k1}$_${k1}$ +#:endfor + +#:for i1, k1, t1 in ikti +module function mean_2_all_${k1}$_dp(x) result(res) + ${t1}$, intent(in) :: x(:,:) + real(dp) :: res + + integer :: i1, i2 + + res = 0.0_dp + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res = res + real(x(i1, i2), dp) + end do + end do + res = res / real(size(x), dp) + +end function mean_2_all_${k1}$_dp +#:endfor + +#:for i1, k1, t1 in iktr +module function mean_2_${k1}$_${k1}$(x, dim) result(res) + ${t1}$, intent(in) :: x(:,:) + integer, intent(in) :: dim + ${t1}$ :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_${k1}$ + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + x(i1, i2) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + x(i1, i2) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), ${k1}$) + +end function mean_2_${k1}$_${k1}$ +#:endfor + +#:for i1, k1, t1 in ikti +module function mean_2_${k1}$_dp(x, dim) result(res) + ${t1}$, intent(in) :: x(:,:) + integer, intent(in) :: dim + real(dp) :: res(size(x)/size(x, dim)) + + integer :: i1, i2 + + res = 0.0_dp + + select case(dim) + case(1) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i2) = res(i2) + real(x(i1, i2), dp) + end do + end do + case(2) + do i2 = 1, size(x, 2) + do i1 = 1, size(x, 1) + res(i1) = res(i1) + real(x(i1, i2), dp) + end do + end do + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_2_${k1}$_dp +#:endfor + + +#:def ranksuffix(rank) +#{if rank > 0}#(${":" + ",:" * (rank - 1)}$)#{endif}# +#:enddef + +!As proposed by @arady +#:def varsuffix(rank) +${str(rank)}$ +#:enddef + +#:def varlist(varname, startlist, endlist) +#:if startlist > 0 +${",".join([varname + varsuffix(i) for i in range(startlist, endlist + 1)])}$ +#:endif +#:enddef + +#:def varlistskip(varname, rank, dim) +#:if rank > 0 +${varlist(varname,1,dim-1)}$#{if dim -1 > 0 and dim < rank}#,#{endif}#${varlist(varname,dim+1,rank)}$ +#:endif +#:enddef + +#:if VERSION90 +#:set ranks = range(3,8) +#:else +#:set ranks = range(3,16) +#:endif + +#:for i1, k1, t1 in iktr +#:for rank in ranks +module function mean_${rank}$_all_${k1}$_${k1}$(x) result(res) + ${t1}$, intent(in) :: x${ranksuffix(rank)}$ + ${t1}$ :: res + + integer :: ${varlist("i",1,rank)}$ + + res = 0.0_${k1}$ + +#:for fj in range(rank,0,-1) + ${" "* (rank - fj)}$do i${varsuffix(fj)}$ = 1, size(x, ${fj}$) +#:endfor + ${" "* (rank)}$res = res + x(${varlist("i",1,rank)}$) +#:for fj in range(rank,0,-1) + ${" "* (fj-1)}$end do +#:endfor + + res = res / real(size(x), ${k1}$) + +end function mean_${rank}$_all_${k1}$_${k1}$ +#:endfor +#:endfor + +#:for i1, k1, t1 in ikti +#:for rank in ranks +module function mean_${rank}$_all_${k1}$_dp(x) result(res) + ${t1}$, intent(in) :: x${ranksuffix(rank)}$ + real(dp) :: res + + integer :: ${varlist("i",1,rank)}$ + + res = 0.0_dp + +#:for fj in range(rank,0,-1) + ${" "* (rank - fj)}$do i${varsuffix(fj)}$ = 1, size(x, ${fj}$) +#:endfor + ${" "* (rank)}$res = res + real(x(${varlist("i",1,rank)}$), dp) +#:for fj in range(rank,0,-1) + ${" "* (fj-1)}$end do +#:endfor + + res = res / real(size(x), dp) + +end function mean_${rank}$_all_${k1}$_dp +#:endfor +#:endfor + +#:for i1, k1, t1 in iktr +#:for rank in ranks +module function mean_${rank}$_${k1}$_${k1}$(x, dim) result(res) + ${t1}$, intent(in) :: x${ranksuffix(rank)}$ + integer, intent(in) :: dim + ${t1}$ :: res( & +#:for imerge in range(1,rank-1) + merge(size(x,${imerge}$),size(x,${imerge + 1}$),mask = ${imerge}$ < dim ), & +#:endfor + merge(size(x,${rank-1}$),size(x,${rank}$),mask = ${rank-1}$ < dim ) ) + + integer :: ${varlist("i",1,rank)}$ + + res = 0.0_${k1}$ + + select case(dim) +#:for fi in range(1,rank+1) + case(${fi}$) +#:for fj in range(rank,0,-1) + ${" "* (rank - fj)}$do i${varsuffix(fj)}$ = 1, size(x, ${fj}$) +#:endfor + ${" "* (rank)}$res(${varlistskip("i", rank, fi)}$) = res(${varlistskip("i", rank, fi)}$) + x(${varlist("i",1,rank)}$) +#:for fj in range(rank,0,-1) + ${" "* (fj-1)}$end do +#:endfor +#:endfor + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), ${k1}$) + +end function mean_${rank}$_${k1}$_${k1}$ +#:endfor +#:endfor + +#:for i1, k1, t1 in ikti +#:for rank in ranks +module function mean_${rank}$_${k1}$_dp(x, dim) result(res) + ${t1}$, intent(in) :: x${ranksuffix(rank)}$ + integer, intent(in) :: dim + real(dp) :: res( & +#:for imerge in range(1,rank-1) + merge(size(x,${imerge}$),size(x,${imerge + 1}$),mask = ${imerge}$ < dim ), & +#:endfor + merge(size(x,${rank-1}$),size(x,${rank}$),mask = ${rank-1}$ < dim ) ) + + integer :: ${varlist("i",1,rank)}$ + + res = 0.0_dp + + select case(dim) +#:for fi in range(1,rank+1) + case(${fi}$) +#:for fj in range(rank,0,-1) + ${" "* (rank - fj)}$do i${varsuffix(fj)}$ = 1, size(x, ${fj}$) +#:endfor + ${" "* (rank)}$res(${varlistskip("i", rank, fi)}$) = res(${varlistskip("i", rank, fi)}$) + real(x(${varlist("i",1,rank)}$), dp) +#:for fj in range(rank,0,-1) + ${" "* (fj-1)}$end do +#:endfor +#:endfor + case default + call error_stop("ERROR (mean): wrong dimension") + end select + + res = res / real(size(x, dim), dp) + +end function mean_${rank}$_${k1}$_dp +#:endfor +#:endfor + +end submodule diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index e72592579..df5bd0a09 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -9,6 +9,7 @@ endmacro(ADDTEST) add_subdirectory(ascii) add_subdirectory(io) add_subdirectory(optval) +add_subdirectory(stats) add_subdirectory(system) ADDTEST(always_skip) diff --git a/src/tests/Makefile.manual b/src/tests/Makefile.manual index 5d2debb62..3b1e4dff2 100644 --- a/src/tests/Makefile.manual +++ b/src/tests/Makefile.manual @@ -4,13 +4,16 @@ all: $(MAKE) -f Makefile.manual --directory=ascii $(MAKE) -f Makefile.manual --directory=io $(MAKE) -f Makefile.manual --directory=optval + $(MAKE) -f Makefile.manual --directory=stats test: $(MAKE) -f Makefile.manual --directory=ascii test $(MAKE) -f Makefile.manual --directory=io test $(MAKE) -f Makefile.manual --directory=optval test + $(MAKE) -f Makefile.manual --directory=stats test clean: $(MAKE) -f Makefile.manual --directory=ascii clean $(MAKE) -f Makefile.manual --directory=io clean $(MAKE) -f Makefile.manual --directory=optval clean + $(MAKE) -f Makefile.manual --directory=stats clean diff --git a/src/tests/stats/CMakeLists.txt b/src/tests/stats/CMakeLists.txt new file mode 100644 index 000000000..bd8fde387 --- /dev/null +++ b/src/tests/stats/CMakeLists.txt @@ -0,0 +1,5 @@ +ADDTEST(mean) + +if(f03rank) +ADDTEST(mean_f03) +endif() diff --git a/src/tests/stats/Makefile.manual b/src/tests/stats/Makefile.manual new file mode 100644 index 000000000..9faf154cb --- /dev/null +++ b/src/tests/stats/Makefile.manual @@ -0,0 +1,3 @@ +PROGS_SRC = test_mean.f90 + +include ../Makefile.manual.test.mk diff --git a/src/tests/stats/array3.dat b/src/tests/stats/array3.dat new file mode 100644 index 000000000..13b583f89 --- /dev/null +++ b/src/tests/stats/array3.dat @@ -0,0 +1,16 @@ +1.000000000000000021e-08 9.199998759392489944e+01 +1.024113254885563425e-08 9.199998731474968849e+01 +1.048233721895820948e-08 9.199998703587728244e+01 +1.072361403187881949e-08 9.199998675729767683e+01 +1.096496300919481796e-08 9.199998647900135040e+01 +1.120638417249036630e-08 9.199998620097916557e+01 +1.144787754335570897e-08 9.199998592322251056e+01 +1.168944314338753750e-08 9.199998564572304360e+01 +1.193108099418952317e-08 9.199998536847290609e+01 +1.217279111737088596e-08 9.199998509146449521e+01 +1.241457353454836993e-08 9.199998481469057765e+01 +1.265642826734443823e-08 9.199998453814424693e+01 +1.289835533738818635e-08 9.199998426181879552e+01 +1.314035476631514857e-08 9.199998398570787117e+01 +1.338242657576766519e-08 9.199998370980536322e+01 +1.362457078739434161e-08 9.199998343410533153e+01 diff --git a/src/tests/stats/test_mean.f90 b/src/tests/stats/test_mean.f90 new file mode 100644 index 000000000..d16071101 --- /dev/null +++ b/src/tests/stats/test_mean.f90 @@ -0,0 +1,75 @@ +program test_mean +use stdlib_experimental_error, only: assert +use stdlib_experimental_kinds, only: sp, dp, int32, int64 +use stdlib_experimental_io, only: loadtxt +use stdlib_experimental_stats, only: mean +implicit none + +real(sp), allocatable :: s(:, :) +real(dp), allocatable :: d(:, :) + +real(dp), allocatable :: d3(:, :, :) +real(dp), allocatable :: d4(:, :, :, :) + + +!sp +call loadtxt("array3.dat", s) + +call assert( mean(s) - sum(s)/real(size(s), sp) == 0.0_sp) +call assert( sum( abs( mean(s,1) - sum(s,1)/real(size(s,1), sp) )) == 0.0_sp) +call assert( sum( abs( mean(s,2) - sum(s,2)/real(size(s,2), sp) )) == 0.0_sp) + + +!dp +call loadtxt("array3.dat", d) + +call assert( mean(d) - sum(d)/real(size(d), dp) == 0.0_dp) +call assert( sum( abs( mean(d,1) - sum(d,1)/real(size(d,1), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d,2) - sum(d,2)/real(size(d,2), dp) )) == 0.0_dp) + + +!int32 +call loadtxt("array3.dat", d) + +call assert( mean(int(d, int32)) - sum(real(int(d, int32),dp))/real(size(d), dp) == 0.0_dp) +call assert( sum(abs( mean(int(d, int32),1) - sum(real(int(d, int32),dp),1)/real(size(d,1), dp) )) == 0.0_dp) +call assert( sum(abs( mean(int(d, int32),2) - sum(real(int(d, int32),dp),2)/real(size(d,2), dp) )) == 0.0_dp) + + +!int64 +call loadtxt("array3.dat", d) + +call assert( mean(int(d, int64)) - sum(real(int(d, int64),dp))/real(size(d), dp) == 0.0_dp) +call assert( sum(abs( mean(int(d, int64),1) - sum(real(int(d, int64),dp),1)/real(size(d,1), dp) )) == 0.0_dp) +call assert( sum(abs( mean(int(d, int64),2) - sum(real(int(d, int64),dp),2)/real(size(d,2), dp) )) == 0.0_dp) + + +!dp rank 3 +allocate(d3(size(d,1),size(d,2),3)) +d3(:,:,1)=d; +d3(:,:,2)=d*1.5_dp; +d3(:,:,3)=d*4._dp; + +call assert( mean(d3) - sum(d3)/real(size(d3), dp) == 0.0_dp) +call assert( sum( abs( mean(d3,1) - sum(d3,1)/real(size(d3,1), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d3,2) - sum(d3,2)/real(size(d3,2), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d3,3) - sum(d3,3)/real(size(d3,3), dp) )) == 0.0_dp) + + +!dp rank 4 +allocate(d4(size(d,1),size(d,2),3,9)) +d4 = 1. +d4(:,:,1,1)=d; +d4(:,:,2,1)=d*1.5_dp; +d4(:,:,3,1)=d*4._dp; +d4(:,:,3,9)=d*4._dp; + +call assert( mean(d4) - sum(d4)/real(size(d4), dp) == 0.0_dp) +call assert( sum( abs( mean(d4,1) - sum(d4,1)/real(size(d4,1), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d4,2) - sum(d4,2)/real(size(d4,2), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d4,3) - sum(d4,3)/real(size(d4,3), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d4,4) - sum(d4,4)/real(size(d4,4), dp) )) == 0.0_dp) + +contains + +end program diff --git a/src/tests/stats/test_mean_f03.f90 b/src/tests/stats/test_mean_f03.f90 new file mode 100644 index 000000000..fbb09b7ba --- /dev/null +++ b/src/tests/stats/test_mean_f03.f90 @@ -0,0 +1,38 @@ +program test_mean +use stdlib_experimental_error, only: assert +use stdlib_experimental_kinds, only: sp, dp, int32, int64 +use stdlib_experimental_io, only: loadtxt +use stdlib_experimental_stats, only: mean +implicit none + +real(dp), allocatable :: d(:, :) +real(dp), allocatable :: d8(:, :, :, :, :, :, :, :) + + +!dp +call loadtxt("array3.dat", d) + +call assert( mean(d) - sum(d)/real(size(d), dp) == 0.0_dp) +call assert( sum( abs( mean(d,1) - sum(d,1)/real(size(d,1), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d,2) - sum(d,2)/real(size(d,2), dp) )) == 0.0_dp) + +!dp rank 8 +allocate(d8(size(d,1), size(d,2), 3, 4, 5, 6, 7, 8)) +d8(:, :, 1, 4, 5 ,6 ,7 ,8)=d; +d8(:, :, 2, 4, 5 ,6 ,7 ,8)=d * 1.5_dp; +d8(:, :, 3, 4, 5 ,6 ,7 ,8)=d * 4._dp; + +call assert( mean(d8) - sum(d8)/real(size(d8), dp) == 0.0_dp) + +call assert( sum( abs( mean(d8,1) - sum(d8,1)/real(size(d8,1), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d8,2) - sum(d8,2)/real(size(d8,2), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d8,3) - sum(d8,3)/real(size(d8,3), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d8,4) - sum(d8,4)/real(size(d8,4), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d8,5) - sum(d8,5)/real(size(d8,5), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d8,6) - sum(d8,6)/real(size(d8,6), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d8,7) - sum(d8,7)/real(size(d8,7), dp) )) == 0.0_dp) +call assert( sum( abs( mean(d8,8) - sum(d8,8)/real(size(d8,8), dp) )) == 0.0_dp) + +contains + +end program