|
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- Created on Wed Feb 14 14:39:59 2024
-
- @author: wangweiye
- """
-
- import numpy as np
- from numpy import power
- import cantera as ct
- import matplotlib.pyplot as plt
- from scipy.interpolate import CubicHermiteSpline
-
- font = {'family':'times',
- 'color':'darkred',
- 'weight':'normal',
- 'size':16}
- def calVaporPressure(T:float) ->float :
- # return 1e5*np.power(10,4.6543 - (1435.264/(T - 64.84))) # returns Pa, where T is in K
- #P = 1e3*np.exp(16.7 - (4060.0/(T - 37.0))) # returns Pa, where T is in K,FOR WATER
- #P = 1e5*np.power(10,4.02832-(1268.636/(T-56.199))) ; #FOR N-HEPTANE
- P = 0.00 #NO FUEL @ t0
- return P
-
- # return 1D numpy array for liquid phase mass fraction
- def genLiquidMassFracArr(gas,dropTemp:float,P:float,dropSpec:str) :
- gas.TPX = dropTemp,P,dropSpec
- massArr_ = gas.Y
- # print(gas.Y)
- return massArr_
-
- # return 1D numpy array for gas phase mass fraction
- def genGasMassFracArr(gas,gasTemp:float,P:float,gasSpec:str):
- gas.TPX = gasTemp,P,gasSpec
- massArr_ = gas.Y
- return massArr_
-
- # return 1D numpy array for gas phase spatial coordinate and temperature
- def genGasTempAndRadiusArr(Rd,L,shift,Wmix,nPts,dropTemp,gasTemp):
- dX = L/(nPts-1)
- r_ = np.zeros(nPts)
- r_[0] = Rd
- #DEBUG
- #print("r_[0] = %15.6e\n"%(r_[0]))
- for ii in range(1, nPts-1):
- r_[ii] = r_[ii-1] + dX
- r_[nPts-1] = Rd+L
-
- x = [Rd+shift, Rd+shift+Wmix] ;
- y = [dropTemp, gasTemp] ;
- m = [0,0] ;
- spline = CubicHermiteSpline(x, y, m)
-
- T_ = np.zeros(nPts)
- for i in range(nPts):
- if r_[i] < Rd + shift :
- T_[i] = dropTemp ;
- if r_[i] >= (Rd + shift) and (r_[i] <= Rd + shift + Wmix) :
- T_[i] = spline(r_[i]) ;
- if r_[i] > (Rd + shift +Wmix) and r_[i] <= (Rd+L) :
- T_[i] = gasTemp ;
- return r_,T_
-
- # return 2D numpy array with size of (nvar*nPts)
- def writeGlobalArr(Rd,L,shift,Wmix,dropTemp,gasTemp,P,dropSpec,gasSpec,gas,lnPts,gnPts,fileName):
- liquidMassFracArr_ = genLiquidMassFracArr(gas, dropTemp, P, dropSpec)
- gasMassFracArr_ = genGasMassFracArr(gas, gasTemp, P, gasSpec)
-
- # assign spatial coordinate value
- rG_,TG_ = genGasTempAndRadiusArr(Rd, L, shift, Wmix, gnPts, dropTemp, gasTemp)
- rL_ = np.zeros(lnPts)
- dXL = Rd/(lnPts-1)
- rL_[0] = 0.0
- for ii in range(1, lnPts-1):
- rL_[ii] = rL_[ii-1] + dXL
- rL_[lnPts-1] = Rd
- #DEBUG
- # print("last element of rL_ is :%15.6e"%(rL_[lnPts-1]))
- # print("first element of rG_ is :%15.6e"%(rG_[0]))
- r_ = np.concatenate((rL_,rG_))
- # assign temperature values
- TL_ = np.ones(lnPts)*dropTemp
- T_ = np.concatenate((TL_,TG_))
- # assign pressure values
- P_ = np.ones(gnPts+lnPts) * P
- mdot_ = np.ones(gnPts+lnPts) * 0.0
-
- # write global arr to output file
- out=open(fileName,"w")
- for i in range(lnPts):
- out.write("%15.6e\t%15.6e\t"%(r_[i],T_[i]))
- for j in range(gas.n_species):
- out.write("%15.6e\t"%(liquidMassFracArr_[j]))
- out.write("%15.6e\t"%(P_[i]))
- out.write("%15.6e\n"%(mdot_[i]))
-
- for i in range(lnPts,lnPts+gnPts):
- out.write("%15.6e\t%15.6e\t"%(r_[i],T_[i]))
- for j in range(gas.n_species):
- out.write("%15.6e\t"%(gasMassFracArr_[j]))
- out.write("%15.6e\t"%(P_[i]))
- out.write("%15.6e\n"%(mdot_[i]))
-
- out.close()
-
-
- # =============================================================================
- # Following block defines the user defined parameters
- # =============================================================================
- if __name__ == "__main__" :
- fileName = "initialConditionTest.dat" #This script output the initial conditions
- #mech='sdMechMergedVer2.cti'
- mech='redKaust-C3.xml' #Mechanism name
- #mech='chem171.cti'
- gas = ct.Solution(mech)
- Rd = 200.0e-6 #droplet radius, Unit:[m]
- domainLength = Rd*50.0 #domain length, Unit:[m]
- shift = Rd * 3.0e0 #shift of mixing region from droplet surface
- Wmix = Rd * 5.0e0 #thickness of mixing layer for heptane mass fraction & Temperature distribution, Unit:[m]
- gNpts = 5000 #Number of grid points in gas phase
- lNpts = 500 #Number of grid points in liquid phase
- Tamb = 1400.00 #Temperature of ambient air, Unit : [K]
- Pamb = 20.0*ct.one_atm #Pressure of ambient air, Unit :[Pa]
- Td = 310.00 #Temperature of droplet surface, Unit: [K]
- #RH = 0.0 #relative humidity
- dropName = "C3H8:0.20,NC7H16:0.80" #Name of droplet species
- # dropName ="NC7H16:1.00"
- gasComposition = "O2:0.21,N2:0.79"
-
- writeGlobalArr(Rd, domainLength, shift, Wmix, Td, Tamb, Pamb, dropName, gasComposition, gas, lNpts, gNpts, fileName)
- # writeGlobalArr(Rd, L, shift, Wmix, dropTemp, gasTemp, P, dropSpec, gasSpec, gas, lnPts, gnPts, fileName)
- #writeInitCond(Rd, domainLength, shift, Wmix, nGrid, Tamb, Pamb, Td, RH, gas, dropName, oxidizerName, bathName, fileName)
- # genTotalMassfracArr(Rd, domainLength, shift, Wmix, nGrid, Tamb, Pamb, Td, RH, gas, dropName, oxidizerName, bathName)
- # genTemArr(Rd, domainLength, shift, Wmix, nGrid, Tdrop, Tamb)
- # genMolefracArr(Rd, domainLength, shift, Wmix, nGrid, Tamb, Pamb, Td, RH)
|