@@ -11,19 +11,40 @@ module stdlib_experimental_linalg
11
11
public :: trace
12
12
13
13
interface diag
14
+ !
14
15
! Vector to matrix
16
+ !
15
17
#:for k1, t1 in RCI_KINDS_TYPES
16
- module procedure diag_${t1[0]}$${k1}$
18
+ module function diag_${t1[0]}$${k1}$(v) result(res)
19
+ ${t1}$, intent(in) :: v(:)
20
+ ${t1}$ :: res(size(v),size(v))
21
+ end function diag_${t1[0]}$${k1}$
17
22
#:endfor
23
+
18
24
#:for k1, t1 in RCI_KINDS_TYPES
19
- module procedure diag_${t1[0]}$${k1}$_k
25
+ module function diag_${t1[0]}$${k1}$_k(v,k) result(res)
26
+ ${t1}$, intent(in) :: v(:)
27
+ integer, intent(in) :: k
28
+ ${t1}$ :: res(size(v)+abs(k),size(v)+abs(k))
29
+ end function diag_${t1[0]}$${k1}$_k
20
30
#:endfor
31
+
32
+ !
21
33
! Matrix to vector
34
+ !
22
35
#:for k1, t1 in RCI_KINDS_TYPES
23
- module procedure diag_${t1[0]}$${k1}$_mat
36
+ module function diag_${t1[0]}$${k1}$_mat(A) result(res)
37
+ ${t1}$, intent(in) :: A(:,:)
38
+ ${t1}$ :: res(minval(shape(A)))
39
+ end function diag_${t1[0]}$${k1}$_mat
24
40
#:endfor
41
+
25
42
#:for k1, t1 in RCI_KINDS_TYPES
26
- module procedure diag_${t1[0]}$${k1}$_mat_k
43
+ module function diag_${t1[0]}$${k1}$_mat_k(A,k) result(res)
44
+ ${t1}$, intent(in) :: A(:,:)
45
+ integer, intent(in) :: k
46
+ ${t1}$ :: res(minval(shape(A))-abs(k))
47
+ end function diag_${t1[0]}$${k1}$_mat_k
27
48
#:endfor
28
49
end interface
29
50
@@ -47,76 +68,6 @@ contains
47
68
end do
48
69
end function eye
49
70
50
- #:for k1, t1 in RCI_KINDS_TYPES
51
- function diag_${t1[0]}$${k1}$(v) result(res)
52
- ${t1}$, intent(in) :: v(:)
53
- ${t1}$ :: res(size(v),size(v))
54
- integer :: i
55
- res = 0
56
- do i = 1, size(v)
57
- res(i,i) = v(i)
58
- end do
59
- end function diag_${t1[0]}$${k1}$
60
- #:endfor
61
-
62
-
63
- #:for k1, t1 in RCI_KINDS_TYPES
64
- function diag_${t1[0]}$${k1}$_k(v,k) result(res)
65
- ${t1}$, intent(in) :: v(:)
66
- integer, intent(in) :: k
67
- ${t1}$ :: res(size(v)+abs(k),size(v)+abs(k))
68
- integer :: i, sz
69
- sz = size(v)
70
- res = 0
71
- if (k > 0) then
72
- do i = 1, sz
73
- res(i,k+i) = v(i)
74
- end do
75
- else if (k < 0) then
76
- do i = 1, sz
77
- res(i+abs(k),i) = v(i)
78
- end do
79
- else
80
- do i = 1, sz
81
- res(i,i) = v(i)
82
- end do
83
- end if
84
- end function diag_${t1[0]}$${k1}$_k
85
- #:endfor
86
-
87
- #:for k1, t1 in RCI_KINDS_TYPES
88
- function diag_${t1[0]}$${k1}$_mat(A) result(res)
89
- ${t1}$, intent(in) :: A(:,:)
90
- ${t1}$ :: res(minval(shape(A)))
91
- integer :: i
92
- do i = 1, minval(shape(A))
93
- res(i) = A(i,i)
94
- end do
95
- end function diag_${t1[0]}$${k1}$_mat
96
- #:endfor
97
-
98
- #:for k1, t1 in RCI_KINDS_TYPES
99
- function diag_${t1[0]}$${k1}$_mat_k(A,k) result(res)
100
- ${t1}$, intent(in) :: A(:,:)
101
- integer, intent(in) :: k
102
- ${t1}$ :: res(minval(shape(A))-abs(k))
103
- integer :: i, sz
104
- sz = minval(shape(A))-abs(k)
105
- if (k > 0) then
106
- do i = 1, sz
107
- res(i) = A(i,k+i)
108
- end do
109
- else if (k < 0) then
110
- do i = 1, sz
111
- res(i) = A(i+abs(k),i)
112
- end do
113
- else
114
- do i = 1, sz
115
- res(i) = A(i,i)
116
- end do
117
- end if
118
- end function diag_${t1[0]}$${k1}$_mat_k
119
- #:endfor
120
71
121
72
#:for k1, t1 in RCI_KINDS_TYPES
122
73
function trace_${t1[0]}$${k1}$(A) result(res)
0 commit comments