6.4.4 PNetCDF2PyACTS

a_acts=PNetCDF2PyACTS(a_pnetcdf,ACTS_lib)
Para poder hacer uso de esta rutina es necesario tener instalada el paquete PyPNetCDF distribuido en :
http://ideafix.umh.es/pypnetcdf

Una vez instalado este paquete correctamente podremos hacer que interactúe con el paquete PyACTS mediante esta y otras rutinas que explicaremos a continuación. La principal finalidad de esta rutina es la de obtener los datos desde una instancia de un objeto PyPNetCDF para conseguir una variable de tipo PyACTS que nos permita utilizarla en las rutinas PyBLACS, PyPBLAS y PyScaLAPACK.

La utilización de esta rutina trata de ser muy sencilla, sin embargo para poder comprender su funcionamiento será necesario también entender el funcionamiento básico del paquete PyPNetCDF.

El proceso que se sigue en esta rutina será el siguiente:

  1. Cada proceso lee los parametros de interes de la instancia PyPNetCDF para crear el descriptor.
  2. Calcula el tamaño de sus matrices locales conforme a la distribución cíclica 2D, a la configuración de la malla de procesos y al tamaño de la matriz global, obtenido de las dimensiones de la variable PNetCDF.
  3. Cada proceso lee de forma independiente los datos situados en los índices correspondientes en función de la distribución cíclica 2D.

Las características de cada uno de los parámetros de entrada y salida son:

A continuación mostramos un ejemplo en la utilización de esta rutina:
	
	from PyACTS import *
	import PyACTS.PyPBLAS as PyPBLAS
	import PyACTS.pyscalapack as pyscalapack
	from PyPNetCDF.PNetCDF import *
	from RandomArray import *
	from Numeric import *
	#Initiliaze the Grid
	PyACTS.gridinit()
	file = PNetCDFFile('data_pvgemm.nc', 'r')
	if PyACTS.iread==1:
	  print "Example Using PyPBLAS 3 (PvGEMM) y and PyPNetCDF "
	  print "nprow x npcol:",PyACTS.nprow,"x",PyACTS.npcol
	  print "Tam. Bloques:",PyACTS.mb,"*",PyACTS.nb
		
	a = file.variables['a']
	b = file.variables['b']
	c = file.variables['c']
	#We convert NetCDF Variables to PyACTS.Scalapack Array
	ACTS_lib=1 # 1=Scalapack
	alpha1=PNetCDF2ScalPyACTS(file.alpha[0],ACTS_lib)
	beta1=PNetCDF2ScalPyACTS(file.beta[0],ACTS_lib)
	a1=PNetCDF2PyACTS(a,ACTS_lib) 
	b1=PNetCDF2PyACTS(b,ACTS_lib)
	c1=PNetCDF2PyACTS(c,ACTS_lib)
	#We call PBLAS routine
	c1= PyPBLAS.pvgemm(alpha1,a1,b1,beta1,c1)
	#Create Results File in NetCDF Format
	file2 = PNetCDFFile('result_data_pvgemm.nc', 'w')
	file2.title = "Result of operation with pvgemm"
	file2.version = 1
	for dim in file.dimensions:
	  file2.createDimension(dim, file.dimensions[dim])
	c_result = file2.createVariable('c_result', c.vartypecode, c.dimensions)
	file2.enddef()
	#Write results from PyACTS data to a  NetCDF File
	c_result=PyACTS2PNetCDF(c1,c_result)
	file2.close()
	file.close()
	PyACTS.gridexit()
El resultado de este código es el siguiente:
	[vgaliano@localhost EXAMPLES]$ mpirun -np 4 mpipython exPypvgemm.py
See Sobre este documento... para sugerencias en cambios.