C GMOMV     SOURCE    PV        20/09/26    21:17:08     10724          
      SUBROUTINE GMOMV(IMVEC,TRANS,ALPHA,KMORS,KISA,X,BETA,Y)
      IMPLICIT REAL*8 (A-H,O-Z)
      IMPLICIT INTEGER (I-N)
C***********************************************************************
C NOM         : GMOMV
C DESCRIPTION : Interface à DMOMV parallèle
C
C
C
C LANGAGE     : ESOPE
C AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
C               mél : gounand@semt2.smts.cea.fr
C***********************************************************************
C APPELES          :
C APPELES (E/S)    :
C APPELES (BLAS)   :
C APPELES (CALCUL) :
C APPELE PAR       :
C***********************************************************************
C SYNTAXE GIBIANE    :
C ENTREES            :
C ENTREES/SORTIES    :
C SORTIES            :
C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
C***********************************************************************
C VERSION    : v1, 09/02/2006, version initiale
C HISTORIQUE : v1, 09/02/2006, création
C HISTORIQUE :     08/01/2008, ajout petit parallélisme
C HISTORIQUE :
C***********************************************************************
C Prière de PRENDRE LE TEMPS de compléter les commentaires
C en cas de modification de ce sous-programme afin de faciliter
C la maintenance !
C***********************************************************************

-INC PPARAM
-INC CCOPTIO
-INC SMMATRIK
      POINTEUR KMORS.PMORS
      POINTEUR KISA.IZA
      POINTEUR X.IZA,Y.IZA
-INC CCASSIS
      CHARACTER*1        TRANS
      LOGICAL            LSAME
      EXTERNAL           LSAME
      EXTERNAL GMOMVI
      COMMON/CGMOMV/xac,xbc,kmorsc,kisac,kxc,kyc,itran,nbthr,imvecc
*
      INTEGER IMPR,IRET
      PARAMETER (NGRAND=100000)
      LOGICAL LPARA
*
* Executable statements
*
      N =KMORS.IA(/1)-1
*
      LPARA=.TRUE.
      if (.NOT.LSAME(TRANS,'N')) THEN
         itran=1
      else
         itran=0
      ENDIF
      IF (ITRAN.EQ.1) LPARA=.FALSE.
*      IF (N.LT.NGRAND) LPARA=.FALSE.
      IF (IMVEC.EQ.0) LPARA=.FALSE.
*      WRITE(IOIMP,*) 'LPARA=',LPARA
*      IF (N.GT.NGRAND) THEN
      IF (LPARA) THEN
* Parallélisme recopié de chole3
         xac=alpha
         xbc=beta
         kmorsc=kmors
         kisac=kisa
         kxc=x
         kyc=y
         imvecc=imvec
*
         nbthro=nbthrs
         if (nbthro.gt.1) call threadii
         nbthr=nbthro
         if (nbthr.gt.1) then
            do ithr=1,nbthr
               call threadid(ithr,gmomvi)
            enddo
            do ithr=1,nbthr
               call threadif(ithr)
            enddo
         else
            do ithr=1,nbthr
               call gmomvi(ithr)
            enddo
         endif
         if (nbthr.gt.1) call threadis
      ELSE
         NNZ =KMORS.JA(/1)
         CALL DMOMV(TRANS,N,ALPHA,
     $        NNZ,KMORS.IA,KMORS.JA,KISA.A,
     $        X.A,BETA,Y.A)
      ENDIF
*
* Normal termination
*
      RETURN
*
* End of subroutine GMOMV
*
      END







 
 
 
 
