Files
lapack/TESTING/EIG/dlsets.f
Julie e18d437924 Making LAPACK's code eternal... no more version and date in source files.
GitHub is now enabling us to track accurately version and date.
No need for this anymore.
2021-03-25 10:16:58 -07:00

207 lines
5.2 KiB
FortranFixed

*> \brief \b DLSETS
*
* =========== DOCUMENTATION ===========
*
* Online html documentation available at
* http://www.netlib.org/lapack/explore-html/
*
* Definition:
* ===========
*
* SUBROUTINE DLSETS( M, P, N, A, AF, LDA, B, BF, LDB, C, CF, D, DF,
* X, WORK, LWORK, RWORK, RESULT )
*
* .. Scalar Arguments ..
* INTEGER LDA, LDB, LWORK, M, N, P
* ..
* .. Array Arguments ..
*
*
*> \par Purpose:
* =============
*>
*> \verbatim
*>
*> DLSETS tests DGGLSE - a subroutine for solving linear equality
*> constrained least square problem (LSE).
*> \endverbatim
*
* Arguments:
* ==========
*
*> \param[in] M
*> \verbatim
*> M is INTEGER
*> The number of rows of the matrix A. M >= 0.
*> \endverbatim
*>
*> \param[in] P
*> \verbatim
*> P is INTEGER
*> The number of rows of the matrix B. P >= 0.
*> \endverbatim
*>
*> \param[in] N
*> \verbatim
*> N is INTEGER
*> The number of columns of the matrices A and B. N >= 0.
*> \endverbatim
*>
*> \param[in] A
*> \verbatim
*> A is DOUBLE PRECISION array, dimension (LDA,N)
*> The M-by-N matrix A.
*> \endverbatim
*>
*> \param[out] AF
*> \verbatim
*> AF is DOUBLE PRECISION array, dimension (LDA,N)
*> \endverbatim
*>
*> \param[in] LDA
*> \verbatim
*> LDA is INTEGER
*> The leading dimension of the arrays A, AF, Q and R.
*> LDA >= max(M,N).
*> \endverbatim
*>
*> \param[in] B
*> \verbatim
*> B is DOUBLE PRECISION array, dimension (LDB,N)
*> The P-by-N matrix A.
*> \endverbatim
*>
*> \param[out] BF
*> \verbatim
*> BF is DOUBLE PRECISION array, dimension (LDB,N)
*> \endverbatim
*>
*> \param[in] LDB
*> \verbatim
*> LDB is INTEGER
*> The leading dimension of the arrays B, BF, V and S.
*> LDB >= max(P,N).
*> \endverbatim
*>
*> \param[in] C
*> \verbatim
*> C is DOUBLE PRECISION array, dimension( M )
*> the vector C in the LSE problem.
*> \endverbatim
*>
*> \param[out] CF
*> \verbatim
*> CF is DOUBLE PRECISION array, dimension( M )
*> \endverbatim
*>
*> \param[in] D
*> \verbatim
*> D is DOUBLE PRECISION array, dimension( P )
*> the vector D in the LSE problem.
*> \endverbatim
*>
*> \param[out] DF
*> \verbatim
*> DF is DOUBLE PRECISION array, dimension( P )
*> \endverbatim
*>
*> \param[out] X
*> \verbatim
*> X is DOUBLE PRECISION array, dimension( N )
*> solution vector X in the LSE problem.
*> \endverbatim
*>
*> \param[out] WORK
*> \verbatim
*> WORK is DOUBLE PRECISION array, dimension (LWORK)
*> \endverbatim
*>
*> \param[in] LWORK
*> \verbatim
*> LWORK is INTEGER
*> The dimension of the array WORK.
*> \endverbatim
*>
*> \param[out] RWORK
*> \verbatim
*> RWORK is DOUBLE PRECISION array, dimension (M)
*> \endverbatim
*>
*> \param[out] RESULT
*> \verbatim
*> RESULT is DOUBLE PRECISION array, dimension (2)
*> The test ratios:
*> RESULT(1) = norm( A*x - c )/ norm(A)*norm(X)*EPS
*> RESULT(2) = norm( B*x - d )/ norm(B)*norm(X)*EPS
*> \endverbatim
*
* Authors:
* ========
*
*> \author Univ. of Tennessee
*> \author Univ. of California Berkeley
*> \author Univ. of Colorado Denver
*> \author NAG Ltd.
*
*> \ingroup double_eig
*
* =====================================================================
SUBROUTINE DLSETS( M, P, N, A, AF, LDA, B, BF, LDB, C, CF, D, DF,
$ X, WORK, LWORK, RWORK, RESULT )
*
* -- LAPACK test routine --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
*
* .. Scalar Arguments ..
INTEGER LDA, LDB, LWORK, M, N, P
* ..
* .. Array Arguments ..
*
* ====================================================================
*
DOUBLE PRECISION A( LDA, * ), AF( LDA, * ), B( LDB, * ),
$ BF( LDB, * ), C( * ), CF( * ), D( * ), DF( * ),
$ RESULT( 2 ), RWORK( * ), WORK( LWORK ), X( * )
* ..
* .. Local Scalars ..
INTEGER INFO
* ..
* .. External Subroutines ..
EXTERNAL DCOPY, DGET02, DGGLSE, DLACPY
* ..
* .. Executable Statements ..
*
* Copy the matrices A and B to the arrays AF and BF,
* and the vectors C and D to the arrays CF and DF,
*
CALL DLACPY( 'Full', M, N, A, LDA, AF, LDA )
CALL DLACPY( 'Full', P, N, B, LDB, BF, LDB )
CALL DCOPY( M, C, 1, CF, 1 )
CALL DCOPY( P, D, 1, DF, 1 )
*
* Solve LSE problem
*
CALL DGGLSE( M, N, P, AF, LDA, BF, LDB, CF, DF, X, WORK, LWORK,
$ INFO )
*
* Test the residual for the solution of LSE
*
* Compute RESULT(1) = norm( A*x - c ) / norm(A)*norm(X)*EPS
*
CALL DCOPY( M, C, 1, CF, 1 )
CALL DCOPY( P, D, 1, DF, 1 )
CALL DGET02( 'No transpose', M, N, 1, A, LDA, X, N, CF, M, RWORK,
$ RESULT( 1 ) )
*
* Compute result(2) = norm( B*x - d ) / norm(B)*norm(X)*EPS
*
CALL DGET02( 'No transpose', P, N, 1, B, LDB, X, N, DF, P, RWORK,
$ RESULT( 2 ) )
*
RETURN
*
* End of DLSETS
*
END