sábado, 14 de junio de 2025

TESPy: Modelado de sistemas basicos de ingenieria termica

 

Modelado de sistemas básicos

En esta sección, le presentaremos cómo crear sus primeros modelos TESPy sencillos. En la introducción, aprenderá sobre el concepto de modelado de TESPy. Las demás subsecciones son guías paso a paso para aplicaciones termodinámicas conocidas.

Si desea obtener más información sobre las diferentes partes del software, consulte la sección de Documentación después de los primeros pasos. Si tiene alguna pregunta, póngase en contacto con la comunidad TESPy . Se celebran reuniones en línea periódicas y hay un foro de discusión en GitHub.

  

 

Introducción

En esta sección, le presentamos los fundamentos del concepto de modelado de TESPy. TESPy se basa en componentes conectados mediante conexiones para formar una red topológica . La figura a continuación destaca estos tres componentes principales del software con el ejemplo de una pequeña bomba de calor.

En PPI vamos a trabajar con google Colab, en una entrada anterior vimos la instrucción previa de instalación que para Colab seria mas o menos asi: 

 

>>! pip install tespy
Collecting tespy
  Downloading tespy-0.8.2-py3-none-any.whl.metadata (10 kB)
Collecting CoolProp>=6.8 (from tespy)
  Downloading coolprop-6.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (282 bytes)
Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from tespy) (3.1.6)
Requirement already satisfied: matplotlib>=3.2.1 in /usr/local/lib/python3.11/dist-packages (from tespy) (3.10.0)
Requirement already satisfied: numpy>=1.13.3 in /usr/local/lib/python3.11/dist-packages (from tespy) (2.0.2)
Requirement already satisfied: pandas>=1.3.0 in /usr/local/lib/python3.11/dist-packages (from tespy) (2.2.2)
Requirement already satisfied: scipy in /usr/local/lib/python3.11/dist-packages (from tespy) (1.15.3)
Requirement already satisfied: tabulate>=0.8.2 in /usr/local/lib/python3.11/dist-packages (from tespy) (0.9.0)
Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3.2.1->tespy) (1.3.2)
Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3.2.1->tespy) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3.2.1->tespy) (4.58.1)
Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3.2.1->tespy) (1.4.8)
Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3.2.1->tespy) (24.2)
Requirement already satisfied: pillow>=8 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3.2.1->tespy) (11.2.1)
Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3.2.1->tespy) (3.2.3)
Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.11/dist-packages (from matplotlib>=3.2.1->tespy) (2.9.0.post0)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas>=1.3.0->tespy) (2025.2)
Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas>=1.3.0->tespy) (2025.2)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->tespy) (3.0.2)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.7->matplotlib>=3.2.1->tespy) (1.17.0)
Downloading tespy-0.8.2-py3-none-any.whl (243 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 243.2/243.2 kB 2.6 MB/s eta 0:00:00
Downloading coolprop-6.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.6/10.6 MB 32.6 MB/s eta 0:00:00
Installing collected packages: CoolProp, tespy
Successfully installed CoolProp-6.8.0 tespy-0.8.2

Montar una planta

Para simular una planta, comenzamos creando la red ( tespy.networks.network.Network). La red es el contenedor principal del modelo.

>>from tespy.networks import Network

>> # crea un objeto de red con el fluido R134a
>>my_plant_one = Network()
>>> 
DEBUG:TESPyLogger:Default unit specifications:
mass flow: kg / s
volumetric flow: m3 / s
pressure: Pa
enthalpy: J / kg
temperature: K
temperature difference to boiling point: K
specific volume: m3 / kg
vapor mass fraction: -
entropy: J / kgK
DEBUG:TESPyLogger:Default mass flow limits
min: -1000000000000.0 kg / s
max: 1000000000000.0 kg / s
DEBUG:TESPyLogger:Default pressure limits
min: 200.0 Pa
max: 30000000.0 Pa
DEBUG:TESPyLogger:Default enthalpy limits
min: 1000.0 J / kg
max: 7000000.0 J / kg

Es posible especificar un sistema de unidades y rangos de valores para las variables de la red. Si no se especifican, TESPy utilizará unidades del SI.

>># set the unitsystem for temperatures to °C and for pressure to bar
>>my_plant_one.set_attr(T_unit='C', p_unit='bar', h_unit='kJ / kg')

>>>

DEBUG:TESPyLogger:Setting pressure unit: bar.
DEBUG:TESPyLogger:Setting enthalpy unit: kJ / kg.
DEBUG:TESPyLogger:Setting temperature unit: C.

Ahora puedes empezar a crear los componentes de la red.

Configurar componentes

La lista de componentes disponibles se encuentra aquí . Si configura un componente, debe especificar una etiqueta única (dentro de una red). Además, es posible especificar parámetros para el componente, por ejemplo, la potencia (P). para una bomba o diferencia de temperatura del terminal superior De un intercambiador de calor. La lista completa de parámetros de cada componente se detalla en la documentación de la clase correspondiente. Este ejemplo utiliza un compresor, una válvula de control, dos intercambiadores de calor (simples) y un cerrador de ciclo.
 

Nota

Los parámetros de los componentes suelen ser opcionales. Solo la etiqueta del componente es obligatoria. Si el usuario no especifica un parámetro opcional, este será el resultado de la simulación de la planta. De esta forma, el conjunto de ecuaciones que devuelve un componente se determina según los parámetros especificados. También puede encontrar todas las ecuaciones en la documentación de cada componente.

>># configuracion de componentes
>>from tespy.components import (
    CycleCloser, Compressor, Valve, SimpleHeatExchanger
)

>>cc = CycleCloser('cycle closer')

>># heat sink
>>co = SimpleHeatExchanger('condenser')
>># heat source
>>ev = SimpleHeatExchanger('evaporator')

>>va = Valve('expansion valve')
>>cp = Compressor('compressor')

Después de crear los componentes, el siguiente paso es conectarlos para formar su red topológica.

Establecer conexiones

Las conexiones se utilizan para conectar dos componentes (salida del componente 1 a entrada del componente 2: fuente a destino). Si dos componentes están conectados entre sí, las propiedades del fluido en la fuente serán iguales a las del destino. Es posible configurar las propiedades de cada conexión de forma similar a como se configuran los parámetros de los componentes. Las opciones básicas de especificación son:

  • flujo másico (m)

  • caudal volumétrico (v)

  • presión (p)

  • entalpía (h)

  • temperatura (T)

  • un vector fluido (fluido)

 

Véase también

Hay más opciones de especificación disponibles. Consulte la sección de conexiones en la documentación de los módulos TESPy para obtener información detallada. Las opciones de especificación también se detallan en la documentación de la clase de conexión tespy.connections.connection.Connection:

Tras crear las conexiones, debemos añadirlas a la red. Dado que las conexiones contienen la información sobre qué componentes están conectados y de qué manera, no es necesario pasar los componentes a la red.
 
>># crear conexiones entre componentes
>>from tespy.connections import Connection

>># connections of heat pump
>>c1 = Connection(cc, 'out1', ev, 'in1', label='1') # cc: ciclo cerrado
>>c2 = Connection(ev, 'out1', cp, 'in1', label='2') # ev: evaporador
>>c3 = Connection(cp, 'out1', co, 'in1', label='3') # cp: compresor
>>c4 = Connection(co, 'out1', va, 'in1', label='4') # co: condensador
>>c0 = Connection(va, 'out1', cc, 'in1', label='0') # va: valvula

>># this line is crutial: you have to add all connections to your network
>>my_plant_one.add_conns(c1, c2, c3, c4, c0)
>>>
DEBUG:TESPyLogger:Created connection from cycle closer (out1) to evaporator (in1).
DEBUG:TESPyLogger:Created connection from evaporator (out1) to compressor (in1).
DEBUG:TESPyLogger:Created connection from compressor (out1) to condenser (in1).
DEBUG:TESPyLogger:Created connection from condenser (out1) to expansion valve (in1).
DEBUG:TESPyLogger:Created connection from expansion valve (out1) to cycle closer (in1).
DEBUG:TESPyLogger:Added connection 1 to network.
DEBUG:TESPyLogger:Added connection 2 to network.
DEBUG:TESPyLogger:Added connection 3 to network.
DEBUG:TESPyLogger:Added connection 4 to network.
DEBUG:TESPyLogger:Added connection 0 to network.

 

Podemos configurar los parámetros de los componentes y las conexiones. En este ejemplo, especificamos las pérdidas de presión (según la relación entre la presión de salida y la de entrada pr) en el condensador y el evaporador, así como la eficiencia eta_s del compresor. Además, podemos configurar la producción de calor de la bomba de calor para el condensador. Dado que en este tutorial trabajamos en régimen subcrítico , configuramos el estado del fluido a la salida del evaporador como vapor completamente saturado ( x=1) y el del condensador como líquido completamente saturado ( x=0). Además, queremos configurar los niveles de temperatura de condensación y evaporación. Por último, debemos especificar el vector del fluido en un punto de nuestra red.

>># pr: presion de salida / presion de entrada
>># eta_s: eficiencia del compresor
>># Q: calor producido por la bomba de calor
>># x: calidad del fluido
>>co.set_attr(pr=0.98, Q=-1e6) # condiciones en el condensador
>>ev.set_attr(pr=0.98) # conidciones en el evaporador
>>cp.set_attr(eta_s=0.85) # condiciones en el compresor

>>c2.set_attr(T=20, x=1, fluid={'R134a': 1}) # c2 conecta el evaporador y el compresor
>>c4.set_attr(T=80, x=0) # c4 conecta condensador y valvula de expansion

 

Nota

La convención de signos para la transferencia de energía entre componentes se aplica siempre desde la perspectiva del componente. La energía que entra en el componente tiene signo positivo, mientras que la energía que sale del límite del sistema tiene signo negativo.

Comience su cálculo

Después de construir la red, los componentes y las conexiones, agregue la siguiente línea al final del script y ejecútelo. Puede calcular el COP con los parámetros del componente correspondiente.

""" 
Visión general creada por IA
En transferencia de calor, el COP (Coeficiente de Rendimiento) es una medida de
la eficiencia de un sistema de bomba de calor o refrigeración.
Indica la relación entre la cantidad de calor útil producido (o extraído) y la
cantidad de energía consumida por el sistema. Un COP más alto significa que
el sistema es más eficiente, produciendo más calor o frío con menos energía."""

>>my_plant_one.solve(mode='design')
>>my_plant_one.print_results()

>>print(f'COP = {abs(co.Q.val) / cp.P.val}')
 
>>> 
INFO:TESPyLogger:Networkcheck successful.
DEBUG:TESPyLogger:Solver properties:
 - mode: design
 - init_path: None
 - design_path: None
 - min_iter: 4
 - max_iter: 50
DEBUG:TESPyLogger:Network information:
 - Number of components: 5
 - Number of connections: 5
 - Number of busses: 0
DEBUG:TESPyLogger:Updated fluid property SI values and fluid mass fraction for user specified connection parameters.
DEBUG:TESPyLogger:Created characteristic line function.
DEBUG:TESPyLogger:Created characteristic map function.
DEBUG:TESPyLogger:Created characteristic map function.
DEBUG:TESPyLogger:The component compressor has 0 variables.
DEBUG:TESPyLogger:Created characteristic line function.
DEBUG:TESPyLogger:The component condenser has 0 variables.
DEBUG:TESPyLogger:The component cycle closer has 0 variables.
DEBUG:TESPyLogger:Created characteristic line function.
DEBUG:TESPyLogger:The component evaporator has 0 variables.
DEBUG:TESPyLogger:Created characteristic line function.
DEBUG:TESPyLogger:The component expansion valve has 0 variables.
DEBUG:TESPyLogger:Generic fluid property specification complete.
INFO:TESPyLogger:Network initialised.
INFO:TESPyLogger:Starting solver.
DEBUG:TESPyLogger:Number of connection equations: 0.
DEBUG:TESPyLogger:Number of bus equations: 0.
DEBUG:TESPyLogger:Number of component equations: 7.
DEBUG:TESPyLogger:Number of user defined equations: 0.
DEBUG:TESPyLogger:Total number of variables: 7.
DEBUG:TESPyLogger:Number of component variables: 0.
DEBUG:TESPyLogger:Number of connection variables: 7.
PROGRESS:TESPyLogger: iter  | residual   | progress   | massflow   | pressure   | enthalpy   | fluid      | component  
PROGRESS:TESPyLogger:-------+------------+------------+------------+------------+------------+------------+------------
DEBUG:TESPyLogger:Enthalpy out of fluid property range at connection 3, adjusting value to 560260.6825828124 J / kg.
PROGRESS:TESPyLogger: 1     | 2.70e+06   | 0 %        | 7.99e-01   | 2.64e+06   | 4.71e+05   | 0.00e+00   | 0.00e+00   
PROGRESS:TESPyLogger: 2     | 7.53e+05   | 1 %        | 3.65e+00   | 1.68e-10   | 1.14e+05   | 0.00e+00   | 0.00e+00   
PROGRESS:TESPyLogger: 3     | 4.15e+05   | 4 %        | 3.35e+00   | 0.00e+00   | 8.56e-12   | 0.00e+00   | 0.00e+00   
PROGRESS:TESPyLogger: 4     | 1.17e-10   | 100 %      | 3.82e-16   | 0.00e+00   | 8.56e-12   | 0.00e+00   | 0.00e+00   
PROGRESS:TESPyLogger: 5     | 1.17e-10   | 100 %      | 3.82e-16   | 0.00e+00   | 8.56e-12   | 0.00e+00   | 0.00e+00   
PROGRESS:TESPyLogger:-------+------------+------------+------------+------------+------------+------------+------------
DEBUG:TESPyLogger:Total iterations: 5, Calculation time: 0.02 s, Iterations per second: 212.46
INFO:TESPyLogger:Postprocessing complete.
INFO:TESPyLogger:Calculation complete.
RESULT:TESPyLogger:
##### RESULTS (Compressor) #####
+------------+----------+----------+-----------+----------+--------+
|            |        P |       pr |        dp |    eta_s |   igva |
|------------+----------+----------+-----------+----------+--------|
| compressor | 2.96e+05 | 4.70e+00 | -2.12e+01 | 8.50e-01 |    nan |
+------------+----------+----------+-----------+----------+--------+
##### RESULTS (SimpleHeatExchanger) #####
+------------+-----------+----------+----------+----------+-----+-----+------+---------+------+--------+
|            |         Q |       pr |       dp |     zeta |   D |   L |   ks |   ks_HW |   kA |   Tamb |
|------------+-----------+----------+----------+----------+-----+-----+------+---------+------+--------|
| condenser  | -1.00e+06 | 9.80e-01 | 5.37e-01 | 2.44e+05 | nan | nan |  nan |     nan |  nan |    nan |
| evaporator |  7.04e+05 | 9.80e-01 | 1.17e-01 | 8.11e+03 | nan | nan |  nan |     nan |  nan |    nan |
+------------+-----------+----------+----------+----------+-----+-----+------+---------+------+--------+
##### RESULTS (CycleCloser) #####
+--------------+------------------+-------------------+
|              |   mass_deviation |   fluid_deviation |
|--------------+------------------+-------------------|
| cycle closer |         0.00e+00 |          0.00e+00 |
+--------------+------------------+-------------------+
##### RESULTS (Valve) #####
+-----------------+----------+----------+----------+
|                 |       pr |       dp |     zeta |
|-----------------+----------+----------+----------|
| expansion valve | 2.22e-01 | 2.05e+01 | 3.95e+06 |
+-----------------+----------+----------+----------+
##### RESULTS (Connection) #####
+----+-----------+-----------+-----------+-----------+-----------+---------+
|    |         m |         p |         h |         T |         x | phase   |
|----+-----------+-----------+-----------+-----------+-----------+---------|
|  0 | 8.059e+00 | 5.834e+00 | 3.224e+02 | 2.066e+01 | 5.173e-01 | tp      |
|  1 | 8.059e+00 | 5.834e+00 | 3.224e+02 | 2.066e+01 | 5.173e-01 | tp      |
|  2 | 8.059e+00 | 5.717e+00 | 4.097e+02 | 2.000e+01 | 1.000e+00 | tp      |
|  3 | 8.059e+00 | 2.687e+01 | 4.465e+02 | 9.117e+01 | 1.000e+00 | g       |
|  4 | 8.059e+00 | 2.633e+01 | 3.224e+02 | 8.000e+01 | 0.000e+00 | tp      |
+----+-----------+-----------+-----------+-----------+-----------+---------+
 iter  | residual   | progress   | massflow   | pressure   | enthalpy   | fluid      | component  
-------+------------+------------+------------+------------+------------+------------+------------
 1     | 2.70e+06   | 0 %        | 7.99e-01   | 2.64e+06   | 4.71e+05   | 0.00e+00   | 0.00e+00   
 2     | 7.53e+05   | 1 %        | 3.65e+00   | 1.68e-10   | 1.14e+05   | 0.00e+00   | 0.00e+00   
 3     | 4.15e+05   | 4 %        | 3.35e+00   | 0.00e+00   | 8.56e-12   | 0.00e+00   | 0.00e+00   
 4     | 1.17e-10   | 100 %      | 3.82e-16   | 0.00e+00   | 8.56e-12   | 0.00e+00   | 0.00e+00   
 5     | 1.17e-10   | 100 %      | 3.82e-16   | 0.00e+00   | 8.56e-12   | 0.00e+00   | 0.00e+00   
Total iterations: 5, Calculation time: 0.02 s, Iterations per second: 212.46

##### RESULTS (Compressor) #####
+------------+----------+----------+-----------+----------+--------+
|            |        P |       pr |        dp |    eta_s |   igva |
|------------+----------+----------+-----------+----------+--------|
| compressor | 2.96e+05 | 4.70e+00 | -2.12e+01 | 8.50e-01 |    nan |
+------------+----------+----------+-----------+----------+--------+
##### RESULTS (SimpleHeatExchanger) #####
+------------+-----------+----------+----------+----------+-----+-----+------+---------+------+--------+
|            |         Q |       pr |       dp |     zeta |   D |   L |   ks |   ks_HW |   kA |   Tamb |
|------------+-----------+----------+----------+----------+-----+-----+------+---------+------+--------|
| condenser  | -1.00e+06 | 9.80e-01 | 5.37e-01 | 2.44e+05 | nan | nan |  nan |     nan |  nan |    nan |
| evaporator |  7.04e+05 | 9.80e-01 | 1.17e-01 | 8.11e+03 | nan | nan |  nan |     nan |  nan |    nan |
+------------+-----------+----------+----------+----------+-----+-----+------+---------+------+--------+
##### RESULTS (CycleCloser) #####
+--------------+------------------+-------------------+
|              |   mass_deviation |   fluid_deviation |
|--------------+------------------+-------------------|
| cycle closer |         0.00e+00 |          0.00e+00 |
+--------------+------------------+-------------------+
##### RESULTS (Valve) #####
+-----------------+----------+----------+----------+
|                 |       pr |       dp |     zeta |
|-----------------+----------+----------+----------|
| expansion valve | 2.22e-01 | 2.05e+01 | 3.95e+06 |
+-----------------+----------+----------+----------+
##### RESULTS (Connection) #####
+----+-----------+-----------+-----------+-----------+-----------+---------+
|    |         m |         p |         h |         T |         x | phase   |
|----+-----------+-----------+-----------+-----------+-----------+---------|
|  0 | 8.059e+00 | 5.834e+00 | 3.224e+02 | 2.066e+01 | 5.173e-01 | tp      |
|  1 | 8.059e+00 | 5.834e+00 | 3.224e+02 | 2.066e+01 | 5.173e-01 | tp      |
|  2 | 8.059e+00 | 5.717e+00 | 4.097e+02 | 2.000e+01 | 1.000e+00 | tp      |
|  3 | 8.059e+00 | 2.687e+01 | 4.465e+02 | 9.117e+01 | 1.000e+00 | g       |
|  4 | 8.059e+00 | 2.633e+01 | 3.224e+02 | 8.000e+01 | 0.000e+00 | tp      |
+----+-----------+-----------+-----------+-----------+-----------+---------+
COP = 3.378377704857497

Próximos pasos

Recomendamos encarecidamente consultar nuestros otros ejemplos de modelos básicos para configurar diferentes ciclos termodinámicos estándar en TESPy. El ciclo de bomba de calor de esta sección se basa en esta bomba de calor. Presentaremos un par de entradas diferentes y mostraremos cómo cambiar el fluido de trabajo. Los demás tutoriales muestran el uso de más componentes, como la cámara de combustión y la turbina, o un condensador que incluye el lado de agua de refrigeración del sistema.

En los tutoriales más avanzados, aprenderá cómo configurar plantas más complejas paso a paso, realizar un cálculo de diseño de la planta y calcular el rendimiento fuera de diseño/carga parcial.

Para obtener una buena descripción general de las funcionalidades de TESPy, las secciones sobre los módulos de TESPy lo guiarán en detalle.


 

No hay comentarios.:

Publicar un comentario

Entradas recientes

Articulo: Predecir la resistencia a la traccion de un material con Python

  Desde ingeniero de materiales hasta desarrollador de aprendizaje automático: predecir la resistencia a la tracción con Python y Web Tech...

Entradas Populares