@@ -66,24 +66,32 @@ contains
66
66
enddo
67
67
68
68
! Iteratively compute the Pade approximation.
69
- p = .true.
70
- do k = 2, order_
71
- c = c * (order_ - k + 1) / (k * (2*order_ - k + 1))
72
- X = matmul(A2, X)
73
- do concurrent(i=1:n, j=1:n)
74
- E(i, j) = E(i, j) + c*X(i, j) ! E = E + c*X
75
- enddo
76
- if (p) then
77
- do concurrent(i=1:n, j=1:n)
78
- Q(i, j) = Q(i, j) + c*X(i, j) ! Q = Q + c*X
79
- enddo
80
- else
69
+ block
70
+ ${rt}$ :: X_tmp(n, n)
71
+ p = .true.
72
+ do k = 2, order_
73
+ c = c * (order_ - k + 1) / (k * (2*order_ - k + 1))
74
+ X_tmp = X
75
+ #:if rt.startswith('complex')
76
+ call gemm("N", "N", n, n, n, one_c${rk}$, A2, n, X_tmp, n, zero_c${rk}$, X, n)
77
+ #:else
78
+ call gemm("N", "N", n, n, n, one_${rk}$, A2, n, X_tmp, n, zero_${rk}$, X, n)
79
+ #:endif
81
80
do concurrent(i=1:n, j=1:n)
82
- Q (i, j) = Q (i, j) - c*X(i, j) ! Q = Q - c*X
81
+ E (i, j) = E (i, j) + c*X(i, j) ! E = E + c*X
83
82
enddo
84
- endif
85
- p = .not. p
86
- enddo
83
+ if (p) then
84
+ do concurrent(i=1:n, j=1:n)
85
+ Q(i, j) = Q(i, j) + c*X(i, j) ! Q = Q + c*X
86
+ enddo
87
+ else
88
+ do concurrent(i=1:n, j=1:n)
89
+ Q(i, j) = Q(i, j) - c*X(i, j) ! Q = Q - c*X
90
+ enddo
91
+ endif
92
+ p = .not. p
93
+ enddo
94
+ end block
87
95
88
96
block
89
97
integer(ilp) :: ipiv(n), info
0 commit comments