diff --git a/lapack/netlib/conv.go b/lapack/netlib/conv.go index 303e938..aad8305 100644 --- a/lapack/netlib/conv.go +++ b/lapack/netlib/conv.go @@ -6,10 +6,10 @@ package netlib import "gonum.org/v1/gonum/blas" -// convDpbToLapacke converts a symmetric band matrix A in CBLAS row-major layout -// to LAPACKE row-major layout and stores the result in B. +// bandTriToLapacke converts a triangular or symmetric band matrix A in CBLAS +// row-major layout to LAPACKE row-major layout and stores the result in B. // -// For example, when n = 6, kd = 2 and uplo == 'U', convDpbToLapacke converts +// For example, when n = 6, kd = 2 and uplo == 'U', bandTriToLapacke converts // A = a00 a01 a02 // a11 a12 a13 // a22 a23 a24 @@ -25,7 +25,7 @@ import "gonum.org/v1/gonum/blas" // stored in a slice as // b = [* * a02 a13 a24 a35 * a01 a12 a23 a34 a45 a00 a11 a22 a33 a44 a55] // -// When n = 6, kd = 2 and uplo == 'L', convDpbToLapacke converts +// When n = 6, kd = 2 and uplo == 'L', bandTriToLapacke converts // A = * * a00 // * a10 a11 // a20 a21 a22 @@ -42,7 +42,7 @@ import "gonum.org/v1/gonum/blas" // b = [a00 a11 a22 a33 a44 a55 a10 a21 a32 a43 a54 * a20 a31 a42 a53 * * ] // // In these example elements marked as * are not referenced. -func convDpbToLapacke(uplo blas.Uplo, n, kd int, a []float64, lda int, b []float64, ldb int) { +func bandTriToLapacke(uplo blas.Uplo, n, kd int, a []float64, lda int, b []float64, ldb int) { if uplo == blas.Upper { for i := 0; i < n; i++ { for jb := 0; jb < min(n-i, kd+1); jb++ { @@ -60,10 +60,10 @@ func convDpbToLapacke(uplo blas.Uplo, n, kd int, a []float64, lda int, b []float } } -// convDpbToGonum converts a symmetric band matrix A in LAPACKE row-major layout -// to CBLAS row-major layout and stores the result in B. In other words, it -// performs the inverse conversion to convDpbToLapacke. -func convDpbToGonum(uplo blas.Uplo, n, kd int, a []float64, lda int, b []float64, ldb int) { +// bandTriToGonum converts a triangular or symmetric band matrix A in LAPACKE +// row-major layout to CBLAS row-major layout and stores the result in B. In +// other words, it performs the inverse conversion to bandTriToLapacke. +func bandTriToGonum(uplo blas.Uplo, n, kd int, a []float64, lda int, b []float64, ldb int) { if uplo == blas.Upper { for j := 0; j < n; j++ { for ib := max(0, kd-j); ib < kd+1; ib++ { diff --git a/lapack/netlib/conv_test.go b/lapack/netlib/conv_test.go index d50fa71..baeffcc 100644 --- a/lapack/netlib/conv_test.go +++ b/lapack/netlib/conv_test.go @@ -14,7 +14,7 @@ import ( "gonum.org/v1/gonum/floats" ) -func TestConvDpb(t *testing.T) { +func TestConvBandTri(t *testing.T) { for ti, test := range []struct { uplo blas.Uplo n, kd int @@ -72,7 +72,7 @@ func TestConvDpb(t *testing.T) { } ldb := max(1, n) - convDpbToLapacke(uplo, n, kd, a, lda, got, ldb) + bandTriToLapacke(uplo, n, kd, a, lda, got, ldb) if !floats.Equal(test.a, a) { t.Errorf("%v: unexpected modification of A in conversion to LAPACKE row-major", name) } @@ -88,7 +88,7 @@ func TestConvDpb(t *testing.T) { got[i] = -1 } - convDpbToGonum(uplo, n, kd, b, ldb, got, lda) + bandTriToGonum(uplo, n, kd, b, ldb, got, lda) if !floats.Equal(test.b, b) { t.Errorf("%v: unexpected modification of B in conversion to Gonum row-major", name) } @@ -118,8 +118,8 @@ func TestConvDpb(t *testing.T) { b[i] = rnd.NormFloat64() } - convDpbToLapacke(uplo, n, kd, a, lda, b, ldb) - convDpbToGonum(uplo, n, kd, b, ldb, a, lda) + bandTriToLapacke(uplo, n, kd, a, lda, b, ldb) + bandTriToGonum(uplo, n, kd, b, ldb, a, lda) if !floats.Equal(a, aCopy) { t.Errorf("%v: conversion does not roundtrip", name) diff --git a/lapack/netlib/lapack.go b/lapack/netlib/lapack.go index 34e8be2..dc33595 100644 --- a/lapack/netlib/lapack.go +++ b/lapack/netlib/lapack.go @@ -835,7 +835,7 @@ func (impl Implementation) Dpbcon(uplo blas.Uplo, n, kd int, ab []float64, ldab _ldab := n _ab := make([]float64, (kd+1)*_ldab) - convDpbToLapacke(uplo, n, kd, ab, ldab, _ab, _ldab) + bandTriToLapacke(uplo, n, kd, ab, ldab, _ab, _ldab) _rcond := []float64{0} _iwork := make([]int32, n) lapacke.Dpbcon(byte(uplo), n, kd, _ab, _ldab, anorm, _rcond, work, _iwork) @@ -892,9 +892,9 @@ func (impl Implementation) Dpbtrf(uplo blas.Uplo, n, kd int, ab []float64, ldab ldabConv := n abConv := make([]float64, (kd+1)*ldabConv) - convDpbToLapacke(uplo, n, kd, ab, ldab, abConv, ldabConv) + bandTriToLapacke(uplo, n, kd, ab, ldab, abConv, ldabConv) info := lapacke.Dpbtrf(byte(uplo), n, kd, abConv, ldabConv) - convDpbToGonum(uplo, n, kd, abConv, ldabConv, ab, ldab) + bandTriToGonum(uplo, n, kd, abConv, ldabConv, ab, ldab) return info } @@ -937,7 +937,7 @@ func (Implementation) Dpbtrs(uplo blas.Uplo, n, kd, nrhs int, ab []float64, ldab ldabConv := n abConv := make([]float64, (kd+1)*ldabConv) - convDpbToLapacke(uplo, n, kd, ab, ldab, abConv, ldabConv) + bandTriToLapacke(uplo, n, kd, ab, ldab, abConv, ldabConv) lapacke.Dpbtrs(byte(uplo), n, kd, nrhs, abConv, ldabConv, b, ldb) } @@ -3316,7 +3316,7 @@ func (impl Implementation) Dtbtrs(uplo blas.Uplo, trans blas.Transpose, diag bla ldaConv := n aConv := make([]float64, (kd+1)*ldaConv) - convDpbToLapacke(uplo, n, kd, a, lda, aConv, ldaConv) + bandTriToLapacke(uplo, n, kd, a, lda, aConv, ldaConv) return lapacke.Dtbtrs(byte(uplo), byte(trans), byte(diag), n, kd, nrhs, aConv, ldaConv, b, ldb) }