a= PyPBLAS.pvher2(alpha,x,y,a,[uplo='U'])
La función "PyPBLAS.pvher2" implementa la siguiente operación entre vectores y matrices con elementos de tipo complejo:
Se ha de tener en cuenta que
será el vector transpuesto conjugado de
x, mientras que
se corresponde con la transpuesta de x.
En el caso que las dimensiones de alguna de las entradas no sea correcta, la
rutina PyPBLASpvher2 informará de ello y no podrá finalizar la
operación.
Esta rutina se provee únicamente para matrices con elementos de tipo complejo.
Las características de cada uno de los parámetros son las siguientes:
Parametros de Entrada
uplo='U': Triangular Superior (valor por defecto).
uplo='L': Triangular Inferior.
Parametros de Salida
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=6
#Initiliaze the Grid
PyACTS.gridinit()
if PyACTS.iread==1:
print "Example of using PyPBLAS 2: PvHER2"
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])+1.j*reshape(range(n),[n,1])
print "x'=",transpose(x)
y=reshape(range(n),[n,1])+1.j*ones([n,1])
print "y'=",transpose(y)
a=identity(n,Complex)
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.pvher2(alpha,x,y,a)
a_num=PyACTS2Num(a)
if PyACTS.iread==1:
print "PvHER2=",transpose(a_num)
PyACTS.gridexit()
[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvher2.py Example of using PyPBLAS 2: PvHER2 N= 6 ;nprow x npcol: 2 x 2 Block's size: 2 * 2 alpha= 5 x'= [ [ 1.+0.j 1.+1.j 1.+2.j 1.+3.j 1.+4.j 1.+5.j]] y'= [ [ 0.+1.j 1.+1.j 2.+1.j 3.+1.j 4.+1.j 5.+1.j]] a= [[ 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 1.+0.j 0.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 1.+0.j 0.+0.j] [ 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 1.+0.j]] PvHER2= [[ 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 10.+0.j 21.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 20.+0.j 30.+0.j 41.+0.j 0.+0.j 0.+0.j 0.+0.j] [ 30.+0.j 40.+0.j 50.+0.j 61.+0.j 0.+0.j 0.+0.j] [ 40.+0.j 50.+0.j 60.+0.j 70.+0.j 81.+0.j 0.+0.j] [ 50.+0.j 60.+0.j 70.+0.j 80.+0.j 90.+0.j 101.+0.j]]
Se ha de tener en cuenta que el parámetro por defecto para uplo='U', es
decir, realizaremos los calculos unicamente que se encuentre en y por encima de
la diagonal de la matriz resultante. Si quisieramos obtener la parte por debajo
de la diagonal llamaríamos a la rutina del siguiente modo:
a,desca= PyPBLAS.pvher2(alpha,x,y,a,uplo='L')
See Sobre este documento... para sugerencias en cambios.