8.5.9 pvtranu

c=PyPBLAS.pvtranu(alpha,a,beta,c)

La función "PyPBLAS.pvtranu" implementa la siguiente operación entre matrices con elementos de tipo complejo:

\begin{displaymath}\beta \cdot C+ \alpha \cdot A^T + \to C \end{displaymath}

En el caso que las dimensiones de alguna de las entradas no sea correcta, la rutina PyPBLASpvtranu informará de ello y no podrá finalizar la operación.

Se ha de tener en cuenta que los vectores,matrices y escalares de entrada han de ser de tipo PyACTS. 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 rutina:

from PyACTS import *
import PyACTS.PyPBLAS as PyPBLAS
from RandomArray import *
from Numeric import *
m,n=8,6
#Initiliaze the Grid
PyACTS.gridinit()
if PyACTS.iread==1:
        print "Example of using PyPBLAS 3: PvTRANU"
        print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol
        print "Block's size:",PyACTS.mb,"*",PyACTS.nb
        a=reshape(range(m*n),[n,m])*(1+1.j)
        print "a=",a
        c=ones([m,n])*(1-1.j)
        print "c=",c
        alpha,beta=2.,3.
        print "alpha=",alpha,";","beta=",beta
else:
        alpha,a,beta,c=None,None,None,None
#We convert Numeric Array to PyACTS.Scalapack Array
ACTS_lib=1 # 1=Scalapack
alpha=Scal2PyACTS(alpha,ACTS_lib)
beta=Scal2PyACTS(beta,ACTS_lib)
a=Num2PyACTS(a,ACTS_lib)
c=Num2PyACTS(c,ACTS_lib)
#We call PBLAS routine
c= PyPBLAS.pvtranu(alpha,a,beta,c)
c_num=PyACTS2Num(c)
if PyACTS.iread==1:
        print "PvTRANU=",transpose(c_num)
PyACTS.gridexit()
El resultado de este código es el siguiente:
vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvtranu.py
Example of using PyPBLAS 3: PvTRANU
N= 6 ;nprow x npcol: 2 x 2
Block's size: 2 * 2
a= [[  0. +0.j   1. +1.j   2. +2.j   3. +3.j   4. +4.j   5. +5.j
         6. +6.j   7. +7.j]
 [  8. +8.j   9. +9.j  10.+10.j  11.+11.j  12.+12.j  13.+13.j
        14.+14.j  15.+15.j]
 [ 16.+16.j  17.+17.j  18.+18.j  19.+19.j  20.+20.j  21.+21.j
        22.+22.j  23.+23.j]
 [ 24.+24.j  25.+25.j  26.+26.j  27.+27.j  28.+28.j  29.+29.j
        30.+30.j  31.+31.j]
 [ 32.+32.j  33.+33.j  34.+34.j  35.+35.j  36.+36.j  37.+37.j
        38.+38.j  39.+39.j]
 [ 40.+40.j  41.+41.j  42.+42.j  43.+43.j  44.+44.j  45.+45.j
        46.+46.j  47.+47.j]]
c= [[ 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]]
alpha= 2.0 ; beta= 3.0
PvTRANU= [[  3. -3.j   5. -1.j   7. +1.j   9. +3.j  11. +5.j  13. +7.j
        15. +9.j  17.+11.j]
 [ 19.+13.j  21.+15.j  23.+17.j  25.+19.j  27.+21.j  29.+23.j
        31.+25.j  33.+27.j]
 [ 35.+29.j  37.+31.j  39.+33.j  41.+35.j  43.+37.j  45.+39.j
        47.+41.j  49.+43.j]
 [ 51.+45.j  53.+47.j  55.+49.j  57.+51.j  59.+53.j  61.+55.j
        63.+57.j  65.+59.j]
 [ 67.+61.j  69.+63.j  71.+65.j  73.+67.j  75.+69.j  77.+71.j
        79.+73.j  81.+75.j]
 [ 83.+77.j  85.+79.j  87.+81.j  89.+83.j  91.+85.j  93.+87.j
        95.+89.j  97.+91.j]]

En el ejemplo mostrado podemos ver como generamos las matrices a y c con las dimensiones adecuadas para poder realizar la operación , por tanto a es $n \times m$ y b es $m\times n$ resultado una matriz de tamaño $m\times n$.

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