8.3.7 pvdotc

dotc= PyPBLAS.pvdotc(x,y)

La función "PyPBLAS.pvdotc" realiza el producto escalar entre el vector y y el vector x. La operación se puede resumir como: "y=xT*y" donde xT representa a la traspuesta de x. Los vectores "x" e "y" pueden estar o no ditribuidos. En el caso que alguno o ambos no lo estén se distribuirán de forma transparente al usuario. La peculiaridad de esta función con respecto a la función PyPBLAS.pvdot () es el tipo de datos que contienen los vectores x e y. En este caso son de tipo complejo mientras que en la rutina anterior se trataba de números reales. Las características de cada uno de los parámetros son las siguientes:

Tanto el vector x e y han de ser vectores con elementos de tipo complejo, que pueden tener precision simple o doble.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: PvDOTC"
        print "Parameters:N=",n,";Grid:",PyACTS.nprow,"*",PyACTS.npcol
        print "Block's size:",PyACTS.mb,"*",PyACTS.nb
        x=(1+1j)*ones([n,1])
        y=reshape( (1+1j)*array(range(n),Complex),[n,1])
        print "x'=",transpose(x)
        print "y'=",transpose(y)
else:
        x,y=None,None
#We convert Numeric Array to PyACTS.Scalapack Array
ACTS_lib=1 # 1=Scalapack
x=Num2PyACTS(x,ACTS_lib)
y=Num2PyACTS(y,ACTS_lib)
#We call PyPblas Routine
dotc= PyPBLAS.pvdotc(x,y)
if PyACTS.iread==1:
        print "PvDOTC=",dotc
PyACTS.gridexit()
El resultado de este código es el siguiente:
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvdotc.py
Example of using PyPBLAS: PvDOTC
Parameters:N= 8 ;Grid: 2 * 2
Block's size: 2 * 2
x'= [ [ 1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j  1.+1.j
        1.+1.j]]
y'= [ [ 0.+0.j  1.+1.j  2.+2.j  3.+3.j  4.+4.j  5.+5.j  6.+6.j
        7.+7.j]]
PvDOTC= (56+0j)

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