{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Piston expander" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This example explains how to use properly PDSim to simulate a piston expander. The same methodology can be readily applied to other positive displacement machines. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2026-06-11T00:10:58.014758Z", "iopub.status.busy": "2026-06-11T00:10:58.014590Z", "iopub.status.idle": "2026-06-11T00:10:58.387708Z", "shell.execute_reply": "2026-06-11T00:10:58.386967Z" } }, "outputs": [], "source": [ "## COMMON IMPORTS ##\n", "from __future__ import division, print_function\n", "from math import pi, cos, sin\n", "from timeit import default_timer\n", "import os, sys\n", "import matplotlib.pyplot as plt, numpy as np\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2026-06-11T00:10:58.389909Z", "iopub.status.busy": "2026-06-11T00:10:58.389668Z", "iopub.status.idle": "2026-06-11T00:10:59.481514Z", "shell.execute_reply": "2026-06-11T00:10:59.480319Z" } }, "outputs": [], "source": [ "#From PDSim we import the different elements that allows us to built a positive displacement simulation code.\n", "from PDSim.flow.flow import FlowPath\n", "from PDSim.flow import flow_models\n", "from PDSim.misc.datatypes import empty_arraym\n", "from PDSim.core.containers import ControlVolume, Tube\n", "from PDSim.core.core import PDSimCore\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2026-06-11T00:10:59.483389Z", "iopub.status.busy": "2026-06-11T00:10:59.483090Z", "iopub.status.idle": "2026-06-11T00:10:59.486488Z", "shell.execute_reply": "2026-06-11T00:10:59.485814Z" } }, "outputs": [], "source": [ "# We need also to import CoolProp as property library to define suction and discharge states of the expander \n", "# (or compressor).\n", "from CoolProp import State\n", "from CoolProp import CoolProp as CP" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2026-06-11T00:10:59.488401Z", "iopub.status.busy": "2026-06-11T00:10:59.488235Z", "iopub.status.idle": "2026-06-11T00:10:59.494778Z", "shell.execute_reply": "2026-06-11T00:10:59.493928Z" } }, "outputs": [], "source": [ "# We create a class derived from PDSimCore that holds the piston expander model\n", "\n", "class PistonExpander(PDSimCore):\n", " \n", " #: Displacement of the cylinder above the dead volume [m^3]\n", " Vdisp = 20e-6\n", " \n", " #: Dead volume of the cylinder at TDC [m^3]\n", " Vdead = 3e-6\n", " \n", " #: Rotational speed [rad/s]\n", " omega = 377\n", " \n", " def __init__(self):\n", " #Initialize the base class that PistonExpander is derived from\n", " PDSimCore.__init__(self)\n", "\n", " # We define the working chamber volume as function of the crank angle and its derivative. \n", " # In this case we assume a simplified mathematical formulation \n", " def V_dV(self, theta):\n", " \n", " V = self.Vdead+self.Vdisp/2*(1-cos(theta))\n", " dVdtheta = self.Vdisp/2*sin(theta)\n", " return V, dVdtheta\n", "\n", " # We define the suction and discharge port area profiles as well as the flow model through such ports.\n", " def Suction(self, FlowPath):\n", " if 0 <= self.theta <= pi/4:\n", " FlowPath.A = pi*0.006**2/4*(1-cos(8*self.theta))/2\n", " mdot = flow_models.IsentropicNozzle(FlowPath.A,\n", " FlowPath.State_up,\n", " FlowPath.State_down)\n", " else:\n", " FlowPath.A = 0.0\n", " mdot = 0\n", " return mdot\n", " \n", " def Discharge(self, FlowPath):\n", " if pi <= self.theta <= 7*pi/4:\n", " FlowPath.A = pi*0.006**2/4*(1-cos(4*self.theta))/2\n", " mdot = flow_models.IsentropicNozzle(FlowPath.A,\n", " FlowPath.State_up,\n", " FlowPath.State_down)\n", " else:\n", " FlowPath.A = 0.0\n", " mdot = 0\n", " return mdot\n", "\n", " # We define a tube flow model to connect the inlet of the expander shell with the actual suction port. \n", " # Similar model is applied on the discharge side. \n", " def TubeCode(self, Tube):\n", "\n", " Tube.Q = flow_models.IsothermalWallTube(Tube.mdot, \n", " Tube.State1, \n", " Tube.State2,\n", " Tube.fixed, \n", " Tube.L, \n", " Tube.ID,\n", " T_wall = self.Tlumps[0])\n", "\n", " # In this case we neglect the in-chamber heat transfer which eventually can be added \n", " # depending on the type of machine\n", " def heat_transfer_callback(self, theta):\n", " return empty_arraym(self.CVs.N)\n", "\n", " # We also neglect the mechanical losses for simplicity\n", " def mechanical_losses(self):\n", " return 0\n", "\n", " # We define the heat transfer between the expander shell and the ambient by defining \n", " # a constant heat transfer coefficient\n", " def ambient_heat_transfer(self):\n", " return self.h_shell*self.A_shell*(self.Tamb-self.Tlumps[0]) #[kW]\n", "\n", " # At this point we are able to define an overall energy balance of the expander shell \n", " # with a single lumped temperature\n", " def lump_energy_balance_callback(self):\n", "\n", " #Mechanical losses are added to the lump\n", " self.Wdot_mechanical = self.mechanical_losses() #[kW]\n", " #Heat transfer between the shell and the ambient\n", " self.Qamb = self.ambient_heat_transfer() #[kW]\n", " return self.Wdot_mechanical + self.Qamb\n", "\n", " # Callback function for the stepsize of the solver\n", " def step_callback(self,theta,h,Itheta):\n", " self.theta = theta\n", " return False, h" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2026-06-11T00:10:59.496511Z", "iopub.status.busy": "2026-06-11T00:10:59.496344Z", "iopub.status.idle": "2026-06-11T00:10:59.502514Z", "shell.execute_reply": "2026-06-11T00:10:59.501640Z" } }, "outputs": [], "source": [ "# We have completely defined the class that hold the general piston expander model. \n", "# Now we can actually define a function to run the model\n", "def Expander():\n", "\n", " expander = PistonExpander() #Instantiate the class\n", "\n", " # We specify the working fluid, the inlet state conditions (temperature and pressure in this case), \n", " # the outlet state for which the the pressure is specified and the temperature is guessed. \n", " # Last, we need to provide a guess for the inlet mass flow rate. The model calculate the actual \n", " # mass flow rate through the machine as well as the discharge temperature.\n", " Ref = 'Nitrogen'\n", " inletState = State.State(Ref,dict(T = 298.15, P = 501.325))\n", " outletState = State.State(Ref,dict(T = 200, P = inletState.p/10))\n", " mdot_guess = inletState.rho*expander.Vdisp*expander.omega/(2*pi)\n", "\n", " # The piston expander has only one working chamber and therefore we add one control volume\n", " expander.add_CV(ControlVolume(key='A',\n", " initialState=inletState.copy(),\n", " VdVFcn=expander.V_dV,)\n", " )\n", "\n", " # We define the necessary constants for ambient heat transfer\n", " expander.h_shell = 0.010 #[kW/m2/K]\n", " expander.A_shell = pi*10*2*(0.0254**2) #[m2]\n", " expander.Tamb = 298 #[K]\n", " expander.Wdot_parasitic = 0.01 #Parasitic losses [kW]\n", "\n", " \"\"\"\n", " We add the inlet and outlet tubes. The states of the tube are defines as:\n", " \n", " inlet tube:\n", " __________________\n", " inlet.1 inlet.2 \n", " __________________\n", "\n", "\n", " outlet tube:\n", " __________________\n", " outlet.2 outlet.1 \n", " __________________ \n", " \"\"\"\n", " #Add the inlet tube\n", " expander.add_tube(Tube(key1 = 'inlet.1',\n", " key2 = 'inlet.2',\n", " L = 0.03,\n", " ID = 0.01,\n", " mdot = mdot_guess, \n", " State1 = inletState.copy(),\n", " fixed = 1,\n", " TubeFcn = expander.TubeCode) \n", " )\n", " \n", " #Add the outlet tube\n", " expander.add_tube(Tube(key1 = 'outlet.1',\n", " key2 = 'outlet.2',\n", " L = 0.03,\n", " ID = 0.01,\n", " mdot = mdot_guess, \n", " State2 = outletState.copy(),\n", " fixed = 2,\n", " TubeFcn = expander.TubeCode) \n", " )\n", "\n", " # We define flow paths to connect the nodes of the tubes with the suction or discharge states \n", " expander.add_flow(FlowPath(key1='inlet.2',key2='A',MdotFcn=expander.Suction))\n", " expander.add_flow(FlowPath(key1='outlet.1',key2='A',MdotFcn=expander.Discharge))\n", "\n", " # We connect together the energy balance of the expander shell\n", " t1=default_timer()\n", " expander.connect_callbacks(step_callback = expander.step_callback,\n", " endcycle_callback=expander.endcycle_callback, # Provided by PDSimCore\n", " heat_transfer_callback=expander.heat_transfer_callback,\n", " lumps_energy_balance_callback = expander.lump_energy_balance_callback) \n", "\n", " # We choose the solver and the integration options\n", " expander.EulerN = 5000\n", " expander.solve(key_inlet='inlet.1',\n", " key_outlet='outlet.2',\n", " solver_method = 'Euler',\n", " OneCycle = False,\n", " eps_cycle = 1.1e-5,\n", " UseNR = True,\n", " plot_every_cycle = False,\n", " eps_energy_balance = 1e-3\n", " )\n", "\n", " print('time taken',default_timer()-t1,'s')\n", "\n", " return expander\n", " " ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2026-06-11T00:10:59.504105Z", "iopub.status.busy": "2026-06-11T00:10:59.503944Z", "iopub.status.idle": "2026-06-11T00:11:05.562627Z", "shell.execute_reply": "2026-06-11T00:11:05.561530Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.272712 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 000 ||\n", "===========\n", "||.............|..........@.........................|| energy balance kW [0.03972586636124382] Tlumps: [201.35118811149215] K\n", "||.............|.......................@............|| discharge state 2.0967804404036485 h_pump_set: 186.27746076986546 kJ/kg 207.24526517390194 kJ/kg\n", "||.................................@................|| cycle-cycle 0.623900308505571\n", "||..................................|............@..|| mdot [%] 60.775820550335816 || in: 0.6225160844691532 g/s || out: 1.0008553428631026 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.224009 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 001 ||\n", "===========\n", "||.............|..........@.........................|| energy balance kW [0.039178140663835265] Tlumps: [269.005356433448] K\n", "||.............|......................@.............|| discharge state 1.7689965935385148 h_pump_set: 189.48566529554114 kJ/kg 207.17563123092629 kJ/kg\n", "||........................@.........................|| cycle-cycle 0.03355234537243069\n", "||..................................|.@.............|| mdot [%] 1.9208001292969623 || in: 0.9685999240278232 g/s || out: 0.9872047926209199 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.228561 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 002 ||\n", "===========\n", "||.............|......@.............................|| energy balance kW [0.01175344219915043] Tlumps: [289.3016069300344] K\n", "||.............|.....................@..............|| discharge state 1.1243627815765536 h_pump_set: 192.3746567988569 kJ/kg 203.61828461462244 kJ/kg\n", "||.......................@..........................|| cycle-cycle 0.026213159006432833\n", "||..................................|@..............|| mdot [%] 1.426653068348993 || in: 0.9622846992977097 g/s || out: 0.9760131634864933 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.211386 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 003 ||\n", "===========\n", "||.............|...@................................|| energy balance kW [0.003526032659745138] Tlumps: [295.3904820790103] K\n", "||.............|....................@...............|| discharge state 0.8555294905519191 h_pump_set: 193.9856046670554 kJ/kg 202.5408995725746 kJ/kg\n", "||.....................@............................|| cycle-cycle 0.014440392870004896\n", "||.................................@|...............|| mdot [%] 0.775941181940154 || in: 0.9622083915163047 g/s || out: 0.9696745626821636 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.210754 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 004 ||\n", "===========\n", "||.............@....................................|| energy balance kW [0.0010578097979235368] Tlumps: [297.2171446237031] K\n", "||.............|...................@................|| discharge state 0.7440455471674995 h_pump_set: 194.77338500791063 kJ/kg 202.21384047958563 kJ/kg\n", "||...................@..............................|| cycle-cycle 0.007012317944709847\n", "||...............................@..|...............|| mdot [%] 0.37399565338931406 || in: 0.9629643569764481 g/s || out: 0.9665658018152284 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.212157 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 005 ||\n", "===========\n", "||.........@...|....................................|| energy balance kW [0.0003173429393770518] Tlumps: [297.7651433871109] K\n", "||.............|...................@................|| discharge state 0.6981142376949748 h_pump_set: 195.13321187120835 kJ/kg 202.1143542481581 kJ/kg\n", "||................@.................................|| cycle-cycle 0.003192188830013153\n", "||.............................@....|...............|| mdot [%] 0.16963228793236418 || in: 0.9635082365474729 g/s || out: 0.9651426576135451 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.215055 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 006 ||\n", "===========\n", "||.....@.......|....................................|| energy balance kW [9.520288181312015e-05] Tlumps: [297.92954301613327] K\n", "||.............|...................@................|| discharge state 0.6792718100344332 h_pump_set: 195.2912718276764 kJ/kg 202.08398992802074 kJ/kg\n", "||..............@...................................|| cycle-cycle 0.0014001541290797068\n", "||..........................@.......|...............|| mdot [%] 0.07428240721296664 || in: 0.9638002552653164 g/s || out: 0.9645161892956521 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.263224 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 007 ||\n", "===========\n", "||..@..........|....................................|| energy balance kW [2.8560864543940657e-05] Tlumps: [297.97886290483996] K\n", "||.............|...................@................|| discharge state 0.6715608598077409 h_pump_set: 195.35906712009842 kJ/kg 202.07467571817583 kJ/kg\n", "||...........@......................................|| cycle-cycle 0.0006001958927776068\n", "||........................@.........|...............|| mdot [%] 0.03182032891992925 || in: 0.9639402582284005 g/s || out: 0.9642469871891604 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.210884 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 008 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [8.568259363191414e-06] Tlumps: [297.993658871452] K\n", "||.............|...................@................|| discharge state 0.668409424757229 h_pump_set: 195.38770461741845 kJ/kg 202.07179886499074 kJ/kg\n", "||.........@........................................|| cycle-cycle 0.00025347356130787403\n", "||.....................@............|...............|| mdot [%] 0.013434666077838386 || in: 0.964003593431028 g/s || out: 0.9641331040947838 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.213124 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 009 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [2.5704778089528157e-06] Tlumps: [297.9980976614356] K\n", "||.............|...................@................|| discharge state 0.6671223662947257 h_pump_set: 195.3996786020745 kJ/kg 202.07090226502174 kJ/kg\n", "||......@...........................................|| cycle-cycle 0.00010597600265626364\n", "||..................@...............|...............|| mdot [%] 0.005616427176535765 || in: 0.9640312884974249 g/s || out: 0.9640854326127024 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.214775 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 010 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [7.711433426766277e-07] Tlumps: [297.9994292984307] K\n", "||.............|...................@................|| discharge state 0.6665969397124002 h_pump_set: 195.404650225721 kJ/kg 202.07061962284502 kJ/kg\n", "||...@..............................................|| cycle-cycle 4.400111385604077e-05\n", "||...............@..................|...............|| mdot [%] 0.0023318724528875734 || in: 0.9640431421325111 g/s || out: 0.9640656223889764 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.213259 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 011 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [2.3134300279837984e-07] Tlumps: [297.9998287895292] K\n", "||.............|...................@................|| discharge state 0.6663824927134897 h_pump_set: 195.4067043329895 kJ/kg 202.0705292601244 kJ/kg\n", "||@.................................................|| cycle-cycle 1.817998182421929e-05\n", "||.............@....................|...............|| mdot [%] 0.0009634610423248091 || in: 0.9640481440750914 g/s || out: 0.9640574323033889 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.211407 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 012 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [6.940290084181819e-08] Tlumps: [297.99994863685873] K\n", "||.............|...................@................|| discharge state 0.6662949821490713 h_pump_set: 195.40755005809416 kJ/kg 202.07049987958487 kJ/kg\n", "|@..................................................|| cycle-cycle 7.485248108934391e-06\n", "||..........@.......................|...............|| mdot [%] 0.00039668880744692103 || in: 0.9640502344070153 g/s || out: 0.9640540586863934 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.269497 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 013 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [2.082087026406665e-08] Tlumps: [297.9999845910576] K\n", "||.............|...................@................|| discharge state 0.6662592749413847 h_pump_set: 195.4078973893804 kJ/kg 202.07049013879424 kJ/kg\n", "|@..................................................|| cycle-cycle 3.074163867072736e-06\n", "||.......@..........................|...............|| mdot [%] 0.00016291998783390937 || in: 0.9640511020718987 g/s || out: 0.964052672703837 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.213681 s\n", "Running single-lump analysis\n", "New outlet T: 200.0 K\n", "===========\n", "|| # 014 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [6.246261076915756e-09] Tlumps: [297.9999953773173] K\n", "||.............|...................@................|| discharge state 0.6662447062676109 h_pump_set: 195.40803977589454 kJ/kg 202.07048683857064 kJ/kg\n", "|@..................................................|| cycle-cycle 1.2602507716239347e-06\n", "||....@.............................|...............|| mdot [%] 6.678940438487047e-05 || in: 0.964051460502834 g/s || out: 0.9640521043870625 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.21727 s\n", "Running single-lump analysis\n", "[[207.24652935776777, np.float64(0.6662387624983694)]]\n", "New outlet T: 204.8022033559183 K\n", "===========\n", "|| # 015 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [1.8738783161620103e-09] Tlumps: [297.9999986131952] K\n", "||.............|...................@................|| discharge state 0.6662387624983694 h_pump_set: 195.40809806933063 kJ/kg 202.07048569431433 kJ/kg\n", "|@..................................................|| cycle-cycle 5.159547960726496e-07\n", "||..@...............................|...............|| mdot [%] 2.7344182251809457e-05 || in: 0.9640516080623037 g/s || out: 0.9640518716743325 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.214071 s\n", "Running single-lump analysis\n", "New outlet T: 204.8022033559183 K\n", "===========\n", "|| # 016 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [5.621634902401255e-10] Tlumps: [297.9999995839586] K\n", "||.............|.....................@..............|| discharge state 1.1893799835637793 h_pump_set: 195.40837615413338 kJ/kg 207.30217598977117 kJ/kg\n", "|@..................................................|| cycle-cycle 2.278860726750507e-06\n", "||......@...........................|...............|| mdot [%] -0.00012650808303149574 || in: 0.9640516686594927 g/s || out: 0.9640504490562072 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.210253 s\n", "Running single-lump analysis\n", "[[207.24652935776777, np.float64(0.6662387624983694)], [212.2465293577677, np.float64(1.1893816268437065)]]\n", "New outlet T: 196.6140801287183 K\n", "===========\n", "|| # 017 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [1.6864903785508228e-10] Tlumps: [297.9999998751876] K\n", "||.............|.....................@..............|| discharge state 1.1893816268437065 h_pump_set: 195.40835830782572 kJ/kg 207.3021745762628 kJ/kg\n", "|@..................................................|| cycle-cycle 1.5760008116849993e-07\n", "|@..................................|...............|| mdot [%] -8.34661763038369e-06 || in: 0.9640506008538878 g/s || out: 0.9640505203882704 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.210077 s\n", "Running single-lump analysis\n", "New outlet T: 196.6140801287183 K\n", "===========\n", "|| # 018 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [5.0594702139569335e-11] Tlumps: [297.9999999625563] K\n", "||.............|................@...................|| discharge state 0.29752558456960115 h_pump_set: 195.40791831960564 kJ/kg 198.38317416530165 kJ/kg\n", "|@..................................................|| cycle-cycle 4.046315136633952e-06\n", "||........@.........................|...............|| mdot [%] 0.00023094929502143202 || in: 0.9640505822432307 g/s || out: 0.9640528087112541 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.265189 s\n", "Running single-lump analysis\n", "[[207.24652935776777, np.float64(0.6662387624983694)], [212.2465293577677, np.float64(1.1893816268437065)], [203.7207873384335, np.float64(0.29752142424821104)]]\n", "New outlet T: 194.56570539892692 K\n", "===========\n", "|| # 019 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [1.517841294610964e-11] Tlumps: [297.9999999887669] K\n", "||.............|................@...................|| discharge state 0.29752142424821104 h_pump_set: 195.40796231807934 kJ/kg 198.38317656056145 kJ/kg\n", "|@..................................................|| cycle-cycle 3.888499605556096e-07\n", "||.@................................|...............|| mdot [%] 2.059859536274189e-05 || in: 0.9640524343272996 g/s || out: 0.9640526329085595 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.214084 s\n", "Running single-lump analysis\n", "New outlet T: 194.56570539892692 K\n", "===========\n", "|| # 020 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [4.553521579594053e-12] Tlumps: [297.99999999663004] K\n", "||.............|............@.......................|| discharge state 0.07451847886640621 h_pump_set: 195.40787258449302 kJ/kg 196.15305737315708 kJ/kg\n", "|@..................................................|| cycle-cycle 1.119204505270787e-06\n", "||....@.............................|...............|| mdot [%] 6.671818189030176e-05 || in: 0.9640524802117266 g/s || out: 0.9640531234100137 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.211054 s\n", "Running single-lump analysis\n", "[[207.24652935776777, np.float64(0.6662387624983694)], [212.2465293577677, np.float64(1.1893816268437065)], [203.7207873384335, np.float64(0.29752142424821104)], [201.58766919308135, np.float64(0.0745166316724351)]]\n", "New outlet T: 194.05237836076887 K\n", "===========\n", "|| # 021 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [1.3660679950724058e-12] Tlumps: [297.99999999898904] K\n", "||.............|............@.......................|| discharge state 0.0745166316724351 h_pump_set: 195.40789158165745 kJ/kg 196.1530578983818 kJ/kg\n", "|@..................................................|| cycle-cycle 1.6800245349230415e-07\n", "|@..................................|...............|| mdot [%] 8.901401993277602e-06 || in: 0.9640529617020815 g/s || out: 0.964053047516311 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.209341 s\n", "Running single-lump analysis\n", "[[207.24652935776777, np.float64(0.6662387624983694)], [212.2465293577677, np.float64(1.1893816268437065)], [203.7207873384335, np.float64(0.29752142424821104)], [201.58766919308135, np.float64(0.0745166316724351)], [201.0530861332902, np.float64(0.01863830867557965)]]\n", "New outlet T: 193.92396371164338 K\n", "===========\n", "|| # 022 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [4.09808877327532e-13] Tlumps: [297.9999999996967] K\n", "||.............|........@...........................|| discharge state 0.01863830867557965 h_pump_set: 195.40787238343424 kJ/kg 195.59425547019003 kJ/kg\n", "|@..................................................|| cycle-cycle 3.0069475063754486e-07\n", "||@.................................|...............|| mdot [%] 1.8224667908128822e-05 || in: 0.9640529815580662 g/s || out: 0.9640531572535205 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.210016 s\n", "Running single-lump analysis\n", "[[207.24652935776777, np.float64(0.6662387624983694)], [212.2465293577677, np.float64(1.1893816268437065)], [203.7207873384335, np.float64(0.29752142424821104)], [201.58766919308135, np.float64(0.0745166316724351)], [201.0530861332902, np.float64(0.01863830867557965)], [200.91935282384097, np.float64(0.0046597462831869055)]]\n", "New outlet T: 193.89185856955254 K\n", "===========\n", "|| # 023 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [1.2295418439244931e-13] Tlumps: [297.999999999909] K\n", "||.............|....@...............................|| discharge state 0.0046597462831869055 h_pump_set: 195.40787172878382 kJ/kg 195.4544691916157 kJ/kg\n", "|@..................................................|| cycle-cycle 1.0520025512532119e-07\n", "|@..................................|...............|| mdot [%] 6.500015081734034e-06 || in: 0.9640531054677085 g/s || out: 0.9640531681313058 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.209456 s\n", "Running single-lump analysis\n", "[[207.24652935776777, np.float64(0.6662387624983694)], [212.2465293577677, np.float64(1.1893816268437065)], [203.7207873384335, np.float64(0.29752142424821104)], [201.58766919308135, np.float64(0.0745166316724351)], [201.0530861332902, np.float64(0.01863830867557965)], [200.91935282384097, np.float64(0.0046597462831869055)], [200.88591787855734, np.float64(0.0011648014431415276)]]\n", "New outlet T: 193.88383352995007 K\n", "===========\n", "|| # 024 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [3.689086379541067e-14] Tlumps: [297.9999999999727] K\n", "||.............@....................................|| discharge state 0.0011648014431415276 h_pump_set: 195.40787325580436 kJ/kg 195.41952127023578 kJ/kg\n", "|@..................................................|| cycle-cycle 4.006502979101484e-08\n", "|@..................................|...............|| mdot [%] 2.4180331736900484e-06 || in: 0.9640531407862519 g/s || out: 0.9640531640973767 g/s \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Elapsed time for cycle is 0.211466 s\n", "Running single-lump analysis\n", "[[207.24652935776777, np.float64(0.6662387624983694)], [212.2465293577677, np.float64(1.1893816268437065)], [203.7207873384335, np.float64(0.29752142424821104)], [201.58766919308135, np.float64(0.0745166316724351)], [201.0530861332902, np.float64(0.01863830867557965)], [200.91935282384097, np.float64(0.0046597462831869055)], [200.88591787855734, np.float64(0.0011648014431415276)], [200.87756043495662, np.float64(0.00029113288851476685)]]\n", "New outlet T: 193.88182789010096 K\n", "===========\n", "|| # 025 ||\n", "===========\n", "|@.............|....................................|| energy balance kW [1.1060346422109382e-14] Tlumps: [297.9999999999918] K\n", "||.........@...|....................................|| discharge state 0.00029113288851476685 h_pump_set: 195.40787432727137 kJ/kg 195.41078565615652 kJ/kg\n", "|@..................................................|| cycle-cycle 1.5923792248298332e-08\n", "|@..................................|...............|| mdot [%] 9.279804036310679e-07 || in: 0.9640531513877959 g/s || out: 0.9640531603340203 g/s \n", "Ntheta is 5001\n", "mdot*(h2-h1),P-v,Qamb -0.10363362908762777 -0.10899685540585434 1.1060346422109382e-14\n", "Mass flow rate is 0.9640531513877959 g/s\n", "Volumetric efficiency is 14.167325428689029 %\n", "Adiabatic efficiency is 72.21501435925663 %\n", "time taken 5.80403728100282 s\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Finally, we can run the piston expander model and have access to the variables for plotting\n", "piston = Expander()\n", "\n", "#We plot out the PV diagram\n", "p = piston.p.T #[kPa] \n", "V = piston.V.T*1e6 #[cm^3]\n", "\n", "plt.plot(V,p, 'b-',lw = 2)\n", "plt.plot([0,100],[piston.inlet_state.p,piston.inlet_state.p],'k--',lw = 2)\n", "plt.plot([0,100],[piston.outlet_state.p,piston.outlet_state.p],'k--',lw = 2)\n", "plt.xlabel(r'V [cm$^3$]',fontsize = 10)\n", "plt.ylabel(r'p [kPa]',fontsize = 10)\n", "plt.xlim(0,30)\n", "lb = plt.ylim(0,600)\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.13" } }, "nbformat": 4, "nbformat_minor": 1 }