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:
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.
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:
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 Q
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