b=PyPBLAS.pvtrsm(alpha,a,b[,side='L',uplo='U',transa='N',diag='N'])
La función "PyPBLAS.pvtrsm" implementa la siguiente operación entre
matrices asumiendo que las matrices a
y b
son matrices triangulares:
Donde depende del valor del parámetro "transa":
trans='N'
: No se se realiza ninguna operación sobre la matriz.
trans='T'
: Se realiza la transpuesta de : .
trans='C'
: Se realiza la transpuesta conjugada de : .
En el caso que las dimensiones de alguna de las entradas no sea correcta, la
rutina PyPBLASpvtrmm
informará de ello y no podrá finalizar la
operación.
Esta rutina se provee para matrices con elementos de tipo real y complejo.Las características de cada uno de los parámetros son las siguientes:
Parametros de Entrada
a
en la
operación:
side='L'
: (Valor por defecto).La operación que se realiza es:
.
side='R'
: La operación que se realiza es
.
uplo='U'
: (Valor por defecto).Las matrices son triangulares superiores
uplo='L'
: Las matrices son triangulares inferiores
a
:
transa='N'
:No transpuesta, es decir, no se realiza operación.(valor
por defecto)
transa='T'
:Transpuesta.
transa='C'
: Transpuesta conjugada.
diag='N'
: Matriz triangular NO unitaria (valor por defecto).
diag='U'
: Matriz triangular Unitaria.
Parametros de Salida
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: PvTRSM" print "N=",n,";nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol print "Block's size:",PyACTS.mb,"*",PyACTS.nb a=2*identity(m,Float) print "a=",a b=reshape(range(m*n),[m,n]) print "b=",b alpha=2. print "alpha=",alpha else: alpha,a,b=None,None,None #We convert Numeric Array to PyACTS.Scalapack Array ACTS_lib=1 # 1=Scalapack alpha=Scal2PyACTS(alpha,ACTS_lib) a=Num2PyACTS(a,ACTS_lib) b=Num2PyACTS(b,ACTS_lib) #We call PBLAS routine b= PyPBLAS.pvtrsm(alpha,a,b) b_num=PyACTS2Num(b) if PyACTS.iread==1: print "PvTRSM=",transpose(b_num) PyACTS.gridexit()
vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvtrsm.py Example of using PyPBLAS 3: PvTRSM N= 6 ;nprow x npcol: 2 x 2 Block's size: 2 * 2 a= [[ 2. 0. 0. 0. 0. 0. 0. 0.] [ 0. 2. 0. 0. 0. 0. 0. 0.] [ 0. 0. 2. 0. 0. 0. 0. 0.] [ 0. 0. 0. 2. 0. 0. 0. 0.] [ 0. 0. 0. 0. 2. 0. 0. 0.] [ 0. 0. 0. 0. 0. 2. 0. 0.] [ 0. 0. 0. 0. 0. 0. 2. 0.] [ 0. 0. 0. 0. 0. 0. 0. 2.]] b= [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23] [24 25 26 27 28 29] [30 31 32 33 34 35] [36 37 38 39 40 41] [42 43 44 45 46 47]] alpha= 2.0 PvTRSM= [[ 0. 6. 12. 18. 24. 30. 36. 42.] [ 1. 7. 13. 19. 25. 31. 37. 43.] [ 2. 8. 14. 20. 26. 32. 38. 44.] [ 3. 9. 15. 21. 27. 33. 39. 45.] [ 4. 10. 16. 22. 28. 34. 40. 46.] [ 5. 11. 17. 23. 29. 35. 41. 47.]]
Los paramentros side
, uplo
,transa
y diag
son parámetros opcionales que
tienen un valor establecido por defecto. En el caso que no se especifiquen estos
parámetros tomaraán sus valores por defecto. Para especificar un valor
diferente se puede realizar del siguiente modo:
b=PyPBLAS.pvtrsm(alpha,a,b,side='R',uplo='L')