Skip to content

Commit 834186f

Browse files
twebster-sym9il
authored andcommitted
Lapack version updates (#18)
* unghr gehrd hsein unmhr hseqr trevc gebak geev * formatting * remove duplicate ungqr and add is * missing braket * hsein and hseqr fix * hseqr fix * lapack version upgrade * &mm to mm * ihi and iho updates * update pointers to ref * lapack update changes * update lapack to v0.3.0
1 parent e2fe29e commit 834186f

File tree

2 files changed

+28
-32
lines changed

2 files changed

+28
-32
lines changed

dub.sdl

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ authors "Ilya Yaroshenko"
44
copyright "Copyright © 2017-2018, Symmetry Investments & Kaleidic Associates"
55
license "BSL-1.0"
66

7-
dependency "lapack" version="~>0.1.0"
7+
dependency "lapack" version="0.3.0"
88
dependency "mir-blas" version=">=1.1.3 <2.0.0"
99

1010
configuration "library" {

source/mir/lapack.d

+27-31
Original file line numberDiff line numberDiff line change
@@ -1488,8 +1488,8 @@ size_t gehrd(T)(
14881488
Slice!(T*, 2, Canonical) a,
14891489
Slice!(T*) tau,
14901490
Slice!(T*) work,
1491-
lapackint* ilo,
1492-
lapackint* ihi
1491+
lapackint ilo,
1492+
lapackint ihi
14931493
)
14941494
in
14951495
{
@@ -1520,18 +1520,16 @@ size_t hsein(T)(
15201520
char side,
15211521
char eigsrc,
15221522
char initv,
1523-
lapackint* select, //actually a logical bitset stored in here
1523+
ref lapackint select, //actually a logical bitset stored in here
15241524
Slice!(T*, 2, Canonical) h,
15251525
Slice!(T*) wr,
15261526
Slice!(T*) wi,
15271527
Slice!(T*, 2, Canonical) vl,
15281528
Slice!(T*, 2, Canonical) vr,
1529-
lapackint* m,
1529+
ref lapackint m,
15301530
Slice!(T*) work,
1531-
lapackint* ifaill,
1532-
lapackint* ifailr,
1533-
lapackint* ilo,
1534-
lapackint* ihi,
1531+
ref lapackint ifaill,
1532+
ref lapackint ifailr,
15351533
)
15361534
if (!isComplex!T)
15371535
in
@@ -1576,31 +1574,29 @@ do
15761574
lapackint ldvl = cast(lapackint) vl._stride.max(1);
15771575
lapackint ldvr = cast(lapackint) vr._stride.max(1);
15781576
//need to seperate these methods then probably provide a wrap which does this as that's the easiest way without bloating the base methods
1579-
lapack.hsein_(side, eigsrc, initv, select, n, h.iterator, ldh, wr.iterator, wi.iterator, vl.iterator, ldvl, vr.iterator, ldvr, mm, *m, work.iterator, ifaill, ifailr, info);
1577+
lapack.hsein_(side, eigsrc, initv, select, n, h.iterator, ldh, wr.iterator, wi.iterator, vl.iterator, ldvl, vr.iterator, ldvr, mm, m, work.iterator, ifaill, ifailr, info);
15801578
assert(info >= 0);
15811579
///if any of ifaill or ifailr entries are non-zero then that has failed to converge.
15821580
///ifail?[i] = j > 0 if the eigenvector stored in the i-th column of v?, coresponding to the jth eigenvalue, fails to converge.
1583-
assert(*ifaill == 0);
1584-
assert(*ifailr == 0);
1581+
assert(ifaill == 0);
1582+
assert(ifailr == 0);
15851583
return info;
15861584
}
15871585

15881586
size_t hsein(T, realT)(
15891587
char side,
15901588
char eigsrc,
15911589
char initv,
1592-
lapackint* select, //actually a logical bitset stored in here
1590+
lapackint select, //actually a logical bitset stored in here
15931591
Slice!(T*, 2, Canonical) h,
15941592
Slice!(T*) w,
15951593
Slice!(T*, 2, Canonical) vl,
15961594
Slice!(T*, 2, Canonical) vr,
15971595
lapackint* m,
15981596
Slice!(T*) work,
15991597
Slice!(realT*) rwork,
1600-
lapackint* ifaill,
1601-
lapackint* ifailr,
1602-
lapackint* ilo,
1603-
lapackint* ihi,
1598+
lapackint ifaill,
1599+
lapackint ifailr,
16041600
)
16051601
if (isComplex!T && is(realType!T == realT))
16061602
in
@@ -1642,8 +1638,8 @@ do {
16421638
assert(info >= 0);
16431639
///if any of ifaill or ifailr entries are non-zero then that has failed to converge.
16441640
///ifail?[i] = j > 0 if the eigenvector stored in the i-th column of v?, coresponding to the jth eigenvalue, fails to converge.
1645-
assert(*ifaill == 0);
1646-
assert(*ifailr == 0);
1641+
assert(ifaill == 0);
1642+
assert(ifailr == 0);
16471643
return info;
16481644
}
16491645

@@ -1666,8 +1662,8 @@ size_t unmhr(T)(
16661662
Slice!(T*) tau,
16671663
Slice!(T*, 2, Canonical) c,
16681664
Slice!(T*) work,
1669-
lapackint* ilo,
1670-
lapackint* ihi
1665+
lapackint ilo,
1666+
lapackint ihi
16711667
)
16721668
in
16731669
{
@@ -1725,8 +1721,8 @@ size_t hseqr(T)(
17251721
Slice!(T*) w,
17261722
Slice!(T*, 2, Canonical) z,
17271723
Slice!(T*) work,
1728-
lapackint* ilo,
1729-
lapackint* ihi
1724+
lapackint ilo,
1725+
lapackint ihi
17301726
)
17311727
if (isComplex!T)
17321728
in
@@ -1760,8 +1756,8 @@ size_t hseqr(T)(
17601756
Slice!(T*) wi,
17611757
Slice!(T*, 2, Canonical) z,
17621758
Slice!(T*) work,
1763-
lapackint* ilo,
1764-
lapackint* ihi
1759+
lapackint ilo,
1760+
lapackint ihi
17651761
)
17661762
if (!isComplex!T)
17671763
in
@@ -1801,7 +1797,7 @@ size_t trevc(T)(char side,
18011797
Slice!(T*, 2, Canonical) t,
18021798
Slice!(T*, 2, Canonical) vl,
18031799
Slice!(T*, 2, Canonical) vr,
1804-
lapackint* m,
1800+
lapackint m,
18051801
Slice!(T*) work
18061802
)
18071803
do
@@ -1814,10 +1810,10 @@ do
18141810
//select should be lapack_logical
18151811
lapackint info;
18161812
static if(!isComplex!T){
1817-
lapack.trevc_(side, howmany, &select, n, t.iterator, ldt, vl.iterator, ldvl, vr.iterator, ldvr, mm, *m, work.iterator, info);
1813+
lapack.trevc_(side, howmany, select, n, t.iterator, ldt, vl.iterator, ldvl, vr.iterator, ldvr, mm, m, work.iterator, info);
18181814
}
18191815
else {
1820-
lapack.trevc_(side, howmany, &select, n, t.iterator, ldt, vl.iterator, ldvl, vr.iterator, ldvr, mm, *m, work.iterator, null, info);
1816+
lapack.trevc_(side, howmany, select, n, t.iterator, ldt, vl.iterator, ldvl, vr.iterator, ldvr, mm, m, work.iterator, null, info);
18211817
}
18221818
assert(info >= 0);
18231819
return cast(size_t)info;
@@ -1838,8 +1834,8 @@ alias complexType(T : isComplex!T) = T;
18381834

18391835
size_t gebal(T, realT)(char job,
18401836
Slice!(T*, 2, Canonical) a,
1841-
lapackint* ilo,
1842-
lapackint* ihi,
1837+
lapackint ilo,
1838+
lapackint ihi,
18431839
Slice!(realT*) scale
18441840
)
18451841
if (!isComplex!T || (isComplex!T && is(realType!T == realT)))
@@ -1863,8 +1859,8 @@ unittest
18631859
size_t gebak(T, realT)(
18641860
char job,
18651861
char side,
1866-
lapackint* ilo,
1867-
lapackint* ihi,
1862+
lapackint ilo,
1863+
lapackint ihi,
18681864
Slice!(realT*) scale,
18691865
Slice!(T*, 2, Canonical) v
18701866
)

0 commit comments

Comments
 (0)