La pérdida de carga en conducciones con Gnumeric en Ubuntu

Como ya comenté en «Probando Gnumeric en Ubuntu», uno de los requisitos que debía cumplir Gnumeric es que permitiera implementar funciones.

En ese primer ejemplo, simplemente se trataba de demostrar las posibilidades de Gnumeric, y explicar por encima como se podía implementar una sencilla función.

Ahora, añadimos una nueva función a la lista. Se trata de calcular la pérdidad de carga en una conducción. Para ello utilizaré lo indicado en el post referente a «Calcular la fricción en tuberías«.

Como hacerlo:

Como he indicado, se utiliza la expresión de la fórmula de Colebrook-White para calcular la fricción:

Lo primero es hacer la función en python:

[python]

# my-func.py

from Gnumeric import GnumericError, GnumericErrorVALUE

import Gnumeric

import string

import math

# Una funcion brutal (suma dos valores)

def func_add(num1, num2):

‘@FUNCTION=PY_ADD\n’\

‘@SYNTAX=py_add(num1, num2)\n’\

‘@DESCRIPTION=suma dos numeros.\n’\

‘La description puede ir en dos lineas.\n\n’\

‘@EXAMPLES=Para sumar dos nuemros simplemente escribe: py_add(2,3)\n’\

‘Para sumar dos celdas utiliza la direccion de las celdas: py_add(A1,A2)\n\n’\

‘@SEEALSO=’

return num1 + num2

def calc_friccion(diametro,caudal,rugosidad,temperatura):

‘@FUNCTION=PY_FRIC\n’\

‘@SYNTAX=py_fric(diametro,caudal,rugosidad,temperatura)\n’\

‘@DESCRIPTION=Calcula las perdidas por friccion en una tuberia.\n’\

‘diametro en metros\n’\

‘caudal en m3/s\n’\

‘rugosidad en milimetros\n’\

‘temperatura en C\n\n’\

‘@EXAMPLES=Para calcular la friccion escribe: py_fric(1000,0.6,0.1,15)\n’\

‘Para hacer lo mismo con celdas, utiliza la direccion de las celdas: py_fric(A1,A2,A3,A4)\n\n’\

‘@SEEALSO=’

PI = 3.14159265359

contador = 0

# calculos

vc = (1.7844 – 0.0551 * temperatura + 0.001 * (temperatura**2) – 0.000009 * (temperatura**3) + 0.00000003 * (temperatura**4)) /(1000000)

v = 4 * caudal / (PI * diametro ** 2)

rE = v * diametro / vc

f0 = 1

f1 = 0.01

while contador<1000 and abs((f1-f0)/f0) > 0.00001:

contador += 1

f0 = f1

f1 = 1 / (2 * math.log10(rugosidad / (3.71 * diametro * 1000) + 2.51 / (rE * math.sqrt(f0)))) ** 2

return f0

# Convierte nuestra nueva funcion realiza en python «py_add» en una funcion de Gnumeric y la registra

example_functions = {‘py_add’: (‘ff’,’num1,num2′,func_add), ‘py_fric’: (‘ffff’,’diametro,caudal,rugosidad,temperatura’,calc_friccion)}

# Aqui hay que registrar todas las funciones. Recuerda que example_functions, se corresponde con example de la declaracion en el archivo xml
[/python]

Aquí además de añadir la correspondiente versión para el cálculo de la fricción, se ha añadido la línea correspondiente para que Gnumeric sea consciente de lo que queremos:

[python]
‘py_fric’: (‘ffff’,’diametro,caudal,rugosidad,temperatura’,calc_friccion)
[/python]

Queda indicar a Gnumeric las funciones disponibles:

[xml]
<?xml version=»1.0″ ?>
<plugin id=»Gnumeric_MyFuncPlugin»>
<information>
<name>Other Python functions from HOWTO</name>
<description>A few extra python functions demonstrating the API.</description>
</information>
<loader type=»Gnumeric_PythonLoader:python»>
<attribute name=»module_name» value=»my-func» />
</loader>
<services>
<service type=»function_group» id=»example»>
<category>Local Python</category>
<functions>
<function name=»py_add» />
<function name=»py_fric» />
</functions>
</service>
</services>
</plugin>
[/xml]

Como ves, una vez hicimos los pasos iniciales en el post anterior, añadir nuevas funciones es realmente muy sencillo, solamente hemos añadido la línea correspondiente a la nueva versión incluida:

[xml]
<function name=»py_fric» />
[/xml]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *