1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      87
      88
      89
      90
      91
      92
      93
      94
      95
      96
      97
      98
      99
     100
     101
     102
     103
     104
     105
     106
     107
     108
     109
     110
     111
     112
     113
     114
     115
     116
     117
     118
     119
     120
     121
     122
     123
     124
     125
     126
     127
     128
     129
     130
     131
     132
     133
     134
     135
     136
     137
     138
     139
     140
     141
      SUBROUTINE DGLMTSNMPAAFLDABBFLDBDDFXU,
     $                   WORKLWORKRWORKRESULT )
*
*  -- LAPACK test routine (version 3.1) --
*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
*     November 2006
*
*     .. Scalar Arguments ..
      INTEGER            LDALDBLWORKMNP
      DOUBLE PRECISION   RESULT
*     ..
*     .. Array Arguments ..
*
*  Purpose
*  =======
*
*  DGLMTS tests DGGGLM - a subroutine for solving the generalized
*  linear model problem.
*
*  Arguments
*  =========
*
*  N       (input) INTEGER
*          The number of rows of the matrices A and B.  N >= 0.
*
*  M       (input) INTEGER
*          The number of columns of the matrix A.  M >= 0.
*
*  P       (input) INTEGER
*          The number of columns of the matrix B.  P >= 0.
*
*  A       (input) DOUBLE PRECISION array, dimension (LDA,M)
*          The N-by-M matrix A.
*
*  AF      (workspace) DOUBLE PRECISION array, dimension (LDA,M)
*
*  LDA     (input) INTEGER
*          The leading dimension of the arrays A, AF. LDA >= max(M,N).
*
*  B       (input) DOUBLE PRECISION array, dimension (LDB,P)
*          The N-by-P matrix A.
*
*  BF      (workspace) DOUBLE PRECISION array, dimension (LDB,P)
*
*  LDB     (input) INTEGER
*          The leading dimension of the arrays B, BF. LDB >= max(P,N).
*
*  D       (input) DOUBLE PRECISION array, dimension( N )
*          On input, the left hand side of the GLM.
*
*  DF      (workspace) DOUBLE PRECISION array, dimension( N )
*
*  X       (output) DOUBLE PRECISION array, dimension( M )
*          solution vector X in the GLM problem.
*
*  U       (output) DOUBLE PRECISION array, dimension( P )
*          solution vector U in the GLM problem.
*
*  WORK    (workspace) DOUBLE PRECISION array, dimension (LWORK)
*
*  LWORK   (input) INTEGER
*          The dimension of the array WORK.
*
*  RWORK   (workspace) DOUBLE PRECISION array, dimension (M)
*
*  RESULT   (output) DOUBLE PRECISION
*          The test ratio:
*                           norm( d - A*x - B*u )
*            RESULT = -----------------------------------------
*                     (norm(A)+norm(B))*(norm(x)+norm(u))*EPS
*
*  ====================================================================
*
      DOUBLE PRECISION   ALDA* ), AFLDA* ), BLDB* ),
     $                   BFLDB* ), D* ), DF* ), RWORK* ),
     $                   U* ), WORKLWORK ), X* )
*     ..
*     .. Parameters ..
      DOUBLE PRECISION   ZEROONE
      PARAMETER          ( ZERO = 0.0D+0ONE = 1.0D+0 )
*     ..
*     .. Local Scalars ..
      INTEGER            INFO
      DOUBLE PRECISION   ANORMBNORMDNORMEPSUNFLXNORMYNORM
*     ..
*     .. External Functions ..
      DOUBLE PRECISION   DASUMDLAMCHDLANGE
      EXTERNAL           DASUMDLAMCHDLANGE
*     ..
*     .. External Subroutines ..
*
      EXTERNAL           DCOPYDGEMVDGGGLMDLACPY
*     ..
*     .. Intrinsic Functions ..
      INTRINSIC          MAX
*     ..
*     .. Executable Statements ..
*
      EPS = DLAMCH'Epsilon' )
      UNFL = DLAMCH'Safe minimum' )
      ANORM = MAXDLANGE'1'NMALDARWORK ), UNFL )
      BNORM = MAXDLANGE'1'NPBLDBRWORK ), UNFL )
*
*     Copy the matrices A and B to the arrays AF and BF,
*     and the vector D the array DF.
*
      CALL DLACPY'Full'NMALDAAFLDA )
      CALL DLACPY'Full'NPBLDBBFLDB )
      CALL DCOPYND1DF1 )
*
*     Solve GLM problem
*
      CALL DGGGLMNMPAFLDABFLDBDFXUWORKLWORK,
     $             INFO )
*
*     Test the residual for the solution of LSE
*
*                       norm( d - A*x - B*u )
*       RESULT = -----------------------------------------
*                (norm(A)+norm(B))*(norm(x)+norm(u))*EPS
*
      CALL DCOPYND1DF1 )
      CALL DGEMV'No transpose'NM-ONEALDAX1ONEDF1 )
*
      CALL DGEMV'No transpose'NP-ONEBLDBU1ONEDF1 )
*
      DNORM = DASUMNDF1 )
      XNORM = DASUMMX1 ) + DASUMPU1 )
      YNORM = ANORM + BNORM
*
      IFXNORM.LE.ZERO ) THEN
         RESULT = ZERO
      ELSE
         RESULT = ( ( DNORM / YNORM ) / XNORM ) / EPS
      END IF
*
      RETURN
*
*     End of DGLMTS
*
      END