text:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.7"/>
<title>MAGMA: double precision</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>

<link href="navtree.css" rel="stylesheet" type="text/css"/>

<link href="search/search.css" rel="stylesheet" type="text/css"/>

<link href="doxygen.css" rel="stylesheet" type="text/css" />

MAGMA
    1.5.0

Matrix Algebra for GPU and Multicore Architectures

Main Page

Modules

          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)"
               onblur="searchBox.OnSearchFieldFocus(false)"
               onkeyup="searchBox.OnSearchFieldChange(event)"/>

 All Functions Groups

Functions

double precision
Symmetric eigenvalue: auxiliary

Functions

magma_int_t 	magma_dlaex0 (magma_int_t n, double *d, double *e, double *Q, magma_int_t ldq, double *work, magma_int_t *iwork, double *dwork, magma_range_t range, double vl, double vu, magma_int_t il, magma_int_t iu, magma_int_t *info)

 	DLAEX0 computes all eigenvalues and the choosen eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method.  More...

magma_int_t 	magma_dlaex0_m (magma_int_t nrgpu, magma_int_t n, double *d, double *e, double *Q, magma_int_t ldq, double *work, magma_int_t *iwork, magma_range_t range, double vl, double vu, magma_int_t il, magma_int_t iu, magma_int_t *info)

 	DLAEX0 computes all eigenvalues and the choosen eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method.  More...

magma_int_t 	magma_dlaex1 (magma_int_t n, double *d, double *Q, magma_int_t ldq, magma_int_t *indxq, double rho, magma_int_t cutpnt, double *work, magma_int_t *iwork, double *dwork, magma_range_t range, double vl, double vu, magma_int_t il, magma_int_t iu, magma_int_t *info)

 	DLAEX1 computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix.  More...

magma_int_t 	magma_dlaex1_m (magma_int_t nrgpu, magma_int_t n, double *d, double *Q, magma_int_t ldq, magma_int_t *indxq, double rho, magma_int_t cutpnt, double *work, magma_int_t *iwork, double **dwork, magma_queue_t stream[MagmaMaxGPUs][2], magma_range_t range, double vl, double vu, magma_int_t il, magma_int_t iu, magma_int_t *info)

 	DLAEX1 computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix.  More...

magma_int_t 	magma_dlaex3 (magma_int_t k, magma_int_t n, magma_int_t n1, double *d, double *Q, magma_int_t ldq, double rho, double *dlamda, double *Q2, magma_int_t *indx, magma_int_t *ctot, double *w, double *s, magma_int_t *indxq, double *dwork, magma_range_t range, double vl, double vu, magma_int_t il, magma_int_t iu, magma_int_t *info)

 	DLAEX3 finds the roots of the secular equation, as defined by the values in D, W, and RHO, between 1 and K.  More...

magma_int_t 	magma_dlaex3_m (magma_int_t nrgpu, magma_int_t k, magma_int_t n, magma_int_t n1, double *d, double *Q, magma_int_t ldq, double rho, double *dlamda, double *Q2, magma_int_t *indx, magma_int_t *ctot, double *w, double *s, magma_int_t *indxq, double **dwork, magma_queue_t stream[MagmaMaxGPUs][2], magma_range_t range, double vl, double vu, magma_int_t il, magma_int_t iu, magma_int_t *info)

 	DLAEX3 finds the roots of the secular equation, as defined by the values in D, W, and RHO, between 1 and K.  More...

magma_int_t 	magma_dlatrd (magma_uplo_t uplo, magma_int_t n, magma_int_t nb, double *A, magma_int_t lda, double *e, double *tau, double *W, magma_int_t ldw, double *dA, magma_int_t ldda, double *dW, magma_int_t lddw)

 	DLATRD reduces NB rows and columns of a real symmetric matrix A to symmetric tridiagonal form by an orthogonal similarity transformation Q' * A * Q, and returns the matrices V and W which are needed to apply the transformation to the unreduced part of A.  More...

magma_int_t 	magma_dlatrd2 (magma_uplo_t uplo, magma_int_t n, magma_int_t nb, double *A, magma_int_t lda, double *e, double *tau, double *W, magma_int_t ldw, double *dA, magma_int_t ldda, double *dW, magma_int_t lddw, double *dwork, magma_int_t ldwork)

 	DLATRD2 reduces NB rows and columns of a real symmetric matrix A to symmetric tridiagonal form by an orthogonal similarity transformation Q' * A * Q, and returns the matrices V and W which are needed to apply the transformation to the unreduced part of A.  More...

double 	magma_dlatrd_mgpu (magma_int_t num_gpus, magma_uplo_t uplo, magma_int_t n0, magma_int_t n, magma_int_t nb, magma_int_t nb0, double *A, magma_int_t lda, double *e, double *tau, double *W, magma_int_t ldw, double **dA, magma_int_t ldda, magma_int_t offset, double **dW, magma_int_t lddw, double *dwork[MagmaMaxGPUs], magma_int_t ldwork, magma_int_t k, double *dx[MagmaMaxGPUs], double *dy[MagmaMaxGPUs], double *work, magma_queue_t stream[][10], double *times)

 	DLATRD reduces NB rows and columns of a real symmetric matrix A to symmetric tridiagonal form by an orthogonal similarity transformation Q' * A * Q, and returns the matrices V and W which are needed to apply the transformation to the unreduced part of A.  More...

Detailed Description

Function Documentation

          magma_int_t magma_dlaex0
          (
          magma_int_t
          n,

          double *
          d,

          double *
          e,

          double *
          Q,

          magma_int_t
          ldq,

          double *
          work,

          magma_int_t *
          iwork,

          double *
          dwork,

          magma_range_t
          range,

          double
          vl,

          double
          vu,

          magma_int_t
          il,

          magma_int_t
          iu,

          magma_int_t *
          info

          )

