def __init__(self, params = None, **kwargs): if params == None: params = AttributeDict(kwargs) self.V = params.V if (isinstance(params.fluid, CP.Fluid)): self.fluid = params.fluid else: self.fluid = CP.Fluid(params.fluid) self.fState = CP.FluidState(self.fluid) self.fluidPort = DMS.DynamicCPort(DMS.FluidPort, state = self.fState)
def testFluidChamber_Fueling(): from SourcesSinks import FlowSource print "=== START: Test FluidChamber ===" # Open csv file import csv csvfile = open('./test/FluidChamber_Results.csv', 'wb') csv_writer = csv.writer(csvfile, delimiter=',') csv_writer.writerow(["Time[s]", "Tank pressure [bar]", "Tank temperature [K]", "Tank density [kg/m**3]", "Inlet enthalpy flow rate [W]"]) # Parameters mDot = 50./3600 #[kg/s] Tin = 250.0 #[K] # Create Fluid fluid = CP.Fluid('ParaHydrogen') # Create fluid source fluidSource = FlowSource(fluid, mDot = mDot, TOut = Tin) # Create tank tank = FluidChamber( fluid = fluid, V = 0.100 #[m**3] 100 L ) # Connect tank and flow source tank.fluidPort.connect(fluidSource.port1) # Initial tank state TTank_init = 300 #[K] pTank_init = 2e5 #[Pa] tank.initialize(TTank_init, pTank_init) rhoTank = tank.fState.rho TTank = tank.fState.T t = 0.0 dt = 0.01 tPrintInterval = dt * 100 tNextPrint = 0 # Run simulation while True: # Set tank state tank.setState(TTank, rhoTank) # Set source state fluidSource.compute() # Write to csv file if t >= tNextPrint: csv_writer.writerow([t, tank.p / 1.e5, tank.T, tank.rho, fluidSource.flow.HDot, fluidSource.fState.h]) tNextPrint = t + tPrintInterval - dt/10 t += dt # Compute tank tank.compute() if (tank.p > 200e5): break TTank += tank.TDot * dt rhoTank += tank.rhoDot *dt # Close csv csvfile.close() print "=== END: Test FluidChamber ==="
def testTankModel(): print "=== BEGIN: testTankModel ===" # Settings simulate = True #True - run simulation; False - plot an old results # Create the model tankModel = TankModelFactory.create( updateProgress=lambda x, y: x, #:TRICKY: not used fluid=CP.Fluid('ParaHydrogen'), ambientFluid=CP.Fluid('Air'), TAmbient=288.15, controller=AttributeDict( #initialState = TC.FUELING, initialState=TC.EXTRACTION, tWaitBeforeExtraction=150., tWaitBeforeFueling=150., pMin=20e5, pMax=300e5, mDotExtr=30 / 3600., nCompressor=0.53 * 1.44, ), fuelingSource=AttributeDict( sourceType=DM.FluidStateSource.PQ, T=15, #:TRICKY: unused p=2.7e5, q=0., ), compressor=AttributeDict( etaS=0.9, fQ=0., V=0.5e-3, ), cooler=AttributeDict( workingState=1., epsilon=1.0, TCooler=200, ), tank=AttributeDict( wallArea=1.8, volume=0.1, TInit=300., pInit=20e5, linerMaterial='Aluminium6061', linerThickness=0.004, compositeMaterial='CarbonFiberComposite', compositeThickness=0.0105, hConvExternal=100., hConvInternalWaiting=10., hConvInternalExtraction=20., hConvInternalFueling=100., ), ) # Run simulation or load old results if (simulate): tankModel.prepareSimulation() tankModel.run(tFinal=2000., tPrint=1.0) else: tankModel.loadResult(simIndex=1) # Export to csv file #tankModel.resultStorage.exportToCsv(fileName = csvFileName) # Plot results tankModel.plotHDFResults() print "=== END: testTankModel ==="