11#:include "common.fypp"
22#:set RC_KINDS_TYPES = REAL_KINDS_TYPES + CMPLX_KINDS_TYPES
3- module stdlib_linalg_svd
3+ submodule(stdlib_linalg) stdlib_linalg_svd
44!! Singular-Value Decomposition
55 use stdlib_linalg_constants
66 use stdlib_linalg_lapack, only: gesdd
@@ -9,30 +9,8 @@ module stdlib_linalg_svd
99 implicit none(type,external)
1010
1111 character(*), parameter :: this = 'svd'
12-
13- !> Singular value decomposition
14- public :: svd
15- !> Singular values
16- public :: svdvals
17-
18- ! Numpy: svd(a, full_matrices=True, compute_uv=True, hermitian=False)
19- ! Scipy: svd(a, full_matrices=True, compute_uv=True, overwrite_a=False, check_finite=True, lapack_driver='gesdd')
20-
21- interface svd
22- #:for rk,rt,ri in RC_KINDS_TYPES
23- #:if rk!="xdp"
24- module procedure stdlib_linalg_svd_${ri}$
25- #:endif
26- #:endfor
27- end interface svd
28-
29- interface svdvals
30- #:for rk,rt,ri in RC_KINDS_TYPES
31- #:if rk!="xdp"
32- module procedure stdlib_linalg_svdvals_${ri}$
33- #:endif
34- #:endfor
35- end interface svdvals
12+
13+ !> List of internal GESDD tasks:
3614
3715 !> Return full matrices U, V^T to separate storage
3816 character, parameter :: GESDD_FULL_MATRICES = 'A'
@@ -46,9 +24,6 @@ module stdlib_linalg_svd
4624 !> Do not return either U or VT (singular values array only)
4725 character, parameter :: GESDD_SINGVAL_ONLY = 'N'
4826
49-
50-
51-
5227 contains
5328
5429 !> Process GESDD output flag
@@ -87,7 +62,7 @@ module stdlib_linalg_svd
8762 #:if rk!="xdp"
8863
8964 !> Singular values of matrix A
90- function stdlib_linalg_svdvals_${ri}$(a,err) result(s)
65+ module function stdlib_linalg_svdvals_${ri}$(a,err) result(s)
9166 !> Input matrix A[m,n]
9267 ${rt}$, intent(in), target :: a(:,:)
9368 !> [optional] state return flag. On error if not requested, the code will stop
@@ -115,7 +90,7 @@ module stdlib_linalg_svd
11590 end function stdlib_linalg_svdvals_${ri}$
11691
11792 !> SVD of matrix A = U S V^T, returning S and optionally U and V^T
118- subroutine stdlib_linalg_svd_${ri}$(a,s,u,vt,overwrite_a,full_matrices,err)
93+ module subroutine stdlib_linalg_svd_${ri}$(a,s,u,vt,overwrite_a,full_matrices,err)
11994 !> Input matrix A[m,n]
12095 ${rt}$, intent(inout), target :: a(:,:)
12196 !> Array of singular values
@@ -285,4 +260,4 @@ module stdlib_linalg_svd
285260 #:endif
286261 #:endfor
287262
288- end module stdlib_linalg_svd
263+ end submodule stdlib_linalg_svd
0 commit comments