DLAEX0 computes all eigenvalues and the choosen eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method.

Parameters

[in]	n	INTEGER The dimension of the symmetric tridiagonal matrix. N >= 0.

[in,out]	d	DOUBLE PRECISION array, dimension (N) On entry, the main diagonal of the tridiagonal matrix. On exit, its eigenvalues.

[in]	e	DOUBLE PRECISION array, dimension (N-1) The off-diagonal elements of the tridiagonal matrix. On exit, E has been destroyed.

[in,out]	Q	DOUBLE PRECISION array, dimension (LDQ, N) On entry, Q will be the identity matrix. On exit, Q contains the eigenvectors of the tridiagonal matrix.

[in]	ldq	INTEGER The leading dimension of the array Q. If eigenvectors are desired, then LDQ >= max(1,N). In any case, LDQ >= 1.

	work	(workspace) DOUBLE PRECISION array, the dimension of WORK >= 4*N + N**2.

	iwork	(workspace) INTEGER array, the dimension of IWORK >= 3 + 5*N.

	dwork	(workspace) DOUBLE PRECISION array, dimension (3*N*N/2+3*N)

[in]	range	magma_range_t

= MagmaRangeAll: all eigenvalues will be found.

= MagmaRangeV: all eigenvalues in the half-open interval (VL,VU] will be found.

= MagmaRangeI: the IL-th through IU-th eigenvalues will be found.

[in]	vl	DOUBLE PRECISION

[in]	vu	DOUBLE PRECISION If RANGE=MagmaRangeV, the lower and upper bounds of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = MagmaRangeAll or MagmaRangeI.

[in]	il	INTEGER

[in]	iu	INTEGER If RANGE=MagmaRangeI, the indices (in ascending order) of the smallest and largest eigenvalues to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = MagmaRangeAll or MagmaRangeV.

[out]	info	INTEGER

= 0: successful exit.

< 0: if INFO = -i, the i-th argument had an illegal value.

> 0: The algorithm failed to compute an eigenvalue while working on the submatrix lying in rows and columns INFO/(N+1) through mod(INFO,N+1).

Further Details

Based on contributions by Jeff Rutter, Computer Science Division, University of California at Berkeley, USA

          magma_int_t magma_dlaex0_m
          (
          magma_int_t
          nrgpu,

          magma_int_t
          n,

          double *
          d,

          double *
          e,

          double *
          Q,

          magma_int_t
          ldq,

          double *
          work,

          magma_int_t *
          iwork,

          magma_range_t
          range,

          double
          vl,

          double
          vu,

          magma_int_t
          il,

          magma_int_t
          iu,

          magma_int_t *
          info

          )

DLAEX0 computes all eigenvalues and the choosen eigenvectors of a symmetric tridiagonal matrix using the divide and conquer method.

Parameters

[in]	nrgpu	INTEGER Number of GPUs to use.

[in]	n	INTEGER The dimension of the symmetric tridiagonal matrix. N >= 0.

[in,out]	d	DOUBLE PRECISION array, dimension (N) On entry, the main diagonal of the tridiagonal matrix. On exit, its eigenvalues.

[in]	e	DOUBLE PRECISION array, dimension (N-1) The off-diagonal elements of the tridiagonal matrix. On exit, E has been destroyed.

[in,out]	Q	DOUBLE PRECISION array, dimension (LDQ, N) On entry, Q will be the identity matrix. On exit, Q contains the eigenvectors of the tridiagonal matrix.

[in]	ldq	INTEGER The leading dimension of the array Q. If eigenvectors are desired, then LDQ >= max(1,N). In any case, LDQ >= 1.

	work	(workspace) DOUBLE PRECISION array, the dimension of WORK >= 4*N + N**2.

	iwork	(workspace) INTEGER array, the dimension of IWORK >= 3 + 5*N.

[in]	range	magma_range_t

= MagmaRangeAll: all eigenvalues will be found.

= MagmaRangeV: all eigenvalues in the half-open interval (VL,VU] will be found.

= MagmaRangeI: the IL-th through IU-th eigenvalues will be found.

[in]	vl	DOUBLE PRECISION

[in]	vu	DOUBLE PRECISION If RANGE=MagmaRangeV, the lower and upper bounds of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = MagmaRangeAll or MagmaRangeI.

[in]	il	INTEGER

[in]	iu	INTEGER If RANGE=MagmaRangeI, the indices (in ascending order) of the smallest and largest eigenvalues to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = MagmaRangeAll or MagmaRangeV.

[out]	info	INTEGER

= 0: successful exit.

< 0: if INFO = -i, the i-th argument had an illegal value.

> 0: The algorithm failed to compute an eigenvalue while working on the submatrix lying in rows and columns INFO/(N+1) through mod(INFO,N+1).

Further Details

Based on contributions by Jeff Rutter, Computer Science Division, University of California at Berkeley, USA

          magma_int_t magma_dlaex1
          (
          magma_int_t
          n,

          double *
          d,

          double *
          Q,

          magma_int_t
          ldq,

          magma_int_t *
          indxq,

          double
          rho,

          magma_int_t
          cutpnt,

          double *
          work,

          magma_int_t *
          iwork,

          double *
          dwork,

          magma_range_t
          range,

          double
          vl,

          double
          vu,

          magma_int_t
          il,

          magma_int_t
          iu,

          magma_int_t *
          info

          )

DLAEX1 computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix.

