{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "9e47daa3", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import cantera as ct\n", "import pde\n", "\n", "import ipywidgets as widgets\n", "\n", "from matplotlib import pyplot as plt\n", "%matplotlib widget" ] }, { "cell_type": "markdown", "id": "3164bd16", "metadata": {}, "source": [ "# 연료 조성 반영 입구 조건 계산" ] }, { "cell_type": "code", "execution_count": 2, "id": "1ebaaaef", "metadata": {}, "outputs": [], "source": [ "gas = ct.Solution('gri30.xml')" ] }, { "cell_type": "code", "execution_count": 3, "id": "d03cafb5", "metadata": {}, "outputs": [], "source": [ "gas.TPX = 600 + 273.15, ct.one_atm, \"H2:6.42, O2:0.39, N2:47.28, CH4:1.79, CO:24.25, CO2:19.72, C2H4:0.13, C2H6:0.04\"\n", "fuel_comp = gas.X" ] }, { "cell_type": "code", "execution_count": 4, "id": "5bddc916", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " gri30:\n", "\n", " temperature 873.15 K\n", " pressure 1.0133e+05 Pa\n", " density 0.40894 kg/m^3\n", " mean mol. weight 29.3 kg/kmol\n", " phase of matter gas\n", "\n", " 1 kg 1 kmol \n", " --------------- ---------------\n", " enthalpy -2.9427e+06 -8.6222e+07 J\n", " internal energy -3.1905e+06 -9.3481e+07 J\n", " entropy 8194.9 2.4011e+05 J/K\n", " Gibbs function -1.0098e+07 -2.9587e+08 J\n", " heat capacity c_p 1254.1 36746 J/K\n", " heat capacity c_v 970.34 28431 J/K\n", "\n", " mass frac. Y mole frac. X chem. pot. / RT\n", " --------------- --------------- ---------------\n", " H2 0.0044164 0.064187 -19.925\n", " O2 0.0042583 0.0038992 -31.756\n", " CH4 0.009799 0.017896 -38.919\n", " CO 0.23178 0.24245 -41.902\n", " CO2 0.29614 0.19716 -83.677\n", " C2H4 0.0012445 0.0012997 -28.665\n", " C2H6 0.00041043 0.00039992 -50.523\n", " N2 0.45196 0.47271 -25.262\n", " [ +45 minor] 0 0 \n", "\n" ] } ], "source": [ "gas()" ] }, { "cell_type": "markdown", "id": "40d9a0f9", "metadata": {}, "source": [ "연료 기체 구성비와 같은 원소 1몰의 완전 연소 산소 요구량" ] }, { "cell_type": "code", "execution_count": 5, "id": "5cb2f86f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.2584483103379323\n", "0.9072176564687062\n" ] } ], "source": [ "consider_o_in_fuel = True\n", "\n", "coef_O = gas.elemental_mole_fraction('C') * 2 + gas.elemental_mole_fraction('H') / 2 - (gas.elemental_mole_fraction('O') if consider_o_in_fuel else 0)\n", "\n", "coef_N = coef_O * 3.762\n", "\n", "coef_O + coef_N\n", "\n", "# 공기 1몰의 원자 몰수 = 2 ; O2 + N2 만으로 구성되었으면\n", "\n", "# 연료 기체 1몰의 원자 몰수\n", "\n", "mean_natoms = sum([(gas.X[i] * sum([v for v in gas.species(i).composition.values()])) for i in range(gas.n_species)])\n", "print(mean_natoms)\n", "\n", "# 연료 기체 1몰에 필요한 공기 몰수\n", "air_fuel_ratio_st = mean_natoms * (coef_N + coef_O) / 2\n", "print (air_fuel_ratio_st)\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "bf4af7ee", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " gri30:\n", "\n", " temperature 300 K\n", " pressure 7080.3 Pa\n", " density 0.081894 kg/m^3\n", " mean mol. weight 28.851 kg/kmol\n", " phase of matter gas\n", "\n", " 1 kg 1 kmol \n", " --------------- ---------------\n", " enthalpy 1907.6 55036 J\n", " internal energy -84549 -2.4393e+06 J\n", " entropy 7658.6 2.2095e+05 J/K\n", " Gibbs function -2.2957e+06 -6.6231e+07 J\n", " heat capacity c_p 1010.1 29141 J/K\n", " heat capacity c_v 721.88 20827 J/K\n", "\n", " mass frac. Y mole frac. X chem. pot. / RT\n", " --------------- --------------- ---------------\n", " O2 0.2329 0.21 -28.895\n", " N2 0.7671 0.79 -25.93\n", " [ +51 minor] 0 0 \n", "\n", "\n", " gri30:\n", "\n", " temperature 300 K\n", " pressure 6971.7 Pa\n", " density 0.081894 kg/m^3\n", " mean mol. weight 29.3 kg/kmol\n", " phase of matter gas\n", "\n", " 1 kg 1 kmol \n", " --------------- ---------------\n", " enthalpy -3.6049e+06 -1.0562e+08 J\n", " internal energy -3.6901e+06 -1.0812e+08 J\n", " entropy 7738.9 2.2675e+05 J/K\n", " Gibbs function -5.9266e+06 -1.7365e+08 J\n", " heat capacity c_p 1052.3 30831 J/K\n", " heat capacity c_v 768.49 22517 J/K\n", "\n", " mass frac. Y mole frac. X chem. pot. / RT\n", " --------------- --------------- ---------------\n", " H2 0.0044164 0.064187 -21.14\n", " O2 0.0042583 0.0038992 -32.897\n", " CH4 0.009799 0.017896 -59.022\n", " CO 0.23178 0.24245 -72.178\n", " CO2 0.29614 0.19716 -187.77\n", " C2H4 0.0012445 0.0012997 -14.653\n", " C2H6 0.00041043 0.00039992 -71.686\n", " N2 0.45196 0.47271 -26.459\n", " [ +45 minor] 0 0 \n", "\n" ] } ], "source": [ "air = ct.Solution('gri30.xml')\n", "air.X = \"O2:1, N2:3.762\"\n", "air_comp = air.X\n", "air()\n", "\n", "fuel = ct.Solution('gri30.xml')\n", "fuel.X = \"H2:6.42, O2:0.39, N2:47.28, CH4:1.79, CO:24.25, CO2:19.72, C2H4:0.13, C2H6:0.04\"\n", "fuel_comp = fuel.X\n", "fuel()" ] }, { "cell_type": "markdown", "id": "4b1f191f", "metadata": {}, "source": [ "# 이론공연비 계산" ] }, { "cell_type": "code", "execution_count": 7, "id": "60f9c29b", "metadata": {}, "outputs": [], "source": [ "def stoich_AF (fuel_compostion, mole_fraction=True):\n", " \"Stoichiometric Air/Fuel ratio (volume)\"\n", " \n", " gas = ct.Solution('gri30.xml')\n", "\n", " if mole_fraction:\n", " gas.TPX = 600 + 273.15, ct.one_atm, fuel_compostion\n", " else:\n", " gas.TPY = 600 + 273.15, ct.one_atm, fuel_compostion\n", " \n", " fuel_comp = gas.X\n", "\n", " # 연료의 원자 1 몰 완전 연소에 필요한 산소 원자 몰 수\n", " coef_O = gas.elemental_mole_fraction('C') * 2 + gas.elemental_mole_fraction('H') / 2 - (gas.elemental_mole_fraction('O'))\n", "\n", " # 연료의 원자 1 몰 완전 연소에 필요한 공기 원자 몰 수 = 산소 원자 몰 수 X (1 + 3.762)\n", " coef_N = coef_O * 3.762\n", "\n", " # 공기 1몰의 원자 몰수 = 2 ; O2 + N2 만으로 구성되었으면\n", " mean_natoms_air = 2\n", "\n", " # 연료 기체 1몰의 원자 몰수 (평균 분자당 원자 수)\n", " mean_natoms_fuel = sum([(gas.X[i] * sum([v for v in gas.species(i).composition.values()])) for i in range(gas.n_species)])\n", "\n", " # 연료 기체 1몰에 필요한 공기 몰수 ()\n", " air_fuel_ratio_st = mean_natoms_fuel * (coef_N + coef_O) / mean_natoms_air\n", "\n", " return (air_fuel_ratio_st)\n" ] }, { "cell_type": "code", "execution_count": 8, "id": "c633e758", "metadata": {}, "outputs": [], "source": [ "coke_oven_fuel = \"H2:6.42, O2:0.39, N2:47.28, CH4:1.79, CO:24.25, CO2:19.72, C2H4:0.13, C2H6:0.04\"" ] }, { "cell_type": "code", "execution_count": 9, "id": "d489bdf1", "metadata": {}, "outputs": [], "source": [ "st_AF = stoich_AF(coke_oven_fuel)" ] }, { "cell_type": "code", "execution_count": 10, "id": "825758e1", "metadata": {}, "outputs": [], "source": [ "air = ct.Solution('gri30.xml')" ] }, { "cell_type": "code", "execution_count": 11, "id": "99dbfd30", "metadata": {}, "outputs": [], "source": [ "air.X = \"O2:1, N2:3.762\"\n", "air_comp = air.X" ] }, { "cell_type": "code", "execution_count": 12, "id": "7e1a5975", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1506.856765604754\n", "\n", " gri30:\n", "\n", " temperature 1780 K\n", " pressure 1.0133e+05 Pa\n", " density 0.21633 kg/m^3\n", " mean mol. weight 31.597 kg/kmol\n", " phase of matter gas\n", "\n", " 1 kg 1 kmol \n", " --------------- ---------------\n", " enthalpy -1.9051e+06 -6.0194e+07 J\n", " internal energy -2.3734e+06 -7.4994e+07 J\n", " entropy 8525 2.6936e+05 J/K\n", " Gibbs function -1.708e+07 -5.3966e+08 J\n", " heat capacity c_p 1351.2 42694 J/K\n", " heat capacity c_v 1088.1 34380 J/K\n", "\n", " mass frac. Y mole frac. X chem. pot. / RT\n", " --------------- --------------- ---------------\n", " H2 6.2424e-06 9.7839e-05 -28.347\n", " H 9.5406e-08 2.9906e-06 -14.173\n", " O 1.3675e-06 2.7007e-06 -17.795\n", " O2 0.00073214 0.00072297 -35.589\n", " OH 6.1066e-05 0.00011345 -31.968\n", " H2O 0.033613 0.058955 -46.141\n", " HO2 1.1974e-08 1.1463e-08 -49.763\n", " H2O2 1.4101e-09 1.3099e-09 -63.936\n", " CO 0.0014344 0.0016181 -41.208\n", " CO2 0.3634 0.26091 -59.003\n", " HCO 2.8143e-12 3.0644e-12 -55.381\n", " CH2O 6.3467e-14 6.6788e-14 -69.555\n", " N 9.3579e-12 2.111e-11 -13.467\n", " NH 1.4448e-12 3.0404e-12 -27.64\n", " NH2 1.006e-12 1.9838e-12 -41.814\n", " NH3 1.3308e-11 2.469e-11 -55.987\n", " NNH 3.8031e-12 4.1406e-12 -41.107\n", " NO 0.00020133 0.000212 -31.262\n", " NO2 4.7618e-08 3.2705e-08 -49.056\n", " N2O 1.5885e-08 1.1404e-08 -44.729\n", " HNO 5.0425e-10 5.1373e-10 -45.435\n", " HCN 4.3708e-14 5.1101e-14 -51.054\n", " HNCO 1.5701e-11 1.153e-11 -68.848\n", " NCO 1.2119e-13 9.1136e-14 -54.675\n", " N2 0.60055 0.67737 -26.934\n", " [ +28 minor] 1.1611e-14 8.5342e-15 \n", "\n" ] } ], "source": [ "phi = 1\n", "\n", "mix = ct.Solution('gri30.xml')\n", "\n", "mix.TPX = 25+273.15, ct.one_atm, phi * fuel_comp + st_AF * air_comp\n", "\n", "mix.equilibrate('HP')\n", "\n", "print(mix.T - 273.15)\n", "mix()" ] }, { "cell_type": "code", "execution_count": 13, "id": "a20ce147", "metadata": {}, "outputs": [], "source": [ "def exhaust_stoichiometry (phi = 1, return_unburned=False):\n", "\n", " mix = ct.Solution('gri30.xml')\n", "\n", " mix.TPX = 25+273.15, ct.one_atm, phi * fuel_comp + st_AF * air_comp\n", " \n", " element_X = {ename: mix.elemental_mole_fraction(ename) for ename in mix.element_names}\n", " \n", " exhaust = ct.Solution('gri30.xml')\n", " exhaust.X = {\n", " \"CO2\" : element_X['C'],\n", " \"H2O\" : element_X['H']/2,\n", " \"O2\" : (element_X['O'] - 2*element_X['C'] - element_X['H']/2)/2,\n", " \"N2\" : element_X['N']/2,\n", " }\n", " \n", " if return_unburned:\n", " return mix.mole_fraction_dict(threshold=-1), exhaust.mole_fraction_dict(threshold=-1)\n", " else:\n", " return exhaust.mole_fraction_dict(threshold=-1)" ] }, { "cell_type": "code", "execution_count": 14, "id": "c49236bf", "metadata": {}, "outputs": [], "source": [ "from scipy import optimize as opt" ] }, { "cell_type": "code", "execution_count": 15, "id": "4e5bd0e1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " converged: True\n", " flag: 'converged'\n", " function_calls: 8\n", " iterations: 7\n", " root: 0.6547375739201831\n" ] } ], "source": [ "f_found = opt.root_scalar(lambda x: exhaust_stoichiometry(x)[\"O2\"] - 0.045, \n", " bracket=[1e-300, 1])\n", "\n", "print(f_found)\n", "\n", "phi_O2_045 = f_found.root" ] }, { "cell_type": "code", "execution_count": 16, "id": "c3d58dd5", "metadata": {}, "outputs": [], "source": [ "def exhaust_equilibrium (phi = 1):\n", "\n", " mix = ct.Solution('gri30.xml')\n", "\n", " mix.TPX = 25+273.15, ct.one_atm, phi * fuel_comp + st_AF * air_comp\n", " \n", " mix.equilibrate(\"HP\")\n", " \n", " return mix.mole_fraction_dict(threshold=-1)\n" ] }, { "cell_type": "code", "execution_count": 17, "id": "dc4ca92f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ " converged: True\n", " flag: 'converged'\n", " function_calls: 8\n", " iterations: 7\n", " root: 0.6526852820518209" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f_found = opt.root_scalar(lambda x: exhaust_equilibrium(x)[\"O2\"] - 0.045, \n", " bracket=[0.5, 1])\n", "\n", "f_found" ] }, { "cell_type": "markdown", "id": "4c6c962f", "metadata": {}, "source": [ "# 발열량 계산" ] }, { "cell_type": "code", "execution_count": 18, "id": "2f732468", "metadata": { "scrolled": false }, "outputs": [], "source": [ "Xu, Xb = exhaust_stoichiometry(phi=phi_O2_045, return_unburned=True)" ] }, { "cell_type": "markdown", "id": "f7c5063d", "metadata": {}, "source": [ "## 배가스 산소 농도 4.5% 연료+공기 혼합 기체 " ] }, { "cell_type": "code", "execution_count": 19, "id": "53b2c1b9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " gri30:\n", "\n", " temperature 298.15 K\n", " pressure 1.0133e+05 Pa\n", " density 1.1869 kg/m^3\n", " mean mol. weight 29.039 kg/kmol\n", " phase of matter gas\n", "\n", " 1 kg 1 kmol \n", " --------------- ---------------\n", " enthalpy -1.5255e+06 -4.4299e+07 J\n", " internal energy -1.6109e+06 -4.6778e+07 J\n", " entropy 6999.5 2.0326e+05 J/K\n", " Gibbs function -3.6124e+06 -1.049e+08 J\n", " heat capacity c_p 1027.5 29837 J/K\n", " heat capacity c_v 741.17 21523 J/K\n", "\n", " mass frac. Y mole frac. X chem. pot. / RT\n", " --------------- --------------- ---------------\n", " H2 0.0018679 0.026906 -19.333\n", " O2 0.1362 0.1236 -26.764\n", " CH4 0.0041445 0.0075018 -57.401\n", " CO 0.098029 0.10163 -70.646\n", " CO2 0.12525 0.082645 -186.95\n", " C2H4 0.00052634 0.00054482 -12.715\n", " C2H6 0.00017359 0.00016764 -70.088\n", " N2 0.63381 0.657 -23.453\n", " [ +45 minor] 0 0 \n", "\n" ] } ], "source": [ "gas_u = ct.Solution('gri30.xml')\n", "gas_u.TPX = 25 + 273.15, ct.one_atm, Xu\n", "gas_u()" ] }, { "cell_type": "markdown", "id": "1d54eebc", "metadata": {}, "source": [ "## 배가스 산소 농도 4.5% 완전 연소 배가스" ] }, { "cell_type": "code", "execution_count": 20, "id": "a1bc3d15", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " gri30:\n", "\n", " temperature 298.15 K\n", " pressure 1.0133e+05 Pa\n", " density 1.2684 kg/m^3\n", " mean mol. weight 31.031 kg/kmol\n", " phase of matter gas\n", "\n", " 1 kg 1 kmol \n", " --------------- ---------------\n", " enthalpy -2.9803e+06 -9.2481e+07 J\n", " internal energy -3.0602e+06 -9.496e+07 J\n", " entropy 6565.1 2.0372e+05 J/K\n", " Gibbs function -4.9377e+06 -1.5322e+08 J\n", " heat capacity c_p 997.71 30960 J/K\n", " heat capacity c_v 729.77 22645 J/K\n", "\n", " mass frac. Y mole frac. X chem. pot. / RT\n", " --------------- --------------- ---------------\n", " O2 0.046403 0.045 -27.775\n", " H2O 0.026987 0.046486 -123.33\n", " CO2 0.2928 0.20645 -186.03\n", " N2 0.63381 0.70206 -23.387\n", " [ +49 minor] 0 0 \n", "\n" ] } ], "source": [ "gas_b = ct.Solution('gri30.xml')\n", "gas_b.TPX = 25 + 273.15, ct.one_atm, Xb\n", "gas_b()" ] }, { "cell_type": "markdown", "id": "3e537f99", "metadata": {}, "source": [ "## 배가스 산소 농도 4.5% 혼합 기체 kg 당 저위발열량 (J/kg)" ] }, { "cell_type": "code", "execution_count": 21, "id": "067ae187", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'1.454825772118082 MJ/kg'" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "heating_value_J_kg = gas_u.enthalpy_mass - gas_b.enthalpy_mass\n", "f'{heating_value_J_kg*1e-6} MJ/kg'" ] }, { "cell_type": "code", "execution_count": 22, "id": "f8713062", "metadata": {}, "outputs": [], "source": [ "heat_to_battery = 80 # GJ / Rev" ] }, { "cell_type": "code", "execution_count": 23, "id": "42f68b81", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'3636.3636363636365 MJ / hr to a combustion chamber'" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "heat_to_chamber = heat_to_battery * 1000 * 3 / 66 # MJ / hr\n", "f'{heat_to_chamber} MJ / hr to a combustion chamber'" ] }, { "cell_type": "markdown", "id": "30be4bfc", "metadata": {}, "source": [ "## 연소실당 질량 유량 kg/hr" ] }, { "cell_type": "code", "execution_count": 24, "id": "fd85f6dc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'2499.5182970050437 (kg/hr) = 3636.3636363636365 (MJ/hr) / 1.454825772118082 (MJ/kg)'" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mfr_to_chamber = heat_to_chamber * 1e6 / heating_value_J_kg # kg / hr\n", "f'{mfr_to_chamber} (kg/hr) = {heat_to_chamber} (MJ/hr) / {heating_value_J_kg * 1e-6} (MJ/kg)'" ] }, { "cell_type": "markdown", "id": "ed0ec84b", "metadata": {}, "source": [ "# 단열 화염 온도 (평형 계산)" ] }, { "cell_type": "code", "execution_count": 25, "id": "fa7ef7a2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " gri30:\n", "\n", " temperature 1990.3 K\n", " pressure 1.0133e+05 Pa\n", " density 0.18983 kg/m^3\n", " mean mol. weight 31.002 kg/kmol\n", " phase of matter gas\n", "\n", " 1 kg 1 kmol \n", " --------------- ---------------\n", " enthalpy -8.9328e+05 -2.7694e+07 J\n", " internal energy -1.427e+06 -4.4241e+07 J\n", " entropy 8783.1 2.7229e+05 J/K\n", " Gibbs function -1.8374e+07 -5.6963e+08 J\n", " heat capacity c_p 1347.2 41767 J/K\n", " heat capacity c_v 1079 33452 J/K\n", "\n", " mass frac. Y mole frac. X chem. pot. / RT\n", " --------------- --------------- ---------------\n", " O 6.69e-05 0.00012964 -15.939\n", " O2 0.045092 0.043688 -31.879\n", " OH 0.00048954 0.00089239 -30.541\n", " H2O 0.02669 0.045932 -45.143\n", " CO 0.001079 0.0011942 -41.097\n", " CO2 0.29111 0.20507 -57.036\n", " NO 0.003114 0.0032174 -29.575\n", " N2 0.63235 0.6998 -27.272\n", " [ +45 minor] 8.9232e-06 7.3917e-05 \n", "\n" ] } ], "source": [ "gas_chamber = ct.Solution('gri30.xml')\n", "gas_chamber.TPX = 600 + 273.15, ct.one_atm, Xu\n", "gas_chamber.equilibrate(\"HP\")\n", "gas_chamber(threshold=1e-4)\n", "\n", "eq_state = gas_chamber.TPX\n", "\n", "Tad, P0, X0 = eq_state" ] }, { "cell_type": "code", "execution_count": 26, "id": "1d6c95a7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tad = 1717.1055126606984 `C\n" ] } ], "source": [ "print(f'Tad = {eq_state[0] - 273.15} `C')" ] }, { "cell_type": "code", "execution_count": 27, "id": "e437f3b4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NO: 3217.3809731942233 ppm\n" ] } ], "source": [ "print(f'NO: {gas_chamber.mole_fraction_dict()[\"NO\"] * 1e6} ppm')" ] }, { "cell_type": "markdown", "id": "a52e7ccf", "metadata": {}, "source": [ "# 연소실 평형 온도" ] }, { "cell_type": "code", "execution_count": 28, "id": "683e1479", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "564968.6851296029 1057170.3471485006\n", "258568.46996560355\n", "239.0022179980857 1363443.6972422504\n", "-612434.5630397515\n", "400326.765370211 1148091.5363109885\n", "3005.361043723591\n", "398382.53608438675 1149155.5265008416\n", "-2.858431953645777\n", "398384.3836843984 1149154.51548965\n", "0.000179249735083431\n", "398384.3835685452 1149154.5155530453\n", "8.731149137020111e-10\n", "398384.38356854365 1149154.515553046\n", "-1.6298145055770874e-09\n", "496.511875 converged: True\n", " flag: 'converged'\n", " function_calls: 7\n", " iterations: 6\n", " root: 1558.4107622013973\n", "Outlet Gas Temperature: 1285.2607622013975 `C\n" ] } ], "source": [ "htc = 568 # W / m2 / K\n", "\n", "Twall0 = 1100 + 273.15\n", "Twall1 = 1100 + 273.15\n", "\n", "area_chamber_wall = 6.7 * 16.7\n", "\n", "htcA = htc * area_chamber_wall / 2 / 2 / 2 / 2 / 2 / 2 / 2# W / K\n", "\n", "def chamber_energy_balance (Tout, hA, Twall0, Twall1):\n", " \n", " gas_chamber.TPX = eq_state\n", " h0 = gas_chamber.enthalpy_mass\n", " \n", " gas_chamber.TP = Tout, gas_chamber.P\n", " h1 = gas_chamber.enthalpy_mass\n", " \n", " '''print(h0 - h1, \n", " mfr_to_chamber/3600 * (h0 - h1) - htc * area_chamber_wall * (((eq_state[0] - Tout)/2 - Twall0) + ((eq_state[0] - Tout)/2 - Twall1))\n", ")'''\n", " \n", " print (mfr_to_chamber/3600 * (h0 - h1), \n", " - hA * (((eq_state[0] - Tout)/2 - Twall0) + ((eq_state[0] - Tout)/2 - Twall1)))\n", " \n", " print (mfr_to_chamber/3600 * (h0 - h1) \n", " - hA * (((eq_state[0] + Tout)/2 - Twall0) + ((eq_state[0] + Tout)/2 - Twall1)))\n", "\n", " return (mfr_to_chamber/3600 * (h0 - h1) \n", " - hA * (((eq_state[0] + Tout)/2 - Twall0) + ((eq_state[0] + Tout)/2 - Twall1)))\n", "\n", "f_found = opt.root_scalar(lambda x: chamber_energy_balance(x, htcA, Twall0, Twall1),\n", " bracket=[min(Twall0, Twall1), 1990])\n", "\n", "print(htcA, f_found)\n", "\n", "\n", "print(f'Outlet Gas Temperature: {f_found.root - 273.15} `C')" ] }, { "cell_type": "code", "execution_count": 29, "id": "badfe727", "metadata": {}, "outputs": [], "source": [ "class CombustionChamber:\n", " def __init__ (self, mdot, T0, P0, X0, hA=600):\n", " self.mdot = mdot # kg/s\n", " self.T_preheat = T0 # K, preheat temperature\n", " self.P0 = P0 # Pa, pressure\n", " self.X0 = X0 # Composition in mole fractions, Fuel + Air\n", " self.gas = ct.Solution(\"gri30.xml\") # gas object\n", " self.gas.TPX = T0, P0, X0\n", " self.gas.equilibrate('HP')\n", " self.eq_state = self.gas.TPX\n", " self.h0 = self.gas.enthalpy_mass # inlet enthalpy\n", " self.T0 = self.gas.T # K, adiabatic flame temperature\n", " self.hA = hA # HTC x Area\n", " self.Twall0 = 1100 + 273.15 \n", " self.Twall1 = 1100 + 273.15\n", " \n", " def update_mdot (self, mdot_new):\n", " self.mdot = mdot_new\n", "\n", " def update_Twall (self, Twall0=None, Twall1=None):\n", " if Twall0: self.Twall0 = Twall0\n", " if Twall1: self.Twall1 = Twall1\n", "\n", " def energy_balance_equation (Tout, Twall0, Twall1):\n", " # mdot * (dh) - self.heat()\n", "\n", " self.gas.TP = Tout, gas_chamber.P\n", " h1 = self.gas.enthalpy_mass\n", " Tgas = (self.T0 + Tout)/2\n", "\n", " print (self.mdot * (h0 - h1) - self.hA * ((Tgas - Twall0) + (Tgas - Twall1)))\n", "\n", " return (self.mdot * (h0 - h1) - self.hA * ((Tgas - Twall0) + (Tgas - Twall1)))\n", "\n", " def solve (self, ):\n", " f_found = opt.root_scalar(lambda x: chamber_energy_balance(x, htcA, Twall0, Twall1),\n", " bracket=[max(Twall0, Twall1), 1990])\n", "\n", " def heat (self, Tgas, Twall0, Twall1):\n", " # Tgas = (T0 + T1) / 2\n", " # heat_to_Twall0 + heat_to_Twall1\n", " pass" ] }, { "cell_type": "markdown", "id": "60c37bac", "metadata": {}, "source": [ "chamber = CombustionChamber()\n", "wall0 = Brick()\n", "wall1 = Brick()\n", "\"# Iterate\"\n", "\"# Integrate for 1 timestep\"\n", "chamber.solve()\n", "\n", "wall0.heat_to_coke()\n", "wall1.heat_to_coke()\n", "\n", "wall0.update_coke_side() coke_model.brick_temperature(cum_heat)\n", "wall1.update_coke_side() coke_model.brick_temperature(cum_heat)\n", " \n", "wall0.solve() # advance 1 timestep\n", "wall1.solve() # advance 1 timestep\n", "\n" ] }, { "cell_type": "markdown", "id": "1470c1e2", "metadata": {}, "source": [ "# 공급 열량 오더 추정" ] }, { "cell_type": "code", "execution_count": 31, "id": "858a862e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "346.5 Mcal / ton\n" ] } ], "source": [ "# 50'C 장입탄 1 톤을 1100'C 코크스로 건류시키기 위해 필요한 열량\n", "heat_coking_mcal_per_ton = (1100 - 50) * 0.33 # Mcal / t-c\n", "print(f'{heat_coking_mcal_per_ton} Mcal / ton')" ] }, { "cell_type": "code", "execution_count": 32, "id": "d9a3443d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "925.2 Mcal / ton\n" ] } ], "source": [ "# 50`C 물 1톤을 800`C 수증기로 증발하는데 필요한 열량\n", "# 액체 가열 + 증발 + 증기 가열\n", "heat_evap_mcal_per_ton = 1 * (100 - 50) + 539.2 + 0.48*(800-100)\n", "heat_evap_mcal_per_ton\n", "print(f'{heat_evap_mcal_per_ton} Mcal / ton')" ] }, { "cell_type": "code", "execution_count": 33, "id": "bc35e30a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "90.223776 GJ / charge\n" ] } ], "source": [ "# 1~4 기 장입 습탄 34 톤 중 수분 5.9% (2 톤) 제외 건탄 32 톤\n", "# 1 문당 장입에서 추출까지 필요한 열량\n", "heat_total_mcal = 32 * heat_coking_mcal_per_ton + 2 * heat_evap_mcal_per_ton # Mcal\n", "heat_total_gj = heat_total_mcal / 1000 * 4.184 / 0.6 # GJ\n", "print(f'{heat_total_gj} GJ / charge')" ] }, { "cell_type": "code", "execution_count": 34, "id": "c5a556cd", "metadata": {}, "outputs": [], "source": [ "# 1 문에 시간당 공급되는 " ] }, { "cell_type": "code", "execution_count": 35, "id": "2b8e5d35", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "59.4 rev / charge\n" ] } ], "source": [ "# 건류 시간 동안 rev 횟수\n", "n_rev_total = 3 * 24 * 66 / 80\n", "\n", "n_rev_total\n", "print(f'{n_rev_total} rev / charge')" ] }, { "cell_type": "code", "execution_count": 36, "id": "9e3eee55", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'100.24864 GJ / rev'" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 66 문에 rev 당 공급되는 열량\n", "f'{66 * heat_total_gj / n_rev_total} GJ / rev'" ] }, { "cell_type": "code", "execution_count": 37, "id": "4ae27703", "metadata": {}, "outputs": [], "source": [ "# 80 GJ/rev 는 모든 문에 공급되는 열량이 맞다" ] }, { "cell_type": "code", "execution_count": 38, "id": "d552c14d", "metadata": {}, "outputs": [], "source": [ "water = ct.Water()" ] }, { "cell_type": "code", "execution_count": 39, "id": "c4d73576", "metadata": {}, "outputs": [ { "data": { "text/plain": [ ".WaterWithTransport at 0x1d30a92ef60>" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "water" ] }, { "cell_type": "code", "execution_count": 40, "id": "4c82456a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " water:\n", "\n", " temperature 313.15 K\n", " pressure 1.0132e+05 Pa\n", " density 992.27 kg/m^3\n", " mean mol. weight 18.016 kg/kmol\n", " vapor fraction 0\n", " phase of matter liquid\n", "\n", " 1 kg 1 kmol \n", " --------------- ---------------\n", " enthalpy -1.5803e+07 -2.8471e+08 J\n", " internal energy -1.5803e+07 -2.8471e+08 J\n", " entropy 4092.4 73728 J/K\n", " Gibbs function -1.7085e+07 -3.078e+08 J\n", " heat capacity c_p 4175.6 75228 J/K\n", " heat capacity c_v 4067.9 73288 J/K\n", "\n" ] } ], "source": [ "water.TP = 40 + 273.15, ct.one_atm\n", "\n", "water()" ] }, { "cell_type": "code", "execution_count": 41, "id": "9dd982a4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " water:\n", "\n", " temperature 313.15 K\n", " pressure 7367.2 Pa\n", " density 0.051107 kg/m^3\n", " mean mol. weight 18.016 kg/kmol\n", " vapor fraction 1\n", " phase of matter liquid-gas-mix\n", "\n", " 1 kg 1 kmol \n", " --------------- ---------------\n", " enthalpy -1.3397e+07 -2.4135e+08 J\n", " internal energy -1.3541e+07 -2.4395e+08 J\n", " entropy 11778 2.1219e+05 J/K\n", " Gibbs function -1.7085e+07 -3.078e+08 J\n", " heat capacity c_p 1884.7 33955 J/K\n", " heat capacity c_v 1414.4 25481 J/K\n", "\n" ] } ], "source": [ "water.TQ = 40 + 273.15, 1\n", "h_vapor = water.enthalpy_mass\n", "water()" ] }, { "cell_type": "code", "execution_count": 42, "id": "70b5436f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " water:\n", "\n", " temperature 313.15 K\n", " pressure 7367.2 Pa\n", " density 992.23 kg/m^3\n", " mean mol. weight 18.016 kg/kmol\n", " vapor fraction 0\n", " phase of matter liquid-gas-mix\n", "\n", " 1 kg 1 kmol \n", " --------------- ---------------\n", " enthalpy -1.5803e+07 -2.8471e+08 J\n", " internal energy -1.5803e+07 -2.8471e+08 J\n", " entropy 4092.4 73729 J/K\n", " Gibbs function -1.7085e+07 -3.078e+08 J\n", " heat capacity c_p 4176.1 75236 J/K\n", " heat capacity c_v 4067.9 73287 J/K\n", "\n" ] } ], "source": [ "water.TQ = 40 + 273.15, 0\n", "h_water = water.enthalpy_mass\n", "water()" ] }, { "cell_type": "code", "execution_count": 43, "id": "1c18625b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2406727.679574404" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "h_vapor - h_water" ] }, { "cell_type": "code", "execution_count": 44, "id": "17f8781a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " water:\n", "\n", " temperature 282.88 K\n", " pressure 1.0133e+05 Pa\n", " density 999.71 kg/m^3\n", " mean mol. weight 18.016 kg/kmol\n", " vapor fraction 0\n", " phase of matter liquid\n", "\n", " 1 kg 1 kmol \n", " --------------- ---------------\n", " enthalpy -1.593e+07 -2.8699e+08 J\n", " internal energy -1.593e+07 -2.8699e+08 J\n", " entropy 3667 66064 J/K\n", " Gibbs function -1.6967e+07 -3.0568e+08 J\n", " heat capacity c_p 4201.1 75688 J/K\n", " heat capacity c_v 4197.7 75626 J/K\n", "\n" ] } ], "source": [ "water.TP = 40+273.15, ct.one_atm\n", "h0 = water.enthalpy_mass\n", "water.HP = h0 - (h_vapor - h_water) * 5 / 95, ct.one_atm\n", "water()" ] }, { "cell_type": "code", "execution_count": 45, "id": "f4e62efb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " water:\n", "\n", " temperature 338.15 K\n", " pressure 24986 Pa\n", " density 0.16107 kg/m^3\n", " mean mol. weight 18.016 kg/kmol\n", " vapor fraction 1\n", " phase of matter liquid-gas-mix\n", "\n", " 1 kg 1 kmol \n", " --------------- ---------------\n", " enthalpy -1.3353e+07 -2.4056e+08 J\n", " internal energy -1.3508e+07 -2.4335e+08 J\n", " entropy 11352 2.0451e+05 J/K\n", " Gibbs function -1.7191e+07 -3.0972e+08 J\n", " heat capacity c_p 1926.9 34715 J/K\n", " heat capacity c_v 1443.6 26008 J/K\n", "\n" ] } ], "source": [ "water.TQ = 65 + 273.15, 1\n", "water()" ] }, { "cell_type": "code", "execution_count": 46, "id": "54881653", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.8110541903465941" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "20 / (24986 / ct.one_atm * 100)" ] }, { "cell_type": "markdown", "id": "20389a41", "metadata": {}, "source": [ "# Oven Dimension" ] }, { "cell_type": "markdown", "id": "31ce464b", "metadata": {}, "source": [ "## 1~4 Coke Ovens" ] }, { "cell_type": "code", "execution_count": 47, "id": "94eac653", "metadata": {}, "outputs": [], "source": [ "oven_height = 6.7 # m\n", "oven_width_mid = 0.450 # m\n", "oven_width_pusher = 0.412 # m\n", "oven_width_coke = 0.488 # m" ] }, { "cell_type": "markdown", "id": "b072182b", "metadata": {}, "source": [ "# Oven Wall Temperature" ] }, { "cell_type": "code", "execution_count": 51, "id": "87510579", "metadata": {}, "outputs": [], "source": [ "Twall_model = np.loadtxt(\"./CokeOvenWallTemperature.csv\", delimiter=',')" ] }, { "cell_type": "code", "execution_count": 55, "id": "b0f627f1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "27adc246a2cb4614a3ad533207b71595", "version_major": 2, "version_minor": 0 }, "image/png": "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", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure()\n", "plt.plot(Twall_model.T[0], Twall_model.T[-1], '-o')" ] }, { "cell_type": "code", "execution_count": 56, "id": "b90af431", "metadata": {}, "outputs": [], "source": [ "np.interp?" ] } ], "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.9.12" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "384px" }, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 5 }