      PROGRAM TEST_BLAS
!
!=================================================================================
!=================================================================================
! CRIHAN     11/2000
! Guy Moebs   Guy.Moebs@crihan.fr
!
! Utilisation de la bibliotheque scientifique BLAS (www.netlib.org) en Fortran
!
! Calcul du vecteur R = ( U*(tU) + LAMBDA*V*(tV) )  *  ( U + V )
!
! FUNCTION(S) APPELEE(S) :
!     DDOT    produit scalaire de 2 vecteurs                   en double precision 
!
! SUBROUTINE(S) APPELEE(S) :
!     DGER    construction de la matrice A <- a * U * (tV) + A en double precision
!     DAXPY   construction du vecteur Y <- Y + a * X           en double precision
!     DGEMV   calcul du vecteur Y <- a * A * x + b * Y         en double precision
!
!=================================================================================
!=================================================================================
!
!     DECLARATIONS
!
!=================================================================================
!=================================================================================
!
! MODULE(S) NECESSAIRE(S)
!
      use modscal
!
      IMPLICIT NONE
!
! DECLARATION DES VARIABLES
!
      REAL(rp),  ALLOCATABLE,  DIMENSION(:,:)  ::  A
      REAL(rp),  ALLOCATABLE,  DIMENSION(:)    ::  U
      REAL(rp),  ALLOCATABLE,  DIMENSION(:)    ::  V
!
      REAL(rp)   ::  LAMBDA
      REAL(rp)   ::  ALPHA
      REAL(rp)   ::  BETA
      REAL(rp)   ::  scal
!
      INTEGER    ::  N
      INTEGER    ::  INCU
      INTEGER    ::  INCV
      INTEGER    ::  I
      INTEGER    ::  J
      INTEGER    ::  ierr = 0
!
! DECLARATION DES FUNCTION(S) EXTERIEURE(S)
!
      REAL(rp)   ::  DDOT_
      EXTERNAL   ::  DDOT_
!
!=================================================================================
!=================================================================================
!
!     DEBUT DU PROGRAMME
!
!=================================================================================
!=================================================================================
!
!----Lecture des dimensions du probleme
!
      OPEN ( 19, FILE = 'blas.dat', STATUS = 'OLD' )
      READ (19, *) N
      CLOSE (19)
!
!----Allocation dynamique
      ALLOCATE ( A(N,N), U(N), V(N), STAT = ierr )
      IF (ierr /= 0) THEN
!
         WRITE (6,*) ' Probleme allocation A, U, V'
         WRITE (6,*) ' ierr = ', ierr
         STOP
!
      END IF
!
!----Initialisation des vecteurs U et V
!
      scal = 5.0_rp / 12.0_rp
      U (1:N) = scal
!
      DO I = 1, N
         V (I) = 0.2_rp + REAL (I, rp)
      END DO
!
      A (1:N, 1:N) = zero
!
      WRITE (6,1010) 'Resultats : ', U (1), U (2), U (N-1), U (N)
!
!
!-----Calcul de LAMBDA = U'*V
!
      INCU = 1
      INCV = 1
!
      LAMBDA = DDOT_ ( N, U, INCU, V, INCV )
!
      WRITE (6,1010) 'Resultats : ', LAMBDA
!
!-----Calcul de la matrice A = un * U * (tU) + A
!
      ALPHA = un
!
      CALL DGER_ ( N, N, ALPHA, U, INCU, U, INCU, A, N )
!
      WRITE (6,1010) 'Resultats : ', A (1,1), A(N,N)
!
!-----Calcul de la matrice A = LAMBDA * V * (tV) + A
!
      CALL DGER_ ( N, N, LAMBDA, V, INCV, V, INCV, A, N )
!
      WRITE (6,1010) 'Resultats : ', A (1,1), A(N,N)
!
!-----Calcul du vecteur V = U + V
!
      ALPHA = un
!
      CALL DAXPY_ ( N, ALPHA, U, INCU, V, INCV )
!
      WRITE (6,1010) 'Resultats : ', V (1), V (N)
!
!-----Calcul du U = ALPHA * A * V + BETA * U
!
      ALPHA = un
      BETA  = zero
!
      CALL DGEMV_ ('T', N, N, ALPHA, A, N, V, INCV, BETA, U, INCU)
!
!-----Affichage des resultats
!
      WRITE (6,1010) 'Resultats : ', U (1), U (2), U (N-1), U (N)
 1010 FORMAT ( A, 4E12.4 )
!
!-----Liberation de la memoire
!
      DEALLOCATE ( A, U, V )
!
!=================================================================================
!=================================================================================
!
!     FIN DU PROGRAMME
!
!=================================================================================
!=================================================================================
!
      STOP
      END PROGRAM TEST_BLAS

