8.4.6 pvger

a= PyPBLAS.pvger(alpha,x,y,a)

La función "PyPBLAS.pvger" implementa la siguiente operación:


\begin{displaymath}\alpha \cdot x \times y^{T} + A \to A \end{displaymath}

Las dimensiones de los vectores x e y y de la matriz A han

de ser las adecuadas para poder realizar la multiplicacion entre ambos. En el caso que las dimensiones de alguna de las entradas no sea correcta, la rutina PyPBLASpvger informará de ello y no podrá finalizar la operación.

Esta rutina se provee únicamente para matrices con elementos de tipo real, si los elementos fueran complejos se deberá utilizar la rutina PyPBLAS.pvgeru o PyPBLAS.pvgerc . Las características de cada uno de los parámetros son las siguientes:

Tanto los vectores y las matrices de entrada han de ser de tipo PyACTS. El resultado es un vector de tipo PyACTs también. A continuación mostramos un ejemplo en la utilización de esta rutina:

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 2: PvGER"
        print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol
        print "Block's size:",PyACTS.mb,"*",PyACTS.nb
        alpha=5
        print "alpha=",alpha
        x=ones([n,1])
        print "x'=",transpose(x)
        y=reshape(array(range(n)),[n,1])
        print "y'=",transpose(y)
        a=identity(n)
        print "a=",a
else:
        alpha,a,x,y=None,None,None,None
#We convert Numeric Array to PyACTS.Scalapack Array
ACTS_lib=1 # 1=Scalapack
alpha=Scal2PyACTS(alpha,ACTS_lib)
x=Num2PyACTS(x,ACTS_lib)
y=Num2PyACTS(y,ACTS_lib)
a=Num2PyACTS(a,ACTS_lib)
#We call PBLAS routine
a= PyPBLAS.pvger(alpha,x,y,a)
a_num=PyACTS2Num(a)
if PyACTS.iread==1:
        print "PvGER=",transpose(a_num)
PyACTS.gridexit()
El resultado de este código es el siguiente:
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvger.py
Example of using PyPBLAS 2: PvGER
N= 8 ;nprow x npcol: 2 x 2
Block's size: 2 * 2
alpha= 5
x'= [ [1 1 1 1 1 1 1 1]]
y'= [ [0 1 2 3 4 5 6 7]]
a= [[1 0 0 0 0 0 0 0]
 [0 1 0 0 0 0 0 0]
 [0 0 1 0 0 0 0 0]
 [0 0 0 1 0 0 0 0]
 [0 0 0 0 1 0 0 0]
 [0 0 0 0 0 1 0 0]
 [0 0 0 0 0 0 1 0]
 [0 0 0 0 0 0 0 1]]
PvGER= [[  1.   0.   0.   0.   0.   0.   0.   0.]
 [  5.   6.   5.   5.   5.   5.   5.   5.]
 [ 10.  10.  11.  10.  10.  10.  10.  10.]
 [ 15.  15.  15.  16.  15.  15.  15.  15.]
 [ 20.  20.  20.  20.  21.  20.  20.  20.]
 [ 25.  25.  25.  25.  25.  26.  25.  25.]
 [ 30.  30.  30.  30.  30.  30.  31.  30.]
 [ 35.  35.  35.  35.  35.  35.  35.  36.]]

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