Report a bug
If you spot a problem with this page, click here to create a GitHub issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
a local clone.
mir.lapack
Low level ndslice wrapper for LAPACK.
Attention: LAPACK and this module has column major API.
ndslice rows corresponds to LAPACK columns.
Functions with *_wq suffix are wrappers for workspace queries.
Authors:
Ilya Yaroshenko
- lapackint
ilaenv
()(lapackintispec
, scope const(char)*name
, scope const(char)*opts
, lapackintn1
, lapackintn2
, lapackintn3
, lapackintn4
); - lapackint
ilaenv2stage
()(lapackintispec
, scope const(char)*name
, scope const(char)*opts
, lapackintn1
, lapackintn2
, lapackintn3
, lapackintn4
); - size_t
getri_wq
(T)(Slice!(T*, 2, Canonical)a
); - getri work space query.
- size_t
getri
(T)(Slice!(T*, 2, Canonical)a
, Slice!(lapackint*)ipiv
, Slice!(T*)work
); - size_t
getrf
(T)(Slice!(T*, 2, Canonical)a
, Slice!(lapackint*)ipiv
); - size_t
sptrf
(T)(Slice!(StairsIterator!(T*, "+"))ap
, Slice!(lapackint*)ipiv
); sptrf
for upper triangular input.- size_t
gesv
(T)(Slice!(T*, 2, Canonical)a
, Slice!(lapackint*)ipiv
, Slice!(T*, 2, Canonical)b
); - size_t
gelsd_wq
(T)(Slice!(T*, 2, Canonical)a
, Slice!(T*, 2, Canonical)b
, ref size_tliwork
)
if (!isComplex!T);
size_tgelsd_wq
(T)(Slice!(T*, 2, Canonical)a
, Slice!(T*, 2, Canonical)b
, ref size_tlrwork
, ref size_tliwork
)
if (isComplex!T); - gelsd work space query.
- size_t
gelsd
(T)(Slice!(T*, 2, Canonical)a
, Slice!(T*, 2, Canonical)b
, Slice!(T*)s
, Trcond
, ref size_trank
, Slice!(T*)work
, Slice!(lapackint*)iwork
)
if (!isComplex!T);
size_tgelsd
(T)(Slice!(T*, 2, Canonical)a
, Slice!(T*, 2, Canonical)b
, Slice!(realType!T*)s
, realType!Trcond
, ref size_trank
, Slice!(T*)work
, Slice!(realType!T*)rwork
, Slice!(lapackint*)iwork
)
if (isComplex!T); - size_t
gesdd_wq
(T)(charjobz
, Slice!(T*, 2, Canonical)a
, Slice!(T*, 2, Canonical)u
, Slice!(T*, 2, Canonical)vt
); - gesdd work space query
- size_t
gesdd
(T)(charjobz
, Slice!(T*, 2, Canonical)a
, Slice!(T*)s
, Slice!(T*, 2, Canonical)u
, Slice!(T*, 2, Canonical)vt
, Slice!(T*)work
, Slice!(lapackint*)iwork
)
if (!isComplex!T);
size_tgesdd
(T)(charjobz
, Slice!(T*, 2, Canonical)a
, Slice!(realType!T*)s
, Slice!(T*, 2, Canonical)u
, Slice!(T*, 2, Canonical)vt
, Slice!(T*)work
, Slice!(realType!T*)rwork
, Slice!(lapackint*)iwork
)
if (isComplex!T); - size_t
gesvd_wq
(T)(charjobu
, charjobvt
, Slice!(T*, 2, Canonical)a
, Slice!(T*, 2, Canonical)u
, Slice!(T*, 2, Canonical)vt
); - gesvd work space query
- size_t
gesvd
(T)(charjobu
, charjobvt
, Slice!(T*, 2, Canonical)a
, Slice!(T*)s
, Slice!(T*, 2, Canonical)u
, Slice!(T*, 2, Canonical)vt
, Slice!(T*)work
)
if (!isComplex!T);
size_tgesvd
(T)(charjobu
, charjobvt
, Slice!(T*, 2, Canonical)a
, Slice!(realType!T*)s
, Slice!(T*, 2, Canonical)u
, Slice!(T*, 2, Canonical)vt
, Slice!(T*)work
, Slice!(realType!T*)rwork
)
if (isComplex!T); - size_t
spev
(T)(charjobz
, Slice!(StairsIterator!(T*, "+"))ap
, Slice!(T*)w
, Slice!(T*, 2, Canonical)z
, Slice!(T*)work
); - size_t
sytrf
(T)(charuplo
, Slice!(T*, 2, Canonical)a
, Slice!(lapackint*)ipiv
, Slice!(T*)work
); - size_t
geqrf
(T)(Slice!(T*, 2, Canonical)a
, Slice!(T*)tau
, Slice!(T*)work
); - size_t
getrs
(T)(chartrans
, Slice!(T*, 2, Canonical)a
, Slice!(T*, 2, Canonical)b
, Slice!(lapackint*)ipiv
); - size_t
potrs
(T)(charuplo
, Slice!(T*, 2, Canonical)a
, Slice!(T*, 2, Canonical)b
); - size_t
sytrs2
(T)(Slice!(T*, 2, Canonical)a
, Slice!(T*, 2, Canonical)b
, Slice!(lapackint*)ipiv
, Slice!(T*)work
, charuplo
); - size_t
geqrs
(T)(Slice!(T*, 2, Canonical)a
, Slice!(T*, 2, Canonical)b
, Slice!(T*)tau
, Slice!(T*)work
); - size_t
sysv_rook_wk
(T)(charuplo
, Slice!(T*, 2, Canonical)a
, Slice!(T*, 2, Canonical)b
); - size_t
sysv_rook
(T)(charuplo
, Slice!(T*, 2, Canonical)a
, Slice!(lapackint*)ipiv
, Slice!(T*, 2, Canonical)b
, Slice!(T*)work
); - size_t
syev_wk
(T)(charjobz
, charuplo
, Slice!(T*, 2, Canonical)a
, Slice!(T*)w
); - size_t
syev
(T)(charjobz
, charuplo
, Slice!(T*, 2, Canonical)a
, Slice!(T*)w
, Slice!(T*)work
); - size_t
syev_2stage_wk
(T)(charjobz
, charuplo
, Slice!(T*, 2, Canonical)a
, Slice!(T*)w
); - size_t
syev_2stage
(T)(charjobz
, charuplo
, Slice!(T*, 2, Canonical)a
, Slice!(T*)w
, Slice!(T*)work
); - size_t
potrf
(T)(charuplo
, Slice!(T*, 2, Canonical)a
); - size_t
pptrf
(T)(charuplo
, Slice!(T*, 2, Canonical)ap
); - size_t
sptri
(T)(Slice!(StairsIterator!(T*, "+"))ap
, Slice!(lapackint*)ipiv
, Slice!(T*)work
); sptri
for upper triangular input.- size_t
potri
(T)(charuplo
, Slice!(T*, 2, Canonical)a
); - size_t
pptri
(T)(Slice!(StairsIterator!(T*, "+"))ap
); pptri
for upper triangular input.- size_t
trtri
(T)(charuplo
, chardiag
, Slice!(T*, 2, Canonical)a
); - size_t
tptri
(T)(chardiag
, Slice!(StairsIterator!(T*, "+"))ap
); tptri
for upper triangular input.- size_t
ormqr
(T)(charside
, chartrans
, Slice!(T*, 2, Canonical)a
, Slice!(T*)tau
, Slice!(T*, 2, Canonical)c
, Slice!(T*)work
); - size_t
unmqr
(T)(charside
, chartrans
, Slice!(T*, 2, Canonical)a
, Slice!(T*)tau
, Slice!(T*, 2, Canonical)c
, Slice!(T*)work
); - size_t
orgqr
(T)(Slice!(T*, 2, Canonical)a
, Slice!(T*)tau
, Slice!(T*)work
); - size_t
ungqr
(T)(Slice!(T*, 2, Canonical)a
, Slice!(T*)tau
, Slice!(T*)work
); - size_t
unghr
(T)(Slice!(T*, 2, Canonical)a
, Slice!(T*)tau
, Slice!(T*)work
); - size_t
gehrd
(T)(Slice!(T*, 2, Canonical)a
, Slice!(T*)tau
, Slice!(T*)work
, lapackintilo
, lapackintihi
); - size_t
unmhr
(T)(charside
, chartrans
, Slice!(T*, 2, Canonical)a
, Slice!(T*)tau
, Slice!(T*, 2, Canonical)c
, Slice!(T*)work
, lapackintilo
, lapackintihi
); - size_t
hseqr
(T)(charjob
, charcompz
, Slice!(T*, 2, Canonical)h
, Slice!(T*)w
, Slice!(T*, 2, Canonical)z
, Slice!(T*)work
, lapackintilo
, lapackintihi
)
if (isComplex!T); - size_t
hseqr
(T)(charjob
, charcompz
, Slice!(T*, 2, Canonical)h
, Slice!(T*)wr
, Slice!(T*)wi
, Slice!(T*, 2, Canonical)z
, Slice!(T*)work
, lapackintilo
, lapackintihi
)
if (!isComplex!T); - size_t
trevc
(T)(charside
, charhowmany
, lapackintselect
, Slice!(T*, 2, Canonical)t
, Slice!(T*, 2, Canonical)vl
, Slice!(T*, 2, Canonical)vr
, lapackintm
, Slice!(T*)work
); - size_t
gebal
(T, realT)(charjob
, Slice!(T*, 2, Canonical)a
, lapackintilo
, lapackintihi
, Slice!(realT*)scale
)
if (!isComplex!T || isComplex!T && is(realType!T == realT)); - size_t
gebak
(T, realT)(charjob
, charside
, lapackintilo
, lapackintihi
, Slice!(realT*)scale
, Slice!(T*, 2, Canonical)v
)
if (!isComplex!T || isComplex!T && is(realType!T == realT)); - size_t
geev
(T, realT)(charjobvl
, charjobvr
, Slice!(T*, 2, Canonical)a
, Slice!(T*)w
, Slice!(T*, 2, Canonical)vl
, Slice!(T*, 2, Canonical)vr
, Slice!(T*)work
, Slice!(realT*)rwork
)
if (isComplex!T && is(realType!T == realT)); - size_t
geev
(T)(charjobvl
, charjobvr
, Slice!(T*, 2, Canonical)a
, Slice!(T*)wr
, Slice!(T*)wi
, Slice!(T*, 2, Canonical)vl
, Slice!(T*, 2, Canonical)vr
, Slice!(T*)work
)
if (!isComplex!T); - size_t
steqr
(T, realT = realType!T)(charcompz
, Slice!(realT*)d
, Slice!(realT*)e
, Slice!(T*, 2, Canonical)z
, Slice!(realT*)work
)
if (is(realType!T == realT)); - @trusted size_t
sytrs_3
(T)(charuplo
, Slice!(const(T)*, 2, Canonical)a
, Slice!(const(T)*)e
, Slice!(const(lapackint)*)ipiv
, Slice!(T*, 2, Canonical)b
); - @trusted size_t
sytrf_rk
(T)(charuplo
, Slice!(T*, 2, Canonical)a
, Slice!(T*)e
, Slice!(lapackint*)ipiv
, Slice!(T*)work
); - size_t
sytrf_rk_wk
(T)(charuplo
, Slice!(T*, 2, Canonical)a
); - @trusted size_t
posvx
(T)(charfact
, charuplo
, Slice!(T*, 2, Canonical)a
, Slice!(T*, 2, Canonical)af
, charequed
, Slice!(T*)s
, Slice!(T*, 2, Canonical)b
, Slice!(T*, 2, Canonical)x
, out Trcond
, Slice!(T*)ferr
, Slice!(T*)berr
, Slice!(T*)work
, Slice!(lapackint*)iwork
)
if (is(T == double) || is(T == float)); - size_t
sytrf_wk
(T)(charuplo
, Slice!(T*, 2, Canonical)a
);
Copyright © 2016-2020 by Ilya Yaroshenko | Page generated by
Ddoc on Mon Mar 30 13:57:53 2020