43 kahan_sum_s1, kahan_sum_d1, kahan_sum_c1, kahan_sum_z1, &
44 kahan_sum_s2, kahan_sum_d2, kahan_sum_c2, kahan_sum_z2, &
45 kahan_sum_s3, kahan_sum_d3, kahan_sum_c3, kahan_sum_z3, &
46 kahan_sum_s4, kahan_sum_d4, kahan_sum_c4, kahan_sum_z4, &
47 kahan_sum_s5, kahan_sum_d5, kahan_sum_c5, kahan_sum_z5, &
48 kahan_sum_s6, kahan_sum_d6, kahan_sum_c6, kahan_sum_z6, &
49 kahan_sum_s7, kahan_sum_d7, kahan_sum_c7, kahan_sum_z7
140 PURE FUNCTION kahan_dot_product_d1(array1, array2)
RESULT(ks)
141 REAL(kind=dp),
DIMENSION(:),
INTENT(in) :: array1, array2
145 REAL(kind=dp),
DIMENSION(dblksize) :: c, ks_local, t, y
147 t = dzero; y = dzero; c = dzero; ks_local = dzero
150 DO i = 1, mod(n, dblksize)
151 y(1) = array1(i)*array2(i) - c(1)
152 t(1) = ks_local(1) + y(1)
153 c(1) = (t(1) - ks_local(1)) - y(1)
156 DO i = mod(n, dblksize) + 1, n, dblksize
157 y = array1(i:i + (dblksize - 1))*array2(i:i + (dblksize - 1)) - c
159 c = (t - ks_local) - y
163 y(1) = ks_local(i) - (c(1) + c(i))
164 t(1) = ks_local(1) + y(1)
165 c(1) = (t(1) - ks_local(1)) - y(1)
286 PURE FUNCTION kahan_dot_product_s2(array1, array2)
RESULT(ks)
287 REAL(kind=sp),
DIMENSION(:, :),
INTENT(in) :: array1, array2
290 INTEGER :: i1, i2, n1, n2
291 REAL(kind=dp) :: c, t, y
293 ks = dzero; t = dzero; y = dzero; c = dzero
299 y = real(array1(i1, i2), dp)*real(array2(i1, i2), dp) - c
352 PURE FUNCTION kahan_dot_product_d2(array1, array2)
RESULT(ks)
353 REAL(kind=dp),
DIMENSION(:, :),
INTENT(in) :: array1, array2
356 INTEGER :: i1, i2, n1, n2
357 REAL(kind=dp) :: c, t, y
359 ks = dzero; t = dzero; y = dzero; c = dzero
365 y = array1(i1, i2)*array2(i1, i2) - c
457 PURE FUNCTION kahan_dot_product_z2(array1, array2)
RESULT(ks)
458 COMPLEX(KIND=dp),
DIMENSION(:, :),
INTENT(in) :: array1, array2
459 COMPLEX(KIND=dp) :: ks
461 COMPLEX(KIND=dp) :: c, t, y
462 INTEGER :: i1, i2, n1, n2
464 ks = zzero; t = zzero; y = zzero; c = zzero
470 y = array1(i1, i2)*array2(i1, i2) - c
484 PURE FUNCTION kahan_sum_s3(array, mask)
RESULT(ks)
485 REAL(kind=sp),
DIMENSION(:, :, :),
INTENT(IN) :: array
486 LOGICAL,
DIMENSION(:, :, :),
INTENT(IN),
OPTIONAL :: mask
489 INTEGER :: i1, i2, i3
490 REAL(kind=sp) :: c, t, y
492 ks = szero; t = szero; y = szero; c = szero
494 IF (
PRESENT(mask))
THEN
495 DO i3 = 1,
SIZE(array, 3)
496 DO i2 = 1,
SIZE(array, 2)
497 DO i1 = 1,
SIZE(array, 1)
498 IF (mask(i1, i2, i3))
THEN
499 y = array(i1, i2, i3) - c
508 DO i3 = 1,
SIZE(array, 3)
509 DO i2 = 1,
SIZE(array, 2)
510 DO i1 = 1,
SIZE(array, 1)
511 y = array(i1, i2, i3) - c
527 PURE FUNCTION kahan_sum_d3(array, mask)
RESULT(ks)
528 REAL(kind=dp),
DIMENSION(:, :, :),
INTENT(IN) :: array
529 LOGICAL,
DIMENSION(:, :, :),
INTENT(IN),
OPTIONAL :: mask
532 INTEGER :: i1, i2, i3
533 REAL(kind=dp) :: c, t, y
535 ks = dzero; t = dzero; y = dzero; c = dzero
537 IF (
PRESENT(mask))
THEN
538 DO i3 = 1,
SIZE(array, 3)
539 DO i2 = 1,
SIZE(array, 2)
540 DO i1 = 1,
SIZE(array, 1)
541 IF (mask(i1, i2, i3))
THEN
542 y = array(i1, i2, i3) - c
551 DO i3 = 1,
SIZE(array, 3)
552 DO i2 = 1,
SIZE(array, 2)
553 DO i1 = 1,
SIZE(array, 1)
554 y = array(i1, i2, i3) - c
570 PURE FUNCTION kahan_dot_product_d3(array1, array2)
RESULT(ks)
571 REAL(kind=dp),
DIMENSION(:, :, :),
INTENT(in) :: array1, array2
574 INTEGER :: i1, i2, i3, n1, n2, n3
575 REAL(kind=dp) :: c, t, y
577 ks = dzero; t = dzero; y = dzero; c = dzero
585 y = array1(i1, i2, i3)*array2(i1, i2, i3) - c
604 PURE FUNCTION kahan_dot_product_masked_d3(array1, array2, mask, th)
RESULT(ks)
605 REAL(kind=dp),
DIMENSION(:, :, :),
INTENT(IN), &
606 POINTER :: array1, array2, mask
607 REAL(kind=dp),
INTENT(in) :: th
610 INTEGER :: i1, i2, i3
611 REAL(kind=dp) :: c, t, y
613 ks = dzero; t = dzero; y = dzero; c = dzero
614 DO i3 = lbound(mask, 3), ubound(mask, 3)
615 DO i2 = lbound(mask, 2), ubound(mask, 2)
616 DO i1 = lbound(mask, 1), ubound(mask, 1)
617 IF (mask(i1, i2, i3) .GT. th)
THEN
618 y = array1(i1, i2, i3)*array2(i1, i2, i3) - c
634 PURE FUNCTION kahan_sum_c3(array, mask)
RESULT(ks)
635 COMPLEX(KIND=sp),
DIMENSION(:, :, :),
INTENT(IN) :: array
636 LOGICAL,
DIMENSION(:, :, :),
INTENT(IN),
OPTIONAL :: mask
637 COMPLEX(KIND=sp) :: ks
639 COMPLEX(KIND=sp) :: c, t, y
640 INTEGER :: i1, i2, i3
642 ks = czero; t = czero; y = czero; c = czero
644 IF (
PRESENT(mask))
THEN
645 DO i3 = 1,
SIZE(array, 3)
646 DO i2 = 1,
SIZE(array, 2)
647 DO i1 = 1,
SIZE(array, 1)
648 IF (mask(i1, i2, i3))
THEN
649 y = array(i1, i2, i3) - c
658 DO i3 = 1,
SIZE(array, 3)
659 DO i2 = 1,
SIZE(array, 2)
660 DO i1 = 1,
SIZE(array, 1)
661 y = array(i1, i2, i3) - c
677 PURE FUNCTION kahan_sum_z3(array, mask)
RESULT(ks)
678 COMPLEX(KIND=dp),
DIMENSION(:, :, :),
INTENT(IN) :: array
679 LOGICAL,
DIMENSION(:, :, :),
INTENT(IN),
OPTIONAL :: mask
680 COMPLEX(KIND=dp) :: ks
682 COMPLEX(KIND=dp) :: c, t, y
683 INTEGER :: i1, i2, i3
685 ks = zzero; t = zzero; y = zzero; c = zzero
687 IF (
PRESENT(mask))
THEN
688 DO i3 = 1,
SIZE(array, 3)
689 DO i2 = 1,
SIZE(array, 2)
690 DO i1 = 1,
SIZE(array, 1)
691 IF (mask(i1, i2, i3))
THEN
692 y = array(i1, i2, i3) - c
701 DO i3 = 1,
SIZE(array, 3)
702 DO i2 = 1,
SIZE(array, 2)
703 DO i1 = 1,
SIZE(array, 1)
704 y = array(i1, i2, i3) - c
720 PURE FUNCTION kahan_sum_s4(array, mask)
RESULT(ks)
721 REAL(kind=sp),
DIMENSION(:, :, :, :),
INTENT(IN) :: array
722 LOGICAL,
DIMENSION(:, :, :, :),
INTENT(IN), &
726 INTEGER :: i1, i2, i3, i4
727 REAL(kind=sp) :: c, t, y
729 ks = szero; t = szero; y = szero; c = szero
731 IF (
PRESENT(mask))
THEN
732 DO i4 = 1,
SIZE(array, 4)
733 DO i3 = 1,
SIZE(array, 3)
734 DO i2 = 1,
SIZE(array, 2)
735 DO i1 = 1,
SIZE(array, 1)
736 IF (mask(i1, i2, i3, i4))
THEN
737 y = array(i1, i2, i3, i4) - c
747 DO i4 = 1,
SIZE(array, 4)
748 DO i3 = 1,
SIZE(array, 3)
749 DO i2 = 1,
SIZE(array, 2)
750 DO i1 = 1,
SIZE(array, 1)
751 y = array(i1, i2, i3, i4) - c
768 PURE FUNCTION kahan_sum_d4(array, mask)
RESULT(ks)
769 REAL(kind=dp),
DIMENSION(:, :, :, :),
INTENT(IN) :: array
770 LOGICAL,
DIMENSION(:, :, :, :),
INTENT(IN), &
774 INTEGER :: i1, i2, i3, i4
775 REAL(kind=dp) :: c, t, y
777 ks = dzero; t = dzero; y = dzero; c = dzero
779 IF (
PRESENT(mask))
THEN
780 DO i4 = 1,
SIZE(array, 4)
781 DO i3 = 1,
SIZE(array, 3)
782 DO i2 = 1,
SIZE(array, 2)
783 DO i1 = 1,
SIZE(array, 1)
784 IF (mask(i1, i2, i3, i4))
THEN
785 y = array(i1, i2, i3, i4) - c
795 DO i4 = 1,
SIZE(array, 4)
796 DO i3 = 1,
SIZE(array, 3)
797 DO i2 = 1,
SIZE(array, 2)
798 DO i1 = 1,
SIZE(array, 1)
799 y = array(i1, i2, i3, i4) - c
816 PURE FUNCTION kahan_sum_c4(array, mask)
RESULT(ks)
817 COMPLEX(KIND=sp),
DIMENSION(:, :, :, :), &
819 LOGICAL,
DIMENSION(:, :, :, :),
INTENT(IN), &
821 COMPLEX(KIND=sp) :: ks
823 COMPLEX(KIND=sp) :: c, t, y
824 INTEGER :: i1, i2, i3, i4
826 ks = czero; t = czero; y = czero; c = czero
828 IF (
PRESENT(mask))
THEN
829 DO i4 = 1,
SIZE(array, 4)
830 DO i3 = 1,
SIZE(array, 3)
831 DO i2 = 1,
SIZE(array, 2)
832 DO i1 = 1,
SIZE(array, 1)
833 IF (mask(i1, i2, i3, i4))
THEN
834 y = array(i1, i2, i3, i4) - c
844 DO i4 = 1,
SIZE(array, 4)
845 DO i3 = 1,
SIZE(array, 3)
846 DO i2 = 1,
SIZE(array, 2)
847 DO i1 = 1,
SIZE(array, 1)
848 y = array(i1, i2, i3, i4) - c
865 PURE FUNCTION kahan_sum_z4(array, mask)
RESULT(ks)
866 COMPLEX(KIND=dp),
DIMENSION(:, :, :, :), &
868 LOGICAL,
DIMENSION(:, :, :, :),
INTENT(IN), &
870 COMPLEX(KIND=dp) :: ks
872 COMPLEX(KIND=dp) :: c, t, y
873 INTEGER :: i1, i2, i3, i4
875 ks = zzero; t = zzero; y = zzero; c = zzero
877 IF (
PRESENT(mask))
THEN
878 DO i4 = 1,
SIZE(array, 4)
879 DO i3 = 1,
SIZE(array, 3)
880 DO i2 = 1,
SIZE(array, 2)
881 DO i1 = 1,
SIZE(array, 1)
882 IF (mask(i1, i2, i3, i4))
THEN
883 y = array(i1, i2, i3, i4) - c
893 DO i4 = 1,
SIZE(array, 4)
894 DO i3 = 1,
SIZE(array, 3)
895 DO i2 = 1,
SIZE(array, 2)
896 DO i1 = 1,
SIZE(array, 1)
897 y = array(i1, i2, i3, i4) - c
914 PURE FUNCTION kahan_sum_s5(array, mask)
RESULT(ks)
915 REAL(kind=sp),
DIMENSION(:, :, :, :, :), &
917 LOGICAL,
DIMENSION(:, :, :, :, :),
INTENT(IN), &
921 INTEGER :: i1, i2, i3, i4, i5
922 REAL(kind=sp) :: c, t, y
924 ks = szero; t = szero; y = szero; c = szero
926 IF (
PRESENT(mask))
THEN
927 DO i5 = 1,
SIZE(array, 5)
928 DO i4 = 1,
SIZE(array, 4)
929 DO i3 = 1,
SIZE(array, 3)
930 DO i2 = 1,
SIZE(array, 2)
931 DO i1 = 1,
SIZE(array, 1)
932 IF (mask(i1, i2, i3, i4, i5))
THEN
933 y = array(i1, i2, i3, i4, i5) - c
944 DO i5 = 1,
SIZE(array, 5)
945 DO i4 = 1,
SIZE(array, 4)
946 DO i3 = 1,
SIZE(array, 3)
947 DO i2 = 1,
SIZE(array, 2)
948 DO i1 = 1,
SIZE(array, 1)
949 y = array(i1, i2, i3, i4, i5) - c
967 PURE FUNCTION kahan_sum_d5(array, mask)
RESULT(ks)
968 REAL(kind=dp),
DIMENSION(:, :, :, :, :), &
970 LOGICAL,
DIMENSION(:, :, :, :, :),
INTENT(IN), &
974 INTEGER :: i1, i2, i3, i4, i5
975 REAL(kind=dp) :: c, t, y
977 ks = dzero; t = dzero; y = dzero; c = dzero
979 IF (
PRESENT(mask))
THEN
980 DO i5 = 1,
SIZE(array, 5)
981 DO i4 = 1,
SIZE(array, 4)
982 DO i3 = 1,
SIZE(array, 3)
983 DO i2 = 1,
SIZE(array, 2)
984 DO i1 = 1,
SIZE(array, 1)
985 IF (mask(i1, i2, i3, i4, i5))
THEN
986 y = array(i1, i2, i3, i4, i5) - c
997 DO i5 = 1,
SIZE(array, 5)
998 DO i4 = 1,
SIZE(array, 4)
999 DO i3 = 1,
SIZE(array, 3)
1000 DO i2 = 1,
SIZE(array, 2)
1001 DO i1 = 1,
SIZE(array, 1)
1002 y = array(i1, i2, i3, i4, i5) - c
1020 PURE FUNCTION kahan_sum_c5(array, mask)
RESULT(ks)
1021 COMPLEX(KIND=sp),
DIMENSION(:, :, :, :, :), &
1023 LOGICAL,
DIMENSION(:, :, :, :, :),
INTENT(IN), &
1025 COMPLEX(KIND=sp) :: ks
1027 COMPLEX(KIND=sp) :: c, t, y
1028 INTEGER :: i1, i2, i3, i4, i5
1030 ks = czero; t = czero; y = czero; c = czero
1032 IF (
PRESENT(mask))
THEN
1033 DO i5 = 1,
SIZE(array, 5)
1034 DO i4 = 1,
SIZE(array, 4)
1035 DO i3 = 1,
SIZE(array, 3)
1036 DO i2 = 1,
SIZE(array, 2)
1037 DO i1 = 1,
SIZE(array, 1)
1038 IF (mask(i1, i2, i3, i4, i5))
THEN
1039 y = array(i1, i2, i3, i4, i5) - c
1050 DO i5 = 1,
SIZE(array, 5)
1051 DO i4 = 1,
SIZE(array, 4)
1052 DO i3 = 1,
SIZE(array, 3)
1053 DO i2 = 1,
SIZE(array, 2)
1054 DO i1 = 1,
SIZE(array, 1)
1055 y = array(i1, i2, i3, i4, i5) - c
1073 PURE FUNCTION kahan_sum_z5(array, mask)
RESULT(ks)
1074 COMPLEX(KIND=dp),
DIMENSION(:, :, :, :, :), &
1076 LOGICAL,
DIMENSION(:, :, :, :, :),
INTENT(IN), &
1078 COMPLEX(KIND=dp) :: ks
1080 COMPLEX(KIND=dp) :: c, t, y
1081 INTEGER :: i1, i2, i3, i4, i5
1083 ks = zzero; t = zzero; y = zzero; c = zzero
1085 IF (
PRESENT(mask))
THEN
1086 DO i5 = 1,
SIZE(array, 5)
1087 DO i4 = 1,
SIZE(array, 4)
1088 DO i3 = 1,
SIZE(array, 3)
1089 DO i2 = 1,
SIZE(array, 2)
1090 DO i1 = 1,
SIZE(array, 1)
1091 IF (mask(i1, i2, i3, i4, i5))
THEN
1092 y = array(i1, i2, i3, i4, i5) - c
1103 DO i5 = 1,
SIZE(array, 5)
1104 DO i4 = 1,
SIZE(array, 4)
1105 DO i3 = 1,
SIZE(array, 3)
1106 DO i2 = 1,
SIZE(array, 2)
1107 DO i1 = 1,
SIZE(array, 1)
1108 y = array(i1, i2, i3, i4, i5) - c
1126 PURE FUNCTION kahan_sum_s6(array, mask)
RESULT(ks)
1127 REAL(kind=sp),
DIMENSION(:, :, :, :, :, :), &
1129 LOGICAL,
DIMENSION(:, :, :, :, :, :),
INTENT(IN), &
1133 INTEGER :: i1, i2, i3, i4, i5, i6
1134 REAL(kind=sp) :: c, t, y
1136 ks = szero; t = szero; y = szero; c = szero
1138 IF (
PRESENT(mask))
THEN
1139 DO i6 = 1,
SIZE(array, 6)
1140 DO i5 = 1,
SIZE(array, 5)
1141 DO i4 = 1,
SIZE(array, 4)
1142 DO i3 = 1,
SIZE(array, 3)
1143 DO i2 = 1,
SIZE(array, 2)
1144 DO i1 = 1,
SIZE(array, 1)
1145 IF (mask(i1, i2, i3, i4, i5, i6))
THEN
1146 y = array(i1, i2, i3, i4, i5, i6) - c
1158 DO i6 = 1,
SIZE(array, 6)
1159 DO i5 = 1,
SIZE(array, 5)
1160 DO i4 = 1,
SIZE(array, 4)
1161 DO i3 = 1,
SIZE(array, 3)
1162 DO i2 = 1,
SIZE(array, 2)
1163 DO i1 = 1,
SIZE(array, 1)
1164 y = array(i1, i2, i3, i4, i5, i6) - c
1183 PURE FUNCTION kahan_sum_d6(array, mask)
RESULT(ks)
1184 REAL(kind=dp),
DIMENSION(:, :, :, :, :, :), &
1186 LOGICAL,
DIMENSION(:, :, :, :, :, :),
INTENT(IN), &
1190 INTEGER :: i1, i2, i3, i4, i5, i6
1191 REAL(kind=dp) :: c, t, y
1193 ks = dzero; t = dzero; y = dzero; c = dzero
1195 IF (
PRESENT(mask))
THEN
1196 DO i6 = 1,
SIZE(array, 6)
1197 DO i5 = 1,
SIZE(array, 5)
1198 DO i4 = 1,
SIZE(array, 4)
1199 DO i3 = 1,
SIZE(array, 3)
1200 DO i2 = 1,
SIZE(array, 2)
1201 DO i1 = 1,
SIZE(array, 1)
1202 IF (mask(i1, i2, i3, i4, i5, i6))
THEN
1203 y = array(i1, i2, i3, i4, i5, i6) - c
1215 DO i6 = 1,
SIZE(array, 6)
1216 DO i5 = 1,
SIZE(array, 5)
1217 DO i4 = 1,
SIZE(array, 4)
1218 DO i3 = 1,
SIZE(array, 3)
1219 DO i2 = 1,
SIZE(array, 2)
1220 DO i1 = 1,
SIZE(array, 1)
1221 y = array(i1, i2, i3, i4, i5, i6) - c
1240 PURE FUNCTION kahan_sum_c6(array, mask)
RESULT(ks)
1241 COMPLEX(KIND=sp),
DIMENSION(:, :, :, :, :, :), &
1243 LOGICAL,
DIMENSION(:, :, :, :, :, :),
INTENT(IN), &
1245 COMPLEX(KIND=sp) :: ks
1247 COMPLEX(KIND=sp) :: c, t, y
1248 INTEGER :: i1, i2, i3, i4, i5, i6
1250 ks = czero; t = czero; y = czero; c = czero
1252 IF (
PRESENT(mask))
THEN
1253 DO i6 = 1,
SIZE(array, 6)
1254 DO i5 = 1,
SIZE(array, 5)
1255 DO i4 = 1,
SIZE(array, 4)
1256 DO i3 = 1,
SIZE(array, 3)
1257 DO i2 = 1,
SIZE(array, 2)
1258 DO i1 = 1,
SIZE(array, 1)
1259 IF (mask(i1, i2, i3, i4, i5, i6))
THEN
1260 y = array(i1, i2, i3, i4, i5, i6) - c
1272 DO i6 = 1,
SIZE(array, 6)
1273 DO i5 = 1,
SIZE(array, 5)
1274 DO i4 = 1,
SIZE(array, 4)
1275 DO i3 = 1,
SIZE(array, 3)
1276 DO i2 = 1,
SIZE(array, 2)
1277 DO i1 = 1,
SIZE(array, 1)
1278 y = array(i1, i2, i3, i4, i5, i6) - c
1297 PURE FUNCTION kahan_sum_z6(array, mask)
RESULT(ks)
1298 COMPLEX(KIND=dp),
DIMENSION(:, :, :, :, :, :), &
1300 LOGICAL,
DIMENSION(:, :, :, :, :, :),
INTENT(IN), &
1302 COMPLEX(KIND=dp) :: ks
1304 COMPLEX(KIND=dp) :: c, t, y
1305 INTEGER :: i1, i2, i3, i4, i5, i6
1307 ks = zzero; t = zzero; y = zzero; c = zzero
1309 IF (
PRESENT(mask))
THEN
1310 DO i6 = 1,
SIZE(array, 6)
1311 DO i5 = 1,
SIZE(array, 5)
1312 DO i4 = 1,
SIZE(array, 4)
1313 DO i3 = 1,
SIZE(array, 3)
1314 DO i2 = 1,
SIZE(array, 2)
1315 DO i1 = 1,
SIZE(array, 1)
1316 IF (mask(i1, i2, i3, i4, i5, i6))
THEN
1317 y = array(i1, i2, i3, i4, i5, i6) - c
1329 DO i6 = 1,
SIZE(array, 6)
1330 DO i5 = 1,
SIZE(array, 5)
1331 DO i4 = 1,
SIZE(array, 4)
1332 DO i3 = 1,
SIZE(array, 3)
1333 DO i2 = 1,
SIZE(array, 2)
1334 DO i1 = 1,
SIZE(array, 1)
1335 y = array(i1, i2, i3, i4, i5, i6) - c
1354 PURE FUNCTION kahan_sum_s7(array, mask)
RESULT(ks)
1355 REAL(kind=sp),
DIMENSION(:, :, :, :, :, :, :), &
1357 LOGICAL,
DIMENSION(:, :, :, :, :, :, :), &
1358 INTENT(IN),
OPTIONAL :: mask
1361 INTEGER :: i1, i2, i3, i4, i5, i6, i7
1362 REAL(kind=sp) :: c, t, y
1364 ks = szero; t = szero; y = szero; c = szero
1366 IF (
PRESENT(mask))
THEN
1367 DO i7 = 1,
SIZE(array, 7)
1368 DO i6 = 1,
SIZE(array, 6)
1369 DO i5 = 1,
SIZE(array, 5)
1370 DO i4 = 1,
SIZE(array, 4)
1371 DO i3 = 1,
SIZE(array, 3)
1372 DO i2 = 1,
SIZE(array, 2)
1373 DO i1 = 1,
SIZE(array, 1)
1374 IF (mask(i1, i2, i3, i4, i5, i6, i7))
THEN
1375 y = array(i1, i2, i3, i4, i5, i6, i7) - c
1388 DO i7 = 1,
SIZE(array, 7)
1389 DO i6 = 1,
SIZE(array, 6)
1390 DO i5 = 1,
SIZE(array, 5)
1391 DO i4 = 1,
SIZE(array, 4)
1392 DO i3 = 1,
SIZE(array, 3)
1393 DO i2 = 1,
SIZE(array, 2)
1394 DO i1 = 1,
SIZE(array, 1)
1395 y = array(i1, i2, i3, i4, i5, i6, i7) - c
1415 PURE FUNCTION kahan_sum_d7(array, mask)
RESULT(ks)
1416 REAL(kind=dp),
DIMENSION(:, :, :, :, :, :, :), &
1418 LOGICAL,
DIMENSION(:, :, :, :, :, :, :), &
1419 INTENT(IN),
OPTIONAL :: mask
1422 INTEGER :: i1, i2, i3, i4, i5, i6, i7
1423 REAL(kind=dp) :: c, t, y
1425 ks = dzero; t = dzero; y = dzero; c = dzero
1427 IF (
PRESENT(mask))
THEN
1428 DO i7 = 1,
SIZE(array, 7)
1429 DO i6 = 1,
SIZE(array, 6)
1430 DO i5 = 1,
SIZE(array, 5)
1431 DO i4 = 1,
SIZE(array, 4)
1432 DO i3 = 1,
SIZE(array, 3)
1433 DO i2 = 1,
SIZE(array, 2)
1434 DO i1 = 1,
SIZE(array, 1)
1435 IF (mask(i1, i2, i3, i4, i5, i6, i7))
THEN
1436 y = array(i1, i2, i3, i4, i5, i6, i7) - c
1449 DO i7 = 1,
SIZE(array, 7)
1450 DO i6 = 1,
SIZE(array, 6)
1451 DO i5 = 1,
SIZE(array, 5)
1452 DO i4 = 1,
SIZE(array, 4)
1453 DO i3 = 1,
SIZE(array, 3)
1454 DO i2 = 1,
SIZE(array, 2)
1455 DO i1 = 1,
SIZE(array, 1)
1456 y = array(i1, i2, i3, i4, i5, i6, i7) - c
1476 PURE FUNCTION kahan_sum_c7(array, mask)
RESULT(ks)
1477 COMPLEX(KIND=sp),
DIMENSION(:, :, :, :, :, :, :), &
1479 LOGICAL,
DIMENSION(:, :, :, :, :, :, :), &
1480 INTENT(IN),
OPTIONAL :: mask
1481 COMPLEX(KIND=sp) :: ks
1483 COMPLEX(KIND=sp) :: c, t, y
1484 INTEGER :: i1, i2, i3, i4, i5, i6, i7
1486 ks = czero; t = czero; y = czero; c = czero
1488 IF (
PRESENT(mask))
THEN
1489 DO i7 = 1,
SIZE(array, 7)
1490 DO i6 = 1,
SIZE(array, 6)
1491 DO i5 = 1,
SIZE(array, 5)
1492 DO i4 = 1,
SIZE(array, 4)
1493 DO i3 = 1,
SIZE(array, 3)
1494 DO i2 = 1,
SIZE(array, 2)
1495 DO i1 = 1,
SIZE(array, 1)
1496 IF (mask(i1, i2, i3, i4, i5, i6, i7))
THEN
1497 y = array(i1, i2, i3, i4, i5, i6, i7) - c
1510 DO i7 = 1,
SIZE(array, 7)
1511 DO i6 = 1,
SIZE(array, 6)
1512 DO i5 = 1,
SIZE(array, 5)
1513 DO i4 = 1,
SIZE(array, 4)
1514 DO i3 = 1,
SIZE(array, 3)
1515 DO i2 = 1,
SIZE(array, 2)
1516 DO i1 = 1,
SIZE(array, 1)
1517 y = array(i1, i2, i3, i4, i5, i6, i7) - c
1537 PURE FUNCTION kahan_sum_z7(array, mask)
RESULT(ks)
1538 COMPLEX(KIND=dp),
DIMENSION(:, :, :, :, :, :, :), &
1540 LOGICAL,
DIMENSION(:, :, :, :, :, :, :), &
1541 INTENT(IN),
OPTIONAL :: mask
1542 COMPLEX(KIND=dp) :: ks
1544 COMPLEX(KIND=dp) :: c, t, y
1545 INTEGER :: i1, i2, i3, i4, i5, i6, i7
1547 ks = zzero; t = zzero; y = zzero; c = zzero
1549 IF (
PRESENT(mask))
THEN
1550 DO i7 = 1,
SIZE(array, 7)
1551 DO i6 = 1,
SIZE(array, 6)
1552 DO i5 = 1,
SIZE(array, 5)
1553 DO i4 = 1,
SIZE(array, 4)
1554 DO i3 = 1,
SIZE(array, 3)
1555 DO i2 = 1,
SIZE(array, 2)
1556 DO i1 = 1,
SIZE(array, 1)
1557 IF (mask(i1, i2, i3, i4, i5, i6, i7))
THEN
1558 y = array(i1, i2, i3, i4, i5, i6, i7) - c
1571 DO i7 = 1,
SIZE(array, 7)
1572 DO i6 = 1,
SIZE(array, 6)
1573 DO i5 = 1,
SIZE(array, 5)
1574 DO i4 = 1,
SIZE(array, 4)
1575 DO i3 = 1,
SIZE(array, 3)
1576 DO i2 = 1,
SIZE(array, 2)
1577 DO i1 = 1,
SIZE(array, 1)
1578 y = array(i1, i2, i3, i4, i5, i6, i7) - c
1599 FUNCTION kahan_blocked_dot_product_d1(array1, array2, blksize)
RESULT(ks)
1600 REAL(kind=dp),
DIMENSION(:),
INTENT(in) :: array1, array2
1601 INTEGER,
INTENT(IN),
OPTIONAL :: blksize
1604 INTEGER :: my_blksize
1605 REAL(kind=dp) :: ddot
1608 IF (
PRESENT(blksize)) my_blksize = blksize
1610 IF (my_blksize <= 1)
THEN
1613 ELSE IF (my_blksize >=
SIZE(array1))
THEN
1615 ks = ddot(
SIZE(array1), array1(1), 1, array2(1), 1)
1619 INTEGER :: i, n, stripesize
1620 REAL(kind=dp) :: c, dotproduct, t, y
1621 t = dzero; y = dzero; c = dzero
1624 DO i = 1, n, my_blksize
1626 stripesize = min(my_blksize, n - i + 1)
1628 dotproduct = ddot(stripesize, array1(i), 1, array2(i), 1)