8.4.2 pvhemv

y= PyPBLAS.pvhemv(alpha,a,x,beta,y[,uplo='U'])

La función "PyPBLAS.pvhemv" implementa la siguiente operación entre escalares (alpha,beta), vectores (x, y) y matrices (a), todos ellos de tipo PyACTS:

\begin{displaymath}\alpha\cdot A \cdot x + \beta \cdot y \to y\end{displaymath}

Las dimensiones de los vectores x e y y de la matriz A han de ser las adecuadas para poder realizar las operaciones correspondientes. En el caso que las dimensiones de alguna de las entradas no sea correcta, la rutina PyPBLASpvgemv informará de ello y no podrá finalizar la operación. Esta rutina se utiliza para el caso que las matrices y vectores sean de tipo complejo. Las características de cada uno de los parámetros son las siguientes:

A continuación mostramos un ejemplo en la utilización de esta función:
from PyACTS import *
import PyPBLAS
from RandomArray import *
from Numeric import *
#Dimension of Arrays
n=8
#Initiliaze the Grid
PyACTS.gridinit()
if PyACTS.iread==1:
        print "Example of using PyPBLAS: PvHEMV"
        print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol
        print "Block's size:",PyACTS.mb,"*",PyACTS.nb
        alpha,beta=2,3
        print "alpha=",alpha,"; beta=",beta
        a=(1+1j)*ones([n,n],Float)
        print "a=",a
        x=(1+2j)*reshape(array(range(n),Numeric.Float),[n,1])
        print "x'=",transpose(x)
        y=1j*ones([n,1],Float)
        print "y'=",transpose(y)
else:
        a,x,y,alpha,beta=None,None,None,None,None
#We convert Numeric Array to PyACTS.Scalapack Array
ACTS_lib=1 # 1=Scalapack
a=Num2PyACTS(a,ACTS_lib)
x=Num2PyACTS(x,ACTS_lib)
y=Num2PyACTS(y,ACTS_lib)
alpha=Scal2PyACTS(alpha,ACTS_lib)
beta=Scal2PyACTS(beta,ACTS_lib)

#We call PBLAS routine
y= PyPBLAS.pvhemv(alpha,a,x,beta,y)
y_num=PyACTS2Num(y)
if PyACTS.iread==1:
        print "PvHEMV'=",transpose(y_num)
PyACTS.gridexit()
Se ha de observar en este código que hemos El resultado de este código es el siguiente:
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvhemv.py
Example of using PyPBLAS: PvHEMV
N= 8 ;nprow x npcol: 2 x 2
Block's size: 2 * 2
alpha= 2 ; beta= 3
a= [[ 1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j
        1.+1.j]
 [ 1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j
        1.+1.j]
 [ 1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j
        1.+1.j]
 [ 1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j
        1.+1.j]
 [ 1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j
        1.+1.j]
 [ 1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j
        1.+1.j]
 [ 1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j
        1.+1.j]
 [ 1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j
        1.+1.j]]
x'= [ [ 0. +0.j  1. +2.j  2. +4.j  3. +6.j  4. +8.j  5.+10.j  6.+12.j
        7.+14.j]]
y'= [ [ 0.+1.j  0.+1.j  0.+1.j  0.+1.j  0.+1.j  0.+1.j  0.+1.j
        0.+1.j]]
PvHEMV'= [ [  2.59933934e+11 +6.81574502e+06j   8.88226410e+09 +2.40483881e+07j
         2.37569901e+11 +5.12000098e+03j   8.20592538e+09 +2.40483960e+07j
         0.00000000e+00 +1.00000000e+00j   0.00000000e+00 +1.00000000e+00j
         0.00000000e+00 +1.00000000e+00j   0.00000000e+00 +1.00000000e+00j]]

See Sobre este documento... para sugerencias en cambios.