T = Q(in) ( D(in) + RHO * Z*Z' ) Q'(in) = Q(out) * D(out) * Q'(out)

where Z = Q'u, u is a vector of length N with ones in the CUTPNT and CUTPNT + 1 th elements and zeros elsewhere.

The eigenvectors of the original matrix are stored in Q, and the eigenvalues are in D. The algorithm consists of three stages:

The first stage consists of deflating the size of the problem when there are multiple eigenvalues or if there is a zero in the Z vector. For each such occurence the dimension of the secular equation problem is reduced by one. This stage is performed by the routine DLAED2.

The second stage consists of calculating the updated eigenvalues. This is done by finding the roots of the secular equation via the routine DLAED4 (as called by DLAED3). This routine also calculates the eigenvectors of the current problem.

The final stage consists of computing the updated eigenvectors directly using the updated eigenvalues. The eigenvectors for the current problem are multiplied with the eigenvectors from the overall problem.

Parameters

[in]	n	INTEGER The dimension of the symmetric tridiagonal matrix. N >= 0.

[in,out]	d	DOUBLE PRECISION array, dimension (N) On entry, the eigenvalues of the rank-1-perturbed matrix. On exit, the eigenvalues of the repaired matrix.

[in,out]	Q	DOUBLE PRECISION array, dimension (LDQ,N) On entry, the eigenvectors of the rank-1-perturbed matrix. On exit, the eigenvectors of the repaired tridiagonal matrix.

[in]	ldq	INTEGER The leading dimension of the array Q. LDQ >= max(1,N).

[in,out]	indxq	INTEGER array, dimension (N) On entry, the permutation which separately sorts the two subproblems in D into ascending order. On exit, the permutation which will reintegrate the subproblems back into sorted order, i.e. D( INDXQ( I = 1, N ) ) will be in ascending order.

[in]	rho	DOUBLE PRECISION The subdiagonal entry used to create the rank-1 modification.

[in]	cutpnt	INTEGER The location of the last eigenvalue in the leading sub-matrix. min(1,N) <= CUTPNT <= N/2.

	work	(workspace) DOUBLE PRECISION array, dimension (4*N + N**2)

	iwork	(workspace) INTEGER array, dimension (4*N)

	dwork	(workspace) DOUBLE PRECISION array, dimension (3*N*N/2+3*N)

[in]	range	magma_range_t

= MagmaRangeAll: all eigenvalues will be found.

= MagmaRangeV: all eigenvalues in the half-open interval (VL,VU] will be found.

= MagmaRangeI: the IL-th through IU-th eigenvalues will be found.

[in]	vl	DOUBLE PRECISION

[in]	vu	DOUBLE PRECISION if RANGE=MagmaRangeV, the lower and upper bounds of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = MagmaRangeAll or MagmaRangeI.

[in]	il	INTEGER

[in]	iu	INTEGER if RANGE=MagmaRangeI, the indices (in ascending order) of the smallest and largest eigenvalues to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = MagmaRangeAll or MagmaRangeV.

[out]	info	INTEGER

= 0: successful exit.

< 0: if INFO = -i, the i-th argument had an illegal value.

> 0: if INFO = 1, an eigenvalue did not converge

Further Details

Based on contributions by Jeff Rutter, Computer Science Division, University of California at Berkeley, USA Modified by Francoise Tisseur, University of Tennessee.

          magma_int_t magma_dlaex1_m
          (
          magma_int_t
          nrgpu,

          magma_int_t
          n,

          double *
          d,

          double *
          Q,

          magma_int_t
          ldq,

          magma_int_t *
          indxq,

          double
          rho,

          magma_int_t
          cutpnt,

          double *
          work,

          magma_int_t *
          iwork,

          double **
          dwork,

          magma_queue_t
          stream[MagmaMaxGPUs][2],

          magma_range_t
          range,

          double
          vl,

          double
          vu,

          magma_int_t
          il,

          magma_int_t
          iu,

          magma_int_t *
          info

          )

DLAEX1 computes the updated eigensystem of a diagonal matrix after modification by a rank-one symmetric matrix.

T = Q(in) ( D(in) + RHO * Z*Z' ) Q'(in) = Q(out) * D(out) * Q'(out)

where Z = Q'u, u is a vector of length N with ones in the CUTPNT and CUTPNT + 1 th elements and zeros elsewhere.

The eigenvectors of the original matrix are stored in Q, and the eigenvalues are in D. The algorithm consists of three stages:

The first stage consists of deflating the size of the problem when there are multiple eigenvalues or if there is a zero in the Z vector. For each such occurence the dimension of the secular equation problem is reduced by one. This stage is performed by the routine DLAED2.

The second stage consists of calculating the updated eigenvalues. This is done by finding the roots of the secular equation via the routine DLAED4 (as called by DLAED3). This routine also calculates the eigenvectors of the current problem.

The final stage consists of computing the updated eigenvectors directly using the updated eigenvalues. The eigenvectors for the current problem are multiplied with the eigenvectors from the overall problem.

Parameters

[in]	nrgpu	INTEGER Number of GPUs to use.

[in]	n	INTEGER The dimension of the symmetric tridiagonal matrix. N >= 0.

[in,out]	d	DOUBLE PRECISION array, dimension (N) On entry, the eigenvalues of the rank-1-perturbed matrix. On exit, the eigenvalues of the repaired matrix.

[in,out]	Q	DOUBLE PRECISION array, dimension (LDQ,N) On entry, the eigenvectors of the rank-1-perturbed matrix. On exit, the eigenvectors of the repaired tridiagonal matrix.

[in]	ldq	INTEGER The leading dimension of the array Q. LDQ >= max(1,N).

[in,out]	indxq	INTEGER array, dimension (N) On entry, the permutation which separately sorts the two subproblems in D into ascending order. On exit, the permutation which will reintegrate the subproblems back into sorted order, i.e. D( INDXQ( I = 1, N ) ) will be in ascending order.

[in]	rho	DOUBLE PRECISION The subdiagonal entry used to create the rank-1 modification.

[in]	cutpnt	INTEGER The location of the last eigenvalue in the leading sub-matrix. min(1,N) <= CUTPNT <= N/2.

	work	(workspace) DOUBLE PRECISION array, dimension (4*N + N**2)

	iwork	(workspace) INTEGER array, dimension (4*N)

	dwork	(devices workspaces) DOUBLE PRECISION array of arrays, dimension NRGPU. if NRGPU = 1 the dimension of the first workspace should be (3*N*N/2+3*N) otherwise the NRGPU workspaces should have the size ceil((N-N1) * (N-N1) / floor(nrgpu/2)) + NB * ((N-N1) + (N-N1) / floor(nrgpu/2))

	stream	(device stream) magma_queue_t array, dimension (MagmaMaxGPUs,2)

[in]	range	magma_range_t

= MagmaRangeAll: all eigenvalues will be found.

= MagmaRangeV: all eigenvalues in the half-open interval (VL,VU] will be found.

= MagmaRangeI: the IL-th through IU-th eigenvalues will be found.

[in]	vl	DOUBLE PRECISION

[in]	vu	DOUBLE PRECISION if RANGE=MagmaRangeV, the lower and upper bounds of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = MagmaRangeAll or MagmaRangeI.

[in]	il	INTEGER

[in]	iu	INTEGER if RANGE=MagmaRangeI, the indices (in ascending order) of the smallest and largest eigenvalues to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = MagmaRangeAll or MagmaRangeV.

[out]	info	INTEGER

= 0: successful exit.

< 0: if INFO = -i, the i-th argument had an illegal value.

> 0: if INFO = 1, an eigenvalue did not converge

Further Details

Based on contributions by Jeff Rutter, Computer Science Division, University of California at Berkeley, USA Modified by Francoise Tisseur, University of Tennessee.

          magma_int_t magma_dlaex3
          (
          magma_int_t
          k,

          magma_int_t
          n,

          magma_int_t
          n1,

          double *
          d,

          double *
          Q,

          magma_int_t
          ldq,

          double
          rho,

          double *
          dlamda,

          double *
          Q2,

          magma_int_t *
          indx,

          magma_int_t *
          ctot,

          double *
          w,

          double *
          s,

          magma_int_t *
          indxq,

          double *
          dwork,

          magma_range_t
          range,

          double
          vl,

          double
          vu,

          magma_int_t
          il,

          magma_int_t
          iu,

          magma_int_t *
          info

          )

DLAEX3 finds the roots of the secular equation, as defined by the values in D, W, and RHO, between 1 and K.

It makes the appropriate calls to DLAED4 and then updates the eigenvectors by multiplying the matrix of eigenvectors of the pair of eigensystems being combined by the matrix of eigenvectors of the K-by-K system which is solved here.

It is used in the last step when only a part of the eigenvectors is required. It compute only the required part of the eigenvectors and the rest is not used.

This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none.

Parameters

[in]	k	INTEGER The number of terms in the rational function to be solved by DLAED4. K >= 0.

[in]	n	INTEGER The number of rows and columns in the Q matrix. N >= K (deflation may result in N > K).

[in]	n1	INTEGER The location of the last eigenvalue in the leading submatrix. min(1,N) <= N1 <= N/2.

[out]	d	DOUBLE PRECISION array, dimension (N) D(I) contains the updated eigenvalues for 1 <= I <= K.

[out]	Q	DOUBLE PRECISION array, dimension (LDQ,N) Initially the first K columns are used as workspace. On output the columns ??? to ??? contain the updated eigenvectors.

[in]	ldq	INTEGER The leading dimension of the array Q. LDQ >= max(1,N).

[in]	rho	DOUBLE PRECISION The value of the parameter in the rank one update equation. RHO >= 0 required.

[in,out]	dlamda	DOUBLE PRECISION array, dimension (K) The first K elements of this array contain the old roots of the deflated updating problem. These are the poles of the secular equation. May be changed on output by having lowest order bit set to zero on Cray X-MP, Cray Y-MP, Cray-2, or Cray C-90, as described above.

[in]	Q2	DOUBLE PRECISION array, dimension (LDQ2, N) The first K columns of this matrix contain the non-deflated eigenvectors for the split problem. TODO what is LDQ2?

[in]	indx	INTEGER array, dimension (N) The permutation used to arrange the columns of the deflated Q matrix into three groups (see DLAED2). The rows of the eigenvectors found by DLAED4 must be likewise permuted before the matrix multiply can take place.

[in]	ctot	INTEGER array, dimension (4) A count of the total number of the various types of columns in Q, as described in INDX. The fourth column type is any column which has been deflated.

[in,out]	w	DOUBLE PRECISION array, dimension (K) The first K elements of this array contain the components of the deflation-adjusted updating vector. Destroyed on output.

	s	(workspace) DOUBLE PRECISION array, dimension (N1 + 1)*K Will contain the eigenvectors of the repaired matrix which will be multiplied by the previously accumulated eigenvectors to update the system.

[out]	indxq	INTEGER array, dimension (N) On exit, the permutation which will reintegrate the subproblems back into sorted order, i.e. D( INDXQ( I = 1, N ) ) will be in ascending order.

	dwork	(workspace) DOUBLE PRECISION array, dimension (3*N*N/2+3*N)

[in]	range	magma_range_t

= MagmaRangeAll: all eigenvalues will be found.

= MagmaRangeV: all eigenvalues in the half-open interval (VL,VU] will be found.

= MagmaRangeI: the IL-th through IU-th eigenvalues will be found. TODO verify range, vl, vu, il, iu – copied from dlaex1.

[in]	vl	DOUBLE PRECISION

[in]	vu	DOUBLE PRECISION if RANGE=MagmaRangeV, the lower and upper bounds of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = MagmaRangeAll or MagmaRangeI.

[in]	il	INTEGER

[in]	iu	INTEGER if RANGE=MagmaRangeI, the indices (in ascending order) of the smallest and largest eigenvalues to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = MagmaRangeAll or MagmaRangeV.

[out]	info	INTEGER

= 0: successful exit.

< 0: if INFO = -i, the i-th argument had an illegal value.

> 0: if INFO = 1, an eigenvalue did not converge

Further Details

Based on contributions by Jeff Rutter, Computer Science Division, University of California at Berkeley, USA Modified by Francoise Tisseur, University of Tennessee.

          magma_int_t magma_dlaex3_m
          (
          magma_int_t
          nrgpu,

          magma_int_t
          k,

          magma_int_t
          n,

          magma_int_t
          n1,

          double *
          d,

          double *
          Q,

          magma_int_t
          ldq,

          double
          rho,

          double *
          dlamda,

          double *
          Q2,

          magma_int_t *
          indx,

          magma_int_t *
          ctot,

          double *
          w,

          double *
          s,

          magma_int_t *
          indxq,

          double **
          dwork,

          magma_queue_t
          stream[MagmaMaxGPUs][2],

          magma_range_t
          range,

          double
          vl,

          double
          vu,

          magma_int_t
          il,

          magma_int_t
          iu,

          magma_int_t *
          info

          )

DLAEX3 finds the roots of the secular equation, as defined by the values in D, W, and RHO, between 1 and K.

It makes the appropriate calls to DLAED4 and then updates the eigenvectors by multiplying the matrix of eigenvectors of the pair of eigensystems being combined by the matrix of eigenvectors of the K-by-K system which is solved here.

It is used in the last step when only a part of the eigenvectors is required. It compute only the required part of the eigenvectors and the rest is not used.

This code makes very mild assumptions about floating point arithmetic. It will work on machines with a guard digit in add/subtract, or on those binary machines without guard digits which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could conceivably fail on hexadecimal or decimal machines without guard digits, but we know of none.

Parameters

[in]	nrgpu	INTEGER Number of GPUs to use.

[in]	k	INTEGER The number of terms in the rational function to be solved by DLAED4. K >= 0.

[in]	n	INTEGER The number of rows and columns in the Q matrix. N >= K (deflation may result in N > K).

[in]	n1	INTEGER The location of the last eigenvalue in the leading submatrix. min(1,N) <= N1 <= N/2.

[out]	d	DOUBLE PRECISION array, dimension (N) D(I) contains the updated eigenvalues for 1 <= I <= K.

[out]	Q	DOUBLE PRECISION array, dimension (LDQ,N) Initially the first K columns are used as workspace. On output the columns ??? to ??? contain the updated eigenvectors.

[in]	ldq	INTEGER The leading dimension of the array Q. LDQ >= max(1,N).

[in]	rho	DOUBLE PRECISION The value of the parameter in the rank one update equation. RHO >= 0 required.

[in,out]	dlamda	DOUBLE PRECISION array, dimension (K) The first K elements of this array contain the old roots of the deflated updating problem. These are the poles of the secular equation. May be changed on output by having lowest order bit set to zero on Cray X-MP, Cray Y-MP, Cray-2, or Cray C-90, as described above.

[in]	Q2	DOUBLE PRECISION array, dimension (LDQ2, N) The first K columns of this matrix contain the non-deflated eigenvectors for the split problem.

[in]	indx	INTEGER array, dimension (N) The permutation used to arrange the columns of the deflated Q matrix into three groups (see DLAED2). The rows of the eigenvectors found by DLAED4 must be likewise permuted before the matrix multiply can take place.

[in]	ctot	INTEGER array, dimension (4) A count of the total number of the various types of columns in Q, as described in INDX. The fourth column type is any column which has been deflated.

[in,out]	w	DOUBLE PRECISION array, dimension (K) The first K elements of this array contain the components of the deflation-adjusted updating vector. Destroyed on output.

	s	(workspace) DOUBLE PRECISION array, dimension (N1 + 1)*K Will contain the eigenvectors of the repaired matrix which will be multiplied by the previously accumulated eigenvectors to update the system.

[out]	indxq	INTEGER array, dimension (N) On exit, the permutation which will reintegrate the subproblems back into sorted order, i.e. D( INDXQ( I = 1, N ) ) will be in ascending order.

	dwork	(devices workspaces) DOUBLE PRECISION array of arrays, dimension NRGPU. if NRGPU = 1 the dimension of the first workspace should be (3*N*N/2+3*N) otherwise the NRGPU workspaces should have the size ceil((N-N1) * (N-N1) / floor(nrgpu/2)) + NB * ((N-N1) + (N-N1) / floor(nrgpu/2))

	stream	(device stream) magma_queue_t array, dimension (MagmaMaxGPUs,2)

[in]	range	magma_range_t

= MagmaRangeAll: all eigenvalues will be found.

= MagmaRangeV: all eigenvalues in the half-open interval (VL,VU] will be found.

= MagmaRangeI: the IL-th through IU-th eigenvalues will be found. TODO verify range, vl, vu, il, iu – copied from dlaex1.

[in]	vl	DOUBLE PRECISION

[in]	vu	DOUBLE PRECISION if RANGE=MagmaRangeV, the lower and upper bounds of the interval to be searched for eigenvalues. VL < VU. Not referenced if RANGE = MagmaRangeAll or MagmaRangeI.

[in]	il	INTEGER

[in]	iu	INTEGER if RANGE=MagmaRangeI, the indices (in ascending order) of the smallest and largest eigenvalues to be returned. 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not referenced if RANGE = MagmaRangeAll or MagmaRangeV.

[out]	info	INTEGER

= 0: successful exit.

< 0: if INFO = -i, the i-th argument had an illegal value.

> 0: if INFO = 1, an eigenvalue did not converge

Further Details

Based on contributions by Jeff Rutter, Computer Science Division, University of California at Berkeley, USA Modified by Francoise Tisseur, University of Tennessee.

          magma_int_t magma_dlatrd
          (
          magma_uplo_t
          uplo,

          magma_int_t
          n,

          magma_int_t
          nb,

          double *
          A,

          magma_int_t
          lda,

          double *
          e,

          double *
          tau,

          double *
          W,

          magma_int_t
          ldw,

          double *
          dA,

          magma_int_t
          ldda,

          double *
          dW,

          magma_int_t
          lddw

          )

DLATRD reduces NB rows and columns of a real symmetric matrix A to symmetric tridiagonal form by an orthogonal similarity transformation Q' * A * Q, and returns the matrices V and W which are needed to apply the transformation to the unreduced part of A.

If UPLO = MagmaUpper, DLATRD reduces the last NB rows and columns of a matrix, of which the upper triangle is supplied; if UPLO = MagmaLower, DLATRD reduces the first NB rows and columns of a matrix, of which the lower triangle is supplied.

This is an auxiliary routine called by DSYTRD.

Parameters

[in]	uplo	magma_uplo_t Specifies whether the upper or lower triangular part of the symmetric matrix A is stored:

= MagmaUpper: Upper triangular

= MagmaLower: Lower triangular

[in]	n	INTEGER The order of the matrix A.

[in]	nb	INTEGER The number of rows and columns to be reduced.

[in,out]	A	DOUBLE_PRECISION array, dimension (LDA,N) On entry, the symmetric matrix A. If UPLO = MagmaUpper, the leading n-by-n upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading n-by-n lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit:

if UPLO = MagmaUpper, the last NB columns have been reduced to tridiagonal form, with the diagonal elements overwriting the diagonal elements of A; the elements above the diagonal with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors;

if UPLO = MagmaLower, the first NB columns have been reduced to tridiagonal form, with the diagonal elements overwriting the diagonal elements of A; the elements below the diagonal with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details.

[in]	lda	INTEGER The leading dimension of the array A. LDA >= (1,N).

[out]	e	DOUBLE_PRECISION array, dimension (N-1) If UPLO = MagmaUpper, E(n-nb:n-1) contains the superdiagonal elements of the last NB columns of the reduced matrix; if UPLO = MagmaLower, E(1:nb) contains the subdiagonal elements of the first NB columns of the reduced matrix.

[out]	tau	DOUBLE_PRECISION array, dimension (N-1) The scalar factors of the elementary reflectors, stored in TAU(n-nb:n-1) if UPLO = MagmaUpper, and in TAU(1:nb) if UPLO = MagmaLower. See Further Details.

[out]	W	DOUBLE_PRECISION array, dimension (LDW,NB) The n-by-nb matrix W required to update the unreduced part of A.

[in]	ldw	INTEGER The leading dimension of the array W. LDW >= max(1,N).

Further Details

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors

Q = H(n) H(n-1) . . . H(n-nb+1).

Each H(i) has the form

H(i) = I - tau * v * v'

where tau is a real scalar, and v is a real vector with v(i:n) = 0 and v(i-1) = 1; v(1:i-1) is stored on exit in A(1:i-1,i), and tau in TAU(i-1).

If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors

Q = H(1) H(2) . . . H(nb).

Each H(i) has the form

H(i) = I - tau * v * v'

where tau is a real scalar, and v is a real vector with v(1:i) = 0 and v(i+1) = 1; v(i+1:n) is stored on exit in A(i+1:n,i), and tau in TAU(i).

The elements of the vectors v together form the n-by-nb matrix V which is needed, with W, to apply the transformation to the unreduced part of the matrix, using a symmetric rank-2k update of the form: A := A - V*W' - W*V'.

The contents of A on exit are illustrated by the following examples with n = 5 and nb = 2:

if UPLO = MagmaUpper: if UPLO = MagmaLower:

( a a a v4 v5 ) ( d ) ( a a v4 v5 ) ( 1 d ) ( a 1 v5 ) ( v1 1 a ) ( d 1 ) ( v1 v2 a a ) ( d ) ( v1 v2 a a a )

where d denotes a diagonal element of the reduced matrix, a denotes an element of the original matrix that is unchanged, and vi denotes an element of the vector defining H(i).

          magma_int_t magma_dlatrd2
          (
          magma_uplo_t
          uplo,

          magma_int_t
          n,

          magma_int_t
          nb,

          double *
          A,

          magma_int_t
          lda,

          double *
          e,

          double *
          tau,

          double *
          W,

          magma_int_t
          ldw,

          double *
          dA,

          magma_int_t
          ldda,

          double *
          dW,

          magma_int_t
          lddw,

          double *
          dwork,

          magma_int_t
          ldwork

          )

DLATRD2 reduces NB rows and columns of a real symmetric matrix A to symmetric tridiagonal form by an orthogonal similarity transformation Q' * A * Q, and returns the matrices V and W which are needed to apply the transformation to the unreduced part of A.

If UPLO = MagmaUpper, DLATRD reduces the last NB rows and columns of a matrix, of which the upper triangle is supplied; if UPLO = MagmaLower, DLATRD reduces the first NB rows and columns of a matrix, of which the lower triangle is supplied.

This is an auxiliary routine called by DSYTRD2_GPU. It uses an accelerated HEMV that needs extra memory.

Parameters

[in]	uplo	magma_uplo_t Specifies whether the upper or lower triangular part of the symmetric matrix A is stored:

= MagmaUpper: Upper triangular

= MagmaLower: Lower triangular

[in]	n	INTEGER The order of the matrix A.

[in]	nb	INTEGER The number of rows and columns to be reduced.

[in,out]	A	DOUBLE_PRECISION array, dimension (LDA,N) On entry, the symmetric matrix A. If UPLO = MagmaUpper, the leading n-by-n upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading n-by-n lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit:

if UPLO = MagmaUpper, the last NB columns have been reduced to tridiagonal form, with the diagonal elements overwriting the diagonal elements of A; the elements above the diagonal with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors;

if UPLO = MagmaLower, the first NB columns have been reduced to tridiagonal form, with the diagonal elements overwriting the diagonal elements of A; the elements below the diagonal with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details.

[in]	lda	INTEGER The leading dimension of the array A. LDA >= (1,N).

[out]	e	DOUBLE_PRECISION array, dimension (N-1) If UPLO = MagmaUpper, E(n-nb:n-1) contains the superdiagonal elements of the last NB columns of the reduced matrix; if UPLO = MagmaLower, E(1:nb) contains the subdiagonal elements of the first NB columns of the reduced matrix.

[out]	tau	DOUBLE_PRECISION array, dimension (N-1) The scalar factors of the elementary reflectors, stored in TAU(n-nb:n-1) if UPLO = MagmaUpper, and in TAU(1:nb) if UPLO = MagmaLower. See Further Details.

[out]	W	DOUBLE_PRECISION array, dimension (LDW,NB) The n-by-nb matrix W required to update the unreduced part of A.

[in]	ldw	INTEGER The leading dimension of the array W. LDW >= max(1,N).

Further Details

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors

Q = H(n) H(n-1) . . . H(n-nb+1).

Each H(i) has the form

H(i) = I - tau * v * v'

where tau is a real scalar, and v is a real vector with v(i:n) = 0 and v(i-1) = 1; v(1:i-1) is stored on exit in A(1:i-1,i), and tau in TAU(i-1).

If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors

Q = H(1) H(2) . . . H(nb).

Each H(i) has the form

H(i) = I - tau * v * v'

where tau is a real scalar, and v is a real vector with v(1:i) = 0 and v(i+1) = 1; v(i+1:n) is stored on exit in A(i+1:n,i), and tau in TAU(i).

The elements of the vectors v together form the n-by-nb matrix V which is needed, with W, to apply the transformation to the unreduced part of the matrix, using a symmetric rank-2k update of the form: A := A - V*W' - W*V'.

The contents of A on exit are illustrated by the following examples with n = 5 and nb = 2:

if UPLO = MagmaUpper: if UPLO = MagmaLower:

(  a   a   a   v4  v5 )              (  d                  )
(      a   a   v4  v5 )              (  1   d              )
(          a   1   v5 )              (  v1  1   a          )
(              d   1  )              (  v1  v2  a   a      )
(                  d  )              (  v1  v2  a   a   a  )

where d denotes a diagonal element of the reduced matrix, a denotes an element of the original matrix that is unchanged, and vi denotes an element of the vector defining H(i).

          double magma_dlatrd_mgpu
          (
          magma_int_t
          num_gpus,

          magma_uplo_t
          uplo,

          magma_int_t
          n0,

          magma_int_t
          n,

          magma_int_t
          nb,

          magma_int_t
          nb0,

          double *
          A,

          magma_int_t
          lda,

          double *
          e,

          double *
          tau,

          double *
          W,

          magma_int_t
          ldw,

          double **
          dA,

          magma_int_t
          ldda,

          magma_int_t
          offset,

          double **
          dW,

          magma_int_t
          lddw,

          double *
          dwork[MagmaMaxGPUs],

          magma_int_t
          ldwork,

          magma_int_t
          k,

          double *
          dx[MagmaMaxGPUs],

          double *
          dy[MagmaMaxGPUs],

          double *
          work,

          magma_queue_t
          stream[][10],

          double *
          times

          )

DLATRD reduces NB rows and columns of a real symmetric matrix A to symmetric tridiagonal form by an orthogonal similarity transformation Q' * A * Q, and returns the matrices V and W which are needed to apply the transformation to the unreduced part of A.

If UPLO = MagmaUpper, DLATRD reduces the last NB rows and columns of a matrix, of which the upper triangle is supplied; if UPLO = MagmaLower, DLATRD reduces the first NB rows and columns of a matrix, of which the lower triangle is supplied.

This is an auxiliary routine called by DSYTRD.

Parameters

[in]	uplo	magma_uplo_t Specifies whether the upper or lower triangular part of the symmetric matrix A is stored:

= MagmaUpper: Upper triangular

= MagmaLower: Lower triangular

[in]	n	INTEGER The order of the matrix A.

[in]	nb	INTEGER The number of rows and columns to be reduced.

[in,out]	A	DOUBLE_PRECISION array, dimension (LDA,N) On entry, the symmetric matrix A. If UPLO = MagmaUpper, the leading n-by-n upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = MagmaLower, the leading n-by-n lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit:

if UPLO = MagmaUpper, the last NB columns have been reduced to tridiagonal form, with the diagonal elements overwriting the diagonal elements of A; the elements above the diagonal with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors;

if UPLO = MagmaLower, the first NB columns have been reduced to tridiagonal form, with the diagonal elements overwriting the diagonal elements of A; the elements below the diagonal with the array TAU, represent the orthogonal matrix Q as a product of elementary reflectors. See Further Details.

[in]	lda	INTEGER The leading dimension of the array A. LDA >= (1,N).

[out]	e	DOUBLE_PRECISION array, dimension (N-1) If UPLO = MagmaUpper, E(n-nb:n-1) contains the superdiagonal elements of the last NB columns of the reduced matrix; if UPLO = MagmaLower, E(1:nb) contains the subdiagonal elements of the first NB columns of the reduced matrix.

[out]	tau	DOUBLE_PRECISION array, dimension (N-1) The scalar factors of the elementary reflectors, stored in TAU(n-nb:n-1) if UPLO = MagmaUpper, and in TAU(1:nb) if UPLO = MagmaLower. See Further Details.

[out]	W	DOUBLE_PRECISION array, dimension (LDW,NB) The n-by-nb matrix W required to update the unreduced part of A.

[in]	ldw	INTEGER The leading dimension of the array W. LDW >= max(1,N).

Further Details

If UPLO = MagmaUpper, the matrix Q is represented as a product of elementary reflectors

Q = H(n) H(n-1) . . . H(n-nb+1).

Each H(i) has the form

H(i) = I - tau * v * v'

where tau is a real scalar, and v is a real vector with v(i:n) = 0 and v(i-1) = 1; v(1:i-1) is stored on exit in A(1:i-1,i), and tau in TAU(i-1).

If UPLO = MagmaLower, the matrix Q is represented as a product of elementary reflectors

Q = H(1) H(2) . . . H(nb).

Each H(i) has the form

H(i) = I - tau * v * v'

where tau is a real scalar, and v is a real vector with v(1:i) = 0 and v(i+1) = 1; v(i+1:n) is stored on exit in A(i+1:n,i), and tau in TAU(i).

The elements of the vectors v together form the n-by-nb matrix V which is needed, with W, to apply the transformation to the unreduced part of the matrix, using a symmetric rank-2k update of the form: A := A - V*W' - W*V'.

The contents of A on exit are illustrated by the following examples with n = 5 and nb = 2:

if UPLO = MagmaUpper: if UPLO = MagmaLower:

( a a a v4 v5 ) ( d ) ( a a v4 v5 ) ( 1 d ) ( a 1 v5 ) ( v1 1 a ) ( d 1 ) ( v1 v2 a a ) ( d ) ( v1 v2 a a a )

where d denotes a diagonal element of the reduced matrix, a denotes an element of the original matrix that is unchanged, and vi denotes an element of the vector defining H(i).

Generated on Fri Jul 18 2014 17:34:43 for MAGMA by

     1.8.7


text:
AFL Forms
Community Action Teams
Government Taking On A Health and Safety Headache in Swan Hills Plant
EDMONTON - The Alberta Federation of Labour released documents today accessed through the Freedom of Information Act which show that Bovar employees have elevated PCB levels in their blood and that health and safety incidents such as spills and leaks of contaminated waste is frequent on the Swan Hills site.
"If the government intends to take over Swan Hills, they had better know that they have a huge health and safety problem at that site," says AFL President Audrey Cormack. "Documents we received through FOIP show that PCB blood levels in Bovar workers have grown steadily since 1993. The documents also show that Bovar's health and safety record is questionable."
"When the government takes over, their first priority better be cleaning up the site and doing a better job of protecting the workers."
Cormack pointed out that Bovar records show that in 1993 blood levels of PCBs averaged 1.8 PPB in Swan Hills workers. By 1997, this number reached 8.25 PPB. In 1999 the level was 7.28 (chart attached). A Bovar memo relates the small drop to "the increase of new employees who may not have been exposed to PCB's previously." (memo dated July 17, 1998).
The documents also show that in 1998 that 4% of Bovar's workforce had PCB blood levels over 30 ppb, which is the level at which immediate action is required to limit PCB exposure. While the scientific measurements of PCB blood levels are very complicated, most experts consider the levels seen at the Swan Hill plant to be above normal and at a level that should be addresssed.
"The documents also show that the Swan Hills plant has a track record of consistent spills and leaks of contaminated waste," adds Cormack. Health and Safety reports show that spills or leaks causing exposure to hazards happen monthly at the Swan Hills site.
"My primary concern is the welfare of those workers," says Cormack. "Bovar has clearly not done a good enough job protecting them from PCBs and other hazards. If the government is going to step in, they had better do a better job than Bovar did."
Cormack urged the government to bring in scientific experts independent of the Swan Hills Plant to study the problem and offer actions that can be taken to protect the workers. She also wonders why the government never cracked down on Bovar during all these years of health and safety problems.
"If they can't assure the safety of the workers at the plant, it should be shut down until they can, and the workers compensated for the loss of employment and for the exposure to PCBs." Cormack concluded.
Audrey M. Cormack, President at 499-6530 (cell) or428-9367 (hm)
Jason Foster at 910-1137 (cell) or 471-5525 (office)
Worker Health and Safety Press Release
Alberta Federation of Labour © 2021
#300, 10408 - 124 Street
Edmonton, Alberta T5N 1R5
Email: afl@afl.org
with NationBuilder

redpajama_set_name: RedPajamaCommonCrawl