C GMOMV SOURCE GOUNAND 11/10/07 21:15:28 7149 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 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=max(nbesc,1) 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 * en multithread il peut y avoir n'importe quoi dans oov(1) du * aux acces simultanés et ca crache gemat. donc : oov(1)=0 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