10339 lines
No EOL
512 KiB
HTML
10339 lines
No EOL
512 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en" class="no-js">
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
|
|
|
|
|
|
|
|
<link rel="prev" href="../..">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="icon" href="../../assets/images/favicon.png">
|
|
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
|
|
|
|
|
|
|
<title>Battery Module - Coke Oven Maintenance Plan Reference Manual</title>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../../assets/stylesheets/main.484c7ddc.min.css">
|
|
|
|
|
|
<link rel="stylesheet" href="../../assets/stylesheets/palette.ab4e12ef.min.css">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
|
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../../assets/_mkdocstrings.css">
|
|
|
|
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
|
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="red" data-md-color-accent="deep-orange">
|
|
|
|
|
|
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
|
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
|
<label class="md-overlay" for="__drawer"></label>
|
|
<div data-md-component="skip">
|
|
|
|
|
|
<a href="#battery-api-reference" class="md-skip">
|
|
Skip to content
|
|
</a>
|
|
|
|
</div>
|
|
<div data-md-component="announce">
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<header class="md-header" data-md-component="header">
|
|
<nav class="md-header__inner md-grid" aria-label="Header">
|
|
<a href="../.." title="Coke Oven Maintenance Plan Reference Manual" class="md-header__button md-logo" aria-label="Coke Oven Maintenance Plan Reference Manual" data-md-component="logo">
|
|
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
|
|
|
</a>
|
|
<label class="md-header__button md-icon" for="__drawer">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
|
|
</label>
|
|
<div class="md-header__title" data-md-component="header-title">
|
|
<div class="md-header__ellipsis">
|
|
<div class="md-header__topic">
|
|
<span class="md-ellipsis">
|
|
Coke Oven Maintenance Plan Reference Manual
|
|
</span>
|
|
</div>
|
|
<div class="md-header__topic" data-md-component="header-topic">
|
|
<span class="md-ellipsis">
|
|
|
|
Battery Module
|
|
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<form class="md-header__option" data-md-component="palette">
|
|
|
|
|
|
|
|
|
|
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="red" data-md-color-accent="deep-orange" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
|
|
|
|
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
|
|
</label>
|
|
|
|
|
|
|
|
|
|
|
|
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="red" data-md-color-accent="deep-orange" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
|
|
|
|
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_0" hidden>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
|
|
</label>
|
|
|
|
|
|
</form>
|
|
|
|
|
|
|
|
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-header__button md-icon" for="__search">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
</label>
|
|
<div class="md-search" data-md-component="search" role="dialog">
|
|
<label class="md-search__overlay" for="__search"></label>
|
|
<div class="md-search__inner" role="search">
|
|
<form class="md-search__form" name="search">
|
|
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
|
<label class="md-search__icon md-icon" for="__search">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
|
|
</label>
|
|
<nav class="md-search__options" aria-label="Search">
|
|
|
|
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
|
</button>
|
|
</nav>
|
|
|
|
</form>
|
|
<div class="md-search__output">
|
|
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
|
<div class="md-search-result" data-md-component="search-result">
|
|
<div class="md-search-result__meta">
|
|
Initializing search
|
|
</div>
|
|
<ol class="md-search-result__list" role="presentation"></ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
</nav>
|
|
|
|
</header>
|
|
|
|
<div class="md-container" data-md-component="container">
|
|
|
|
|
|
|
|
|
|
|
|
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
|
<div class="md-grid">
|
|
<ul class="md-tabs__list">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../.." class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
Home
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item md-tabs__item--active">
|
|
<a href="./" class="md-tabs__link">
|
|
|
|
|
|
|
|
Python API Reference
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
|
|
|
|
|
|
<main class="md-main" data-md-component="main">
|
|
<div class="md-main__inner md-grid">
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
|
<label class="md-nav__title" for="__drawer">
|
|
<a href="../.." title="Coke Oven Maintenance Plan Reference Manual" class="md-nav__button md-logo" aria-label="Coke Oven Maintenance Plan Reference Manual" data-md-component="logo">
|
|
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
|
|
|
|
</a>
|
|
Coke Oven Maintenance Plan Reference Manual
|
|
</label>
|
|
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../.." class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Home
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Python API Reference
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
|
|
<label class="md-nav__title" for="__nav_2">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
|
|
|
|
Python API Reference
|
|
|
|
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active">
|
|
|
|
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__link md-nav__link--active" for="__toc">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Battery Module
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<a href="./" class="md-nav__link md-nav__link--active">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
|
|
|
|
Battery Module
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
</a>
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Battery
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Battery">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Battery
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Battery">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.bake" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
bake
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.charge" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
charge
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.dQ" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dQ
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.get_chamber_inlets" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
get_chamber_inlets
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.is_cycle_A" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
is_cycle_A
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.is_pc_time" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
is_pc_time
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.load_state" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
load_state
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.mdot" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
mdot
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.next_oven" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
next_oven
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.push" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
push
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.push_and_charge" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
push_and_charge
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.update" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
update
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.ChargeSchedule" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ChargeSchedule
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ChargeSchedule">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.ChargeSchedule.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.ChargeSchedule.period" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
period
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.ChargeSchedule.to_charge" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
to_charge
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeCharge" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
CokeCharge
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="CokeCharge">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeCharge.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeCharge.bake" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
bake
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeCharge.end_baking" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
end_baking
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeOvenBrickHeatEqn" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
CokeOvenBrickHeatEqn
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeOvenBrickHeatEqnBase" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
CokeOvenBrickHeatEqnBase
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="CokeOvenBrickHeatEqnBase">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeOvenBrickHeatEqnBase.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeOvenBrickHeatEqnBase.cp" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
cp
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeOvenBrickHeatEqnBase.k" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
k
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeOvenBrickHeatEqnBase.update_bc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
update_bc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
CombustionChamber
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="CombustionChamber">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber.energy_balance_equation" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
energy_balance_equation
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber.heat" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
heat
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber.solve" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
solve
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber.update_Twall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
update_Twall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber.update_mdot" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
update_mdot
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.HeatSchedule" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
HeatSchedule
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="HeatSchedule">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.HeatSchedule.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.HeatSchedule.dQ" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dQ
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.OvenChamber" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
OvenChamber
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="OvenChamber">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.OvenChamber.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.OvenChamber.bake" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
bake
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.OvenChamber.charge" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
charge
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.OvenChamber.get_charge_temperature" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
get_charge_temperature
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.RefractoryWall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
RefractoryWall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="RefractoryWall">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.RefractoryWall.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.RefractoryWall.heat_to_oven" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
heat_to_oven
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.RefractoryWall.solve" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
solve
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.RefractoryWall.update_bc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
update_bc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Regenerator" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Regenerator
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Regenerator">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Regenerator.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Regenerator.heat_exchange" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
heat_exchange
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.TInternal" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
TInternal
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="TInternal">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.TInternal.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.TInternal.get_boundary_values" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
get_boundary_values
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Twall_model" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Twall_model
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.coke_oven_exhaust_stoichiometry" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
coke_oven_exhaust_stoichiometry
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.wall_solve_wrapper" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
wall_solve_wrapper
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Battery
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Battery">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Battery
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Battery">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.bake" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
bake
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.charge" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
charge
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.dQ" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dQ
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.get_chamber_inlets" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
get_chamber_inlets
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.is_cycle_A" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
is_cycle_A
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.is_pc_time" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
is_pc_time
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.load_state" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
load_state
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.mdot" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
mdot
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.next_oven" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
next_oven
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.push" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
push
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.push_and_charge" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
push_and_charge
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Battery.update" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
update
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.ChargeSchedule" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
ChargeSchedule
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ChargeSchedule">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.ChargeSchedule.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.ChargeSchedule.period" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
period
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.ChargeSchedule.to_charge" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
to_charge
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeCharge" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
CokeCharge
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="CokeCharge">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeCharge.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeCharge.bake" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
bake
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeCharge.end_baking" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
end_baking
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeOvenBrickHeatEqn" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
CokeOvenBrickHeatEqn
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeOvenBrickHeatEqnBase" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
CokeOvenBrickHeatEqnBase
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="CokeOvenBrickHeatEqnBase">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeOvenBrickHeatEqnBase.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeOvenBrickHeatEqnBase.cp" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
cp
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeOvenBrickHeatEqnBase.k" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
k
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CokeOvenBrickHeatEqnBase.update_bc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
update_bc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
CombustionChamber
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="CombustionChamber">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber.energy_balance_equation" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
energy_balance_equation
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber.heat" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
heat
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber.solve" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
solve
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber.update_Twall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
update_Twall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.CombustionChamber.update_mdot" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
update_mdot
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.HeatSchedule" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
HeatSchedule
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="HeatSchedule">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.HeatSchedule.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.HeatSchedule.dQ" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
dQ
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.OvenChamber" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
OvenChamber
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="OvenChamber">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.OvenChamber.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.OvenChamber.bake" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
bake
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.OvenChamber.charge" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
charge
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.OvenChamber.get_charge_temperature" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
get_charge_temperature
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.RefractoryWall" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
RefractoryWall
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="RefractoryWall">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.RefractoryWall.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.RefractoryWall.heat_to_oven" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
heat_to_oven
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.RefractoryWall.solve" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
solve
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.RefractoryWall.update_bc" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
update_bc
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Regenerator" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Regenerator
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Regenerator">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Regenerator.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Regenerator.heat_exchange" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
heat_exchange
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.TInternal" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
TInternal
|
|
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="TInternal">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.TInternal.__init__" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
__init__
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.TInternal.get_boundary_values" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
get_boundary_values
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.Twall_model" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
Twall_model
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.coke_oven_exhaust_stoichiometry" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
coke_oven_exhaust_stoichiometry
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#Battery.wall_solve_wrapper" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
|
|
wall_solve_wrapper
|
|
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-content" data-md-component="content">
|
|
|
|
<article class="md-content__inner md-typeset">
|
|
|
|
|
|
|
|
|
|
|
|
<h1 id="battery-api-reference">Battery API Reference</h1>
|
|
|
|
|
|
<div class="doc doc-object doc-module">
|
|
|
|
|
|
|
|
<h2 id="Battery" class="doc doc-heading">
|
|
<code>Battery</code>
|
|
|
|
|
|
</h2>
|
|
|
|
<div class="doc doc-contents first">
|
|
|
|
<p>Coke Oven Battery Simulation Module.</p>
|
|
<p>This module models the thermal behavior, heat transfer, and scheduling operations of
|
|
a coke oven battery. It implements systems of flues (combustion chambers), refractory
|
|
brick walls (solving 1D heat equations), and oven chambers with loaded coal charges.</p>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="Battery.Battery" class="doc doc-heading">
|
|
<code>Battery</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Represents a complete Coke Oven Battery.</p>
|
|
<p>A battery consists of a series of alternating combustion chambers, refractory
|
|
brick walls, and oven chambers, along with corresponding schedules for charging
|
|
and heating.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Attributes:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.name">name</span></code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Battery name identifier.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.size">size</span></code></td>
|
|
<td>
|
|
<code>int</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Number of oven chambers.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.heat_program">heat_program</span></code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="Battery.HeatSchedule" href="#Battery.HeatSchedule">HeatSchedule</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Operational heating program schedule.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.charge_program">charge_program</span></code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="Battery.ChargeSchedule" href="#Battery.ChargeSchedule">ChargeSchedule</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Operational coal charging schedule.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.t">t</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Current simulation time (hours).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.t_last">t_last</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Timestamp of the last Push/Charge event (hours).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.processing">processing</span></code></td>
|
|
<td>
|
|
<code>list of CokeCharge</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Currently active coke charges.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.product">product</span></code></td>
|
|
<td>
|
|
<code>list of CokeCharge</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Log of completed coke charges.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.gas">gas</span></code></td>
|
|
<td>
|
|
<code><span title="cantera.Solution">Solution</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Local Cantera Solution object.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.T0">T0</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Adiabatic flame temperature of incoming gas (K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.P0">P0</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Gas operating pressure (Pa).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.X0">X0</span></code></td>
|
|
<td>
|
|
<code>dict</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Gas composition.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.sequence_idx">sequence_idx</span></code></td>
|
|
<td>
|
|
<code>int</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Current sequence progress index.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.wall_t_history">wall_t_history</span></code></td>
|
|
<td>
|
|
<code>list</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Recorded history of wall temperatures.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.gas_t_history">gas_t_history</span></code></td>
|
|
<td>
|
|
<code>list</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Recorded history of chamber temperatures.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.hv">hv</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Heating value of fuel-air mix (J/kg).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.normal_heat">normal_heat</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Baseline heat load (GJ/rev).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.mdot0">mdot0</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Baseline fuel mixture mass flow rate (kg/s).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.chambers">chambers</span></code></td>
|
|
<td>
|
|
<code>list of CombustionChamber</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Combustion flues.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.ovens">ovens</span></code></td>
|
|
<td>
|
|
<code>list of OvenChamber</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Oven chambers.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.walls_0">walls_0</span></code></td>
|
|
<td>
|
|
<code>list of RefractoryWall</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Lower refractory walls.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.walls_1">walls_1</span></code></td>
|
|
<td>
|
|
<code>list of RefractoryWall</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Upper refractory walls.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.Battery.oven_idx_order">oven_idx_order</span></code></td>
|
|
<td>
|
|
<code><span title="numpy.ndarray">ndarray</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Charging schedule oven sequence.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 574</span>
|
|
<span class="normal"> 575</span>
|
|
<span class="normal"> 576</span>
|
|
<span class="normal"> 577</span>
|
|
<span class="normal"> 578</span>
|
|
<span class="normal"> 579</span>
|
|
<span class="normal"> 580</span>
|
|
<span class="normal"> 581</span>
|
|
<span class="normal"> 582</span>
|
|
<span class="normal"> 583</span>
|
|
<span class="normal"> 584</span>
|
|
<span class="normal"> 585</span>
|
|
<span class="normal"> 586</span>
|
|
<span class="normal"> 587</span>
|
|
<span class="normal"> 588</span>
|
|
<span class="normal"> 589</span>
|
|
<span class="normal"> 590</span>
|
|
<span class="normal"> 591</span>
|
|
<span class="normal"> 592</span>
|
|
<span class="normal"> 593</span>
|
|
<span class="normal"> 594</span>
|
|
<span class="normal"> 595</span>
|
|
<span class="normal"> 596</span>
|
|
<span class="normal"> 597</span>
|
|
<span class="normal"> 598</span>
|
|
<span class="normal"> 599</span>
|
|
<span class="normal"> 600</span>
|
|
<span class="normal"> 601</span>
|
|
<span class="normal"> 602</span>
|
|
<span class="normal"> 603</span>
|
|
<span class="normal"> 604</span>
|
|
<span class="normal"> 605</span>
|
|
<span class="normal"> 606</span>
|
|
<span class="normal"> 607</span>
|
|
<span class="normal"> 608</span>
|
|
<span class="normal"> 609</span>
|
|
<span class="normal"> 610</span>
|
|
<span class="normal"> 611</span>
|
|
<span class="normal"> 612</span>
|
|
<span class="normal"> 613</span>
|
|
<span class="normal"> 614</span>
|
|
<span class="normal"> 615</span>
|
|
<span class="normal"> 616</span>
|
|
<span class="normal"> 617</span>
|
|
<span class="normal"> 618</span>
|
|
<span class="normal"> 619</span>
|
|
<span class="normal"> 620</span>
|
|
<span class="normal"> 621</span>
|
|
<span class="normal"> 622</span>
|
|
<span class="normal"> 623</span>
|
|
<span class="normal"> 624</span>
|
|
<span class="normal"> 625</span>
|
|
<span class="normal"> 626</span>
|
|
<span class="normal"> 627</span>
|
|
<span class="normal"> 628</span>
|
|
<span class="normal"> 629</span>
|
|
<span class="normal"> 630</span>
|
|
<span class="normal"> 631</span>
|
|
<span class="normal"> 632</span>
|
|
<span class="normal"> 633</span>
|
|
<span class="normal"> 634</span>
|
|
<span class="normal"> 635</span>
|
|
<span class="normal"> 636</span>
|
|
<span class="normal"> 637</span>
|
|
<span class="normal"> 638</span>
|
|
<span class="normal"> 639</span>
|
|
<span class="normal"> 640</span>
|
|
<span class="normal"> 641</span>
|
|
<span class="normal"> 642</span>
|
|
<span class="normal"> 643</span>
|
|
<span class="normal"> 644</span>
|
|
<span class="normal"> 645</span>
|
|
<span class="normal"> 646</span>
|
|
<span class="normal"> 647</span>
|
|
<span class="normal"> 648</span>
|
|
<span class="normal"> 649</span>
|
|
<span class="normal"> 650</span>
|
|
<span class="normal"> 651</span>
|
|
<span class="normal"> 652</span>
|
|
<span class="normal"> 653</span>
|
|
<span class="normal"> 654</span>
|
|
<span class="normal"> 655</span>
|
|
<span class="normal"> 656</span>
|
|
<span class="normal"> 657</span>
|
|
<span class="normal"> 658</span>
|
|
<span class="normal"> 659</span>
|
|
<span class="normal"> 660</span>
|
|
<span class="normal"> 661</span>
|
|
<span class="normal"> 662</span>
|
|
<span class="normal"> 663</span>
|
|
<span class="normal"> 664</span>
|
|
<span class="normal"> 665</span>
|
|
<span class="normal"> 666</span>
|
|
<span class="normal"> 667</span>
|
|
<span class="normal"> 668</span>
|
|
<span class="normal"> 669</span>
|
|
<span class="normal"> 670</span>
|
|
<span class="normal"> 671</span>
|
|
<span class="normal"> 672</span>
|
|
<span class="normal"> 673</span>
|
|
<span class="normal"> 674</span>
|
|
<span class="normal"> 675</span>
|
|
<span class="normal"> 676</span>
|
|
<span class="normal"> 677</span>
|
|
<span class="normal"> 678</span>
|
|
<span class="normal"> 679</span>
|
|
<span class="normal"> 680</span>
|
|
<span class="normal"> 681</span>
|
|
<span class="normal"> 682</span>
|
|
<span class="normal"> 683</span>
|
|
<span class="normal"> 684</span>
|
|
<span class="normal"> 685</span>
|
|
<span class="normal"> 686</span>
|
|
<span class="normal"> 687</span>
|
|
<span class="normal"> 688</span>
|
|
<span class="normal"> 689</span>
|
|
<span class="normal"> 690</span>
|
|
<span class="normal"> 691</span>
|
|
<span class="normal"> 692</span>
|
|
<span class="normal"> 693</span>
|
|
<span class="normal"> 694</span>
|
|
<span class="normal"> 695</span>
|
|
<span class="normal"> 696</span>
|
|
<span class="normal"> 697</span>
|
|
<span class="normal"> 698</span>
|
|
<span class="normal"> 699</span>
|
|
<span class="normal"> 700</span>
|
|
<span class="normal"> 701</span>
|
|
<span class="normal"> 702</span>
|
|
<span class="normal"> 703</span>
|
|
<span class="normal"> 704</span>
|
|
<span class="normal"> 705</span>
|
|
<span class="normal"> 706</span>
|
|
<span class="normal"> 707</span>
|
|
<span class="normal"> 708</span>
|
|
<span class="normal"> 709</span>
|
|
<span class="normal"> 710</span>
|
|
<span class="normal"> 711</span>
|
|
<span class="normal"> 712</span>
|
|
<span class="normal"> 713</span>
|
|
<span class="normal"> 714</span>
|
|
<span class="normal"> 715</span>
|
|
<span class="normal"> 716</span>
|
|
<span class="normal"> 717</span>
|
|
<span class="normal"> 718</span>
|
|
<span class="normal"> 719</span>
|
|
<span class="normal"> 720</span>
|
|
<span class="normal"> 721</span>
|
|
<span class="normal"> 722</span>
|
|
<span class="normal"> 723</span>
|
|
<span class="normal"> 724</span>
|
|
<span class="normal"> 725</span>
|
|
<span class="normal"> 726</span>
|
|
<span class="normal"> 727</span>
|
|
<span class="normal"> 728</span>
|
|
<span class="normal"> 729</span>
|
|
<span class="normal"> 730</span>
|
|
<span class="normal"> 731</span>
|
|
<span class="normal"> 732</span>
|
|
<span class="normal"> 733</span>
|
|
<span class="normal"> 734</span>
|
|
<span class="normal"> 735</span>
|
|
<span class="normal"> 736</span>
|
|
<span class="normal"> 737</span>
|
|
<span class="normal"> 738</span>
|
|
<span class="normal"> 739</span>
|
|
<span class="normal"> 740</span>
|
|
<span class="normal"> 741</span>
|
|
<span class="normal"> 742</span>
|
|
<span class="normal"> 743</span>
|
|
<span class="normal"> 744</span>
|
|
<span class="normal"> 745</span>
|
|
<span class="normal"> 746</span>
|
|
<span class="normal"> 747</span>
|
|
<span class="normal"> 748</span>
|
|
<span class="normal"> 749</span>
|
|
<span class="normal"> 750</span>
|
|
<span class="normal"> 751</span>
|
|
<span class="normal"> 752</span>
|
|
<span class="normal"> 753</span>
|
|
<span class="normal"> 754</span>
|
|
<span class="normal"> 755</span>
|
|
<span class="normal"> 756</span>
|
|
<span class="normal"> 757</span>
|
|
<span class="normal"> 758</span>
|
|
<span class="normal"> 759</span>
|
|
<span class="normal"> 760</span>
|
|
<span class="normal"> 761</span>
|
|
<span class="normal"> 762</span>
|
|
<span class="normal"> 763</span>
|
|
<span class="normal"> 764</span>
|
|
<span class="normal"> 765</span>
|
|
<span class="normal"> 766</span>
|
|
<span class="normal"> 767</span>
|
|
<span class="normal"> 768</span>
|
|
<span class="normal"> 769</span>
|
|
<span class="normal"> 770</span>
|
|
<span class="normal"> 771</span>
|
|
<span class="normal"> 772</span>
|
|
<span class="normal"> 773</span>
|
|
<span class="normal"> 774</span>
|
|
<span class="normal"> 775</span>
|
|
<span class="normal"> 776</span>
|
|
<span class="normal"> 777</span>
|
|
<span class="normal"> 778</span>
|
|
<span class="normal"> 779</span>
|
|
<span class="normal"> 780</span>
|
|
<span class="normal"> 781</span>
|
|
<span class="normal"> 782</span>
|
|
<span class="normal"> 783</span>
|
|
<span class="normal"> 784</span>
|
|
<span class="normal"> 785</span>
|
|
<span class="normal"> 786</span>
|
|
<span class="normal"> 787</span>
|
|
<span class="normal"> 788</span>
|
|
<span class="normal"> 789</span>
|
|
<span class="normal"> 790</span>
|
|
<span class="normal"> 791</span>
|
|
<span class="normal"> 792</span>
|
|
<span class="normal"> 793</span>
|
|
<span class="normal"> 794</span>
|
|
<span class="normal"> 795</span>
|
|
<span class="normal"> 796</span>
|
|
<span class="normal"> 797</span>
|
|
<span class="normal"> 798</span>
|
|
<span class="normal"> 799</span>
|
|
<span class="normal"> 800</span>
|
|
<span class="normal"> 801</span>
|
|
<span class="normal"> 802</span>
|
|
<span class="normal"> 803</span>
|
|
<span class="normal"> 804</span>
|
|
<span class="normal"> 805</span>
|
|
<span class="normal"> 806</span>
|
|
<span class="normal"> 807</span>
|
|
<span class="normal"> 808</span>
|
|
<span class="normal"> 809</span>
|
|
<span class="normal"> 810</span>
|
|
<span class="normal"> 811</span>
|
|
<span class="normal"> 812</span>
|
|
<span class="normal"> 813</span>
|
|
<span class="normal"> 814</span>
|
|
<span class="normal"> 815</span>
|
|
<span class="normal"> 816</span>
|
|
<span class="normal"> 817</span>
|
|
<span class="normal"> 818</span>
|
|
<span class="normal"> 819</span>
|
|
<span class="normal"> 820</span>
|
|
<span class="normal"> 821</span>
|
|
<span class="normal"> 822</span>
|
|
<span class="normal"> 823</span>
|
|
<span class="normal"> 824</span>
|
|
<span class="normal"> 825</span>
|
|
<span class="normal"> 826</span>
|
|
<span class="normal"> 827</span>
|
|
<span class="normal"> 828</span>
|
|
<span class="normal"> 829</span>
|
|
<span class="normal"> 830</span>
|
|
<span class="normal"> 831</span>
|
|
<span class="normal"> 832</span>
|
|
<span class="normal"> 833</span>
|
|
<span class="normal"> 834</span>
|
|
<span class="normal"> 835</span>
|
|
<span class="normal"> 836</span>
|
|
<span class="normal"> 837</span>
|
|
<span class="normal"> 838</span>
|
|
<span class="normal"> 839</span>
|
|
<span class="normal"> 840</span>
|
|
<span class="normal"> 841</span>
|
|
<span class="normal"> 842</span>
|
|
<span class="normal"> 843</span>
|
|
<span class="normal"> 844</span>
|
|
<span class="normal"> 845</span>
|
|
<span class="normal"> 846</span>
|
|
<span class="normal"> 847</span>
|
|
<span class="normal"> 848</span>
|
|
<span class="normal"> 849</span>
|
|
<span class="normal"> 850</span>
|
|
<span class="normal"> 851</span>
|
|
<span class="normal"> 852</span>
|
|
<span class="normal"> 853</span>
|
|
<span class="normal"> 854</span>
|
|
<span class="normal"> 855</span>
|
|
<span class="normal"> 856</span>
|
|
<span class="normal"> 857</span>
|
|
<span class="normal"> 858</span>
|
|
<span class="normal"> 859</span>
|
|
<span class="normal"> 860</span>
|
|
<span class="normal"> 861</span>
|
|
<span class="normal"> 862</span>
|
|
<span class="normal"> 863</span>
|
|
<span class="normal"> 864</span>
|
|
<span class="normal"> 865</span>
|
|
<span class="normal"> 866</span>
|
|
<span class="normal"> 867</span>
|
|
<span class="normal"> 868</span>
|
|
<span class="normal"> 869</span>
|
|
<span class="normal"> 870</span>
|
|
<span class="normal"> 871</span>
|
|
<span class="normal"> 872</span>
|
|
<span class="normal"> 873</span>
|
|
<span class="normal"> 874</span>
|
|
<span class="normal"> 875</span>
|
|
<span class="normal"> 876</span>
|
|
<span class="normal"> 877</span>
|
|
<span class="normal"> 878</span>
|
|
<span class="normal"> 879</span>
|
|
<span class="normal"> 880</span>
|
|
<span class="normal"> 881</span>
|
|
<span class="normal"> 882</span>
|
|
<span class="normal"> 883</span>
|
|
<span class="normal"> 884</span>
|
|
<span class="normal"> 885</span>
|
|
<span class="normal"> 886</span>
|
|
<span class="normal"> 887</span>
|
|
<span class="normal"> 888</span>
|
|
<span class="normal"> 889</span>
|
|
<span class="normal"> 890</span>
|
|
<span class="normal"> 891</span>
|
|
<span class="normal"> 892</span>
|
|
<span class="normal"> 893</span>
|
|
<span class="normal"> 894</span>
|
|
<span class="normal"> 895</span>
|
|
<span class="normal"> 896</span>
|
|
<span class="normal"> 897</span>
|
|
<span class="normal"> 898</span>
|
|
<span class="normal"> 899</span>
|
|
<span class="normal"> 900</span>
|
|
<span class="normal"> 901</span>
|
|
<span class="normal"> 902</span>
|
|
<span class="normal"> 903</span>
|
|
<span class="normal"> 904</span>
|
|
<span class="normal"> 905</span>
|
|
<span class="normal"> 906</span>
|
|
<span class="normal"> 907</span>
|
|
<span class="normal"> 908</span>
|
|
<span class="normal"> 909</span>
|
|
<span class="normal"> 910</span>
|
|
<span class="normal"> 911</span>
|
|
<span class="normal"> 912</span>
|
|
<span class="normal"> 913</span>
|
|
<span class="normal"> 914</span>
|
|
<span class="normal"> 915</span>
|
|
<span class="normal"> 916</span>
|
|
<span class="normal"> 917</span>
|
|
<span class="normal"> 918</span>
|
|
<span class="normal"> 919</span>
|
|
<span class="normal"> 920</span>
|
|
<span class="normal"> 921</span>
|
|
<span class="normal"> 922</span>
|
|
<span class="normal"> 923</span>
|
|
<span class="normal"> 924</span>
|
|
<span class="normal"> 925</span>
|
|
<span class="normal"> 926</span>
|
|
<span class="normal"> 927</span>
|
|
<span class="normal"> 928</span>
|
|
<span class="normal"> 929</span>
|
|
<span class="normal"> 930</span>
|
|
<span class="normal"> 931</span>
|
|
<span class="normal"> 932</span>
|
|
<span class="normal"> 933</span>
|
|
<span class="normal"> 934</span>
|
|
<span class="normal"> 935</span>
|
|
<span class="normal"> 936</span>
|
|
<span class="normal"> 937</span>
|
|
<span class="normal"> 938</span>
|
|
<span class="normal"> 939</span>
|
|
<span class="normal"> 940</span>
|
|
<span class="normal"> 941</span>
|
|
<span class="normal"> 942</span>
|
|
<span class="normal"> 943</span>
|
|
<span class="normal"> 944</span>
|
|
<span class="normal"> 945</span>
|
|
<span class="normal"> 946</span>
|
|
<span class="normal"> 947</span>
|
|
<span class="normal"> 948</span>
|
|
<span class="normal"> 949</span>
|
|
<span class="normal"> 950</span>
|
|
<span class="normal"> 951</span>
|
|
<span class="normal"> 952</span>
|
|
<span class="normal"> 953</span>
|
|
<span class="normal"> 954</span>
|
|
<span class="normal"> 955</span>
|
|
<span class="normal"> 956</span>
|
|
<span class="normal"> 957</span>
|
|
<span class="normal"> 958</span>
|
|
<span class="normal"> 959</span>
|
|
<span class="normal"> 960</span>
|
|
<span class="normal"> 961</span>
|
|
<span class="normal"> 962</span>
|
|
<span class="normal"> 963</span>
|
|
<span class="normal"> 964</span>
|
|
<span class="normal"> 965</span>
|
|
<span class="normal"> 966</span>
|
|
<span class="normal"> 967</span>
|
|
<span class="normal"> 968</span>
|
|
<span class="normal"> 969</span>
|
|
<span class="normal"> 970</span>
|
|
<span class="normal"> 971</span>
|
|
<span class="normal"> 972</span>
|
|
<span class="normal"> 973</span>
|
|
<span class="normal"> 974</span>
|
|
<span class="normal"> 975</span>
|
|
<span class="normal"> 976</span>
|
|
<span class="normal"> 977</span>
|
|
<span class="normal"> 978</span>
|
|
<span class="normal"> 979</span>
|
|
<span class="normal"> 980</span>
|
|
<span class="normal"> 981</span>
|
|
<span class="normal"> 982</span>
|
|
<span class="normal"> 983</span>
|
|
<span class="normal"> 984</span>
|
|
<span class="normal"> 985</span>
|
|
<span class="normal"> 986</span>
|
|
<span class="normal"> 987</span>
|
|
<span class="normal"> 988</span>
|
|
<span class="normal"> 989</span>
|
|
<span class="normal"> 990</span>
|
|
<span class="normal"> 991</span>
|
|
<span class="normal"> 992</span>
|
|
<span class="normal"> 993</span>
|
|
<span class="normal"> 994</span>
|
|
<span class="normal"> 995</span>
|
|
<span class="normal"> 996</span>
|
|
<span class="normal"> 997</span>
|
|
<span class="normal"> 998</span>
|
|
<span class="normal"> 999</span>
|
|
<span class="normal">1000</span>
|
|
<span class="normal">1001</span>
|
|
<span class="normal">1002</span>
|
|
<span class="normal">1003</span>
|
|
<span class="normal">1004</span>
|
|
<span class="normal">1005</span>
|
|
<span class="normal">1006</span>
|
|
<span class="normal">1007</span>
|
|
<span class="normal">1008</span>
|
|
<span class="normal">1009</span>
|
|
<span class="normal">1010</span>
|
|
<span class="normal">1011</span>
|
|
<span class="normal">1012</span>
|
|
<span class="normal">1013</span>
|
|
<span class="normal">1014</span>
|
|
<span class="normal">1015</span>
|
|
<span class="normal">1016</span>
|
|
<span class="normal">1017</span>
|
|
<span class="normal">1018</span>
|
|
<span class="normal">1019</span>
|
|
<span class="normal">1020</span>
|
|
<span class="normal">1021</span>
|
|
<span class="normal">1022</span>
|
|
<span class="normal">1023</span>
|
|
<span class="normal">1024</span>
|
|
<span class="normal">1025</span>
|
|
<span class="normal">1026</span>
|
|
<span class="normal">1027</span>
|
|
<span class="normal">1028</span>
|
|
<span class="normal">1029</span>
|
|
<span class="normal">1030</span>
|
|
<span class="normal">1031</span>
|
|
<span class="normal">1032</span>
|
|
<span class="normal">1033</span>
|
|
<span class="normal">1034</span>
|
|
<span class="normal">1035</span>
|
|
<span class="normal">1036</span>
|
|
<span class="normal">1037</span>
|
|
<span class="normal">1038</span>
|
|
<span class="normal">1039</span>
|
|
<span class="normal">1040</span>
|
|
<span class="normal">1041</span>
|
|
<span class="normal">1042</span>
|
|
<span class="normal">1043</span>
|
|
<span class="normal">1044</span>
|
|
<span class="normal">1045</span>
|
|
<span class="normal">1046</span>
|
|
<span class="normal">1047</span>
|
|
<span class="normal">1048</span>
|
|
<span class="normal">1049</span>
|
|
<span class="normal">1050</span>
|
|
<span class="normal">1051</span>
|
|
<span class="normal">1052</span>
|
|
<span class="normal">1053</span>
|
|
<span class="normal">1054</span>
|
|
<span class="normal">1055</span>
|
|
<span class="normal">1056</span>
|
|
<span class="normal">1057</span>
|
|
<span class="normal">1058</span>
|
|
<span class="normal">1059</span>
|
|
<span class="normal">1060</span>
|
|
<span class="normal">1061</span>
|
|
<span class="normal">1062</span>
|
|
<span class="normal">1063</span>
|
|
<span class="normal">1064</span>
|
|
<span class="normal">1065</span>
|
|
<span class="normal">1066</span>
|
|
<span class="normal">1067</span>
|
|
<span class="normal">1068</span>
|
|
<span class="normal">1069</span>
|
|
<span class="normal">1070</span>
|
|
<span class="normal">1071</span>
|
|
<span class="normal">1072</span>
|
|
<span class="normal">1073</span>
|
|
<span class="normal">1074</span>
|
|
<span class="normal">1075</span>
|
|
<span class="normal">1076</span>
|
|
<span class="normal">1077</span>
|
|
<span class="normal">1078</span>
|
|
<span class="normal">1079</span>
|
|
<span class="normal">1080</span>
|
|
<span class="normal">1081</span>
|
|
<span class="normal">1082</span>
|
|
<span class="normal">1083</span>
|
|
<span class="normal">1084</span>
|
|
<span class="normal">1085</span>
|
|
<span class="normal">1086</span>
|
|
<span class="normal">1087</span>
|
|
<span class="normal">1088</span>
|
|
<span class="normal">1089</span>
|
|
<span class="normal">1090</span>
|
|
<span class="normal">1091</span>
|
|
<span class="normal">1092</span>
|
|
<span class="normal">1093</span>
|
|
<span class="normal">1094</span>
|
|
<span class="normal">1095</span>
|
|
<span class="normal">1096</span>
|
|
<span class="normal">1097</span>
|
|
<span class="normal">1098</span>
|
|
<span class="normal">1099</span>
|
|
<span class="normal">1100</span>
|
|
<span class="normal">1101</span>
|
|
<span class="normal">1102</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">Battery</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Represents a complete Coke Oven Battery.</span>
|
|
|
|
<span class="sd"> A battery consists of a series of alternating combustion chambers, refractory</span>
|
|
<span class="sd"> brick walls, and oven chambers, along with corresponding schedules for charging</span>
|
|
<span class="sd"> and heating.</span>
|
|
|
|
<span class="sd"> Attributes:</span>
|
|
<span class="sd"> name (str): Battery name identifier.</span>
|
|
<span class="sd"> size (int): Number of oven chambers.</span>
|
|
<span class="sd"> heat_program (HeatSchedule): Operational heating program schedule.</span>
|
|
<span class="sd"> charge_program (ChargeSchedule): Operational coal charging schedule.</span>
|
|
<span class="sd"> t (float): Current simulation time (hours).</span>
|
|
<span class="sd"> t_last (float): Timestamp of the last Push/Charge event (hours).</span>
|
|
<span class="sd"> processing (list of CokeCharge): Currently active coke charges.</span>
|
|
<span class="sd"> product (list of CokeCharge): Log of completed coke charges.</span>
|
|
<span class="sd"> gas (cantera.Solution): Local Cantera Solution object.</span>
|
|
<span class="sd"> T0 (float): Adiabatic flame temperature of incoming gas (K).</span>
|
|
<span class="sd"> P0 (float): Gas operating pressure (Pa).</span>
|
|
<span class="sd"> X0 (dict): Gas composition.</span>
|
|
<span class="sd"> sequence_idx (int): Current sequence progress index.</span>
|
|
<span class="sd"> wall_t_history (list): Recorded history of wall temperatures.</span>
|
|
<span class="sd"> gas_t_history (list): Recorded history of chamber temperatures.</span>
|
|
<span class="sd"> hv (float): Heating value of fuel-air mix (J/kg).</span>
|
|
<span class="sd"> normal_heat (float): Baseline heat load (GJ/rev).</span>
|
|
<span class="sd"> mdot0 (float): Baseline fuel mixture mass flow rate (kg/s).</span>
|
|
<span class="sd"> chambers (list of CombustionChamber): Combustion flues.</span>
|
|
<span class="sd"> ovens (list of OvenChamber): Oven chambers.</span>
|
|
<span class="sd"> walls_0 (list of RefractoryWall): Lower refractory walls.</span>
|
|
<span class="sd"> walls_1 (list of RefractoryWall): Upper refractory walls.</span>
|
|
<span class="sd"> oven_idx_order (numpy.ndarray): Charging schedule oven sequence.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="nf">load_state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Loads simulation state from binary history files."""</span>
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'gas.history'</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">gas_history_file</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas_t_history</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">gas_history_file</span><span class="p">)</span>
|
|
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'wall.history'</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">wall_history_file</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">wall_t_history</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">wall_history_file</span><span class="p">)</span>
|
|
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'coke.history'</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">coke_history_file</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">product</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">coke_history_file</span><span class="p">)</span>
|
|
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'oven.state'</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">coke_state_file</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">processing</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">coke_state_file</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">heat_program</span><span class="p">,</span> <span class="n">charge_program</span><span class="p">,</span> <span class="n">burned_gas_state</span><span class="p">,</span> <span class="n">hv</span><span class="p">,</span> <span class="n">init_from_file</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes Battery simulation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Identifier name.</span>
|
|
<span class="sd"> size (int): Total count of ovens.</span>
|
|
<span class="sd"> heat_program (HeatSchedule): Heating scheduler object.</span>
|
|
<span class="sd"> charge_program (ChargeSchedule): Charging scheduler object.</span>
|
|
<span class="sd"> burned_gas_state (tuple): Initial TPX state of burned flue gas.</span>
|
|
<span class="sd"> hv (float): Net heating value (J/kg).</span>
|
|
<span class="sd"> init_from_file (bool, optional): Recover state from pickle. Defaults to False.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span> <span class="c1"># Battery name</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span> <span class="c1"># Size of battery, number of ovens</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">heat_program</span> <span class="o">=</span> <span class="n">heat_program</span> <span class="c1"># Heat program or schedule object</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">charge_program</span> <span class="o">=</span> <span class="n">charge_program</span> <span class="c1"># Charge program of schedule object</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># Battery time</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_last</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># Time of last Push/Charge</span>
|
|
<span class="c1"># List of Coke charges under processing(drying)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">processing</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="c1"># List of Coke charges done(completed)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">product</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span> <span class="o">=</span> <span class="n">ct</span><span class="o">.</span><span class="n">Solution</span><span class="p">(</span><span class="s1">'gri30.yaml'</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TPX</span> <span class="o">=</span> <span class="n">burned_gas_state</span> <span class="c1"># Burned gas T, P, X</span>
|
|
<span class="n">T0</span><span class="p">,</span> <span class="n">P0</span><span class="p">,</span> <span class="n">X0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TPX</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T0</span> <span class="o">=</span> <span class="n">T0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">P0</span> <span class="o">=</span> <span class="n">P0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">X0</span> <span class="o">=</span> <span class="n">X0</span>
|
|
<span class="c1"># Integer, 0 ~ (size-1), progress index for oven sequence array</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sequence_idx</span> <span class="o">=</span> <span class="mi">0</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">wall_t_history</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas_t_history</span> <span class="o">=</span> <span class="p">[]</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">hv</span> <span class="o">=</span> <span class="n">hv</span> <span class="c1"># Base unit heat J/kg</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">normal_heat</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">heat_program</span><span class="o">.</span><span class="n">f</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># GJ / rev</span>
|
|
|
|
<span class="c1"># Energy input to battery</span>
|
|
<span class="n">Q0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">normal_heat</span> <span class="o">*</span> <span class="mf">1e9</span> <span class="o">*</span> <span class="mi">3</span> <span class="o">/</span> <span class="mi">3600</span> <span class="c1"># GJ/rev => J/s (W)</span>
|
|
<span class="c1"># Equivalent Fuel+Air mass flow</span>
|
|
<span class="n">mdot0</span> <span class="o">=</span> <span class="n">Q0</span> <span class="o">/</span> <span class="n">hv</span> <span class="c1"># (J/s) / (J/kg) => kg/s</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">mdot0</span> <span class="o">=</span> <span class="n">mdot0</span> <span class="c1"># kg / s</span>
|
|
|
|
<span class="c1"># chambers[0] - walls_0[0] - ovens[0] - walls_1[0] - chambers[1] - walls_0[1] - ...</span>
|
|
<span class="c1"># ... walls_1[i-1] - chambers[i] - walls_0[i] - ovens[i] - walls_1[i] - chambers[i+1] - walls_0[i+1] - ...</span>
|
|
<span class="c1"># ... walls_1[size-2] - chambers[size-1] - walls_0[size-1] - ovens[size-1] - walls_1[size-1] - chambers[size]</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">chambers</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">CombustionChamber</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mdot0</span><span class="o">/</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">T0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">P0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">X0</span><span class="p">),</span> <span class="n">hA</span><span class="o">=</span><span class="mi">700</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">ichamber</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">ovens</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">OvenChamber</span><span class="p">()</span>
|
|
<span class="k">for</span> <span class="n">ioven</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">RefractoryWall</span><span class="p">(</span><span class="n">Twall_model</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">ioven</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">RefractoryWall</span><span class="p">(</span><span class="n">Twall_model</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">ioven</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
|
|
<span class="c1"># Regenerators and fuel valves initialization (size + 2 elements)</span>
|
|
<span class="c1"># Option A is default: M_reg=1e9 to replicate the legacy 600°C boundary condition.</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">regenerators</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">Regenerator</span><span class="p">(</span><span class="n">ireg</span><span class="p">,</span> <span class="n">T_init</span><span class="o">=</span><span class="mf">1016.9</span><span class="p">,</span> <span class="n">M_reg</span><span class="o">=</span><span class="mf">1e9</span><span class="p">,</span> <span class="n">Cp_reg</span><span class="o">=</span><span class="mf">1000.0</span><span class="p">,</span> <span class="n">eff</span><span class="o">=</span><span class="mf">0.8</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">ireg</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">reversing_period</span> <span class="o">=</span> <span class="mf">20.0</span> <span class="o">/</span> <span class="mf">60.0</span> <span class="c1"># 20 minutes in hours</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">control_active</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="c1"># Cantera parameters for dynamic preheating and equilibrium calculations</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel</span> <span class="o">=</span> <span class="s2">"H2:6.42, O2:0.39, N2:47.28, CH4:1.79, CO:24.25, CO2:19.72, C2H4:0.13, C2H6:0.04"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">oxidizer</span> <span class="o">=</span> <span class="s2">"O2:0.21,N2:0.79"</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">f_found</span> <span class="o">=</span> <span class="n">optimize</span><span class="o">.</span><span class="n">root_scalar</span><span class="p">(</span>
|
|
<span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">coke_oven_exhaust_stoichiometry</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="s2">"O2"</span><span class="p">]</span> <span class="o">-</span> <span class="mf">0.045</span><span class="p">,</span>
|
|
<span class="n">bracket</span><span class="o">=</span><span class="p">[</span><span class="mf">1e-300</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span>
|
|
<span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">phi</span> <span class="o">=</span> <span class="n">f_found</span><span class="o">.</span><span class="n">root</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">phi</span> <span class="o">=</span> <span class="mf">0.814238515</span>
|
|
|
|
<span class="c1"># For 1~4 Coke Ovens with n+5 P/C sequence</span>
|
|
<span class="n">start_indices</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">oven_idx_order</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">(</span>
|
|
<span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">i0</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span> <span class="k">for</span> <span class="n">i0</span> <span class="ow">in</span> <span class="n">start_indices</span><span class="p">])</span>
|
|
|
|
<span class="k">if</span> <span class="n">init_from_file</span><span class="p">:</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Initializaton from file"</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">load_state</span><span class="p">()</span>
|
|
<span class="n">latest_chamber</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas_t_history</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="n">latest_wall</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wall_t_history</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
|
|
<span class="c1"># Last Record Time</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">=</span> <span class="n">latest_chamber</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">t_charge</span>
|
|
|
|
<span class="c1"># Recover Chamber State</span>
|
|
<span class="k">for</span> <span class="n">chmbr</span><span class="p">,</span> <span class="n">T1</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">chambers</span><span class="p">,</span> <span class="n">latest_chamber</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">T1</span> <span class="o">=</span> <span class="n">T1</span>
|
|
|
|
<span class="c1"># Recover Wall State with copy() to break reference linkage with history lists</span>
|
|
<span class="k">for</span> <span class="n">wl</span><span class="p">,</span> <span class="n">wu</span><span class="p">,</span> <span class="n">wallT</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">,</span> <span class="n">latest_wall</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
|
|
<span class="n">wl</span><span class="o">.</span><span class="n">T_chamber</span> <span class="o">=</span> <span class="n">wallT</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">wl</span><span class="o">.</span><span class="n">T_internal</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">wallT</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
|
<span class="n">wl</span><span class="o">.</span><span class="n">T_oven</span> <span class="o">=</span> <span class="n">wallT</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
|
|
<span class="n">wu</span><span class="o">.</span><span class="n">T_oven</span> <span class="o">=</span> <span class="n">wallT</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
|
|
<span class="n">wu</span><span class="o">.</span><span class="n">T_internal</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">wallT</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
|
<span class="n">wu</span><span class="o">.</span><span class="n">T_chamber</span> <span class="o">=</span> <span class="n">wallT</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
|
|
|
|
<span class="c1"># Recover Oven State</span>
|
|
<span class="k">for</span> <span class="n">coal</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">ovens</span><span class="p">[</span><span class="n">coal</span><span class="o">.</span><span class="n">idx_oven</span><span class="p">]</span><span class="o">.</span><span class="n">content</span> <span class="o">=</span> <span class="n">coal</span>
|
|
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Initializaton Start"</span><span class="p">)</span>
|
|
<span class="c1"># 정상 상태 만들기: 모든 문에 n_cycle 회 장입</span>
|
|
<span class="n">n_cycle</span> <span class="o">=</span> <span class="mi">3</span> <span class="c1"># 모든 문 장입 반복 횟수</span>
|
|
<span class="n">period_over_dt</span> <span class="o">=</span> <span class="mf">6.</span> <span class="c1"># period/dt, 장입 간격 / 초기화 time step 크기</span>
|
|
<span class="n">normal_period</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">charge_program</span><span class="o">.</span><span class="n">period</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># 감산 전 장입 간격 (주기)</span>
|
|
<span class="n">dt</span> <span class="o">=</span> <span class="n">normal_period</span> <span class="o">/</span> <span class="n">period_over_dt</span> <span class="c1"># Simulation Time Step</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">=</span> <span class="o">-</span> <span class="n">normal_period</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">*</span> \
|
|
<span class="n">n_cycle</span> <span class="c1"># 정상상태 생성 모사 시간 = 장입 간격 * 총 장입 횟수</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="c1"># 마지막 장입을 정상상태 시뮬레이션 시작 시각으로 설정</span>
|
|
|
|
<span class="c1"># initialization time loop</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">*</span> <span class="n">period_over_dt</span> <span class="o">*</span> <span class="n">n_cycle</span><span class="p">))):</span>
|
|
<span class="c1"># for i in range(3):</span>
|
|
<span class="w"> </span><span class="sd">""" Fill battety with normal charge rate """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span> <span class="c1"># Time adavancement</span>
|
|
|
|
<span class="k">def</span> <span class="nf">mdot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates mass flow rate of gas at time t.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Simulation time (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Mass flow rate (kg/s).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">mdot0</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">heat_program</span><span class="o">.</span><span class="n">f</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">normal_heat</span>
|
|
|
|
<span class="k">def</span> <span class="nf">is_cycle_A</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if the battery is currently in Cycle A (odd-numbered regenerators discharging).</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Simulation time (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if in Cycle A, False if in Cycle B.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">cycle_num</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">floor</span><span class="p">(</span><span class="n">t</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">reversing_period</span><span class="p">))</span>
|
|
<span class="k">return</span> <span class="p">(</span><span class="n">cycle_num</span> <span class="o">%</span> <span class="mi">2</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_chamber_inlets</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Computes mass flow rate and maps regenerators for each combustion chamber.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Current simulation time (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (chamber_mdots, inlet_reg_indices, outlet_reg_indices)</span>
|
|
<span class="sd"> - chamber_mdots (np.ndarray): Fuel-air flow rate for each chamber (kg/s).</span>
|
|
<span class="sd"> - inlet_reg_indices (list): Regenerator index supplying to each chamber.</span>
|
|
<span class="sd"> - outlet_reg_indices (list): Regenerator index receiving exhaust from each chamber.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">total_mdot</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mdot</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
|
|
<span class="n">size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
|
|
|
|
<span class="c1"># If external control is inactive, dynamically reset valves to legacy distribution</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"control_active"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_cycle_A</span><span class="p">(</span><span class="n">t</span><span class="p">):</span>
|
|
<span class="c1"># Cycle A: Odd regenerators (0-indexed even j) discharge</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">total_mdot</span> <span class="o">/</span> <span class="n">size</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="n">size</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="mf">2.0</span> <span class="o">*</span> <span class="n">total_mdot</span> <span class="o">/</span> <span class="n">size</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># Cycle B: Even regenerators (0-indexed odd j) discharge</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="n">size</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="mf">2.0</span> <span class="o">*</span> <span class="n">total_mdot</span> <span class="o">/</span> <span class="n">size</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span><span class="p">[</span><span class="n">size</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">total_mdot</span> <span class="o">/</span> <span class="n">size</span>
|
|
|
|
<span class="c1"># Distribute valve flows to individual combustion chambers</span>
|
|
<span class="n">chamber_mdots</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">inlet_reg_indices</span> <span class="o">=</span> <span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">outlet_reg_indices</span> <span class="o">=</span> <span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
|
|
|
<span class="n">is_a</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_cycle_A</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">is_a</span><span class="p">:</span>
|
|
<span class="c1"># Cycle A: Even regenerators (j = 0, 2, ..., size) are INLETS</span>
|
|
<span class="c1"># Odd regenerators (j = 1, 3, ..., size+1) are OUTLETS</span>
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">chamber_mdots</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="n">val</span>
|
|
<span class="n">inlet_reg_indices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">chamber_mdots</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="n">val</span> <span class="o">/</span> <span class="mf">2.0</span>
|
|
<span class="n">chamber_mdots</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">+=</span> <span class="n">val</span> <span class="o">/</span> <span class="mf">2.0</span>
|
|
<span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
<span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">outlet_reg_indices</span><span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="o">=</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">outlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
<span class="n">outlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># Cycle B: Odd regenerators (j = 1, 3, ..., size+1) are INLETS</span>
|
|
<span class="c1"># Even regenerators (j = 0, 2, ..., size) are OUTLETS</span>
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">chamber_mdots</span><span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="o">+=</span> <span class="n">val</span>
|
|
<span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="o">=</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">chamber_mdots</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="n">val</span> <span class="o">/</span> <span class="mf">2.0</span>
|
|
<span class="n">chamber_mdots</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">+=</span> <span class="n">val</span> <span class="o">/</span> <span class="mf">2.0</span>
|
|
<span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
<span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">outlet_reg_indices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">outlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
<span class="n">outlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
|
|
<span class="k">return</span> <span class="n">chamber_mdots</span><span class="p">,</span> <span class="n">inlet_reg_indices</span><span class="p">,</span> <span class="n">outlet_reg_indices</span>
|
|
|
|
<span class="k">def</span> <span class="nf">next_oven</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Returns the index of the next oven to be pushed and charged.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> int: Oven index (0-indexed).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">next_oven_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">oven_idx_order</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence_idx</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sequence_idx</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">return</span> <span class="n">next_oven_id</span>
|
|
|
|
<span class="k">def</span> <span class="nf">bake</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Advances thermal states of combustion chambers, walls, and ovens.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dt (float): Simulation time step (hours).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">dt_sec</span> <span class="o">=</span> <span class="n">dt</span> <span class="o">*</span> <span class="mf">3600.0</span>
|
|
<span class="n">size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
|
|
<span class="n">is_a</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_cycle_A</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Get dynamic mass flows and regenerator mappings for this step</span>
|
|
<span class="n">chamber_mdots</span><span class="p">,</span> <span class="n">inlet_reg_indices</span><span class="p">,</span> <span class="n">outlet_reg_indices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_chamber_inlets</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 1. Aggregate flow rates for the discharging (inlet) regenerators</span>
|
|
<span class="n">inlet_mdots</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">i_chamber</span><span class="p">,</span> <span class="n">mdot</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">chamber_mdots</span><span class="p">):</span>
|
|
<span class="n">inlet_reg_idx</span> <span class="o">=</span> <span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">i_chamber</span><span class="p">]</span>
|
|
<span class="n">inlet_mdots</span><span class="p">[</span><span class="n">inlet_reg_idx</span><span class="p">]</span> <span class="o">+=</span> <span class="n">mdot</span>
|
|
|
|
<span class="c1"># 2. Perform heat exchange for discharging regenerators once to find preheat temperatures</span>
|
|
<span class="n">reg_preheat_temps</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">active_inlets</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">if</span> <span class="n">is_a</span> <span class="k">else</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">active_inlets</span><span class="p">:</span>
|
|
<span class="n">reg_preheat_temps</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">regenerators</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="o">.</span><span class="n">heat_exchange</span><span class="p">(</span>
|
|
<span class="n">dt_sec</span><span class="p">,</span> <span class="n">inlet_mdots</span><span class="p">[</span><span class="n">j</span><span class="p">],</span> <span class="mf">298.15</span><span class="p">,</span> <span class="n">is_discharging</span><span class="o">=</span><span class="kc">True</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># Cache for Cantera HP equilibrium calculation to save CPU overhead.</span>
|
|
<span class="c1"># Maps inlet_reg_idx -> (T0, burned_state, h0)</span>
|
|
<span class="n">cantera_cache</span> <span class="o">=</span> <span class="p">{}</span>
|
|
|
|
<span class="c1"># Arrays to aggregate exhaust properties for the charging (outlet) regenerators</span>
|
|
<span class="n">outlet_mdots</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">outlet_T_weighted</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 3. Loop all combustion chambers to solve thermal equations</span>
|
|
<span class="k">for</span> <span class="n">i_chamber</span><span class="p">,</span> <span class="n">chmbr</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">chambers</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">i_chamber</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">wall_lower</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">[</span><span class="n">i_chamber</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">wall_lower</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="k">if</span> <span class="n">i_chamber</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
|
|
<span class="n">wall_upper</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span><span class="p">[</span><span class="n">i_chamber</span><span class="p">]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">wall_upper</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="n">mdot</span> <span class="o">=</span> <span class="n">chamber_mdots</span><span class="p">[</span><span class="n">i_chamber</span><span class="p">]</span>
|
|
<span class="n">inlet_reg_idx</span> <span class="o">=</span> <span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">i_chamber</span><span class="p">]</span>
|
|
<span class="n">T_pre</span> <span class="o">=</span> <span class="n">reg_preheat_temps</span><span class="p">[</span><span class="n">inlet_reg_idx</span><span class="p">]</span>
|
|
|
|
<span class="c1"># Compute new combustion state (HP equilibrium) based on T_pre</span>
|
|
<span class="k">if</span> <span class="n">inlet_reg_idx</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cantera_cache</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TP</span> <span class="o">=</span> <span class="n">T_pre</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">P0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">set_equivalence_ratio</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phi</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fuel</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">oxidizer</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">equilibrate</span><span class="p">(</span><span class="s1">'HP'</span><span class="p">)</span>
|
|
<span class="n">burned_state</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TPX</span>
|
|
<span class="n">h0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">enthalpy_mass</span>
|
|
<span class="n">T0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">T</span>
|
|
<span class="n">cantera_cache</span><span class="p">[</span><span class="n">inlet_reg_idx</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">T0</span><span class="p">,</span> <span class="n">burned_state</span><span class="p">,</span> <span class="n">h0</span><span class="p">)</span>
|
|
|
|
<span class="n">T0</span><span class="p">,</span> <span class="n">burned_state</span><span class="p">,</span> <span class="n">h0</span> <span class="o">=</span> <span class="n">cantera_cache</span><span class="p">[</span><span class="n">inlet_reg_idx</span><span class="p">]</span>
|
|
|
|
<span class="c1"># Update chamber state variables</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">update_mdot</span><span class="p">(</span><span class="n">mdot</span><span class="p">)</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TPX</span> <span class="o">=</span> <span class="n">burned_state</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">T0</span> <span class="o">=</span> <span class="n">T0</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">h0</span> <span class="o">=</span> <span class="n">h0</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">T1</span> <span class="o">=</span> <span class="n">T0</span> <span class="c1"># reset outlet guess to Tad</span>
|
|
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">update_Twall</span><span class="p">(</span>
|
|
<span class="n">Twall0</span><span class="o">=</span><span class="p">(</span>
|
|
<span class="n">wall_lower</span><span class="o">.</span><span class="n">T_chamber</span> <span class="k">if</span> <span class="n">wall_lower</span> <span class="k">else</span> <span class="n">wall_upper</span><span class="o">.</span><span class="n">T_chamber</span><span class="p">),</span>
|
|
<span class="n">Twall1</span><span class="o">=</span><span class="p">(</span>
|
|
<span class="n">wall_upper</span><span class="o">.</span><span class="n">T_chamber</span> <span class="k">if</span> <span class="n">wall_upper</span> <span class="k">else</span> <span class="n">wall_lower</span><span class="o">.</span><span class="n">T_chamber</span><span class="p">),</span>
|
|
<span class="p">)</span>
|
|
<span class="nb">print</span><span class="p">(</span>
|
|
<span class="sa">f</span><span class="s2">"t=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="si">:</span><span class="s2">6.2</span><span class="si">}</span><span class="s2"> : </span><span class="si">{</span><span class="n">chmbr</span><span class="o">.</span><span class="n">Twall0</span><span class="si">}</span><span class="s2"> K | Chamber </span><span class="si">{</span><span class="n">i_chamber</span><span class="si">}</span><span class="s2"> | </span><span class="si">{</span><span class="n">chmbr</span><span class="o">.</span><span class="n">Twall1</span><span class="si">}</span><span class="s2"> K "</span><span class="p">)</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">solve</span><span class="p">()</span>
|
|
<span class="n">Q1</span><span class="p">,</span> <span class="n">Q2</span> <span class="o">=</span> <span class="n">chmbr</span><span class="o">.</span><span class="n">heat</span><span class="p">()</span> <span class="c1"># W (J/s)</span>
|
|
<span class="k">if</span> <span class="n">wall_lower</span><span class="p">:</span>
|
|
<span class="n">wall_lower</span><span class="o">.</span><span class="n">update_bc</span><span class="p">(</span><span class="n">Q</span><span class="o">=</span><span class="n">Q1</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">wall_upper</span><span class="p">:</span>
|
|
<span class="n">wall_upper</span><span class="o">.</span><span class="n">update_bc</span><span class="p">(</span><span class="n">Q</span><span class="o">=</span><span class="n">Q2</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Accumulate exhaust properties for charging (outlet) regenerator</span>
|
|
<span class="n">outlet_reg_idx</span> <span class="o">=</span> <span class="n">outlet_reg_indices</span><span class="p">[</span><span class="n">i_chamber</span><span class="p">]</span>
|
|
<span class="n">outlet_mdots</span><span class="p">[</span><span class="n">outlet_reg_idx</span><span class="p">]</span> <span class="o">+=</span> <span class="n">mdot</span>
|
|
<span class="n">outlet_T_weighted</span><span class="p">[</span><span class="n">outlet_reg_idx</span><span class="p">]</span> <span class="o">+=</span> <span class="n">mdot</span> <span class="o">*</span> <span class="n">chmbr</span><span class="o">.</span><span class="n">T1</span>
|
|
|
|
<span class="c1"># 4. Perform heat exchange for charging regenerators once using mass-weighted exhaust temps</span>
|
|
<span class="n">active_outlets</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">if</span> <span class="n">is_a</span> <span class="k">else</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">active_outlets</span><span class="p">:</span>
|
|
<span class="n">mdot_tot</span> <span class="o">=</span> <span class="n">outlet_mdots</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">mdot_tot</span> <span class="o">></span> <span class="mf">1e-8</span><span class="p">:</span>
|
|
<span class="n">T_exh_avg</span> <span class="o">=</span> <span class="n">outlet_T_weighted</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">/</span> <span class="n">mdot_tot</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">regenerators</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="o">.</span><span class="n">heat_exchange</span><span class="p">(</span>
|
|
<span class="n">dt_sec</span><span class="p">,</span> <span class="n">mdot_tot</span><span class="p">,</span> <span class="n">T_exh_avg</span><span class="p">,</span> <span class="n">is_discharging</span><span class="o">=</span><span class="kc">False</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># Loop all ovens</span>
|
|
<span class="c1"># update oven wall temperatures using coke charge age</span>
|
|
<span class="c1"># solve heat equations of all walls</span>
|
|
<span class="c1"># bake charge in oven</span>
|
|
<span class="k">for</span> <span class="n">i_oven</span><span class="p">,</span> <span class="p">(</span><span class="n">oven</span><span class="p">,</span> <span class="n">wall_lower</span><span class="p">,</span> <span class="n">wall_upper</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ovens</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">)):</span>
|
|
<span class="n">T_oven</span> <span class="o">=</span> <span class="n">oven</span><span class="o">.</span><span class="n">get_charge_temperature</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">)</span>
|
|
|
|
<span class="n">wall_lower</span><span class="o">.</span><span class="n">update_bc</span><span class="p">(</span><span class="n">T_oven</span><span class="o">=</span><span class="n">T_oven</span><span class="p">)</span>
|
|
<span class="n">wall_upper</span><span class="o">.</span><span class="n">update_bc</span><span class="p">(</span><span class="n">T_oven</span><span class="o">=</span><span class="n">T_oven</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">USE_CUSTOM_SOLVER</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">:</span>
|
|
<span class="n">w</span><span class="o">.</span><span class="n">solve</span><span class="p">(</span><span class="n">dt</span> <span class="o">*</span> <span class="mi">60</span> <span class="o">*</span> <span class="mi">60</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">with</span> <span class="n">Pool</span><span class="p">(</span><span class="mi">12</span><span class="p">)</span> <span class="k">as</span> <span class="n">pool</span><span class="p">:</span>
|
|
<span class="n">wall_sln</span> <span class="o">=</span> <span class="n">pool</span><span class="o">.</span><span class="n">starmap</span><span class="p">(</span><span class="n">wall_solve_wrapper</span><span class="p">,</span> <span class="p">[(</span>
|
|
<span class="p">(</span><span class="n">dt</span><span class="o">*</span><span class="mi">60</span><span class="o">*</span><span class="mi">60</span><span class="p">),</span> <span class="n">w</span><span class="p">)</span> <span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span><span class="o">+</span><span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">])</span>
|
|
|
|
<span class="k">for</span> <span class="n">ws</span><span class="p">,</span> <span class="n">wall</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">wall_sln</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span><span class="o">+</span><span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">):</span>
|
|
<span class="n">T_internal</span><span class="p">,</span> <span class="n">T_chamber</span> <span class="o">=</span> <span class="n">ws</span>
|
|
<span class="n">wall</span><span class="o">.</span><span class="n">T_internal</span> <span class="o">=</span> <span class="n">T_internal</span>
|
|
<span class="n">wall</span><span class="o">.</span><span class="n">T_chamber</span> <span class="o">=</span> <span class="n">T_chamber</span>
|
|
|
|
<span class="w"> </span><span class="sd">'''</span>
|
|
<span class="sd"> ql = wall_lower.heat_to_oven()</span>
|
|
<span class="sd"> qu = wall_upper.heat_to_oven()</span>
|
|
|
|
<span class="sd"> oven.bake(ql+qu) </span>
|
|
<span class="sd"> '''</span>
|
|
|
|
<span class="c1"># advance time oven brick</span>
|
|
<span class="c1"># from chamber heat flux boundary condition</span>
|
|
<span class="c1"># to oven fixed temperature boundary condition</span>
|
|
|
|
<span class="c1"># integrate heat to oven # 오븐 벽면 온도 우선 시간 함수로</span>
|
|
|
|
<span class="k">def</span> <span class="nf">push_and_charge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">coke_charge</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Orchestrates pushing older coke and charging fresh coal.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> coke_charge (CokeCharge): The fresh coke charge instance.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="p">)</span> <span class="o">>=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="n">coke_charge</span><span class="o">.</span><span class="n">t_charge</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">charge</span><span class="p">(</span><span class="n">coke_charge</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">push</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Pushes the finished coke out of the oven.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Current time (hours).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">coke</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
|
<span class="n">coke</span><span class="o">.</span><span class="n">end_baking</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">product</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">coke</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">charge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">coke_charge</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Charges a fresh coal unit into the oven list.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> coke_charge (CokeCharge): The coal charge instance.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">ovens</span><span class="p">[</span><span class="n">coke_charge</span><span class="o">.</span><span class="n">idx_oven</span><span class="p">]</span><span class="o">.</span><span class="n">charge</span><span class="p">(</span><span class="n">coke_charge</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">coke_charge</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">dQ</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates total heat supplied over time interval dt.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dt (float): Time interval (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Cumulative heat (GJ).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">heat_program</span><span class="o">.</span><span class="n">dQ</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="o">+</span><span class="n">dt</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">is_pc_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if push/charge should happen in the current time step.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dt (float): Time step (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if push/charge is scheduled.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">period</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">charge_program</span><span class="o">.</span><span class="n">period</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">+</span> <span class="n">dt</span> <span class="o">>=</span> <span class="n">period</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">t_last</span>
|
|
|
|
<span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Advances simulation by dt.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dt (float): Simulation step size (hours).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># dQ = self.heat_program.dQ(self.t, self.t+dt) # t, t+dt 사이 공급하는 열량, array 로 대체 필요</span>
|
|
|
|
<span class="c1"># t 에서 t+dt 까지 탄화실 가열</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">bake</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
|
|
|
|
<span class="n">period</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">charge_program</span><span class="o">.</span><span class="n">period</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">)</span> <span class="c1"># 현재 장입 시간 간격</span>
|
|
|
|
<span class="c1"># 마지막 장입탄 장입 시각</span>
|
|
<span class="n">latest_coke_charge</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">t_charge</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">t_last</span>
|
|
|
|
<span class="c1"># t_last + period 가 t, t + dt 사이에 들어오는 것 검사</span>
|
|
<span class="c1"># t + dt 가 다음 추출/장입 시각 이후일 때 => 이번 time step 에 추출/장입을 실행해야함</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">+</span> <span class="n">dt</span> <span class="o">>=</span> <span class="n">period</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">t_last</span><span class="p">:</span>
|
|
<span class="c1"># 마지막 장입 시각 + 장입 시간 간격 이 이번 time step 에 포함됨</span>
|
|
<span class="c1"># 일정한 간격으로 장입 진행 중, 마지막 장입 시간 += 장입 간격</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">t_last</span> <span class="o">+</span> <span class="n">period</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_last</span> <span class="o">+=</span> <span class="n">period</span>
|
|
<span class="c1"># 마지막 장입 이후 현재 장입 간격보다 긴 시간이 경과함 (장입 간격이 짧아짐; 감산 끝남 등)</span>
|
|
<span class="c1"># 이번 time step 끝을 마지막 장입 시각으로 업데이트</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">+</span> <span class="n">dt</span>
|
|
|
|
<span class="c1"># 추출/장입 실행</span>
|
|
<span class="n">i_oven</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">next_oven</span><span class="p">()</span>
|
|
<span class="c1"># oven = self.ovens[i_oven]</span>
|
|
<span class="n">fresh_coal</span> <span class="o">=</span> <span class="n">CokeCharge</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">+</span> <span class="n">dt</span><span class="p">,</span> <span class="n">i_oven</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">push_and_charge</span><span class="p">(</span><span class="n">fresh_coal</span><span class="p">)</span>
|
|
|
|
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"On </span><span class="si">{</span><span class="n">i_oven</span><span class="si">}</span><span class="s2"> P/C within [ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="si">:</span><span class="s2">7.3</span><span class="si">}</span><span class="s2"> , </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">dt</span><span class="si">:</span><span class="s2">7.3</span><span class="si">}</span><span class="s2"> ]."</span><span class="p">,</span>
|
|
<span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">dt</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">latest_coke_charge</span><span class="si">:</span><span class="s2">7.3</span><span class="si">}</span><span class="s2"> since last P/C. "</span><span class="p">,</span>
|
|
<span class="sa">f</span><span class="s2">"period = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">charge_program</span><span class="o">.</span><span class="n">period</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">)</span><span class="si">:</span><span class="s2">7.3</span><span class="si">}</span><span class="s2">"</span><span class="p">,)</span>
|
|
|
|
<span class="c1"># 시뮬레이션 시간 업데이트</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">+=</span> <span class="n">dt</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas_t_history</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">,</span> <span class="p">[</span><span class="n">chmbr</span><span class="o">.</span><span class="n">T1</span> <span class="k">for</span> <span class="n">chmbr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">chambers</span><span class="p">]))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">wall_t_history</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">,</span> <span class="p">[(</span><span class="n">wl</span><span class="o">.</span><span class="n">T_chamber</span><span class="p">,</span> <span class="n">wl</span><span class="o">.</span><span class="n">T_internal</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">wl</span><span class="o">.</span><span class="n">T_oven</span><span class="p">,</span> <span class="n">wu</span><span class="o">.</span><span class="n">T_oven</span><span class="p">,</span>
|
|
<span class="n">wu</span><span class="o">.</span><span class="n">T_internal</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">wu</span><span class="o">.</span><span class="n">T_chamber</span><span class="p">)</span> <span class="k">for</span> <span class="n">wl</span><span class="p">,</span> <span class="n">wu</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">)]))</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Battery.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">heat_program</span><span class="p">,</span> <span class="n">charge_program</span><span class="p">,</span> <span class="n">burned_gas_state</span><span class="p">,</span> <span class="n">hv</span><span class="p">,</span> <span class="n">init_from_file</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes Battery simulation.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>name</code></td>
|
|
<td>
|
|
<code>str</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Identifier name.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>size</code></td>
|
|
<td>
|
|
<code>int</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Total count of ovens.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>heat_program</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="Battery.HeatSchedule" href="#Battery.HeatSchedule">HeatSchedule</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Heating scheduler object.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>charge_program</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="Battery.ChargeSchedule" href="#Battery.ChargeSchedule">ChargeSchedule</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Charging scheduler object.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>burned_gas_state</code></td>
|
|
<td>
|
|
<code>tuple</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Initial TPX state of burned flue gas.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>hv</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Net heating value (J/kg).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>init_from_file</code></td>
|
|
<td>
|
|
<code>bool</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Recover state from pickle. Defaults to False.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>False</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">621</span>
|
|
<span class="normal">622</span>
|
|
<span class="normal">623</span>
|
|
<span class="normal">624</span>
|
|
<span class="normal">625</span>
|
|
<span class="normal">626</span>
|
|
<span class="normal">627</span>
|
|
<span class="normal">628</span>
|
|
<span class="normal">629</span>
|
|
<span class="normal">630</span>
|
|
<span class="normal">631</span>
|
|
<span class="normal">632</span>
|
|
<span class="normal">633</span>
|
|
<span class="normal">634</span>
|
|
<span class="normal">635</span>
|
|
<span class="normal">636</span>
|
|
<span class="normal">637</span>
|
|
<span class="normal">638</span>
|
|
<span class="normal">639</span>
|
|
<span class="normal">640</span>
|
|
<span class="normal">641</span>
|
|
<span class="normal">642</span>
|
|
<span class="normal">643</span>
|
|
<span class="normal">644</span>
|
|
<span class="normal">645</span>
|
|
<span class="normal">646</span>
|
|
<span class="normal">647</span>
|
|
<span class="normal">648</span>
|
|
<span class="normal">649</span>
|
|
<span class="normal">650</span>
|
|
<span class="normal">651</span>
|
|
<span class="normal">652</span>
|
|
<span class="normal">653</span>
|
|
<span class="normal">654</span>
|
|
<span class="normal">655</span>
|
|
<span class="normal">656</span>
|
|
<span class="normal">657</span>
|
|
<span class="normal">658</span>
|
|
<span class="normal">659</span>
|
|
<span class="normal">660</span>
|
|
<span class="normal">661</span>
|
|
<span class="normal">662</span>
|
|
<span class="normal">663</span>
|
|
<span class="normal">664</span>
|
|
<span class="normal">665</span>
|
|
<span class="normal">666</span>
|
|
<span class="normal">667</span>
|
|
<span class="normal">668</span>
|
|
<span class="normal">669</span>
|
|
<span class="normal">670</span>
|
|
<span class="normal">671</span>
|
|
<span class="normal">672</span>
|
|
<span class="normal">673</span>
|
|
<span class="normal">674</span>
|
|
<span class="normal">675</span>
|
|
<span class="normal">676</span>
|
|
<span class="normal">677</span>
|
|
<span class="normal">678</span>
|
|
<span class="normal">679</span>
|
|
<span class="normal">680</span>
|
|
<span class="normal">681</span>
|
|
<span class="normal">682</span>
|
|
<span class="normal">683</span>
|
|
<span class="normal">684</span>
|
|
<span class="normal">685</span>
|
|
<span class="normal">686</span>
|
|
<span class="normal">687</span>
|
|
<span class="normal">688</span>
|
|
<span class="normal">689</span>
|
|
<span class="normal">690</span>
|
|
<span class="normal">691</span>
|
|
<span class="normal">692</span>
|
|
<span class="normal">693</span>
|
|
<span class="normal">694</span>
|
|
<span class="normal">695</span>
|
|
<span class="normal">696</span>
|
|
<span class="normal">697</span>
|
|
<span class="normal">698</span>
|
|
<span class="normal">699</span>
|
|
<span class="normal">700</span>
|
|
<span class="normal">701</span>
|
|
<span class="normal">702</span>
|
|
<span class="normal">703</span>
|
|
<span class="normal">704</span>
|
|
<span class="normal">705</span>
|
|
<span class="normal">706</span>
|
|
<span class="normal">707</span>
|
|
<span class="normal">708</span>
|
|
<span class="normal">709</span>
|
|
<span class="normal">710</span>
|
|
<span class="normal">711</span>
|
|
<span class="normal">712</span>
|
|
<span class="normal">713</span>
|
|
<span class="normal">714</span>
|
|
<span class="normal">715</span>
|
|
<span class="normal">716</span>
|
|
<span class="normal">717</span>
|
|
<span class="normal">718</span>
|
|
<span class="normal">719</span>
|
|
<span class="normal">720</span>
|
|
<span class="normal">721</span>
|
|
<span class="normal">722</span>
|
|
<span class="normal">723</span>
|
|
<span class="normal">724</span>
|
|
<span class="normal">725</span>
|
|
<span class="normal">726</span>
|
|
<span class="normal">727</span>
|
|
<span class="normal">728</span>
|
|
<span class="normal">729</span>
|
|
<span class="normal">730</span>
|
|
<span class="normal">731</span>
|
|
<span class="normal">732</span>
|
|
<span class="normal">733</span>
|
|
<span class="normal">734</span>
|
|
<span class="normal">735</span>
|
|
<span class="normal">736</span>
|
|
<span class="normal">737</span>
|
|
<span class="normal">738</span>
|
|
<span class="normal">739</span>
|
|
<span class="normal">740</span>
|
|
<span class="normal">741</span>
|
|
<span class="normal">742</span>
|
|
<span class="normal">743</span>
|
|
<span class="normal">744</span>
|
|
<span class="normal">745</span>
|
|
<span class="normal">746</span>
|
|
<span class="normal">747</span>
|
|
<span class="normal">748</span>
|
|
<span class="normal">749</span>
|
|
<span class="normal">750</span>
|
|
<span class="normal">751</span>
|
|
<span class="normal">752</span>
|
|
<span class="normal">753</span>
|
|
<span class="normal">754</span>
|
|
<span class="normal">755</span>
|
|
<span class="normal">756</span>
|
|
<span class="normal">757</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">heat_program</span><span class="p">,</span> <span class="n">charge_program</span><span class="p">,</span> <span class="n">burned_gas_state</span><span class="p">,</span> <span class="n">hv</span><span class="p">,</span> <span class="n">init_from_file</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes Battery simulation.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> name (str): Identifier name.</span>
|
|
<span class="sd"> size (int): Total count of ovens.</span>
|
|
<span class="sd"> heat_program (HeatSchedule): Heating scheduler object.</span>
|
|
<span class="sd"> charge_program (ChargeSchedule): Charging scheduler object.</span>
|
|
<span class="sd"> burned_gas_state (tuple): Initial TPX state of burned flue gas.</span>
|
|
<span class="sd"> hv (float): Net heating value (J/kg).</span>
|
|
<span class="sd"> init_from_file (bool, optional): Recover state from pickle. Defaults to False.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span> <span class="c1"># Battery name</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">=</span> <span class="n">size</span> <span class="c1"># Size of battery, number of ovens</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">heat_program</span> <span class="o">=</span> <span class="n">heat_program</span> <span class="c1"># Heat program or schedule object</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">charge_program</span> <span class="o">=</span> <span class="n">charge_program</span> <span class="c1"># Charge program of schedule object</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># Battery time</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_last</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># Time of last Push/Charge</span>
|
|
<span class="c1"># List of Coke charges under processing(drying)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">processing</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="c1"># List of Coke charges done(completed)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">product</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span> <span class="o">=</span> <span class="n">ct</span><span class="o">.</span><span class="n">Solution</span><span class="p">(</span><span class="s1">'gri30.yaml'</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TPX</span> <span class="o">=</span> <span class="n">burned_gas_state</span> <span class="c1"># Burned gas T, P, X</span>
|
|
<span class="n">T0</span><span class="p">,</span> <span class="n">P0</span><span class="p">,</span> <span class="n">X0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TPX</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T0</span> <span class="o">=</span> <span class="n">T0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">P0</span> <span class="o">=</span> <span class="n">P0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">X0</span> <span class="o">=</span> <span class="n">X0</span>
|
|
<span class="c1"># Integer, 0 ~ (size-1), progress index for oven sequence array</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sequence_idx</span> <span class="o">=</span> <span class="mi">0</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">wall_t_history</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas_t_history</span> <span class="o">=</span> <span class="p">[]</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">hv</span> <span class="o">=</span> <span class="n">hv</span> <span class="c1"># Base unit heat J/kg</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">normal_heat</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">heat_program</span><span class="o">.</span><span class="n">f</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># GJ / rev</span>
|
|
|
|
<span class="c1"># Energy input to battery</span>
|
|
<span class="n">Q0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">normal_heat</span> <span class="o">*</span> <span class="mf">1e9</span> <span class="o">*</span> <span class="mi">3</span> <span class="o">/</span> <span class="mi">3600</span> <span class="c1"># GJ/rev => J/s (W)</span>
|
|
<span class="c1"># Equivalent Fuel+Air mass flow</span>
|
|
<span class="n">mdot0</span> <span class="o">=</span> <span class="n">Q0</span> <span class="o">/</span> <span class="n">hv</span> <span class="c1"># (J/s) / (J/kg) => kg/s</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">mdot0</span> <span class="o">=</span> <span class="n">mdot0</span> <span class="c1"># kg / s</span>
|
|
|
|
<span class="c1"># chambers[0] - walls_0[0] - ovens[0] - walls_1[0] - chambers[1] - walls_0[1] - ...</span>
|
|
<span class="c1"># ... walls_1[i-1] - chambers[i] - walls_0[i] - ovens[i] - walls_1[i] - chambers[i+1] - walls_0[i+1] - ...</span>
|
|
<span class="c1"># ... walls_1[size-2] - chambers[size-1] - walls_0[size-1] - ovens[size-1] - walls_1[size-1] - chambers[size]</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">chambers</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">CombustionChamber</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mdot0</span><span class="o">/</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="p">,</span>
|
|
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">T0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">P0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">X0</span><span class="p">),</span> <span class="n">hA</span><span class="o">=</span><span class="mi">700</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">ichamber</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">ovens</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">OvenChamber</span><span class="p">()</span>
|
|
<span class="k">for</span> <span class="n">ioven</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">RefractoryWall</span><span class="p">(</span><span class="n">Twall_model</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">ioven</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">RefractoryWall</span><span class="p">(</span><span class="n">Twall_model</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">ioven</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
|
|
<span class="c1"># Regenerators and fuel valves initialization (size + 2 elements)</span>
|
|
<span class="c1"># Option A is default: M_reg=1e9 to replicate the legacy 600°C boundary condition.</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">regenerators</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">Regenerator</span><span class="p">(</span><span class="n">ireg</span><span class="p">,</span> <span class="n">T_init</span><span class="o">=</span><span class="mf">1016.9</span><span class="p">,</span> <span class="n">M_reg</span><span class="o">=</span><span class="mf">1e9</span><span class="p">,</span> <span class="n">Cp_reg</span><span class="o">=</span><span class="mf">1000.0</span><span class="p">,</span> <span class="n">eff</span><span class="o">=</span><span class="mf">0.8</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">ireg</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">reversing_period</span> <span class="o">=</span> <span class="mf">20.0</span> <span class="o">/</span> <span class="mf">60.0</span> <span class="c1"># 20 minutes in hours</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">control_active</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="c1"># Cantera parameters for dynamic preheating and equilibrium calculations</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel</span> <span class="o">=</span> <span class="s2">"H2:6.42, O2:0.39, N2:47.28, CH4:1.79, CO:24.25, CO2:19.72, C2H4:0.13, C2H6:0.04"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">oxidizer</span> <span class="o">=</span> <span class="s2">"O2:0.21,N2:0.79"</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">f_found</span> <span class="o">=</span> <span class="n">optimize</span><span class="o">.</span><span class="n">root_scalar</span><span class="p">(</span>
|
|
<span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">coke_oven_exhaust_stoichiometry</span><span class="p">(</span><span class="n">x</span><span class="p">)[</span><span class="s2">"O2"</span><span class="p">]</span> <span class="o">-</span> <span class="mf">0.045</span><span class="p">,</span>
|
|
<span class="n">bracket</span><span class="o">=</span><span class="p">[</span><span class="mf">1e-300</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span>
|
|
<span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">phi</span> <span class="o">=</span> <span class="n">f_found</span><span class="o">.</span><span class="n">root</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">phi</span> <span class="o">=</span> <span class="mf">0.814238515</span>
|
|
|
|
<span class="c1"># For 1~4 Coke Ovens with n+5 P/C sequence</span>
|
|
<span class="n">start_indices</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">oven_idx_order</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">(</span>
|
|
<span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">i0</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span> <span class="k">for</span> <span class="n">i0</span> <span class="ow">in</span> <span class="n">start_indices</span><span class="p">])</span>
|
|
|
|
<span class="k">if</span> <span class="n">init_from_file</span><span class="p">:</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Initializaton from file"</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">load_state</span><span class="p">()</span>
|
|
<span class="n">latest_chamber</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas_t_history</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="n">latest_wall</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">wall_t_history</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
|
|
<span class="c1"># Last Record Time</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">=</span> <span class="n">latest_chamber</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">t_charge</span>
|
|
|
|
<span class="c1"># Recover Chamber State</span>
|
|
<span class="k">for</span> <span class="n">chmbr</span><span class="p">,</span> <span class="n">T1</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">chambers</span><span class="p">,</span> <span class="n">latest_chamber</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">T1</span> <span class="o">=</span> <span class="n">T1</span>
|
|
|
|
<span class="c1"># Recover Wall State with copy() to break reference linkage with history lists</span>
|
|
<span class="k">for</span> <span class="n">wl</span><span class="p">,</span> <span class="n">wu</span><span class="p">,</span> <span class="n">wallT</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">,</span> <span class="n">latest_wall</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
|
|
<span class="n">wl</span><span class="o">.</span><span class="n">T_chamber</span> <span class="o">=</span> <span class="n">wallT</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">wl</span><span class="o">.</span><span class="n">T_internal</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">wallT</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
|
<span class="n">wl</span><span class="o">.</span><span class="n">T_oven</span> <span class="o">=</span> <span class="n">wallT</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
|
|
<span class="n">wu</span><span class="o">.</span><span class="n">T_oven</span> <span class="o">=</span> <span class="n">wallT</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
|
|
<span class="n">wu</span><span class="o">.</span><span class="n">T_internal</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">wallT</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
|
<span class="n">wu</span><span class="o">.</span><span class="n">T_chamber</span> <span class="o">=</span> <span class="n">wallT</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
|
|
|
|
<span class="c1"># Recover Oven State</span>
|
|
<span class="k">for</span> <span class="n">coal</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">ovens</span><span class="p">[</span><span class="n">coal</span><span class="o">.</span><span class="n">idx_oven</span><span class="p">]</span><span class="o">.</span><span class="n">content</span> <span class="o">=</span> <span class="n">coal</span>
|
|
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Initializaton Start"</span><span class="p">)</span>
|
|
<span class="c1"># 정상 상태 만들기: 모든 문에 n_cycle 회 장입</span>
|
|
<span class="n">n_cycle</span> <span class="o">=</span> <span class="mi">3</span> <span class="c1"># 모든 문 장입 반복 횟수</span>
|
|
<span class="n">period_over_dt</span> <span class="o">=</span> <span class="mf">6.</span> <span class="c1"># period/dt, 장입 간격 / 초기화 time step 크기</span>
|
|
<span class="n">normal_period</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">charge_program</span><span class="o">.</span><span class="n">period</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># 감산 전 장입 간격 (주기)</span>
|
|
<span class="n">dt</span> <span class="o">=</span> <span class="n">normal_period</span> <span class="o">/</span> <span class="n">period_over_dt</span> <span class="c1"># Simulation Time Step</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">=</span> <span class="o">-</span> <span class="n">normal_period</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">*</span> \
|
|
<span class="n">n_cycle</span> <span class="c1"># 정상상태 생성 모사 시간 = 장입 간격 * 총 장입 횟수</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="c1"># 마지막 장입을 정상상태 시뮬레이션 시작 시각으로 설정</span>
|
|
|
|
<span class="c1"># initialization time loop</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">*</span> <span class="n">period_over_dt</span> <span class="o">*</span> <span class="n">n_cycle</span><span class="p">))):</span>
|
|
<span class="c1"># for i in range(3):</span>
|
|
<span class="w"> </span><span class="sd">""" Fill battety with normal charge rate """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span> <span class="c1"># Time adavancement</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Battery.bake" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">bake</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Advances thermal states of combustion chambers, walls, and ovens.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>dt</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Simulation time step (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">869</span>
|
|
<span class="normal">870</span>
|
|
<span class="normal">871</span>
|
|
<span class="normal">872</span>
|
|
<span class="normal">873</span>
|
|
<span class="normal">874</span>
|
|
<span class="normal">875</span>
|
|
<span class="normal">876</span>
|
|
<span class="normal">877</span>
|
|
<span class="normal">878</span>
|
|
<span class="normal">879</span>
|
|
<span class="normal">880</span>
|
|
<span class="normal">881</span>
|
|
<span class="normal">882</span>
|
|
<span class="normal">883</span>
|
|
<span class="normal">884</span>
|
|
<span class="normal">885</span>
|
|
<span class="normal">886</span>
|
|
<span class="normal">887</span>
|
|
<span class="normal">888</span>
|
|
<span class="normal">889</span>
|
|
<span class="normal">890</span>
|
|
<span class="normal">891</span>
|
|
<span class="normal">892</span>
|
|
<span class="normal">893</span>
|
|
<span class="normal">894</span>
|
|
<span class="normal">895</span>
|
|
<span class="normal">896</span>
|
|
<span class="normal">897</span>
|
|
<span class="normal">898</span>
|
|
<span class="normal">899</span>
|
|
<span class="normal">900</span>
|
|
<span class="normal">901</span>
|
|
<span class="normal">902</span>
|
|
<span class="normal">903</span>
|
|
<span class="normal">904</span>
|
|
<span class="normal">905</span>
|
|
<span class="normal">906</span>
|
|
<span class="normal">907</span>
|
|
<span class="normal">908</span>
|
|
<span class="normal">909</span>
|
|
<span class="normal">910</span>
|
|
<span class="normal">911</span>
|
|
<span class="normal">912</span>
|
|
<span class="normal">913</span>
|
|
<span class="normal">914</span>
|
|
<span class="normal">915</span>
|
|
<span class="normal">916</span>
|
|
<span class="normal">917</span>
|
|
<span class="normal">918</span>
|
|
<span class="normal">919</span>
|
|
<span class="normal">920</span>
|
|
<span class="normal">921</span>
|
|
<span class="normal">922</span>
|
|
<span class="normal">923</span>
|
|
<span class="normal">924</span>
|
|
<span class="normal">925</span>
|
|
<span class="normal">926</span>
|
|
<span class="normal">927</span>
|
|
<span class="normal">928</span>
|
|
<span class="normal">929</span>
|
|
<span class="normal">930</span>
|
|
<span class="normal">931</span>
|
|
<span class="normal">932</span>
|
|
<span class="normal">933</span>
|
|
<span class="normal">934</span>
|
|
<span class="normal">935</span>
|
|
<span class="normal">936</span>
|
|
<span class="normal">937</span>
|
|
<span class="normal">938</span>
|
|
<span class="normal">939</span>
|
|
<span class="normal">940</span>
|
|
<span class="normal">941</span>
|
|
<span class="normal">942</span>
|
|
<span class="normal">943</span>
|
|
<span class="normal">944</span>
|
|
<span class="normal">945</span>
|
|
<span class="normal">946</span>
|
|
<span class="normal">947</span>
|
|
<span class="normal">948</span>
|
|
<span class="normal">949</span>
|
|
<span class="normal">950</span>
|
|
<span class="normal">951</span>
|
|
<span class="normal">952</span>
|
|
<span class="normal">953</span>
|
|
<span class="normal">954</span>
|
|
<span class="normal">955</span>
|
|
<span class="normal">956</span>
|
|
<span class="normal">957</span>
|
|
<span class="normal">958</span>
|
|
<span class="normal">959</span>
|
|
<span class="normal">960</span>
|
|
<span class="normal">961</span>
|
|
<span class="normal">962</span>
|
|
<span class="normal">963</span>
|
|
<span class="normal">964</span>
|
|
<span class="normal">965</span>
|
|
<span class="normal">966</span>
|
|
<span class="normal">967</span>
|
|
<span class="normal">968</span>
|
|
<span class="normal">969</span>
|
|
<span class="normal">970</span>
|
|
<span class="normal">971</span>
|
|
<span class="normal">972</span>
|
|
<span class="normal">973</span>
|
|
<span class="normal">974</span>
|
|
<span class="normal">975</span>
|
|
<span class="normal">976</span>
|
|
<span class="normal">977</span>
|
|
<span class="normal">978</span>
|
|
<span class="normal">979</span>
|
|
<span class="normal">980</span>
|
|
<span class="normal">981</span>
|
|
<span class="normal">982</span>
|
|
<span class="normal">983</span>
|
|
<span class="normal">984</span>
|
|
<span class="normal">985</span>
|
|
<span class="normal">986</span>
|
|
<span class="normal">987</span>
|
|
<span class="normal">988</span>
|
|
<span class="normal">989</span>
|
|
<span class="normal">990</span>
|
|
<span class="normal">991</span>
|
|
<span class="normal">992</span>
|
|
<span class="normal">993</span>
|
|
<span class="normal">994</span>
|
|
<span class="normal">995</span>
|
|
<span class="normal">996</span>
|
|
<span class="normal">997</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">bake</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Advances thermal states of combustion chambers, walls, and ovens.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dt (float): Simulation time step (hours).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">dt_sec</span> <span class="o">=</span> <span class="n">dt</span> <span class="o">*</span> <span class="mf">3600.0</span>
|
|
<span class="n">size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
|
|
<span class="n">is_a</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_cycle_A</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Get dynamic mass flows and regenerator mappings for this step</span>
|
|
<span class="n">chamber_mdots</span><span class="p">,</span> <span class="n">inlet_reg_indices</span><span class="p">,</span> <span class="n">outlet_reg_indices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_chamber_inlets</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 1. Aggregate flow rates for the discharging (inlet) regenerators</span>
|
|
<span class="n">inlet_mdots</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">i_chamber</span><span class="p">,</span> <span class="n">mdot</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">chamber_mdots</span><span class="p">):</span>
|
|
<span class="n">inlet_reg_idx</span> <span class="o">=</span> <span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">i_chamber</span><span class="p">]</span>
|
|
<span class="n">inlet_mdots</span><span class="p">[</span><span class="n">inlet_reg_idx</span><span class="p">]</span> <span class="o">+=</span> <span class="n">mdot</span>
|
|
|
|
<span class="c1"># 2. Perform heat exchange for discharging regenerators once to find preheat temperatures</span>
|
|
<span class="n">reg_preheat_temps</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">active_inlets</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">if</span> <span class="n">is_a</span> <span class="k">else</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">active_inlets</span><span class="p">:</span>
|
|
<span class="n">reg_preheat_temps</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">regenerators</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="o">.</span><span class="n">heat_exchange</span><span class="p">(</span>
|
|
<span class="n">dt_sec</span><span class="p">,</span> <span class="n">inlet_mdots</span><span class="p">[</span><span class="n">j</span><span class="p">],</span> <span class="mf">298.15</span><span class="p">,</span> <span class="n">is_discharging</span><span class="o">=</span><span class="kc">True</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># Cache for Cantera HP equilibrium calculation to save CPU overhead.</span>
|
|
<span class="c1"># Maps inlet_reg_idx -> (T0, burned_state, h0)</span>
|
|
<span class="n">cantera_cache</span> <span class="o">=</span> <span class="p">{}</span>
|
|
|
|
<span class="c1"># Arrays to aggregate exhaust properties for the charging (outlet) regenerators</span>
|
|
<span class="n">outlet_mdots</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">outlet_T_weighted</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
|
|
<span class="c1"># 3. Loop all combustion chambers to solve thermal equations</span>
|
|
<span class="k">for</span> <span class="n">i_chamber</span><span class="p">,</span> <span class="n">chmbr</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">chambers</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">i_chamber</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">wall_lower</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">[</span><span class="n">i_chamber</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">wall_lower</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="k">if</span> <span class="n">i_chamber</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
|
|
<span class="n">wall_upper</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span><span class="p">[</span><span class="n">i_chamber</span><span class="p">]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">wall_upper</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="n">mdot</span> <span class="o">=</span> <span class="n">chamber_mdots</span><span class="p">[</span><span class="n">i_chamber</span><span class="p">]</span>
|
|
<span class="n">inlet_reg_idx</span> <span class="o">=</span> <span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">i_chamber</span><span class="p">]</span>
|
|
<span class="n">T_pre</span> <span class="o">=</span> <span class="n">reg_preheat_temps</span><span class="p">[</span><span class="n">inlet_reg_idx</span><span class="p">]</span>
|
|
|
|
<span class="c1"># Compute new combustion state (HP equilibrium) based on T_pre</span>
|
|
<span class="k">if</span> <span class="n">inlet_reg_idx</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cantera_cache</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TP</span> <span class="o">=</span> <span class="n">T_pre</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">P0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">set_equivalence_ratio</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phi</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fuel</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">oxidizer</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">equilibrate</span><span class="p">(</span><span class="s1">'HP'</span><span class="p">)</span>
|
|
<span class="n">burned_state</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TPX</span>
|
|
<span class="n">h0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">enthalpy_mass</span>
|
|
<span class="n">T0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">T</span>
|
|
<span class="n">cantera_cache</span><span class="p">[</span><span class="n">inlet_reg_idx</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">T0</span><span class="p">,</span> <span class="n">burned_state</span><span class="p">,</span> <span class="n">h0</span><span class="p">)</span>
|
|
|
|
<span class="n">T0</span><span class="p">,</span> <span class="n">burned_state</span><span class="p">,</span> <span class="n">h0</span> <span class="o">=</span> <span class="n">cantera_cache</span><span class="p">[</span><span class="n">inlet_reg_idx</span><span class="p">]</span>
|
|
|
|
<span class="c1"># Update chamber state variables</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">update_mdot</span><span class="p">(</span><span class="n">mdot</span><span class="p">)</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TPX</span> <span class="o">=</span> <span class="n">burned_state</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">T0</span> <span class="o">=</span> <span class="n">T0</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">h0</span> <span class="o">=</span> <span class="n">h0</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">T1</span> <span class="o">=</span> <span class="n">T0</span> <span class="c1"># reset outlet guess to Tad</span>
|
|
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">update_Twall</span><span class="p">(</span>
|
|
<span class="n">Twall0</span><span class="o">=</span><span class="p">(</span>
|
|
<span class="n">wall_lower</span><span class="o">.</span><span class="n">T_chamber</span> <span class="k">if</span> <span class="n">wall_lower</span> <span class="k">else</span> <span class="n">wall_upper</span><span class="o">.</span><span class="n">T_chamber</span><span class="p">),</span>
|
|
<span class="n">Twall1</span><span class="o">=</span><span class="p">(</span>
|
|
<span class="n">wall_upper</span><span class="o">.</span><span class="n">T_chamber</span> <span class="k">if</span> <span class="n">wall_upper</span> <span class="k">else</span> <span class="n">wall_lower</span><span class="o">.</span><span class="n">T_chamber</span><span class="p">),</span>
|
|
<span class="p">)</span>
|
|
<span class="nb">print</span><span class="p">(</span>
|
|
<span class="sa">f</span><span class="s2">"t=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="si">:</span><span class="s2">6.2</span><span class="si">}</span><span class="s2"> : </span><span class="si">{</span><span class="n">chmbr</span><span class="o">.</span><span class="n">Twall0</span><span class="si">}</span><span class="s2"> K | Chamber </span><span class="si">{</span><span class="n">i_chamber</span><span class="si">}</span><span class="s2"> | </span><span class="si">{</span><span class="n">chmbr</span><span class="o">.</span><span class="n">Twall1</span><span class="si">}</span><span class="s2"> K "</span><span class="p">)</span>
|
|
<span class="n">chmbr</span><span class="o">.</span><span class="n">solve</span><span class="p">()</span>
|
|
<span class="n">Q1</span><span class="p">,</span> <span class="n">Q2</span> <span class="o">=</span> <span class="n">chmbr</span><span class="o">.</span><span class="n">heat</span><span class="p">()</span> <span class="c1"># W (J/s)</span>
|
|
<span class="k">if</span> <span class="n">wall_lower</span><span class="p">:</span>
|
|
<span class="n">wall_lower</span><span class="o">.</span><span class="n">update_bc</span><span class="p">(</span><span class="n">Q</span><span class="o">=</span><span class="n">Q1</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">wall_upper</span><span class="p">:</span>
|
|
<span class="n">wall_upper</span><span class="o">.</span><span class="n">update_bc</span><span class="p">(</span><span class="n">Q</span><span class="o">=</span><span class="n">Q2</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Accumulate exhaust properties for charging (outlet) regenerator</span>
|
|
<span class="n">outlet_reg_idx</span> <span class="o">=</span> <span class="n">outlet_reg_indices</span><span class="p">[</span><span class="n">i_chamber</span><span class="p">]</span>
|
|
<span class="n">outlet_mdots</span><span class="p">[</span><span class="n">outlet_reg_idx</span><span class="p">]</span> <span class="o">+=</span> <span class="n">mdot</span>
|
|
<span class="n">outlet_T_weighted</span><span class="p">[</span><span class="n">outlet_reg_idx</span><span class="p">]</span> <span class="o">+=</span> <span class="n">mdot</span> <span class="o">*</span> <span class="n">chmbr</span><span class="o">.</span><span class="n">T1</span>
|
|
|
|
<span class="c1"># 4. Perform heat exchange for charging regenerators once using mass-weighted exhaust temps</span>
|
|
<span class="n">active_outlets</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">if</span> <span class="n">is_a</span> <span class="k">else</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">active_outlets</span><span class="p">:</span>
|
|
<span class="n">mdot_tot</span> <span class="o">=</span> <span class="n">outlet_mdots</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">mdot_tot</span> <span class="o">></span> <span class="mf">1e-8</span><span class="p">:</span>
|
|
<span class="n">T_exh_avg</span> <span class="o">=</span> <span class="n">outlet_T_weighted</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">/</span> <span class="n">mdot_tot</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">regenerators</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="o">.</span><span class="n">heat_exchange</span><span class="p">(</span>
|
|
<span class="n">dt_sec</span><span class="p">,</span> <span class="n">mdot_tot</span><span class="p">,</span> <span class="n">T_exh_avg</span><span class="p">,</span> <span class="n">is_discharging</span><span class="o">=</span><span class="kc">False</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># Loop all ovens</span>
|
|
<span class="c1"># update oven wall temperatures using coke charge age</span>
|
|
<span class="c1"># solve heat equations of all walls</span>
|
|
<span class="c1"># bake charge in oven</span>
|
|
<span class="k">for</span> <span class="n">i_oven</span><span class="p">,</span> <span class="p">(</span><span class="n">oven</span><span class="p">,</span> <span class="n">wall_lower</span><span class="p">,</span> <span class="n">wall_upper</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ovens</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">)):</span>
|
|
<span class="n">T_oven</span> <span class="o">=</span> <span class="n">oven</span><span class="o">.</span><span class="n">get_charge_temperature</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">)</span>
|
|
|
|
<span class="n">wall_lower</span><span class="o">.</span><span class="n">update_bc</span><span class="p">(</span><span class="n">T_oven</span><span class="o">=</span><span class="n">T_oven</span><span class="p">)</span>
|
|
<span class="n">wall_upper</span><span class="o">.</span><span class="n">update_bc</span><span class="p">(</span><span class="n">T_oven</span><span class="o">=</span><span class="n">T_oven</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">USE_CUSTOM_SOLVER</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">:</span>
|
|
<span class="n">w</span><span class="o">.</span><span class="n">solve</span><span class="p">(</span><span class="n">dt</span> <span class="o">*</span> <span class="mi">60</span> <span class="o">*</span> <span class="mi">60</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">with</span> <span class="n">Pool</span><span class="p">(</span><span class="mi">12</span><span class="p">)</span> <span class="k">as</span> <span class="n">pool</span><span class="p">:</span>
|
|
<span class="n">wall_sln</span> <span class="o">=</span> <span class="n">pool</span><span class="o">.</span><span class="n">starmap</span><span class="p">(</span><span class="n">wall_solve_wrapper</span><span class="p">,</span> <span class="p">[(</span>
|
|
<span class="p">(</span><span class="n">dt</span><span class="o">*</span><span class="mi">60</span><span class="o">*</span><span class="mi">60</span><span class="p">),</span> <span class="n">w</span><span class="p">)</span> <span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span><span class="o">+</span><span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">])</span>
|
|
|
|
<span class="k">for</span> <span class="n">ws</span><span class="p">,</span> <span class="n">wall</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">wall_sln</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span><span class="o">+</span><span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">):</span>
|
|
<span class="n">T_internal</span><span class="p">,</span> <span class="n">T_chamber</span> <span class="o">=</span> <span class="n">ws</span>
|
|
<span class="n">wall</span><span class="o">.</span><span class="n">T_internal</span> <span class="o">=</span> <span class="n">T_internal</span>
|
|
<span class="n">wall</span><span class="o">.</span><span class="n">T_chamber</span> <span class="o">=</span> <span class="n">T_chamber</span>
|
|
|
|
<span class="w"> </span><span class="sd">'''</span>
|
|
<span class="sd"> ql = wall_lower.heat_to_oven()</span>
|
|
<span class="sd"> qu = wall_upper.heat_to_oven()</span>
|
|
|
|
<span class="sd"> oven.bake(ql+qu) </span>
|
|
<span class="sd"> '''</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Battery.charge" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">charge</span><span class="p">(</span><span class="n">coke_charge</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Charges a fresh coal unit into the oven list.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>coke_charge</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="Battery.CokeCharge" href="#Battery.CokeCharge">CokeCharge</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The coal charge instance.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1025</span>
|
|
<span class="normal">1026</span>
|
|
<span class="normal">1027</span>
|
|
<span class="normal">1028</span>
|
|
<span class="normal">1029</span>
|
|
<span class="normal">1030</span>
|
|
<span class="normal">1031</span>
|
|
<span class="normal">1032</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">charge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">coke_charge</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Charges a fresh coal unit into the oven list.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> coke_charge (CokeCharge): The coal charge instance.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">ovens</span><span class="p">[</span><span class="n">coke_charge</span><span class="o">.</span><span class="n">idx_oven</span><span class="p">]</span><span class="o">.</span><span class="n">charge</span><span class="p">(</span><span class="n">coke_charge</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">coke_charge</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Battery.dQ" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">dQ</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Calculates total heat supplied over time interval dt.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>dt</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Time interval (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>float</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Cumulative heat (GJ).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1034</span>
|
|
<span class="normal">1035</span>
|
|
<span class="normal">1036</span>
|
|
<span class="normal">1037</span>
|
|
<span class="normal">1038</span>
|
|
<span class="normal">1039</span>
|
|
<span class="normal">1040</span>
|
|
<span class="normal">1041</span>
|
|
<span class="normal">1042</span>
|
|
<span class="normal">1043</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">dQ</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates total heat supplied over time interval dt.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dt (float): Time interval (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Cumulative heat (GJ).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">heat_program</span><span class="o">.</span><span class="n">dQ</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="o">+</span><span class="n">dt</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Battery.get_chamber_inlets" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">get_chamber_inlets</span><span class="p">(</span><span class="n">t</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Computes mass flow rate and maps regenerators for each combustion chamber.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>t</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Current simulation time (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>tuple</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>(chamber_mdots, inlet_reg_indices, outlet_reg_indices)
|
|
- chamber_mdots (np.ndarray): Fuel-air flow rate for each chamber (kg/s).
|
|
- inlet_reg_indices (list): Regenerator index supplying to each chamber.
|
|
- outlet_reg_indices (list): Regenerator index receiving exhaust from each chamber.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">782</span>
|
|
<span class="normal">783</span>
|
|
<span class="normal">784</span>
|
|
<span class="normal">785</span>
|
|
<span class="normal">786</span>
|
|
<span class="normal">787</span>
|
|
<span class="normal">788</span>
|
|
<span class="normal">789</span>
|
|
<span class="normal">790</span>
|
|
<span class="normal">791</span>
|
|
<span class="normal">792</span>
|
|
<span class="normal">793</span>
|
|
<span class="normal">794</span>
|
|
<span class="normal">795</span>
|
|
<span class="normal">796</span>
|
|
<span class="normal">797</span>
|
|
<span class="normal">798</span>
|
|
<span class="normal">799</span>
|
|
<span class="normal">800</span>
|
|
<span class="normal">801</span>
|
|
<span class="normal">802</span>
|
|
<span class="normal">803</span>
|
|
<span class="normal">804</span>
|
|
<span class="normal">805</span>
|
|
<span class="normal">806</span>
|
|
<span class="normal">807</span>
|
|
<span class="normal">808</span>
|
|
<span class="normal">809</span>
|
|
<span class="normal">810</span>
|
|
<span class="normal">811</span>
|
|
<span class="normal">812</span>
|
|
<span class="normal">813</span>
|
|
<span class="normal">814</span>
|
|
<span class="normal">815</span>
|
|
<span class="normal">816</span>
|
|
<span class="normal">817</span>
|
|
<span class="normal">818</span>
|
|
<span class="normal">819</span>
|
|
<span class="normal">820</span>
|
|
<span class="normal">821</span>
|
|
<span class="normal">822</span>
|
|
<span class="normal">823</span>
|
|
<span class="normal">824</span>
|
|
<span class="normal">825</span>
|
|
<span class="normal">826</span>
|
|
<span class="normal">827</span>
|
|
<span class="normal">828</span>
|
|
<span class="normal">829</span>
|
|
<span class="normal">830</span>
|
|
<span class="normal">831</span>
|
|
<span class="normal">832</span>
|
|
<span class="normal">833</span>
|
|
<span class="normal">834</span>
|
|
<span class="normal">835</span>
|
|
<span class="normal">836</span>
|
|
<span class="normal">837</span>
|
|
<span class="normal">838</span>
|
|
<span class="normal">839</span>
|
|
<span class="normal">840</span>
|
|
<span class="normal">841</span>
|
|
<span class="normal">842</span>
|
|
<span class="normal">843</span>
|
|
<span class="normal">844</span>
|
|
<span class="normal">845</span>
|
|
<span class="normal">846</span>
|
|
<span class="normal">847</span>
|
|
<span class="normal">848</span>
|
|
<span class="normal">849</span>
|
|
<span class="normal">850</span>
|
|
<span class="normal">851</span>
|
|
<span class="normal">852</span>
|
|
<span class="normal">853</span>
|
|
<span class="normal">854</span>
|
|
<span class="normal">855</span>
|
|
<span class="normal">856</span>
|
|
<span class="normal">857</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">get_chamber_inlets</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Computes mass flow rate and maps regenerators for each combustion chamber.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Current simulation time (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (chamber_mdots, inlet_reg_indices, outlet_reg_indices)</span>
|
|
<span class="sd"> - chamber_mdots (np.ndarray): Fuel-air flow rate for each chamber (kg/s).</span>
|
|
<span class="sd"> - inlet_reg_indices (list): Regenerator index supplying to each chamber.</span>
|
|
<span class="sd"> - outlet_reg_indices (list): Regenerator index receiving exhaust from each chamber.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">total_mdot</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mdot</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
|
|
<span class="n">size</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span>
|
|
|
|
<span class="c1"># If external control is inactive, dynamically reset valves to legacy distribution</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"control_active"</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_cycle_A</span><span class="p">(</span><span class="n">t</span><span class="p">):</span>
|
|
<span class="c1"># Cycle A: Odd regenerators (0-indexed even j) discharge</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">total_mdot</span> <span class="o">/</span> <span class="n">size</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="n">size</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="mf">2.0</span> <span class="o">*</span> <span class="n">total_mdot</span> <span class="o">/</span> <span class="n">size</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># Cycle B: Even regenerators (0-indexed odd j) discharge</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="n">size</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="mf">2.0</span> <span class="o">*</span> <span class="n">total_mdot</span> <span class="o">/</span> <span class="n">size</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span><span class="p">[</span><span class="n">size</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">total_mdot</span> <span class="o">/</span> <span class="n">size</span>
|
|
|
|
<span class="c1"># Distribute valve flows to individual combustion chambers</span>
|
|
<span class="n">chamber_mdots</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">inlet_reg_indices</span> <span class="o">=</span> <span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">outlet_reg_indices</span> <span class="o">=</span> <span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
|
|
|
<span class="n">is_a</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_cycle_A</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">is_a</span><span class="p">:</span>
|
|
<span class="c1"># Cycle A: Even regenerators (j = 0, 2, ..., size) are INLETS</span>
|
|
<span class="c1"># Odd regenerators (j = 1, 3, ..., size+1) are OUTLETS</span>
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">chamber_mdots</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="n">val</span>
|
|
<span class="n">inlet_reg_indices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">chamber_mdots</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="n">val</span> <span class="o">/</span> <span class="mf">2.0</span>
|
|
<span class="n">chamber_mdots</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">+=</span> <span class="n">val</span> <span class="o">/</span> <span class="mf">2.0</span>
|
|
<span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
<span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">outlet_reg_indices</span><span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="o">=</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">outlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
<span class="n">outlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># Cycle B: Odd regenerators (j = 1, 3, ..., size+1) are INLETS</span>
|
|
<span class="c1"># Even regenerators (j = 0, 2, ..., size) are OUTLETS</span>
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fuel_valves</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">chamber_mdots</span><span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="o">+=</span> <span class="n">val</span>
|
|
<span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">size</span><span class="p">]</span> <span class="o">=</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">chamber_mdots</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="n">val</span> <span class="o">/</span> <span class="mf">2.0</span>
|
|
<span class="n">chamber_mdots</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">+=</span> <span class="n">val</span> <span class="o">/</span> <span class="mf">2.0</span>
|
|
<span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
<span class="n">inlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
|
|
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">size</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">outlet_reg_indices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">outlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
<span class="n">outlet_reg_indices</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
|
|
|
|
<span class="k">return</span> <span class="n">chamber_mdots</span><span class="p">,</span> <span class="n">inlet_reg_indices</span><span class="p">,</span> <span class="n">outlet_reg_indices</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Battery.is_cycle_A" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">is_cycle_A</span><span class="p">(</span><span class="n">t</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Checks if the battery is currently in Cycle A (odd-numbered regenerators discharging).</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>t</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Simulation time (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>bool</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>True if in Cycle A, False if in Cycle B.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">770</span>
|
|
<span class="normal">771</span>
|
|
<span class="normal">772</span>
|
|
<span class="normal">773</span>
|
|
<span class="normal">774</span>
|
|
<span class="normal">775</span>
|
|
<span class="normal">776</span>
|
|
<span class="normal">777</span>
|
|
<span class="normal">778</span>
|
|
<span class="normal">779</span>
|
|
<span class="normal">780</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">is_cycle_A</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if the battery is currently in Cycle A (odd-numbered regenerators discharging).</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Simulation time (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if in Cycle A, False if in Cycle B.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">cycle_num</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">floor</span><span class="p">(</span><span class="n">t</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">reversing_period</span><span class="p">))</span>
|
|
<span class="k">return</span> <span class="p">(</span><span class="n">cycle_num</span> <span class="o">%</span> <span class="mi">2</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Battery.is_pc_time" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">is_pc_time</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Checks if push/charge should happen in the current time step.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>dt</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Time step (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>bool</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>True if push/charge is scheduled.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1045</span>
|
|
<span class="normal">1046</span>
|
|
<span class="normal">1047</span>
|
|
<span class="normal">1048</span>
|
|
<span class="normal">1049</span>
|
|
<span class="normal">1050</span>
|
|
<span class="normal">1051</span>
|
|
<span class="normal">1052</span>
|
|
<span class="normal">1053</span>
|
|
<span class="normal">1054</span>
|
|
<span class="normal">1055</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">is_pc_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Checks if push/charge should happen in the current time step.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dt (float): Time step (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bool: True if push/charge is scheduled.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">period</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">charge_program</span><span class="o">.</span><span class="n">period</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">+</span> <span class="n">dt</span> <span class="o">>=</span> <span class="n">period</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">t_last</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Battery.load_state" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">load_state</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Loads simulation state from binary history files.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">607</span>
|
|
<span class="normal">608</span>
|
|
<span class="normal">609</span>
|
|
<span class="normal">610</span>
|
|
<span class="normal">611</span>
|
|
<span class="normal">612</span>
|
|
<span class="normal">613</span>
|
|
<span class="normal">614</span>
|
|
<span class="normal">615</span>
|
|
<span class="normal">616</span>
|
|
<span class="normal">617</span>
|
|
<span class="normal">618</span>
|
|
<span class="normal">619</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">load_state</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Loads simulation state from binary history files."""</span>
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'gas.history'</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">gas_history_file</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas_t_history</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">gas_history_file</span><span class="p">)</span>
|
|
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'wall.history'</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">wall_history_file</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">wall_t_history</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">wall_history_file</span><span class="p">)</span>
|
|
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'coke.history'</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">coke_history_file</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">product</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">coke_history_file</span><span class="p">)</span>
|
|
|
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'oven.state'</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">coke_state_file</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">processing</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">coke_state_file</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Battery.mdot" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">mdot</span><span class="p">(</span><span class="n">t</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Calculates mass flow rate of gas at time t.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>t</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Simulation time (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>float</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Mass flow rate (kg/s).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">759</span>
|
|
<span class="normal">760</span>
|
|
<span class="normal">761</span>
|
|
<span class="normal">762</span>
|
|
<span class="normal">763</span>
|
|
<span class="normal">764</span>
|
|
<span class="normal">765</span>
|
|
<span class="normal">766</span>
|
|
<span class="normal">767</span>
|
|
<span class="normal">768</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">mdot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates mass flow rate of gas at time t.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Simulation time (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Mass flow rate (kg/s).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">mdot0</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">heat_program</span><span class="o">.</span><span class="n">f</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">normal_heat</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Battery.next_oven" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">next_oven</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Returns the index of the next oven to be pushed and charged.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>int</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Oven index (0-indexed).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">859</span>
|
|
<span class="normal">860</span>
|
|
<span class="normal">861</span>
|
|
<span class="normal">862</span>
|
|
<span class="normal">863</span>
|
|
<span class="normal">864</span>
|
|
<span class="normal">865</span>
|
|
<span class="normal">866</span>
|
|
<span class="normal">867</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">next_oven</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Returns the index of the next oven to be pushed and charged.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> int: Oven index (0-indexed).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">next_oven_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">oven_idx_order</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">sequence_idx</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">sequence_idx</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="k">return</span> <span class="n">next_oven_id</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Battery.push" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">push</span><span class="p">(</span><span class="n">t</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Pushes the finished coke out of the oven.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>t</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Current time (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1015</span>
|
|
<span class="normal">1016</span>
|
|
<span class="normal">1017</span>
|
|
<span class="normal">1018</span>
|
|
<span class="normal">1019</span>
|
|
<span class="normal">1020</span>
|
|
<span class="normal">1021</span>
|
|
<span class="normal">1022</span>
|
|
<span class="normal">1023</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">push</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Pushes the finished coke out of the oven.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Current time (hours).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">coke</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
|
<span class="n">coke</span><span class="o">.</span><span class="n">end_baking</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">product</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">coke</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Battery.push_and_charge" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">push_and_charge</span><span class="p">(</span><span class="n">coke_charge</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Orchestrates pushing older coke and charging fresh coal.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>coke_charge</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="Battery.CokeCharge" href="#Battery.CokeCharge">CokeCharge</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The fresh coke charge instance.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1005</span>
|
|
<span class="normal">1006</span>
|
|
<span class="normal">1007</span>
|
|
<span class="normal">1008</span>
|
|
<span class="normal">1009</span>
|
|
<span class="normal">1010</span>
|
|
<span class="normal">1011</span>
|
|
<span class="normal">1012</span>
|
|
<span class="normal">1013</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">push_and_charge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">coke_charge</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Orchestrates pushing older coke and charging fresh coal.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> coke_charge (CokeCharge): The fresh coke charge instance.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="p">)</span> <span class="o">>=</span> <span class="bp">self</span><span class="o">.</span><span class="n">size</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="n">coke_charge</span><span class="o">.</span><span class="n">t_charge</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">charge</span><span class="p">(</span><span class="n">coke_charge</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Battery.update" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">update</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Advances simulation by dt.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>dt</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Simulation step size (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1057</span>
|
|
<span class="normal">1058</span>
|
|
<span class="normal">1059</span>
|
|
<span class="normal">1060</span>
|
|
<span class="normal">1061</span>
|
|
<span class="normal">1062</span>
|
|
<span class="normal">1063</span>
|
|
<span class="normal">1064</span>
|
|
<span class="normal">1065</span>
|
|
<span class="normal">1066</span>
|
|
<span class="normal">1067</span>
|
|
<span class="normal">1068</span>
|
|
<span class="normal">1069</span>
|
|
<span class="normal">1070</span>
|
|
<span class="normal">1071</span>
|
|
<span class="normal">1072</span>
|
|
<span class="normal">1073</span>
|
|
<span class="normal">1074</span>
|
|
<span class="normal">1075</span>
|
|
<span class="normal">1076</span>
|
|
<span class="normal">1077</span>
|
|
<span class="normal">1078</span>
|
|
<span class="normal">1079</span>
|
|
<span class="normal">1080</span>
|
|
<span class="normal">1081</span>
|
|
<span class="normal">1082</span>
|
|
<span class="normal">1083</span>
|
|
<span class="normal">1084</span>
|
|
<span class="normal">1085</span>
|
|
<span class="normal">1086</span>
|
|
<span class="normal">1087</span>
|
|
<span class="normal">1088</span>
|
|
<span class="normal">1089</span>
|
|
<span class="normal">1090</span>
|
|
<span class="normal">1091</span>
|
|
<span class="normal">1092</span>
|
|
<span class="normal">1093</span>
|
|
<span class="normal">1094</span>
|
|
<span class="normal">1095</span>
|
|
<span class="normal">1096</span>
|
|
<span class="normal">1097</span>
|
|
<span class="normal">1098</span>
|
|
<span class="normal">1099</span>
|
|
<span class="normal">1100</span>
|
|
<span class="normal">1101</span>
|
|
<span class="normal">1102</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Advances simulation by dt.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dt (float): Simulation step size (hours).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># dQ = self.heat_program.dQ(self.t, self.t+dt) # t, t+dt 사이 공급하는 열량, array 로 대체 필요</span>
|
|
|
|
<span class="c1"># t 에서 t+dt 까지 탄화실 가열</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">bake</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span>
|
|
|
|
<span class="n">period</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">charge_program</span><span class="o">.</span><span class="n">period</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">)</span> <span class="c1"># 현재 장입 시간 간격</span>
|
|
|
|
<span class="c1"># 마지막 장입탄 장입 시각</span>
|
|
<span class="n">latest_coke_charge</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">t_charge</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">processing</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">t_last</span>
|
|
|
|
<span class="c1"># t_last + period 가 t, t + dt 사이에 들어오는 것 검사</span>
|
|
<span class="c1"># t + dt 가 다음 추출/장입 시각 이후일 때 => 이번 time step 에 추출/장입을 실행해야함</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">+</span> <span class="n">dt</span> <span class="o">>=</span> <span class="n">period</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">t_last</span><span class="p">:</span>
|
|
<span class="c1"># 마지막 장입 시각 + 장입 시간 간격 이 이번 time step 에 포함됨</span>
|
|
<span class="c1"># 일정한 간격으로 장입 진행 중, 마지막 장입 시간 += 장입 간격</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">t_last</span> <span class="o">+</span> <span class="n">period</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_last</span> <span class="o">+=</span> <span class="n">period</span>
|
|
<span class="c1"># 마지막 장입 이후 현재 장입 간격보다 긴 시간이 경과함 (장입 간격이 짧아짐; 감산 끝남 등)</span>
|
|
<span class="c1"># 이번 time step 끝을 마지막 장입 시각으로 업데이트</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">+</span> <span class="n">dt</span>
|
|
|
|
<span class="c1"># 추출/장입 실행</span>
|
|
<span class="n">i_oven</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">next_oven</span><span class="p">()</span>
|
|
<span class="c1"># oven = self.ovens[i_oven]</span>
|
|
<span class="n">fresh_coal</span> <span class="o">=</span> <span class="n">CokeCharge</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">+</span> <span class="n">dt</span><span class="p">,</span> <span class="n">i_oven</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">push_and_charge</span><span class="p">(</span><span class="n">fresh_coal</span><span class="p">)</span>
|
|
|
|
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"On </span><span class="si">{</span><span class="n">i_oven</span><span class="si">}</span><span class="s2"> P/C within [ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="si">:</span><span class="s2">7.3</span><span class="si">}</span><span class="s2"> , </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">dt</span><span class="si">:</span><span class="s2">7.3</span><span class="si">}</span><span class="s2"> ]."</span><span class="p">,</span>
|
|
<span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">dt</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">latest_coke_charge</span><span class="si">:</span><span class="s2">7.3</span><span class="si">}</span><span class="s2"> since last P/C. "</span><span class="p">,</span>
|
|
<span class="sa">f</span><span class="s2">"period = </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">charge_program</span><span class="o">.</span><span class="n">period</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">)</span><span class="si">:</span><span class="s2">7.3</span><span class="si">}</span><span class="s2">"</span><span class="p">,)</span>
|
|
|
|
<span class="c1"># 시뮬레이션 시간 업데이트</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t</span> <span class="o">+=</span> <span class="n">dt</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas_t_history</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">,</span> <span class="p">[</span><span class="n">chmbr</span><span class="o">.</span><span class="n">T1</span> <span class="k">for</span> <span class="n">chmbr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">chambers</span><span class="p">]))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">wall_t_history</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">t</span><span class="p">,</span> <span class="p">[(</span><span class="n">wl</span><span class="o">.</span><span class="n">T_chamber</span><span class="p">,</span> <span class="n">wl</span><span class="o">.</span><span class="n">T_internal</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">wl</span><span class="o">.</span><span class="n">T_oven</span><span class="p">,</span> <span class="n">wu</span><span class="o">.</span><span class="n">T_oven</span><span class="p">,</span>
|
|
<span class="n">wu</span><span class="o">.</span><span class="n">T_internal</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">wu</span><span class="o">.</span><span class="n">T_chamber</span><span class="p">)</span> <span class="k">for</span> <span class="n">wl</span><span class="p">,</span> <span class="n">wu</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">walls_0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">walls_1</span><span class="p">)]))</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="Battery.ChargeSchedule" class="doc doc-heading">
|
|
<code>ChargeSchedule</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Represents the scheduling sequence of coal charging operations.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Attributes:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.ChargeSchedule.xp">xp</span></code></td>
|
|
<td>
|
|
<code><span title="numpy.ndarray">ndarray</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Charging program phase change hours.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.ChargeSchedule.fp">fp</span></code></td>
|
|
<td>
|
|
<code><span title="numpy.ndarray">ndarray</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Charging rates during phases.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.ChargeSchedule.f">f</span></code></td>
|
|
<td>
|
|
<code>callable</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Interpolation function mapping time -> charging rate.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1178</span>
|
|
<span class="normal">1179</span>
|
|
<span class="normal">1180</span>
|
|
<span class="normal">1181</span>
|
|
<span class="normal">1182</span>
|
|
<span class="normal">1183</span>
|
|
<span class="normal">1184</span>
|
|
<span class="normal">1185</span>
|
|
<span class="normal">1186</span>
|
|
<span class="normal">1187</span>
|
|
<span class="normal">1188</span>
|
|
<span class="normal">1189</span>
|
|
<span class="normal">1190</span>
|
|
<span class="normal">1191</span>
|
|
<span class="normal">1192</span>
|
|
<span class="normal">1193</span>
|
|
<span class="normal">1194</span>
|
|
<span class="normal">1195</span>
|
|
<span class="normal">1196</span>
|
|
<span class="normal">1197</span>
|
|
<span class="normal">1198</span>
|
|
<span class="normal">1199</span>
|
|
<span class="normal">1200</span>
|
|
<span class="normal">1201</span>
|
|
<span class="normal">1202</span>
|
|
<span class="normal">1203</span>
|
|
<span class="normal">1204</span>
|
|
<span class="normal">1205</span>
|
|
<span class="normal">1206</span>
|
|
<span class="normal">1207</span>
|
|
<span class="normal">1208</span>
|
|
<span class="normal">1209</span>
|
|
<span class="normal">1210</span>
|
|
<span class="normal">1211</span>
|
|
<span class="normal">1212</span>
|
|
<span class="normal">1213</span>
|
|
<span class="normal">1214</span>
|
|
<span class="normal">1215</span>
|
|
<span class="normal">1216</span>
|
|
<span class="normal">1217</span>
|
|
<span class="normal">1218</span>
|
|
<span class="normal">1219</span>
|
|
<span class="normal">1220</span>
|
|
<span class="normal">1221</span>
|
|
<span class="normal">1222</span>
|
|
<span class="normal">1223</span>
|
|
<span class="normal">1224</span>
|
|
<span class="normal">1225</span>
|
|
<span class="normal">1226</span>
|
|
<span class="normal">1227</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">ChargeSchedule</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Represents the scheduling sequence of coal charging operations.</span>
|
|
|
|
<span class="sd"> Attributes:</span>
|
|
<span class="sd"> xp (numpy.ndarray): Charging program phase change hours.</span>
|
|
<span class="sd"> fp (numpy.ndarray): Charging rates during phases.</span>
|
|
<span class="sd"> f (callable): Interpolation function mapping time -> charging rate.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">normal_load</span><span class="p">,</span> <span class="n">service_start</span><span class="p">,</span> <span class="n">service_time</span><span class="p">,</span> <span class="n">service_load</span><span class="p">,</span> <span class="n">aux_start</span><span class="p">,</span> <span class="n">aux_time</span><span class="p">,</span> <span class="n">aux_load</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes ChargeSchedule.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> normal_load (float): Baseline charging rate.</span>
|
|
<span class="sd"> service_start (float): Start hour for maintenance service.</span>
|
|
<span class="sd"> service_time (float): Duration of maintenance service (hours).</span>
|
|
<span class="sd"> service_load (float): Charging rate during maintenance.</span>
|
|
<span class="sd"> aux_start (float): Start hour for auxiliary service phase.</span>
|
|
<span class="sd"> aux_time (float): Duration of auxiliary phase (hours).</span>
|
|
<span class="sd"> aux_load (float): Charging rate during auxiliary phase.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">xp</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">service_start</span><span class="p">,</span> <span class="n">service_start</span><span class="p">,</span> <span class="n">service_start</span><span class="o">+</span><span class="n">service_time</span><span class="p">,</span> <span class="n">service_start</span><span class="o">+</span><span class="n">service_time</span><span class="p">,</span>
|
|
<span class="n">aux_start</span><span class="p">,</span> <span class="n">aux_start</span><span class="p">,</span> <span class="n">aux_start</span><span class="o">+</span><span class="n">aux_time</span><span class="p">,</span> <span class="n">aux_start</span><span class="o">+</span><span class="n">aux_time</span><span class="p">,</span> <span class="p">])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fp</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">normal_load</span><span class="p">,</span> <span class="n">service_load</span><span class="p">,</span> <span class="n">service_load</span><span class="p">,</span> <span class="n">normal_load</span><span class="p">,</span>
|
|
<span class="n">normal_load</span><span class="p">,</span> <span class="n">aux_load</span><span class="p">,</span> <span class="n">aux_load</span><span class="p">,</span> <span class="n">normal_load</span><span class="p">])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">f</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">interp</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">xp</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">to_charge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t0</span><span class="p">,</span> <span class="n">t1</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates cumulative coal units charged between t0 and t1.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t0 (float): Start time.</span>
|
|
<span class="sd"> t1 (float): End time.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Total units charged.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># (Note: 'x' is not defined here in original, keeping it as is to preserve original logic)</span>
|
|
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">trapz</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">x</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">period</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates the time interval between subsequent charges.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Current time (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Time period (hours).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="mi">24</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">f</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.ChargeSchedule.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">normal_load</span><span class="p">,</span> <span class="n">service_start</span><span class="p">,</span> <span class="n">service_time</span><span class="p">,</span> <span class="n">service_load</span><span class="p">,</span> <span class="n">aux_start</span><span class="p">,</span> <span class="n">aux_time</span><span class="p">,</span> <span class="n">aux_load</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes ChargeSchedule.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>normal_load</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Baseline charging rate.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>service_start</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Start hour for maintenance service.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>service_time</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Duration of maintenance service (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>service_load</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Charging rate during maintenance.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>aux_start</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Start hour for auxiliary service phase.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>aux_time</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Duration of auxiliary phase (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>aux_load</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Charging rate during auxiliary phase.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1187</span>
|
|
<span class="normal">1188</span>
|
|
<span class="normal">1189</span>
|
|
<span class="normal">1190</span>
|
|
<span class="normal">1191</span>
|
|
<span class="normal">1192</span>
|
|
<span class="normal">1193</span>
|
|
<span class="normal">1194</span>
|
|
<span class="normal">1195</span>
|
|
<span class="normal">1196</span>
|
|
<span class="normal">1197</span>
|
|
<span class="normal">1198</span>
|
|
<span class="normal">1199</span>
|
|
<span class="normal">1200</span>
|
|
<span class="normal">1201</span>
|
|
<span class="normal">1202</span>
|
|
<span class="normal">1203</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">normal_load</span><span class="p">,</span> <span class="n">service_start</span><span class="p">,</span> <span class="n">service_time</span><span class="p">,</span> <span class="n">service_load</span><span class="p">,</span> <span class="n">aux_start</span><span class="p">,</span> <span class="n">aux_time</span><span class="p">,</span> <span class="n">aux_load</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes ChargeSchedule.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> normal_load (float): Baseline charging rate.</span>
|
|
<span class="sd"> service_start (float): Start hour for maintenance service.</span>
|
|
<span class="sd"> service_time (float): Duration of maintenance service (hours).</span>
|
|
<span class="sd"> service_load (float): Charging rate during maintenance.</span>
|
|
<span class="sd"> aux_start (float): Start hour for auxiliary service phase.</span>
|
|
<span class="sd"> aux_time (float): Duration of auxiliary phase (hours).</span>
|
|
<span class="sd"> aux_load (float): Charging rate during auxiliary phase.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">xp</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">service_start</span><span class="p">,</span> <span class="n">service_start</span><span class="p">,</span> <span class="n">service_start</span><span class="o">+</span><span class="n">service_time</span><span class="p">,</span> <span class="n">service_start</span><span class="o">+</span><span class="n">service_time</span><span class="p">,</span>
|
|
<span class="n">aux_start</span><span class="p">,</span> <span class="n">aux_start</span><span class="p">,</span> <span class="n">aux_start</span><span class="o">+</span><span class="n">aux_time</span><span class="p">,</span> <span class="n">aux_start</span><span class="o">+</span><span class="n">aux_time</span><span class="p">,</span> <span class="p">])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fp</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">normal_load</span><span class="p">,</span> <span class="n">service_load</span><span class="p">,</span> <span class="n">service_load</span><span class="p">,</span> <span class="n">normal_load</span><span class="p">,</span>
|
|
<span class="n">normal_load</span><span class="p">,</span> <span class="n">aux_load</span><span class="p">,</span> <span class="n">aux_load</span><span class="p">,</span> <span class="n">normal_load</span><span class="p">])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">f</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">interp</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">xp</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.ChargeSchedule.period" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">period</span><span class="p">(</span><span class="n">t</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Calculates the time interval between subsequent charges.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>t</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Current time (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>float</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Time period (hours).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1218</span>
|
|
<span class="normal">1219</span>
|
|
<span class="normal">1220</span>
|
|
<span class="normal">1221</span>
|
|
<span class="normal">1222</span>
|
|
<span class="normal">1223</span>
|
|
<span class="normal">1224</span>
|
|
<span class="normal">1225</span>
|
|
<span class="normal">1226</span>
|
|
<span class="normal">1227</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">period</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates the time interval between subsequent charges.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Current time (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Time period (hours).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="mi">24</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">f</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.ChargeSchedule.to_charge" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">to_charge</span><span class="p">(</span><span class="n">t0</span><span class="p">,</span> <span class="n">t1</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Calculates cumulative coal units charged between t0 and t1.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>t0</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Start time.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>t1</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>End time.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>float</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Total units charged.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1205</span>
|
|
<span class="normal">1206</span>
|
|
<span class="normal">1207</span>
|
|
<span class="normal">1208</span>
|
|
<span class="normal">1209</span>
|
|
<span class="normal">1210</span>
|
|
<span class="normal">1211</span>
|
|
<span class="normal">1212</span>
|
|
<span class="normal">1213</span>
|
|
<span class="normal">1214</span>
|
|
<span class="normal">1215</span>
|
|
<span class="normal">1216</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">to_charge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t0</span><span class="p">,</span> <span class="n">t1</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates cumulative coal units charged between t0 and t1.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t0 (float): Start time.</span>
|
|
<span class="sd"> t1 (float): End time.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Total units charged.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># (Note: 'x' is not defined here in original, keeping it as is to preserve original logic)</span>
|
|
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">trapz</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">x</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="Battery.CokeCharge" class="doc doc-heading">
|
|
<code>CokeCharge</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Represents a single coal/coke charge inside an oven.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Attributes:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CokeCharge.t_charge">t_charge</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Simulation timestamp when coal was charged (hours).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CokeCharge.t_push">t_push</span></code></td>
|
|
<td>
|
|
<code>float or None</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Simulation timestamp when coke was pushed (hours).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CokeCharge.idx_oven">idx_oven</span></code></td>
|
|
<td>
|
|
<code>int</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Index of the oven this charge belongs to.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CokeCharge.Q">Q</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Total heat absorbed by this charge (J).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">199</span>
|
|
<span class="normal">200</span>
|
|
<span class="normal">201</span>
|
|
<span class="normal">202</span>
|
|
<span class="normal">203</span>
|
|
<span class="normal">204</span>
|
|
<span class="normal">205</span>
|
|
<span class="normal">206</span>
|
|
<span class="normal">207</span>
|
|
<span class="normal">208</span>
|
|
<span class="normal">209</span>
|
|
<span class="normal">210</span>
|
|
<span class="normal">211</span>
|
|
<span class="normal">212</span>
|
|
<span class="normal">213</span>
|
|
<span class="normal">214</span>
|
|
<span class="normal">215</span>
|
|
<span class="normal">216</span>
|
|
<span class="normal">217</span>
|
|
<span class="normal">218</span>
|
|
<span class="normal">219</span>
|
|
<span class="normal">220</span>
|
|
<span class="normal">221</span>
|
|
<span class="normal">222</span>
|
|
<span class="normal">223</span>
|
|
<span class="normal">224</span>
|
|
<span class="normal">225</span>
|
|
<span class="normal">226</span>
|
|
<span class="normal">227</span>
|
|
<span class="normal">228</span>
|
|
<span class="normal">229</span>
|
|
<span class="normal">230</span>
|
|
<span class="normal">231</span>
|
|
<span class="normal">232</span>
|
|
<span class="normal">233</span>
|
|
<span class="normal">234</span>
|
|
<span class="normal">235</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">CokeCharge</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Represents a single coal/coke charge inside an oven.</span>
|
|
|
|
<span class="sd"> Attributes:</span>
|
|
<span class="sd"> t_charge (float): Simulation timestamp when coal was charged (hours).</span>
|
|
<span class="sd"> t_push (float or None): Simulation timestamp when coke was pushed (hours).</span>
|
|
<span class="sd"> idx_oven (int): Index of the oven this charge belongs to.</span>
|
|
<span class="sd"> Q (float): Total heat absorbed by this charge (J).</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t_charge</span><span class="p">,</span> <span class="n">idx_oven</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes CokeCharge.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t_charge (float): Time of charging.</span>
|
|
<span class="sd"> idx_oven (int): Target oven index.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_charge</span> <span class="o">=</span> <span class="n">t_charge</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_push</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">idx_oven</span> <span class="o">=</span> <span class="n">idx_oven</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Q</span> <span class="o">=</span> <span class="mi">0</span>
|
|
|
|
<span class="k">def</span> <span class="nf">bake</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dQ</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Applies a increment of thermal energy to the charge.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dQ (float): Energy increment (J).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Q</span> <span class="o">+=</span> <span class="n">dQ</span>
|
|
|
|
<span class="k">def</span> <span class="nf">end_baking</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Finalizes the charge lifecycle at push time.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Pushing time (hours).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_push</span> <span class="o">=</span> <span class="n">t</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.CokeCharge.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">t_charge</span><span class="p">,</span> <span class="n">idx_oven</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes CokeCharge.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>t_charge</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Time of charging.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>idx_oven</code></td>
|
|
<td>
|
|
<code>int</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Target oven index.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">209</span>
|
|
<span class="normal">210</span>
|
|
<span class="normal">211</span>
|
|
<span class="normal">212</span>
|
|
<span class="normal">213</span>
|
|
<span class="normal">214</span>
|
|
<span class="normal">215</span>
|
|
<span class="normal">216</span>
|
|
<span class="normal">217</span>
|
|
<span class="normal">218</span>
|
|
<span class="normal">219</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t_charge</span><span class="p">,</span> <span class="n">idx_oven</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes CokeCharge.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t_charge (float): Time of charging.</span>
|
|
<span class="sd"> idx_oven (int): Target oven index.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_charge</span> <span class="o">=</span> <span class="n">t_charge</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_push</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">idx_oven</span> <span class="o">=</span> <span class="n">idx_oven</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Q</span> <span class="o">=</span> <span class="mi">0</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.CokeCharge.bake" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">bake</span><span class="p">(</span><span class="n">dQ</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Applies a increment of thermal energy to the charge.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>dQ</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Energy increment (J).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">221</span>
|
|
<span class="normal">222</span>
|
|
<span class="normal">223</span>
|
|
<span class="normal">224</span>
|
|
<span class="normal">225</span>
|
|
<span class="normal">226</span>
|
|
<span class="normal">227</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">bake</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dQ</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Applies a increment of thermal energy to the charge.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dQ (float): Energy increment (J).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Q</span> <span class="o">+=</span> <span class="n">dQ</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.CokeCharge.end_baking" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">end_baking</span><span class="p">(</span><span class="n">t</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Finalizes the charge lifecycle at push time.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>t</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Pushing time (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">229</span>
|
|
<span class="normal">230</span>
|
|
<span class="normal">231</span>
|
|
<span class="normal">232</span>
|
|
<span class="normal">233</span>
|
|
<span class="normal">234</span>
|
|
<span class="normal">235</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">end_baking</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Finalizes the charge lifecycle at push time.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Pushing time (hours).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">t_push</span> <span class="o">=</span> <span class="n">t</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="Battery.CokeOvenBrickHeatEqn" class="doc doc-heading">
|
|
<code>CokeOvenBrickHeatEqn</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
<p class="doc doc-class-bases">
|
|
Bases: <code><a class="autorefs autorefs-internal" title="Battery.CokeOvenBrickHeatEqnBase" href="#Battery.CokeOvenBrickHeatEqnBase">CokeOvenBrickHeatEqnBase</a></code></p>
|
|
|
|
|
|
<p>Fallback heat equation model without py-pde dependencies.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">386</span>
|
|
<span class="normal">387</span>
|
|
<span class="normal">388</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">CokeOvenBrickHeatEqn</span><span class="p">(</span><span class="n">CokeOvenBrickHeatEqnBase</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Fallback heat equation model without py-pde dependencies."""</span>
|
|
<span class="k">pass</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="Battery.CokeOvenBrickHeatEqnBase" class="doc doc-heading">
|
|
<code>CokeOvenBrickHeatEqnBase</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Base class defining physical parameters for the brick wall heat equation.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Attributes:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CokeOvenBrickHeatEqnBase.bc">bc</span></code></td>
|
|
<td>
|
|
<code>list</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Boundary conditions.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CokeOvenBrickHeatEqnBase.rho">rho</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Density of refractory brick (kg/m3).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CokeOvenBrickHeatEqnBase.kCoef0">kCoef0</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Constant coefficient of thermal conductivity (W/m/K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CokeOvenBrickHeatEqnBase.kCoef1">kCoef1</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Temperature coefficient of thermal conductivity (W/m/K2).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CokeOvenBrickHeatEqnBase.cpCoef0">cpCoef0</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Constant coefficient of specific heat (J/kg/K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CokeOvenBrickHeatEqnBase.cpCoef1">cpCoef1</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Temperature coefficient of specific heat (J/kg/K2).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">296</span>
|
|
<span class="normal">297</span>
|
|
<span class="normal">298</span>
|
|
<span class="normal">299</span>
|
|
<span class="normal">300</span>
|
|
<span class="normal">301</span>
|
|
<span class="normal">302</span>
|
|
<span class="normal">303</span>
|
|
<span class="normal">304</span>
|
|
<span class="normal">305</span>
|
|
<span class="normal">306</span>
|
|
<span class="normal">307</span>
|
|
<span class="normal">308</span>
|
|
<span class="normal">309</span>
|
|
<span class="normal">310</span>
|
|
<span class="normal">311</span>
|
|
<span class="normal">312</span>
|
|
<span class="normal">313</span>
|
|
<span class="normal">314</span>
|
|
<span class="normal">315</span>
|
|
<span class="normal">316</span>
|
|
<span class="normal">317</span>
|
|
<span class="normal">318</span>
|
|
<span class="normal">319</span>
|
|
<span class="normal">320</span>
|
|
<span class="normal">321</span>
|
|
<span class="normal">322</span>
|
|
<span class="normal">323</span>
|
|
<span class="normal">324</span>
|
|
<span class="normal">325</span>
|
|
<span class="normal">326</span>
|
|
<span class="normal">327</span>
|
|
<span class="normal">328</span>
|
|
<span class="normal">329</span>
|
|
<span class="normal">330</span>
|
|
<span class="normal">331</span>
|
|
<span class="normal">332</span>
|
|
<span class="normal">333</span>
|
|
<span class="normal">334</span>
|
|
<span class="normal">335</span>
|
|
<span class="normal">336</span>
|
|
<span class="normal">337</span>
|
|
<span class="normal">338</span>
|
|
<span class="normal">339</span>
|
|
<span class="normal">340</span>
|
|
<span class="normal">341</span>
|
|
<span class="normal">342</span>
|
|
<span class="normal">343</span>
|
|
<span class="normal">344</span>
|
|
<span class="normal">345</span>
|
|
<span class="normal">346</span>
|
|
<span class="normal">347</span>
|
|
<span class="normal">348</span>
|
|
<span class="normal">349</span>
|
|
<span class="normal">350</span>
|
|
<span class="normal">351</span>
|
|
<span class="normal">352</span>
|
|
<span class="normal">353</span>
|
|
<span class="normal">354</span>
|
|
<span class="normal">355</span>
|
|
<span class="normal">356</span>
|
|
<span class="normal">357</span>
|
|
<span class="normal">358</span>
|
|
<span class="normal">359</span>
|
|
<span class="normal">360</span>
|
|
<span class="normal">361</span>
|
|
<span class="normal">362</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">CokeOvenBrickHeatEqnBase</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Base class defining physical parameters for the brick wall heat equation.</span>
|
|
|
|
<span class="sd"> Attributes:</span>
|
|
<span class="sd"> bc (list): Boundary conditions.</span>
|
|
<span class="sd"> rho (float): Density of refractory brick (kg/m3).</span>
|
|
<span class="sd"> kCoef0 (float): Constant coefficient of thermal conductivity (W/m/K).</span>
|
|
<span class="sd"> kCoef1 (float): Temperature coefficient of thermal conductivity (W/m/K2).</span>
|
|
<span class="sd"> cpCoef0 (float): Constant coefficient of specific heat (J/kg/K).</span>
|
|
<span class="sd"> cpCoef1 (float): Temperature coefficient of specific heat (J/kg/K2).</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bc</span><span class="o">=</span><span class="s2">"auto_periodic_neumann"</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes CokeOvenBrickHeatEqnBase.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> bc (str or list, optional): Boundary conditions description.</span>
|
|
<span class="sd"> Defaults to "auto_periodic_neumann".</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">if</span> <span class="n">bc</span> <span class="o">==</span> <span class="s2">"auto_periodic_neumann"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">bc</span> <span class="o">=</span> <span class="p">[{</span><span class="s2">"derivative"</span><span class="p">:</span> <span class="mf">0.0</span><span class="p">},</span> <span class="p">{</span><span class="s2">"value"</span><span class="p">:</span> <span class="mf">0.0</span><span class="p">}]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">bc</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">bc</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">rho</span> <span class="o">=</span> <span class="mi">1900</span> <span class="c1"># kg / m3</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">kCoef0</span> <span class="o">=</span> <span class="mf">0.93</span> <span class="c1"># W / m / K</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">kCoef1</span> <span class="o">=</span> <span class="mf">0.698e-3</span> <span class="c1"># W / m / K2</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">cpCoef0</span> <span class="o">=</span> <span class="mf">837.2</span> <span class="c1"># J / kg / K</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">cpCoef1</span> <span class="o">=</span> <span class="mf">251.2e-3</span> <span class="c1"># J / kg / K2</span>
|
|
|
|
<span class="k">def</span> <span class="nf">k</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">T</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates temperature-dependent thermal conductivity.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> T (float or numpy.ndarray): Temperature (K).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float or numpy.ndarray: Thermal conductivity (W/m/K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">T</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">kCoef1</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">kCoef0</span>
|
|
|
|
<span class="k">def</span> <span class="nf">cp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">T</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates temperature-dependent specific heat capacity.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> T (float or numpy.ndarray): Temperature (K).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float or numpy.ndarray: Specific heat capacity (J/kg/K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">T</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">cpCoef1</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">cpCoef0</span>
|
|
|
|
<span class="k">def</span> <span class="nf">update_bc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gradT_chamber</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">T_oven</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Updates boundary condition parameters.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> gradT_chamber (float, optional): Temperature gradient at chamber side.</span>
|
|
<span class="sd"> T_oven (float, optional): Oven side boundary temperature (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">gradT_chamber</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">bc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"derivative"</span><span class="p">:</span> <span class="n">gradT_chamber</span><span class="p">}</span>
|
|
<span class="k">if</span> <span class="n">T_oven</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">bc</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"value"</span><span class="p">:</span> <span class="n">T_oven</span><span class="p">}</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.CokeOvenBrickHeatEqnBase.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">bc</span><span class="o">=</span><span class="s1">'auto_periodic_neumann'</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes CokeOvenBrickHeatEqnBase.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>bc</code></td>
|
|
<td>
|
|
<code>str or list</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Boundary conditions description.
|
|
Defaults to "auto_periodic_neumann".</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>'auto_periodic_neumann'</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">308</span>
|
|
<span class="normal">309</span>
|
|
<span class="normal">310</span>
|
|
<span class="normal">311</span>
|
|
<span class="normal">312</span>
|
|
<span class="normal">313</span>
|
|
<span class="normal">314</span>
|
|
<span class="normal">315</span>
|
|
<span class="normal">316</span>
|
|
<span class="normal">317</span>
|
|
<span class="normal">318</span>
|
|
<span class="normal">319</span>
|
|
<span class="normal">320</span>
|
|
<span class="normal">321</span>
|
|
<span class="normal">322</span>
|
|
<span class="normal">323</span>
|
|
<span class="normal">324</span>
|
|
<span class="normal">325</span>
|
|
<span class="normal">326</span>
|
|
<span class="normal">327</span>
|
|
<span class="normal">328</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bc</span><span class="o">=</span><span class="s2">"auto_periodic_neumann"</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes CokeOvenBrickHeatEqnBase.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> bc (str or list, optional): Boundary conditions description.</span>
|
|
<span class="sd"> Defaults to "auto_periodic_neumann".</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">if</span> <span class="n">bc</span> <span class="o">==</span> <span class="s2">"auto_periodic_neumann"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">bc</span> <span class="o">=</span> <span class="p">[{</span><span class="s2">"derivative"</span><span class="p">:</span> <span class="mf">0.0</span><span class="p">},</span> <span class="p">{</span><span class="s2">"value"</span><span class="p">:</span> <span class="mf">0.0</span><span class="p">}]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">bc</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">bc</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">rho</span> <span class="o">=</span> <span class="mi">1900</span> <span class="c1"># kg / m3</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">kCoef0</span> <span class="o">=</span> <span class="mf">0.93</span> <span class="c1"># W / m / K</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">kCoef1</span> <span class="o">=</span> <span class="mf">0.698e-3</span> <span class="c1"># W / m / K2</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">cpCoef0</span> <span class="o">=</span> <span class="mf">837.2</span> <span class="c1"># J / kg / K</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">cpCoef1</span> <span class="o">=</span> <span class="mf">251.2e-3</span> <span class="c1"># J / kg / K2</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.CokeOvenBrickHeatEqnBase.cp" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">cp</span><span class="p">(</span><span class="n">T</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Calculates temperature-dependent specific heat capacity.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>T</code></td>
|
|
<td>
|
|
<code>float or <span title="numpy.ndarray">ndarray</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Temperature (K).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>float or numpy.ndarray: Specific heat capacity (J/kg/K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">341</span>
|
|
<span class="normal">342</span>
|
|
<span class="normal">343</span>
|
|
<span class="normal">344</span>
|
|
<span class="normal">345</span>
|
|
<span class="normal">346</span>
|
|
<span class="normal">347</span>
|
|
<span class="normal">348</span>
|
|
<span class="normal">349</span>
|
|
<span class="normal">350</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">cp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">T</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates temperature-dependent specific heat capacity.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> T (float or numpy.ndarray): Temperature (K).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float or numpy.ndarray: Specific heat capacity (J/kg/K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">T</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">cpCoef1</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">cpCoef0</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.CokeOvenBrickHeatEqnBase.k" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">k</span><span class="p">(</span><span class="n">T</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Calculates temperature-dependent thermal conductivity.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>T</code></td>
|
|
<td>
|
|
<code>float or <span title="numpy.ndarray">ndarray</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Temperature (K).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>float or numpy.ndarray: Thermal conductivity (W/m/K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">330</span>
|
|
<span class="normal">331</span>
|
|
<span class="normal">332</span>
|
|
<span class="normal">333</span>
|
|
<span class="normal">334</span>
|
|
<span class="normal">335</span>
|
|
<span class="normal">336</span>
|
|
<span class="normal">337</span>
|
|
<span class="normal">338</span>
|
|
<span class="normal">339</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">k</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">T</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates temperature-dependent thermal conductivity.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> T (float or numpy.ndarray): Temperature (K).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float or numpy.ndarray: Thermal conductivity (W/m/K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">T</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">kCoef1</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">kCoef0</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.CokeOvenBrickHeatEqnBase.update_bc" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">update_bc</span><span class="p">(</span><span class="n">gradT_chamber</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">T_oven</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Updates boundary condition parameters.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>gradT_chamber</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Temperature gradient at chamber side.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>T_oven</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Oven side boundary temperature (K).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">352</span>
|
|
<span class="normal">353</span>
|
|
<span class="normal">354</span>
|
|
<span class="normal">355</span>
|
|
<span class="normal">356</span>
|
|
<span class="normal">357</span>
|
|
<span class="normal">358</span>
|
|
<span class="normal">359</span>
|
|
<span class="normal">360</span>
|
|
<span class="normal">361</span>
|
|
<span class="normal">362</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">update_bc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gradT_chamber</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">T_oven</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Updates boundary condition parameters.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> gradT_chamber (float, optional): Temperature gradient at chamber side.</span>
|
|
<span class="sd"> T_oven (float, optional): Oven side boundary temperature (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">gradT_chamber</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">bc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"derivative"</span><span class="p">:</span> <span class="n">gradT_chamber</span><span class="p">}</span>
|
|
<span class="k">if</span> <span class="n">T_oven</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">bc</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"value"</span><span class="p">:</span> <span class="n">T_oven</span><span class="p">}</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="Battery.CombustionChamber" class="doc doc-heading">
|
|
<code>CombustionChamber</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Represents a combustion chamber in the coke oven battery.</p>
|
|
<p>This class models the steady-state thermal energy balance of combustion gases
|
|
flowing through the heating flues (chambers) adjacent to the ovens.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Attributes:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CombustionChamber.mdot">mdot</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Mass flow rate of fuel-air mixture (kg/s).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CombustionChamber.gas">gas</span></code></td>
|
|
<td>
|
|
<code><span title="cantera.Solution">Solution</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Cantera gas object.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CombustionChamber.eq_state">eq_state</span></code></td>
|
|
<td>
|
|
<code>tuple</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Thermodynamic state (T, P, X) of burned gas.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CombustionChamber.T0">T0</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Adiabatic flame temperature (K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CombustionChamber.P0">P0</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Operating pressure (Pa).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CombustionChamber.X0">X0</span></code></td>
|
|
<td>
|
|
<code>dict / array</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Fuel-air mole fractions.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CombustionChamber.h0">h0</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Inlet enthalpy of the gas (J/kg).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CombustionChamber.hA">hA</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Heat transfer coefficient times area (W/K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CombustionChamber.T1">T1</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Outlet gas temperature (K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CombustionChamber.Twall0">Twall0</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Temperature of the lower wall (K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CombustionChamber.Twall1">Twall1</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Temperature of the upper wall (K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.CombustionChamber.Area">Area</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Oven cross section area (m^2).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 28</span>
|
|
<span class="normal"> 29</span>
|
|
<span class="normal"> 30</span>
|
|
<span class="normal"> 31</span>
|
|
<span class="normal"> 32</span>
|
|
<span class="normal"> 33</span>
|
|
<span class="normal"> 34</span>
|
|
<span class="normal"> 35</span>
|
|
<span class="normal"> 36</span>
|
|
<span class="normal"> 37</span>
|
|
<span class="normal"> 38</span>
|
|
<span class="normal"> 39</span>
|
|
<span class="normal"> 40</span>
|
|
<span class="normal"> 41</span>
|
|
<span class="normal"> 42</span>
|
|
<span class="normal"> 43</span>
|
|
<span class="normal"> 44</span>
|
|
<span class="normal"> 45</span>
|
|
<span class="normal"> 46</span>
|
|
<span class="normal"> 47</span>
|
|
<span class="normal"> 48</span>
|
|
<span class="normal"> 49</span>
|
|
<span class="normal"> 50</span>
|
|
<span class="normal"> 51</span>
|
|
<span class="normal"> 52</span>
|
|
<span class="normal"> 53</span>
|
|
<span class="normal"> 54</span>
|
|
<span class="normal"> 55</span>
|
|
<span class="normal"> 56</span>
|
|
<span class="normal"> 57</span>
|
|
<span class="normal"> 58</span>
|
|
<span class="normal"> 59</span>
|
|
<span class="normal"> 60</span>
|
|
<span class="normal"> 61</span>
|
|
<span class="normal"> 62</span>
|
|
<span class="normal"> 63</span>
|
|
<span class="normal"> 64</span>
|
|
<span class="normal"> 65</span>
|
|
<span class="normal"> 66</span>
|
|
<span class="normal"> 67</span>
|
|
<span class="normal"> 68</span>
|
|
<span class="normal"> 69</span>
|
|
<span class="normal"> 70</span>
|
|
<span class="normal"> 71</span>
|
|
<span class="normal"> 72</span>
|
|
<span class="normal"> 73</span>
|
|
<span class="normal"> 74</span>
|
|
<span class="normal"> 75</span>
|
|
<span class="normal"> 76</span>
|
|
<span class="normal"> 77</span>
|
|
<span class="normal"> 78</span>
|
|
<span class="normal"> 79</span>
|
|
<span class="normal"> 80</span>
|
|
<span class="normal"> 81</span>
|
|
<span class="normal"> 82</span>
|
|
<span class="normal"> 83</span>
|
|
<span class="normal"> 84</span>
|
|
<span class="normal"> 85</span>
|
|
<span class="normal"> 86</span>
|
|
<span class="normal"> 87</span>
|
|
<span class="normal"> 88</span>
|
|
<span class="normal"> 89</span>
|
|
<span class="normal"> 90</span>
|
|
<span class="normal"> 91</span>
|
|
<span class="normal"> 92</span>
|
|
<span class="normal"> 93</span>
|
|
<span class="normal"> 94</span>
|
|
<span class="normal"> 95</span>
|
|
<span class="normal"> 96</span>
|
|
<span class="normal"> 97</span>
|
|
<span class="normal"> 98</span>
|
|
<span class="normal"> 99</span>
|
|
<span class="normal">100</span>
|
|
<span class="normal">101</span>
|
|
<span class="normal">102</span>
|
|
<span class="normal">103</span>
|
|
<span class="normal">104</span>
|
|
<span class="normal">105</span>
|
|
<span class="normal">106</span>
|
|
<span class="normal">107</span>
|
|
<span class="normal">108</span>
|
|
<span class="normal">109</span>
|
|
<span class="normal">110</span>
|
|
<span class="normal">111</span>
|
|
<span class="normal">112</span>
|
|
<span class="normal">113</span>
|
|
<span class="normal">114</span>
|
|
<span class="normal">115</span>
|
|
<span class="normal">116</span>
|
|
<span class="normal">117</span>
|
|
<span class="normal">118</span>
|
|
<span class="normal">119</span>
|
|
<span class="normal">120</span>
|
|
<span class="normal">121</span>
|
|
<span class="normal">122</span>
|
|
<span class="normal">123</span>
|
|
<span class="normal">124</span>
|
|
<span class="normal">125</span>
|
|
<span class="normal">126</span>
|
|
<span class="normal">127</span>
|
|
<span class="normal">128</span>
|
|
<span class="normal">129</span>
|
|
<span class="normal">130</span>
|
|
<span class="normal">131</span>
|
|
<span class="normal">132</span>
|
|
<span class="normal">133</span>
|
|
<span class="normal">134</span>
|
|
<span class="normal">135</span>
|
|
<span class="normal">136</span>
|
|
<span class="normal">137</span>
|
|
<span class="normal">138</span>
|
|
<span class="normal">139</span>
|
|
<span class="normal">140</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">CombustionChamber</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Represents a combustion chamber in the coke oven battery.</span>
|
|
|
|
<span class="sd"> This class models the steady-state thermal energy balance of combustion gases</span>
|
|
<span class="sd"> flowing through the heating flues (chambers) adjacent to the ovens.</span>
|
|
|
|
<span class="sd"> Attributes:</span>
|
|
<span class="sd"> mdot (float): Mass flow rate of fuel-air mixture (kg/s).</span>
|
|
<span class="sd"> gas (cantera.Solution): Cantera gas object.</span>
|
|
<span class="sd"> eq_state (tuple): Thermodynamic state (T, P, X) of burned gas.</span>
|
|
<span class="sd"> T0 (float): Adiabatic flame temperature (K).</span>
|
|
<span class="sd"> P0 (float): Operating pressure (Pa).</span>
|
|
<span class="sd"> X0 (dict/array): Fuel-air mole fractions.</span>
|
|
<span class="sd"> h0 (float): Inlet enthalpy of the gas (J/kg).</span>
|
|
<span class="sd"> hA (float): Heat transfer coefficient times area (W/K).</span>
|
|
<span class="sd"> T1 (float): Outlet gas temperature (K).</span>
|
|
<span class="sd"> Twall0 (float): Temperature of the lower wall (K).</span>
|
|
<span class="sd"> Twall1 (float): Temperature of the upper wall (K).</span>
|
|
<span class="sd"> Area (float): Oven cross section area (m^2).</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mdot</span><span class="p">,</span> <span class="n">ct_object</span><span class="p">,</span> <span class="n">burned_state</span><span class="p">,</span> <span class="n">hA</span><span class="o">=</span><span class="mi">700</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes the CombustionChamber.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> mdot (float): Mass flow rate (kg/s).</span>
|
|
<span class="sd"> ct_object (cantera.Solution): Instantiated Cantera Solution object.</span>
|
|
<span class="sd"> burned_state (tuple): State variables (T, P, X) representing burned gas.</span>
|
|
<span class="sd"> hA (float, optional): Heat transfer coefficient * area. Defaults to 700.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">mdot</span> <span class="o">=</span> <span class="n">mdot</span> <span class="c1"># kg/s</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span> <span class="o">=</span> <span class="n">ct_object</span> <span class="c1"># gas object</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">eq_state</span> <span class="o">=</span> <span class="n">burned_state</span> <span class="c1"># HP equilibrium state</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TPX</span> <span class="o">=</span> <span class="n">burned_state</span> <span class="c1"># Set equilibrium state</span>
|
|
<span class="n">T0</span><span class="p">,</span> <span class="n">P0</span><span class="p">,</span> <span class="n">X0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TPX</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T0</span> <span class="o">=</span> <span class="n">T0</span> <span class="c1"># K, adiabatic flame temperature</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">P0</span> <span class="o">=</span> <span class="n">P0</span> <span class="c1"># Pa, pressure</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">X0</span> <span class="o">=</span> <span class="n">X0</span> <span class="c1"># Composition in mole fractions, Fuel + Air</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">h0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">enthalpy_mass</span> <span class="c1"># inlet enthalpy</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">hA</span> <span class="o">=</span> <span class="n">hA</span> <span class="c1"># HTC x Area</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T1</span> <span class="o">=</span> <span class="n">T0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Twall0</span> <span class="o">=</span> <span class="mi">1100</span> <span class="o">+</span> <span class="mf">273.15</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Twall1</span> <span class="o">=</span> <span class="mi">1100</span> <span class="o">+</span> <span class="mf">273.15</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Area</span> <span class="o">=</span> <span class="mf">6.7</span> <span class="o">*</span> <span class="mf">16.7</span>
|
|
|
|
<span class="k">def</span> <span class="nf">update_mdot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mdot_new</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Updates the mass flow rate if a new value is provided.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> mdot_new (float): The new mass flow rate (kg/s).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">mdot_new</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">mdot</span> <span class="o">=</span> <span class="n">mdot_new</span>
|
|
|
|
<span class="k">def</span> <span class="nf">update_Twall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">Twall0</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">Twall1</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Updates the boundary wall temperatures.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> Twall0 (float, optional): Lower wall temperature (K).</span>
|
|
<span class="sd"> Twall1 (float, optional): Upper wall temperature (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">Twall0</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Twall0</span> <span class="o">=</span> <span class="n">Twall0</span>
|
|
<span class="k">if</span> <span class="n">Twall1</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Twall1</span> <span class="o">=</span> <span class="n">Twall1</span>
|
|
|
|
<span class="k">def</span> <span class="nf">energy_balance_equation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">Tout</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates the residual energy imbalance for root-finding.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> Tout (float): Guessed outlet gas temperature (K).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Energy balance residual (W).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TP</span> <span class="o">=</span> <span class="n">Tout</span><span class="p">,</span> <span class="kc">None</span>
|
|
<span class="n">h1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">enthalpy_mass</span>
|
|
<span class="n">q1</span><span class="p">,</span> <span class="n">q2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">heat</span><span class="p">(</span><span class="n">Tout</span><span class="p">)</span>
|
|
|
|
<span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mdot</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">h0</span> <span class="o">-</span> <span class="n">h1</span><span class="p">)</span> <span class="o">-</span> <span class="n">q1</span> <span class="o">-</span> <span class="n">q2</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">solve</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Iteratively solves for the outlet temperature balancing heat loss to walls.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Resolved outlet temperature (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">meanTwall</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">Twall0</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">Twall1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span>
|
|
<span class="n">T_low</span> <span class="o">=</span> <span class="n">meanTwall</span> <span class="o">-</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">T0</span> <span class="o">-</span> <span class="n">meanTwall</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">f_found</span> <span class="o">=</span> <span class="n">optimize</span><span class="o">.</span><span class="n">root_scalar</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">energy_balance_equation</span><span class="p">,</span>
|
|
<span class="n">bracket</span><span class="o">=</span><span class="p">[</span><span class="n">T_low</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">T0</span><span class="p">])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T1</span> <span class="o">=</span> <span class="n">f_found</span><span class="o">.</span><span class="n">root</span>
|
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T1</span> <span class="o">=</span> <span class="n">meanTwall</span>
|
|
<span class="k">return</span> <span class="n">meanTwall</span>
|
|
|
|
<span class="k">return</span> <span class="n">f_found</span><span class="o">.</span><span class="n">root</span>
|
|
|
|
<span class="k">def</span> <span class="nf">heat</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">Tout</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates the heat transfer rate to the walls.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> Tout (float, optional): Outlet gas temperature (K). If None, uses T1.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: Heat transfer rates (q0, q1) to the lower and upper walls (W).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">Tout</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">Tout</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">T1</span>
|
|
<span class="n">Tgas</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">T0</span> <span class="o">+</span> <span class="n">Tout</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span>
|
|
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">hA</span> <span class="o">*</span> <span class="p">(</span><span class="n">Tgas</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">Twall0</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">hA</span> <span class="o">*</span> <span class="p">(</span><span class="n">Tgas</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">Twall1</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.CombustionChamber.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">mdot</span><span class="p">,</span> <span class="n">ct_object</span><span class="p">,</span> <span class="n">burned_state</span><span class="p">,</span> <span class="n">hA</span><span class="o">=</span><span class="mi">700</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes the CombustionChamber.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>mdot</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Mass flow rate (kg/s).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>ct_object</code></td>
|
|
<td>
|
|
<code><span title="cantera.Solution">Solution</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Instantiated Cantera Solution object.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>burned_state</code></td>
|
|
<td>
|
|
<code>tuple</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>State variables (T, P, X) representing burned gas.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>hA</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Heat transfer coefficient * area. Defaults to 700.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>700</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">49</span>
|
|
<span class="normal">50</span>
|
|
<span class="normal">51</span>
|
|
<span class="normal">52</span>
|
|
<span class="normal">53</span>
|
|
<span class="normal">54</span>
|
|
<span class="normal">55</span>
|
|
<span class="normal">56</span>
|
|
<span class="normal">57</span>
|
|
<span class="normal">58</span>
|
|
<span class="normal">59</span>
|
|
<span class="normal">60</span>
|
|
<span class="normal">61</span>
|
|
<span class="normal">62</span>
|
|
<span class="normal">63</span>
|
|
<span class="normal">64</span>
|
|
<span class="normal">65</span>
|
|
<span class="normal">66</span>
|
|
<span class="normal">67</span>
|
|
<span class="normal">68</span>
|
|
<span class="normal">69</span>
|
|
<span class="normal">70</span>
|
|
<span class="normal">71</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mdot</span><span class="p">,</span> <span class="n">ct_object</span><span class="p">,</span> <span class="n">burned_state</span><span class="p">,</span> <span class="n">hA</span><span class="o">=</span><span class="mi">700</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes the CombustionChamber.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> mdot (float): Mass flow rate (kg/s).</span>
|
|
<span class="sd"> ct_object (cantera.Solution): Instantiated Cantera Solution object.</span>
|
|
<span class="sd"> burned_state (tuple): State variables (T, P, X) representing burned gas.</span>
|
|
<span class="sd"> hA (float, optional): Heat transfer coefficient * area. Defaults to 700.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">mdot</span> <span class="o">=</span> <span class="n">mdot</span> <span class="c1"># kg/s</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span> <span class="o">=</span> <span class="n">ct_object</span> <span class="c1"># gas object</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">eq_state</span> <span class="o">=</span> <span class="n">burned_state</span> <span class="c1"># HP equilibrium state</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TPX</span> <span class="o">=</span> <span class="n">burned_state</span> <span class="c1"># Set equilibrium state</span>
|
|
<span class="n">T0</span><span class="p">,</span> <span class="n">P0</span><span class="p">,</span> <span class="n">X0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TPX</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T0</span> <span class="o">=</span> <span class="n">T0</span> <span class="c1"># K, adiabatic flame temperature</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">P0</span> <span class="o">=</span> <span class="n">P0</span> <span class="c1"># Pa, pressure</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">X0</span> <span class="o">=</span> <span class="n">X0</span> <span class="c1"># Composition in mole fractions, Fuel + Air</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">h0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">enthalpy_mass</span> <span class="c1"># inlet enthalpy</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">hA</span> <span class="o">=</span> <span class="n">hA</span> <span class="c1"># HTC x Area</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T1</span> <span class="o">=</span> <span class="n">T0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Twall0</span> <span class="o">=</span> <span class="mi">1100</span> <span class="o">+</span> <span class="mf">273.15</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Twall1</span> <span class="o">=</span> <span class="mi">1100</span> <span class="o">+</span> <span class="mf">273.15</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Area</span> <span class="o">=</span> <span class="mf">6.7</span> <span class="o">*</span> <span class="mf">16.7</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.CombustionChamber.energy_balance_equation" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">energy_balance_equation</span><span class="p">(</span><span class="n">Tout</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Calculates the residual energy imbalance for root-finding.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>Tout</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Guessed outlet gas temperature (K).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>float</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Energy balance residual (W).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 94</span>
|
|
<span class="normal"> 95</span>
|
|
<span class="normal"> 96</span>
|
|
<span class="normal"> 97</span>
|
|
<span class="normal"> 98</span>
|
|
<span class="normal"> 99</span>
|
|
<span class="normal">100</span>
|
|
<span class="normal">101</span>
|
|
<span class="normal">102</span>
|
|
<span class="normal">103</span>
|
|
<span class="normal">104</span>
|
|
<span class="normal">105</span>
|
|
<span class="normal">106</span>
|
|
<span class="normal">107</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">energy_balance_equation</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">Tout</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates the residual energy imbalance for root-finding.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> Tout (float): Guessed outlet gas temperature (K).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Energy balance residual (W).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">TP</span> <span class="o">=</span> <span class="n">Tout</span><span class="p">,</span> <span class="kc">None</span>
|
|
<span class="n">h1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gas</span><span class="o">.</span><span class="n">enthalpy_mass</span>
|
|
<span class="n">q1</span><span class="p">,</span> <span class="n">q2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">heat</span><span class="p">(</span><span class="n">Tout</span><span class="p">)</span>
|
|
|
|
<span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mdot</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">h0</span> <span class="o">-</span> <span class="n">h1</span><span class="p">)</span> <span class="o">-</span> <span class="n">q1</span> <span class="o">-</span> <span class="n">q2</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.CombustionChamber.heat" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">heat</span><span class="p">(</span><span class="n">Tout</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Calculates the heat transfer rate to the walls.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>Tout</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Outlet gas temperature (K). If None, uses T1.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>tuple</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Heat transfer rates (q0, q1) to the lower and upper walls (W).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">127</span>
|
|
<span class="normal">128</span>
|
|
<span class="normal">129</span>
|
|
<span class="normal">130</span>
|
|
<span class="normal">131</span>
|
|
<span class="normal">132</span>
|
|
<span class="normal">133</span>
|
|
<span class="normal">134</span>
|
|
<span class="normal">135</span>
|
|
<span class="normal">136</span>
|
|
<span class="normal">137</span>
|
|
<span class="normal">138</span>
|
|
<span class="normal">139</span>
|
|
<span class="normal">140</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">heat</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">Tout</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates the heat transfer rate to the walls.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> Tout (float, optional): Outlet gas temperature (K). If None, uses T1.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: Heat transfer rates (q0, q1) to the lower and upper walls (W).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">Tout</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">Tout</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">T1</span>
|
|
<span class="n">Tgas</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">T0</span> <span class="o">+</span> <span class="n">Tout</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span>
|
|
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">hA</span> <span class="o">*</span> <span class="p">(</span><span class="n">Tgas</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">Twall0</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">hA</span> <span class="o">*</span> <span class="p">(</span><span class="n">Tgas</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">Twall1</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.CombustionChamber.solve" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">solve</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Iteratively solves for the outlet temperature balancing heat loss to walls.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>float</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Resolved outlet temperature (K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">109</span>
|
|
<span class="normal">110</span>
|
|
<span class="normal">111</span>
|
|
<span class="normal">112</span>
|
|
<span class="normal">113</span>
|
|
<span class="normal">114</span>
|
|
<span class="normal">115</span>
|
|
<span class="normal">116</span>
|
|
<span class="normal">117</span>
|
|
<span class="normal">118</span>
|
|
<span class="normal">119</span>
|
|
<span class="normal">120</span>
|
|
<span class="normal">121</span>
|
|
<span class="normal">122</span>
|
|
<span class="normal">123</span>
|
|
<span class="normal">124</span>
|
|
<span class="normal">125</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">solve</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Iteratively solves for the outlet temperature balancing heat loss to walls.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Resolved outlet temperature (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">meanTwall</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">Twall0</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">Twall1</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span>
|
|
<span class="n">T_low</span> <span class="o">=</span> <span class="n">meanTwall</span> <span class="o">-</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">T0</span> <span class="o">-</span> <span class="n">meanTwall</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">f_found</span> <span class="o">=</span> <span class="n">optimize</span><span class="o">.</span><span class="n">root_scalar</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">energy_balance_equation</span><span class="p">,</span>
|
|
<span class="n">bracket</span><span class="o">=</span><span class="p">[</span><span class="n">T_low</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">T0</span><span class="p">])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T1</span> <span class="o">=</span> <span class="n">f_found</span><span class="o">.</span><span class="n">root</span>
|
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T1</span> <span class="o">=</span> <span class="n">meanTwall</span>
|
|
<span class="k">return</span> <span class="n">meanTwall</span>
|
|
|
|
<span class="k">return</span> <span class="n">f_found</span><span class="o">.</span><span class="n">root</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.CombustionChamber.update_Twall" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">update_Twall</span><span class="p">(</span><span class="n">Twall0</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">Twall1</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Updates the boundary wall temperatures.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>Twall0</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Lower wall temperature (K).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>Twall1</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Upper wall temperature (K).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">82</span>
|
|
<span class="normal">83</span>
|
|
<span class="normal">84</span>
|
|
<span class="normal">85</span>
|
|
<span class="normal">86</span>
|
|
<span class="normal">87</span>
|
|
<span class="normal">88</span>
|
|
<span class="normal">89</span>
|
|
<span class="normal">90</span>
|
|
<span class="normal">91</span>
|
|
<span class="normal">92</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">update_Twall</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">Twall0</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">Twall1</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Updates the boundary wall temperatures.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> Twall0 (float, optional): Lower wall temperature (K).</span>
|
|
<span class="sd"> Twall1 (float, optional): Upper wall temperature (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">Twall0</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Twall0</span> <span class="o">=</span> <span class="n">Twall0</span>
|
|
<span class="k">if</span> <span class="n">Twall1</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Twall1</span> <span class="o">=</span> <span class="n">Twall1</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.CombustionChamber.update_mdot" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">update_mdot</span><span class="p">(</span><span class="n">mdot_new</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Updates the mass flow rate if a new value is provided.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>mdot_new</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The new mass flow rate (kg/s).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">73</span>
|
|
<span class="normal">74</span>
|
|
<span class="normal">75</span>
|
|
<span class="normal">76</span>
|
|
<span class="normal">77</span>
|
|
<span class="normal">78</span>
|
|
<span class="normal">79</span>
|
|
<span class="normal">80</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">update_mdot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mdot_new</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Updates the mass flow rate if a new value is provided.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> mdot_new (float): The new mass flow rate (kg/s).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">mdot_new</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">mdot</span> <span class="o">=</span> <span class="n">mdot_new</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="Battery.HeatSchedule" class="doc doc-heading">
|
|
<code>HeatSchedule</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Represents a heat supply program schedule.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Attributes:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.HeatSchedule.xp">xp</span></code></td>
|
|
<td>
|
|
<code>array - like</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Timeline anchor points (hours).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.HeatSchedule.fp">fp</span></code></td>
|
|
<td>
|
|
<code>array - like</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Heat loads at anchor points (GJ/rev).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.HeatSchedule.f">f</span></code></td>
|
|
<td>
|
|
<code>callable</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Interpolation function mapping time -> heat load.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1144</span>
|
|
<span class="normal">1145</span>
|
|
<span class="normal">1146</span>
|
|
<span class="normal">1147</span>
|
|
<span class="normal">1148</span>
|
|
<span class="normal">1149</span>
|
|
<span class="normal">1150</span>
|
|
<span class="normal">1151</span>
|
|
<span class="normal">1152</span>
|
|
<span class="normal">1153</span>
|
|
<span class="normal">1154</span>
|
|
<span class="normal">1155</span>
|
|
<span class="normal">1156</span>
|
|
<span class="normal">1157</span>
|
|
<span class="normal">1158</span>
|
|
<span class="normal">1159</span>
|
|
<span class="normal">1160</span>
|
|
<span class="normal">1161</span>
|
|
<span class="normal">1162</span>
|
|
<span class="normal">1163</span>
|
|
<span class="normal">1164</span>
|
|
<span class="normal">1165</span>
|
|
<span class="normal">1166</span>
|
|
<span class="normal">1167</span>
|
|
<span class="normal">1168</span>
|
|
<span class="normal">1169</span>
|
|
<span class="normal">1170</span>
|
|
<span class="normal">1171</span>
|
|
<span class="normal">1172</span>
|
|
<span class="normal">1173</span>
|
|
<span class="normal">1174</span>
|
|
<span class="normal">1175</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">HeatSchedule</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Represents a heat supply program schedule.</span>
|
|
|
|
<span class="sd"> Attributes:</span>
|
|
<span class="sd"> xp (array-like): Timeline anchor points (hours).</span>
|
|
<span class="sd"> fp (array-like): Heat loads at anchor points (GJ/rev).</span>
|
|
<span class="sd"> f (callable): Interpolation function mapping time -> heat load.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xp</span><span class="p">,</span> <span class="n">fp</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes HeatSchedule.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> xp (array-like): Timeline hours.</span>
|
|
<span class="sd"> fp (array-like): Heat load array.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">xp</span> <span class="o">=</span> <span class="n">xp</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fp</span> <span class="o">=</span> <span class="n">fp</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">f</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">interp</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">xp</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">dQ</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t0</span><span class="p">,</span> <span class="n">t1</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Integrates heat input from time t0 to t1.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t0 (float): Start time (hours).</span>
|
|
<span class="sd"> t1 (float): End time (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Cumulative heat (GJ).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">t0</span><span class="p">,</span> <span class="n">t1</span><span class="p">,</span> <span class="mi">31</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">trapz</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">x</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.HeatSchedule.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">xp</span><span class="p">,</span> <span class="n">fp</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes HeatSchedule.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>xp</code></td>
|
|
<td>
|
|
<code>array - like</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Timeline hours.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>fp</code></td>
|
|
<td>
|
|
<code>array - like</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Heat load array.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1153</span>
|
|
<span class="normal">1154</span>
|
|
<span class="normal">1155</span>
|
|
<span class="normal">1156</span>
|
|
<span class="normal">1157</span>
|
|
<span class="normal">1158</span>
|
|
<span class="normal">1159</span>
|
|
<span class="normal">1160</span>
|
|
<span class="normal">1161</span>
|
|
<span class="normal">1162</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xp</span><span class="p">,</span> <span class="n">fp</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes HeatSchedule.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> xp (array-like): Timeline hours.</span>
|
|
<span class="sd"> fp (array-like): Heat load array.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">xp</span> <span class="o">=</span> <span class="n">xp</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fp</span> <span class="o">=</span> <span class="n">fp</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">f</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">interp</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">xp</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.HeatSchedule.dQ" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">dQ</span><span class="p">(</span><span class="n">t0</span><span class="p">,</span> <span class="n">t1</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Integrates heat input from time t0 to t1.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>t0</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Start time (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>t1</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>End time (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>float</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Cumulative heat (GJ).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1164</span>
|
|
<span class="normal">1165</span>
|
|
<span class="normal">1166</span>
|
|
<span class="normal">1167</span>
|
|
<span class="normal">1168</span>
|
|
<span class="normal">1169</span>
|
|
<span class="normal">1170</span>
|
|
<span class="normal">1171</span>
|
|
<span class="normal">1172</span>
|
|
<span class="normal">1173</span>
|
|
<span class="normal">1174</span>
|
|
<span class="normal">1175</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">dQ</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t0</span><span class="p">,</span> <span class="n">t1</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Integrates heat input from time t0 to t1.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t0 (float): Start time (hours).</span>
|
|
<span class="sd"> t1 (float): End time (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Cumulative heat (GJ).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">t0</span><span class="p">,</span> <span class="n">t1</span><span class="p">,</span> <span class="mi">31</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">trapz</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">x</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="Battery.OvenChamber" class="doc doc-heading">
|
|
<code>OvenChamber</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Represents an individual oven chamber containing a coke charge.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Attributes:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.OvenChamber.content">content</span></code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="Battery.CokeCharge" href="#Battery.CokeCharge">CokeCharge</a> or None</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The coke charge model inside the oven.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">516</span>
|
|
<span class="normal">517</span>
|
|
<span class="normal">518</span>
|
|
<span class="normal">519</span>
|
|
<span class="normal">520</span>
|
|
<span class="normal">521</span>
|
|
<span class="normal">522</span>
|
|
<span class="normal">523</span>
|
|
<span class="normal">524</span>
|
|
<span class="normal">525</span>
|
|
<span class="normal">526</span>
|
|
<span class="normal">527</span>
|
|
<span class="normal">528</span>
|
|
<span class="normal">529</span>
|
|
<span class="normal">530</span>
|
|
<span class="normal">531</span>
|
|
<span class="normal">532</span>
|
|
<span class="normal">533</span>
|
|
<span class="normal">534</span>
|
|
<span class="normal">535</span>
|
|
<span class="normal">536</span>
|
|
<span class="normal">537</span>
|
|
<span class="normal">538</span>
|
|
<span class="normal">539</span>
|
|
<span class="normal">540</span>
|
|
<span class="normal">541</span>
|
|
<span class="normal">542</span>
|
|
<span class="normal">543</span>
|
|
<span class="normal">544</span>
|
|
<span class="normal">545</span>
|
|
<span class="normal">546</span>
|
|
<span class="normal">547</span>
|
|
<span class="normal">548</span>
|
|
<span class="normal">549</span>
|
|
<span class="normal">550</span>
|
|
<span class="normal">551</span>
|
|
<span class="normal">552</span>
|
|
<span class="normal">553</span>
|
|
<span class="normal">554</span>
|
|
<span class="normal">555</span>
|
|
<span class="normal">556</span>
|
|
<span class="normal">557</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">OvenChamber</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Represents an individual oven chamber containing a coke charge.</span>
|
|
|
|
<span class="sd"> Attributes:</span>
|
|
<span class="sd"> content (CokeCharge or None): The coke charge model inside the oven.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes OvenChamber."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">content</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_charge_temperature</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Gets the temperature of the coal charge content at the oven wall.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Simulation time (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Charge surface temperature (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">content</span><span class="p">:</span>
|
|
<span class="n">elapsed_time</span> <span class="o">=</span> <span class="n">t</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">t_charge</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">elapsed_time</span> <span class="o">=</span> <span class="mf">0.</span>
|
|
<span class="k">return</span> <span class="n">Twall_model</span><span class="p">(</span><span class="n">elapsed_time</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">bake</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">q</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Applies baking heat to the coal charge.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> q (float): Heat energy applied (J).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">content</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">bake</span><span class="p">(</span><span class="n">q</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">charge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">coal_charge</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Charges fresh coal into the oven chamber.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> coal_charge (CokeCharge): The coal charge object to load.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">content</span> <span class="o">=</span> <span class="n">coal_charge</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.OvenChamber.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes OvenChamber.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">523</span>
|
|
<span class="normal">524</span>
|
|
<span class="normal">525</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes OvenChamber."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">content</span> <span class="o">=</span> <span class="kc">None</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.OvenChamber.bake" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">bake</span><span class="p">(</span><span class="n">q</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Applies baking heat to the coal charge.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>q</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Heat energy applied (J).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">542</span>
|
|
<span class="normal">543</span>
|
|
<span class="normal">544</span>
|
|
<span class="normal">545</span>
|
|
<span class="normal">546</span>
|
|
<span class="normal">547</span>
|
|
<span class="normal">548</span>
|
|
<span class="normal">549</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">bake</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">q</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Applies baking heat to the coal charge.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> q (float): Heat energy applied (J).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">content</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">bake</span><span class="p">(</span><span class="n">q</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.OvenChamber.charge" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">charge</span><span class="p">(</span><span class="n">coal_charge</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Charges fresh coal into the oven chamber.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>coal_charge</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="Battery.CokeCharge" href="#Battery.CokeCharge">CokeCharge</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The coal charge object to load.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">551</span>
|
|
<span class="normal">552</span>
|
|
<span class="normal">553</span>
|
|
<span class="normal">554</span>
|
|
<span class="normal">555</span>
|
|
<span class="normal">556</span>
|
|
<span class="normal">557</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">charge</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">coal_charge</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Charges fresh coal into the oven chamber.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> coal_charge (CokeCharge): The coal charge object to load.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">content</span> <span class="o">=</span> <span class="n">coal_charge</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.OvenChamber.get_charge_temperature" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">get_charge_temperature</span><span class="p">(</span><span class="n">t</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Gets the temperature of the coal charge content at the oven wall.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>t</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Simulation time (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>float</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Charge surface temperature (K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">527</span>
|
|
<span class="normal">528</span>
|
|
<span class="normal">529</span>
|
|
<span class="normal">530</span>
|
|
<span class="normal">531</span>
|
|
<span class="normal">532</span>
|
|
<span class="normal">533</span>
|
|
<span class="normal">534</span>
|
|
<span class="normal">535</span>
|
|
<span class="normal">536</span>
|
|
<span class="normal">537</span>
|
|
<span class="normal">538</span>
|
|
<span class="normal">539</span>
|
|
<span class="normal">540</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">get_charge_temperature</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">t</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Gets the temperature of the coal charge content at the oven wall.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t (float): Simulation time (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Charge surface temperature (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">content</span><span class="p">:</span>
|
|
<span class="n">elapsed_time</span> <span class="o">=</span> <span class="n">t</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">content</span><span class="o">.</span><span class="n">t_charge</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">elapsed_time</span> <span class="o">=</span> <span class="mf">0.</span>
|
|
<span class="k">return</span> <span class="n">Twall_model</span><span class="p">(</span><span class="n">elapsed_time</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="Battery.RefractoryWall" class="doc doc-heading">
|
|
<code>RefractoryWall</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Simulates a refractory brick wall separating combustion chambers and ovens.</p>
|
|
<p>Solves the 1D transient heat conduction equation through the refractory wall
|
|
using either py-pde or a custom NumPy finite difference solver.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Attributes:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.RefractoryWall.T_oven">T_oven</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Temperature at the oven side (K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.RefractoryWall.T_chamber">T_chamber</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Temperature at the combustion chamber side (K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.RefractoryWall.q_chamber">q_chamber</span></code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Heat flux from chamber.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.RefractoryWall.T_internal">T_internal</span></code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="Battery.TInternal" href="#Battery.TInternal">TInternal</a> or <span title="pde.ScalarField">ScalarField</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Internal temperature field.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.RefractoryWall.eqn">eqn</span></code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="Battery.CokeOvenBrickHeatEqn" href="#Battery.CokeOvenBrickHeatEqn">CokeOvenBrickHeatEqn</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Heat equation PDE model instance.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">391</span>
|
|
<span class="normal">392</span>
|
|
<span class="normal">393</span>
|
|
<span class="normal">394</span>
|
|
<span class="normal">395</span>
|
|
<span class="normal">396</span>
|
|
<span class="normal">397</span>
|
|
<span class="normal">398</span>
|
|
<span class="normal">399</span>
|
|
<span class="normal">400</span>
|
|
<span class="normal">401</span>
|
|
<span class="normal">402</span>
|
|
<span class="normal">403</span>
|
|
<span class="normal">404</span>
|
|
<span class="normal">405</span>
|
|
<span class="normal">406</span>
|
|
<span class="normal">407</span>
|
|
<span class="normal">408</span>
|
|
<span class="normal">409</span>
|
|
<span class="normal">410</span>
|
|
<span class="normal">411</span>
|
|
<span class="normal">412</span>
|
|
<span class="normal">413</span>
|
|
<span class="normal">414</span>
|
|
<span class="normal">415</span>
|
|
<span class="normal">416</span>
|
|
<span class="normal">417</span>
|
|
<span class="normal">418</span>
|
|
<span class="normal">419</span>
|
|
<span class="normal">420</span>
|
|
<span class="normal">421</span>
|
|
<span class="normal">422</span>
|
|
<span class="normal">423</span>
|
|
<span class="normal">424</span>
|
|
<span class="normal">425</span>
|
|
<span class="normal">426</span>
|
|
<span class="normal">427</span>
|
|
<span class="normal">428</span>
|
|
<span class="normal">429</span>
|
|
<span class="normal">430</span>
|
|
<span class="normal">431</span>
|
|
<span class="normal">432</span>
|
|
<span class="normal">433</span>
|
|
<span class="normal">434</span>
|
|
<span class="normal">435</span>
|
|
<span class="normal">436</span>
|
|
<span class="normal">437</span>
|
|
<span class="normal">438</span>
|
|
<span class="normal">439</span>
|
|
<span class="normal">440</span>
|
|
<span class="normal">441</span>
|
|
<span class="normal">442</span>
|
|
<span class="normal">443</span>
|
|
<span class="normal">444</span>
|
|
<span class="normal">445</span>
|
|
<span class="normal">446</span>
|
|
<span class="normal">447</span>
|
|
<span class="normal">448</span>
|
|
<span class="normal">449</span>
|
|
<span class="normal">450</span>
|
|
<span class="normal">451</span>
|
|
<span class="normal">452</span>
|
|
<span class="normal">453</span>
|
|
<span class="normal">454</span>
|
|
<span class="normal">455</span>
|
|
<span class="normal">456</span>
|
|
<span class="normal">457</span>
|
|
<span class="normal">458</span>
|
|
<span class="normal">459</span>
|
|
<span class="normal">460</span>
|
|
<span class="normal">461</span>
|
|
<span class="normal">462</span>
|
|
<span class="normal">463</span>
|
|
<span class="normal">464</span>
|
|
<span class="normal">465</span>
|
|
<span class="normal">466</span>
|
|
<span class="normal">467</span>
|
|
<span class="normal">468</span>
|
|
<span class="normal">469</span>
|
|
<span class="normal">470</span>
|
|
<span class="normal">471</span>
|
|
<span class="normal">472</span>
|
|
<span class="normal">473</span>
|
|
<span class="normal">474</span>
|
|
<span class="normal">475</span>
|
|
<span class="normal">476</span>
|
|
<span class="normal">477</span>
|
|
<span class="normal">478</span>
|
|
<span class="normal">479</span>
|
|
<span class="normal">480</span>
|
|
<span class="normal">481</span>
|
|
<span class="normal">482</span>
|
|
<span class="normal">483</span>
|
|
<span class="normal">484</span>
|
|
<span class="normal">485</span>
|
|
<span class="normal">486</span>
|
|
<span class="normal">487</span>
|
|
<span class="normal">488</span>
|
|
<span class="normal">489</span>
|
|
<span class="normal">490</span>
|
|
<span class="normal">491</span>
|
|
<span class="normal">492</span>
|
|
<span class="normal">493</span>
|
|
<span class="normal">494</span>
|
|
<span class="normal">495</span>
|
|
<span class="normal">496</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">RefractoryWall</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Simulates a refractory brick wall separating combustion chambers and ovens.</span>
|
|
|
|
<span class="sd"> Solves the 1D transient heat conduction equation through the refractory wall</span>
|
|
<span class="sd"> using either py-pde or a custom NumPy finite difference solver.</span>
|
|
|
|
<span class="sd"> Attributes:</span>
|
|
<span class="sd"> T_oven (float): Temperature at the oven side (K).</span>
|
|
<span class="sd"> T_chamber (float): Temperature at the combustion chamber side (K).</span>
|
|
<span class="sd"> q_chamber (float): Heat flux from chamber.</span>
|
|
<span class="sd"> T_internal (TInternal or pde.ScalarField): Internal temperature field.</span>
|
|
<span class="sd"> eqn (CokeOvenBrickHeatEqn): Heat equation PDE model instance.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">T0</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes RefractoryWall.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> T0 (float): Initial uniform temperature (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_oven</span> <span class="o">=</span> <span class="n">T0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_chamber</span> <span class="o">=</span> <span class="n">T0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">q_chamber</span> <span class="o">=</span> <span class="mf">0.</span>
|
|
<span class="k">if</span> <span class="n">USE_CUSTOM_SOLVER</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_internal</span> <span class="o">=</span> <span class="n">TInternal</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">full</span><span class="p">(</span><span class="n">n_grid_brick</span><span class="p">,</span> <span class="n">T0</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_internal</span> <span class="o">=</span> <span class="n">pde</span><span class="o">.</span><span class="n">ScalarField</span><span class="p">(</span><span class="n">wall_grid</span><span class="p">,</span> <span class="n">T0</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">eqn</span> <span class="o">=</span> <span class="n">CokeOvenBrickHeatEqn</span><span class="p">(</span>
|
|
<span class="n">bc</span><span class="o">=</span><span class="p">[{</span><span class="s2">"derivative"</span><span class="p">:</span> <span class="mi">0</span><span class="p">},</span> <span class="p">{</span><span class="s2">"value"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">T_oven</span><span class="p">}])</span>
|
|
|
|
<span class="k">def</span> <span class="nf">update_bc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">Q</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">T_oven</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Updates the wall boundary conditions based on energy flow.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> Q (float, optional): Heat input rate (W).</span>
|
|
<span class="sd"> T_oven (float, optional): Oven boundary temperature (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">k0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">k</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">T_chamber</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">Q</span><span class="p">:</span>
|
|
<span class="n">gradT</span> <span class="o">=</span> <span class="n">Q</span> <span class="o">/</span> <span class="n">wall_area</span> <span class="o">/</span> <span class="n">k0</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">gradT</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">update_bc</span><span class="p">(</span><span class="n">gradT</span><span class="p">,</span> <span class="n">T_oven</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">solve</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Solves the heat equation over time interval dt.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dt (float): Simulation time step (seconds).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">USE_CUSTOM_SOLVER</span><span class="p">:</span>
|
|
<span class="n">dt_internal</span> <span class="o">=</span> <span class="mf">30.0</span>
|
|
<span class="n">steps</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">round</span><span class="p">(</span><span class="n">dt</span> <span class="o">/</span> <span class="n">dt_internal</span><span class="p">))</span>
|
|
<span class="n">dx</span> <span class="o">=</span> <span class="n">brick_thickness</span> <span class="o">/</span> <span class="n">n_grid_brick</span>
|
|
|
|
<span class="n">T</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">T_internal</span><span class="o">.</span><span class="n">data</span>
|
|
|
|
<span class="n">g_L</span> <span class="o">=</span> <span class="mf">0.0</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">bc0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bc0</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
|
|
<span class="n">g_L</span> <span class="o">=</span> <span class="n">bc0</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"derivative"</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">g_L</span> <span class="o">=</span> <span class="n">bc0</span>
|
|
|
|
<span class="n">T_R</span> <span class="o">=</span> <span class="mf">0.0</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">bc1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bc1</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
|
|
<span class="n">T_R</span> <span class="o">=</span> <span class="n">bc1</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"value"</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">T_R</span> <span class="o">=</span> <span class="n">bc1</span>
|
|
|
|
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">steps</span><span class="p">):</span>
|
|
<span class="n">T_minus_1</span> <span class="o">=</span> <span class="n">T</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">dx</span> <span class="o">*</span> <span class="n">g_L</span>
|
|
<span class="n">T_N</span> <span class="o">=</span> <span class="mf">2.0</span> <span class="o">*</span> <span class="n">T_R</span> <span class="o">-</span> <span class="n">T</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
|
|
<span class="n">T_aug</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty</span><span class="p">(</span><span class="n">n_grid_brick</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">T_aug</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">T_minus_1</span>
|
|
<span class="n">T_aug</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span>
|
|
<span class="n">T_aug</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">T_N</span>
|
|
|
|
<span class="n">grad</span> <span class="o">=</span> <span class="p">(</span><span class="n">T_aug</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span> <span class="o">-</span> <span class="n">T_aug</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> <span class="p">(</span><span class="mf">2.0</span> <span class="o">*</span> <span class="n">dx</span><span class="p">)</span>
|
|
<span class="n">grad2</span> <span class="o">=</span> <span class="n">grad</span> <span class="o">*</span> <span class="n">grad</span>
|
|
<span class="n">lap</span> <span class="o">=</span> <span class="p">(</span><span class="n">T_aug</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span> <span class="o">-</span> <span class="mf">2.0</span> <span class="o">*</span> <span class="n">T_aug</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">T_aug</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> <span class="p">(</span><span class="n">dx</span> <span class="o">*</span> <span class="n">dx</span><span class="p">)</span>
|
|
|
|
<span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">kCoef1</span> <span class="o">*</span> <span class="n">T</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">kCoef0</span>
|
|
<span class="n">cp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">cpCoef1</span> <span class="o">*</span> <span class="n">T</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">cpCoef0</span>
|
|
|
|
<span class="n">dTdt</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">kCoef1</span> <span class="o">*</span> <span class="n">grad2</span> <span class="o">+</span> <span class="n">k</span> <span class="o">*</span> <span class="n">lap</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">cp</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">rho</span><span class="p">)</span>
|
|
<span class="n">T</span> <span class="o">+=</span> <span class="n">dt_internal</span> <span class="o">*</span> <span class="n">dTdt</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_chamber</span> <span class="o">=</span> <span class="n">T</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">dx</span> <span class="o">*</span> <span class="n">g_L</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_internal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">solve</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_internal</span><span class="p">,</span> <span class="n">t_range</span><span class="o">=</span><span class="n">dt</span><span class="p">,</span> <span class="n">dt</span><span class="o">=</span><span class="mf">30.</span><span class="p">,</span> <span class="n">tracker</span><span class="o">=</span><span class="s1">'consistency'</span><span class="p">,</span> <span class="n">backend</span><span class="o">=</span><span class="s2">"numpy"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_chamber</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">T_internal</span><span class="o">.</span><span class="n">get_boundary_values</span><span class="p">(</span>
|
|
<span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">bc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">heat_to_oven</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates heat transfer to the oven chamber.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Heat transfer (W). Not implemented yet.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="mf">0.0</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.RefractoryWall.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">T0</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes RefractoryWall.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>T0</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Initial uniform temperature (K).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">405</span>
|
|
<span class="normal">406</span>
|
|
<span class="normal">407</span>
|
|
<span class="normal">408</span>
|
|
<span class="normal">409</span>
|
|
<span class="normal">410</span>
|
|
<span class="normal">411</span>
|
|
<span class="normal">412</span>
|
|
<span class="normal">413</span>
|
|
<span class="normal">414</span>
|
|
<span class="normal">415</span>
|
|
<span class="normal">416</span>
|
|
<span class="normal">417</span>
|
|
<span class="normal">418</span>
|
|
<span class="normal">419</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">T0</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes RefractoryWall.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> T0 (float): Initial uniform temperature (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_oven</span> <span class="o">=</span> <span class="n">T0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_chamber</span> <span class="o">=</span> <span class="n">T0</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">q_chamber</span> <span class="o">=</span> <span class="mf">0.</span>
|
|
<span class="k">if</span> <span class="n">USE_CUSTOM_SOLVER</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_internal</span> <span class="o">=</span> <span class="n">TInternal</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">full</span><span class="p">(</span><span class="n">n_grid_brick</span><span class="p">,</span> <span class="n">T0</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_internal</span> <span class="o">=</span> <span class="n">pde</span><span class="o">.</span><span class="n">ScalarField</span><span class="p">(</span><span class="n">wall_grid</span><span class="p">,</span> <span class="n">T0</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">eqn</span> <span class="o">=</span> <span class="n">CokeOvenBrickHeatEqn</span><span class="p">(</span>
|
|
<span class="n">bc</span><span class="o">=</span><span class="p">[{</span><span class="s2">"derivative"</span><span class="p">:</span> <span class="mi">0</span><span class="p">},</span> <span class="p">{</span><span class="s2">"value"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">T_oven</span><span class="p">}])</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.RefractoryWall.heat_to_oven" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">heat_to_oven</span><span class="p">()</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Calculates heat transfer to the oven chamber.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>float</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Heat transfer (W). Not implemented yet.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">490</span>
|
|
<span class="normal">491</span>
|
|
<span class="normal">492</span>
|
|
<span class="normal">493</span>
|
|
<span class="normal">494</span>
|
|
<span class="normal">495</span>
|
|
<span class="normal">496</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">heat_to_oven</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates heat transfer to the oven chamber.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Heat transfer (W). Not implemented yet.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="mf">0.0</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.RefractoryWall.solve" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">solve</span><span class="p">(</span><span class="n">dt</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Solves the heat equation over time interval dt.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>dt</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Simulation time step (seconds).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">435</span>
|
|
<span class="normal">436</span>
|
|
<span class="normal">437</span>
|
|
<span class="normal">438</span>
|
|
<span class="normal">439</span>
|
|
<span class="normal">440</span>
|
|
<span class="normal">441</span>
|
|
<span class="normal">442</span>
|
|
<span class="normal">443</span>
|
|
<span class="normal">444</span>
|
|
<span class="normal">445</span>
|
|
<span class="normal">446</span>
|
|
<span class="normal">447</span>
|
|
<span class="normal">448</span>
|
|
<span class="normal">449</span>
|
|
<span class="normal">450</span>
|
|
<span class="normal">451</span>
|
|
<span class="normal">452</span>
|
|
<span class="normal">453</span>
|
|
<span class="normal">454</span>
|
|
<span class="normal">455</span>
|
|
<span class="normal">456</span>
|
|
<span class="normal">457</span>
|
|
<span class="normal">458</span>
|
|
<span class="normal">459</span>
|
|
<span class="normal">460</span>
|
|
<span class="normal">461</span>
|
|
<span class="normal">462</span>
|
|
<span class="normal">463</span>
|
|
<span class="normal">464</span>
|
|
<span class="normal">465</span>
|
|
<span class="normal">466</span>
|
|
<span class="normal">467</span>
|
|
<span class="normal">468</span>
|
|
<span class="normal">469</span>
|
|
<span class="normal">470</span>
|
|
<span class="normal">471</span>
|
|
<span class="normal">472</span>
|
|
<span class="normal">473</span>
|
|
<span class="normal">474</span>
|
|
<span class="normal">475</span>
|
|
<span class="normal">476</span>
|
|
<span class="normal">477</span>
|
|
<span class="normal">478</span>
|
|
<span class="normal">479</span>
|
|
<span class="normal">480</span>
|
|
<span class="normal">481</span>
|
|
<span class="normal">482</span>
|
|
<span class="normal">483</span>
|
|
<span class="normal">484</span>
|
|
<span class="normal">485</span>
|
|
<span class="normal">486</span>
|
|
<span class="normal">487</span>
|
|
<span class="normal">488</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">solve</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Solves the heat equation over time interval dt.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dt (float): Simulation time step (seconds).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">USE_CUSTOM_SOLVER</span><span class="p">:</span>
|
|
<span class="n">dt_internal</span> <span class="o">=</span> <span class="mf">30.0</span>
|
|
<span class="n">steps</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">round</span><span class="p">(</span><span class="n">dt</span> <span class="o">/</span> <span class="n">dt_internal</span><span class="p">))</span>
|
|
<span class="n">dx</span> <span class="o">=</span> <span class="n">brick_thickness</span> <span class="o">/</span> <span class="n">n_grid_brick</span>
|
|
|
|
<span class="n">T</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">T_internal</span><span class="o">.</span><span class="n">data</span>
|
|
|
|
<span class="n">g_L</span> <span class="o">=</span> <span class="mf">0.0</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">bc0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bc0</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
|
|
<span class="n">g_L</span> <span class="o">=</span> <span class="n">bc0</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"derivative"</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">g_L</span> <span class="o">=</span> <span class="n">bc0</span>
|
|
|
|
<span class="n">T_R</span> <span class="o">=</span> <span class="mf">0.0</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">bc1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bc1</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
|
|
<span class="n">T_R</span> <span class="o">=</span> <span class="n">bc1</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"value"</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">T_R</span> <span class="o">=</span> <span class="n">bc1</span>
|
|
|
|
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">steps</span><span class="p">):</span>
|
|
<span class="n">T_minus_1</span> <span class="o">=</span> <span class="n">T</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">dx</span> <span class="o">*</span> <span class="n">g_L</span>
|
|
<span class="n">T_N</span> <span class="o">=</span> <span class="mf">2.0</span> <span class="o">*</span> <span class="n">T_R</span> <span class="o">-</span> <span class="n">T</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
|
|
<span class="n">T_aug</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">empty</span><span class="p">(</span><span class="n">n_grid_brick</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">T_aug</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">T_minus_1</span>
|
|
<span class="n">T_aug</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span>
|
|
<span class="n">T_aug</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">T_N</span>
|
|
|
|
<span class="n">grad</span> <span class="o">=</span> <span class="p">(</span><span class="n">T_aug</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span> <span class="o">-</span> <span class="n">T_aug</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> <span class="p">(</span><span class="mf">2.0</span> <span class="o">*</span> <span class="n">dx</span><span class="p">)</span>
|
|
<span class="n">grad2</span> <span class="o">=</span> <span class="n">grad</span> <span class="o">*</span> <span class="n">grad</span>
|
|
<span class="n">lap</span> <span class="o">=</span> <span class="p">(</span><span class="n">T_aug</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span> <span class="o">-</span> <span class="mf">2.0</span> <span class="o">*</span> <span class="n">T_aug</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">T_aug</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> <span class="o">/</span> <span class="p">(</span><span class="n">dx</span> <span class="o">*</span> <span class="n">dx</span><span class="p">)</span>
|
|
|
|
<span class="n">k</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">kCoef1</span> <span class="o">*</span> <span class="n">T</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">kCoef0</span>
|
|
<span class="n">cp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">cpCoef1</span> <span class="o">*</span> <span class="n">T</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">cpCoef0</span>
|
|
|
|
<span class="n">dTdt</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">kCoef1</span> <span class="o">*</span> <span class="n">grad2</span> <span class="o">+</span> <span class="n">k</span> <span class="o">*</span> <span class="n">lap</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">cp</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">rho</span><span class="p">)</span>
|
|
<span class="n">T</span> <span class="o">+=</span> <span class="n">dt_internal</span> <span class="o">*</span> <span class="n">dTdt</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_chamber</span> <span class="o">=</span> <span class="n">T</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">dx</span> <span class="o">*</span> <span class="n">g_L</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_internal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">solve</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_internal</span><span class="p">,</span> <span class="n">t_range</span><span class="o">=</span><span class="n">dt</span><span class="p">,</span> <span class="n">dt</span><span class="o">=</span><span class="mf">30.</span><span class="p">,</span> <span class="n">tracker</span><span class="o">=</span><span class="s1">'consistency'</span><span class="p">,</span> <span class="n">backend</span><span class="o">=</span><span class="s2">"numpy"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T_chamber</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">T_internal</span><span class="o">.</span><span class="n">get_boundary_values</span><span class="p">(</span>
|
|
<span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">bc</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">bc</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.RefractoryWall.update_bc" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">update_bc</span><span class="p">(</span><span class="n">Q</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">T_oven</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Updates the wall boundary conditions based on energy flow.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>Q</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Heat input rate (W).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>T_oven</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Oven boundary temperature (K).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">421</span>
|
|
<span class="normal">422</span>
|
|
<span class="normal">423</span>
|
|
<span class="normal">424</span>
|
|
<span class="normal">425</span>
|
|
<span class="normal">426</span>
|
|
<span class="normal">427</span>
|
|
<span class="normal">428</span>
|
|
<span class="normal">429</span>
|
|
<span class="normal">430</span>
|
|
<span class="normal">431</span>
|
|
<span class="normal">432</span>
|
|
<span class="normal">433</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">update_bc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">Q</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">T_oven</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Updates the wall boundary conditions based on energy flow.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> Q (float, optional): Heat input rate (W).</span>
|
|
<span class="sd"> T_oven (float, optional): Oven boundary temperature (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">k0</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">k</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">T_chamber</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">Q</span><span class="p">:</span>
|
|
<span class="n">gradT</span> <span class="o">=</span> <span class="n">Q</span> <span class="o">/</span> <span class="n">wall_area</span> <span class="o">/</span> <span class="n">k0</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">gradT</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">eqn</span><span class="o">.</span><span class="n">update_bc</span><span class="p">(</span><span class="n">gradT</span><span class="p">,</span> <span class="n">T_oven</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="Battery.Regenerator" class="doc doc-heading">
|
|
<code>Regenerator</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Models a single regenerator chamber in the coke oven battery.</p>
|
|
<p>Uses a 1D lumped thermal mass model to track temperature dynamics during
|
|
heat storage (charging) and release (discharging) cycles.</p>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">143</span>
|
|
<span class="normal">144</span>
|
|
<span class="normal">145</span>
|
|
<span class="normal">146</span>
|
|
<span class="normal">147</span>
|
|
<span class="normal">148</span>
|
|
<span class="normal">149</span>
|
|
<span class="normal">150</span>
|
|
<span class="normal">151</span>
|
|
<span class="normal">152</span>
|
|
<span class="normal">153</span>
|
|
<span class="normal">154</span>
|
|
<span class="normal">155</span>
|
|
<span class="normal">156</span>
|
|
<span class="normal">157</span>
|
|
<span class="normal">158</span>
|
|
<span class="normal">159</span>
|
|
<span class="normal">160</span>
|
|
<span class="normal">161</span>
|
|
<span class="normal">162</span>
|
|
<span class="normal">163</span>
|
|
<span class="normal">164</span>
|
|
<span class="normal">165</span>
|
|
<span class="normal">166</span>
|
|
<span class="normal">167</span>
|
|
<span class="normal">168</span>
|
|
<span class="normal">169</span>
|
|
<span class="normal">170</span>
|
|
<span class="normal">171</span>
|
|
<span class="normal">172</span>
|
|
<span class="normal">173</span>
|
|
<span class="normal">174</span>
|
|
<span class="normal">175</span>
|
|
<span class="normal">176</span>
|
|
<span class="normal">177</span>
|
|
<span class="normal">178</span>
|
|
<span class="normal">179</span>
|
|
<span class="normal">180</span>
|
|
<span class="normal">181</span>
|
|
<span class="normal">182</span>
|
|
<span class="normal">183</span>
|
|
<span class="normal">184</span>
|
|
<span class="normal">185</span>
|
|
<span class="normal">186</span>
|
|
<span class="normal">187</span>
|
|
<span class="normal">188</span>
|
|
<span class="normal">189</span>
|
|
<span class="normal">190</span>
|
|
<span class="normal">191</span>
|
|
<span class="normal">192</span>
|
|
<span class="normal">193</span>
|
|
<span class="normal">194</span>
|
|
<span class="normal">195</span>
|
|
<span class="normal">196</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">Regenerator</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Models a single regenerator chamber in the coke oven battery.</span>
|
|
|
|
<span class="sd"> Uses a 1D lumped thermal mass model to track temperature dynamics during</span>
|
|
<span class="sd"> heat storage (charging) and release (discharging) cycles.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">idx</span><span class="p">,</span> <span class="n">T_init</span><span class="o">=</span><span class="mf">1016.9</span><span class="p">,</span> <span class="n">M_reg</span><span class="o">=</span><span class="mf">1e9</span><span class="p">,</span> <span class="n">Cp_reg</span><span class="o">=</span><span class="mf">1000.0</span><span class="p">,</span> <span class="n">eff</span><span class="o">=</span><span class="mf">0.8</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes the Regenerator.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> idx (int): Index identifier of the regenerator.</span>
|
|
<span class="sd"> T_init (float, optional): Initial brick temperature (K). Default is 1016.9 K</span>
|
|
<span class="sd"> to replicate the 600°C boundary condition.</span>
|
|
<span class="sd"> M_reg (float, optional): Mass of checker bricks (kg). Default is 1e9</span>
|
|
<span class="sd"> (option A: infinite thermal mass to suppress dynamics for verification).</span>
|
|
<span class="sd"> Cp_reg (float, optional): Specific heat of checker bricks (J/kg/K). Default 1000.</span>
|
|
<span class="sd"> eff (float, optional): Heat exchange effectiveness (0 to 1). Default 0.8.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="n">idx</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T</span> <span class="o">=</span> <span class="n">T_init</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">M_reg</span> <span class="o">=</span> <span class="n">M_reg</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Cp_reg</span> <span class="o">=</span> <span class="n">Cp_reg</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">eff</span> <span class="o">=</span> <span class="n">eff</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Cp_gas</span> <span class="o">=</span> <span class="mf">1000.0</span> <span class="c1"># J/kg/K, average heat capacity of gas mixture</span>
|
|
|
|
<span class="k">def</span> <span class="nf">heat_exchange</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt_sec</span><span class="p">,</span> <span class="n">mdot</span><span class="p">,</span> <span class="n">T_gas_in</span><span class="p">,</span> <span class="n">is_discharging</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates gas outlet temperature and updates regenerator brick temperature.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dt_sec (float): Time step in seconds.</span>
|
|
<span class="sd"> mdot (float): Mass flow rate of air/flue gas (kg/s).</span>
|
|
<span class="sd"> T_gas_in (float): Temperature of incoming gas (K).</span>
|
|
<span class="sd"> is_discharging (bool): True if air/gas is being preheated (discharging),</span>
|
|
<span class="sd"> False if hot flue gas is reheating the bricks (charging).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Temperature of the outgoing gas (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">mdot</span> <span class="o"><=</span> <span class="mf">1e-8</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">T_gas_in</span>
|
|
|
|
<span class="k">if</span> <span class="n">is_discharging</span><span class="p">:</span>
|
|
<span class="c1"># Heat release cycle: incoming cold air at T_gas_in is preheated to T_gas_out</span>
|
|
<span class="n">T_gas_out</span> <span class="o">=</span> <span class="n">T_gas_in</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">eff</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">T</span> <span class="o">-</span> <span class="n">T_gas_in</span><span class="p">)</span>
|
|
<span class="n">Q_dot</span> <span class="o">=</span> <span class="n">mdot</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">Cp_gas</span> <span class="o">*</span> <span class="p">(</span><span class="n">T_gas_out</span> <span class="o">-</span> <span class="n">T_gas_in</span><span class="p">)</span> <span class="c1"># W (J/s)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T</span> <span class="o">-=</span> <span class="p">(</span><span class="n">Q_dot</span> <span class="o">*</span> <span class="n">dt_sec</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">M_reg</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">Cp_reg</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">T_gas_out</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># Heat storage cycle: incoming hot flue gas at T_gas_in heats the bricks</span>
|
|
<span class="n">T_gas_out</span> <span class="o">=</span> <span class="n">T_gas_in</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">eff</span> <span class="o">*</span> <span class="p">(</span><span class="n">T_gas_in</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">T</span><span class="p">)</span>
|
|
<span class="n">Q_dot</span> <span class="o">=</span> <span class="n">mdot</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">Cp_gas</span> <span class="o">*</span> <span class="p">(</span><span class="n">T_gas_in</span> <span class="o">-</span> <span class="n">T_gas_out</span><span class="p">)</span> <span class="c1"># W (J/s)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T</span> <span class="o">+=</span> <span class="p">(</span><span class="n">Q_dot</span> <span class="o">*</span> <span class="n">dt_sec</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">M_reg</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">Cp_reg</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">T_gas_out</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Regenerator.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">idx</span><span class="p">,</span> <span class="n">T_init</span><span class="o">=</span><span class="mf">1016.9</span><span class="p">,</span> <span class="n">M_reg</span><span class="o">=</span><span class="mf">1000000000.0</span><span class="p">,</span> <span class="n">Cp_reg</span><span class="o">=</span><span class="mf">1000.0</span><span class="p">,</span> <span class="n">eff</span><span class="o">=</span><span class="mf">0.8</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes the Regenerator.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>idx</code></td>
|
|
<td>
|
|
<code>int</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Index identifier of the regenerator.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>T_init</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Initial brick temperature (K). Default is 1016.9 K
|
|
to replicate the 600°C boundary condition.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>1016.9</code>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>M_reg</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Mass of checker bricks (kg). Default is 1e9
|
|
(option A: infinite thermal mass to suppress dynamics for verification).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>1000000000.0</code>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>Cp_reg</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Specific heat of checker bricks (J/kg/K). Default 1000.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>1000.0</code>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>eff</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Heat exchange effectiveness (0 to 1). Default 0.8.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>0.8</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">150</span>
|
|
<span class="normal">151</span>
|
|
<span class="normal">152</span>
|
|
<span class="normal">153</span>
|
|
<span class="normal">154</span>
|
|
<span class="normal">155</span>
|
|
<span class="normal">156</span>
|
|
<span class="normal">157</span>
|
|
<span class="normal">158</span>
|
|
<span class="normal">159</span>
|
|
<span class="normal">160</span>
|
|
<span class="normal">161</span>
|
|
<span class="normal">162</span>
|
|
<span class="normal">163</span>
|
|
<span class="normal">164</span>
|
|
<span class="normal">165</span>
|
|
<span class="normal">166</span>
|
|
<span class="normal">167</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">idx</span><span class="p">,</span> <span class="n">T_init</span><span class="o">=</span><span class="mf">1016.9</span><span class="p">,</span> <span class="n">M_reg</span><span class="o">=</span><span class="mf">1e9</span><span class="p">,</span> <span class="n">Cp_reg</span><span class="o">=</span><span class="mf">1000.0</span><span class="p">,</span> <span class="n">eff</span><span class="o">=</span><span class="mf">0.8</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes the Regenerator.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> idx (int): Index identifier of the regenerator.</span>
|
|
<span class="sd"> T_init (float, optional): Initial brick temperature (K). Default is 1016.9 K</span>
|
|
<span class="sd"> to replicate the 600°C boundary condition.</span>
|
|
<span class="sd"> M_reg (float, optional): Mass of checker bricks (kg). Default is 1e9</span>
|
|
<span class="sd"> (option A: infinite thermal mass to suppress dynamics for verification).</span>
|
|
<span class="sd"> Cp_reg (float, optional): Specific heat of checker bricks (J/kg/K). Default 1000.</span>
|
|
<span class="sd"> eff (float, optional): Heat exchange effectiveness (0 to 1). Default 0.8.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">idx</span> <span class="o">=</span> <span class="n">idx</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T</span> <span class="o">=</span> <span class="n">T_init</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">M_reg</span> <span class="o">=</span> <span class="n">M_reg</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Cp_reg</span> <span class="o">=</span> <span class="n">Cp_reg</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">eff</span> <span class="o">=</span> <span class="n">eff</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">Cp_gas</span> <span class="o">=</span> <span class="mf">1000.0</span> <span class="c1"># J/kg/K, average heat capacity of gas mixture</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.Regenerator.heat_exchange" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">heat_exchange</span><span class="p">(</span><span class="n">dt_sec</span><span class="p">,</span> <span class="n">mdot</span><span class="p">,</span> <span class="n">T_gas_in</span><span class="p">,</span> <span class="n">is_discharging</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Calculates gas outlet temperature and updates regenerator brick temperature.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>dt_sec</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Time step in seconds.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>mdot</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Mass flow rate of air/flue gas (kg/s).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>T_gas_in</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Temperature of incoming gas (K).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>is_discharging</code></td>
|
|
<td>
|
|
<code>bool</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>True if air/gas is being preheated (discharging),
|
|
False if hot flue gas is reheating the bricks (charging).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>float</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Temperature of the outgoing gas (K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">169</span>
|
|
<span class="normal">170</span>
|
|
<span class="normal">171</span>
|
|
<span class="normal">172</span>
|
|
<span class="normal">173</span>
|
|
<span class="normal">174</span>
|
|
<span class="normal">175</span>
|
|
<span class="normal">176</span>
|
|
<span class="normal">177</span>
|
|
<span class="normal">178</span>
|
|
<span class="normal">179</span>
|
|
<span class="normal">180</span>
|
|
<span class="normal">181</span>
|
|
<span class="normal">182</span>
|
|
<span class="normal">183</span>
|
|
<span class="normal">184</span>
|
|
<span class="normal">185</span>
|
|
<span class="normal">186</span>
|
|
<span class="normal">187</span>
|
|
<span class="normal">188</span>
|
|
<span class="normal">189</span>
|
|
<span class="normal">190</span>
|
|
<span class="normal">191</span>
|
|
<span class="normal">192</span>
|
|
<span class="normal">193</span>
|
|
<span class="normal">194</span>
|
|
<span class="normal">195</span>
|
|
<span class="normal">196</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">heat_exchange</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dt_sec</span><span class="p">,</span> <span class="n">mdot</span><span class="p">,</span> <span class="n">T_gas_in</span><span class="p">,</span> <span class="n">is_discharging</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates gas outlet temperature and updates regenerator brick temperature.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dt_sec (float): Time step in seconds.</span>
|
|
<span class="sd"> mdot (float): Mass flow rate of air/flue gas (kg/s).</span>
|
|
<span class="sd"> T_gas_in (float): Temperature of incoming gas (K).</span>
|
|
<span class="sd"> is_discharging (bool): True if air/gas is being preheated (discharging),</span>
|
|
<span class="sd"> False if hot flue gas is reheating the bricks (charging).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Temperature of the outgoing gas (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">mdot</span> <span class="o"><=</span> <span class="mf">1e-8</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">T_gas_in</span>
|
|
|
|
<span class="k">if</span> <span class="n">is_discharging</span><span class="p">:</span>
|
|
<span class="c1"># Heat release cycle: incoming cold air at T_gas_in is preheated to T_gas_out</span>
|
|
<span class="n">T_gas_out</span> <span class="o">=</span> <span class="n">T_gas_in</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">eff</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">T</span> <span class="o">-</span> <span class="n">T_gas_in</span><span class="p">)</span>
|
|
<span class="n">Q_dot</span> <span class="o">=</span> <span class="n">mdot</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">Cp_gas</span> <span class="o">*</span> <span class="p">(</span><span class="n">T_gas_out</span> <span class="o">-</span> <span class="n">T_gas_in</span><span class="p">)</span> <span class="c1"># W (J/s)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T</span> <span class="o">-=</span> <span class="p">(</span><span class="n">Q_dot</span> <span class="o">*</span> <span class="n">dt_sec</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">M_reg</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">Cp_reg</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">T_gas_out</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># Heat storage cycle: incoming hot flue gas at T_gas_in heats the bricks</span>
|
|
<span class="n">T_gas_out</span> <span class="o">=</span> <span class="n">T_gas_in</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">eff</span> <span class="o">*</span> <span class="p">(</span><span class="n">T_gas_in</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">T</span><span class="p">)</span>
|
|
<span class="n">Q_dot</span> <span class="o">=</span> <span class="n">mdot</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">Cp_gas</span> <span class="o">*</span> <span class="p">(</span><span class="n">T_gas_in</span> <span class="o">-</span> <span class="n">T_gas_out</span><span class="p">)</span> <span class="c1"># W (J/s)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">T</span> <span class="o">+=</span> <span class="p">(</span><span class="n">Q_dot</span> <span class="o">*</span> <span class="n">dt_sec</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">M_reg</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">Cp_reg</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">T_gas_out</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-class">
|
|
|
|
|
|
|
|
<h3 id="Battery.TInternal" class="doc doc-heading">
|
|
<code>TInternal</code>
|
|
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
|
|
<p>Helper wrapper around numerical internal temperature data for a wall.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Attributes:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code><span title="Battery.TInternal.data">data</span></code></td>
|
|
<td>
|
|
<code><span title="numpy.ndarray">ndarray</span></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Spatial temperature profile within the brick wall.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">248</span>
|
|
<span class="normal">249</span>
|
|
<span class="normal">250</span>
|
|
<span class="normal">251</span>
|
|
<span class="normal">252</span>
|
|
<span class="normal">253</span>
|
|
<span class="normal">254</span>
|
|
<span class="normal">255</span>
|
|
<span class="normal">256</span>
|
|
<span class="normal">257</span>
|
|
<span class="normal">258</span>
|
|
<span class="normal">259</span>
|
|
<span class="normal">260</span>
|
|
<span class="normal">261</span>
|
|
<span class="normal">262</span>
|
|
<span class="normal">263</span>
|
|
<span class="normal">264</span>
|
|
<span class="normal">265</span>
|
|
<span class="normal">266</span>
|
|
<span class="normal">267</span>
|
|
<span class="normal">268</span>
|
|
<span class="normal">269</span>
|
|
<span class="normal">270</span>
|
|
<span class="normal">271</span>
|
|
<span class="normal">272</span>
|
|
<span class="normal">273</span>
|
|
<span class="normal">274</span>
|
|
<span class="normal">275</span>
|
|
<span class="normal">276</span>
|
|
<span class="normal">277</span>
|
|
<span class="normal">278</span>
|
|
<span class="normal">279</span>
|
|
<span class="normal">280</span>
|
|
<span class="normal">281</span>
|
|
<span class="normal">282</span>
|
|
<span class="normal">283</span>
|
|
<span class="normal">284</span>
|
|
<span class="normal">285</span>
|
|
<span class="normal">286</span>
|
|
<span class="normal">287</span>
|
|
<span class="normal">288</span>
|
|
<span class="normal">289</span>
|
|
<span class="normal">290</span>
|
|
<span class="normal">291</span>
|
|
<span class="normal">292</span>
|
|
<span class="normal">293</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span> <span class="nc">TInternal</span><span class="p">:</span>
|
|
<span class="w"> </span><span class="sd">"""Helper wrapper around numerical internal temperature data for a wall.</span>
|
|
|
|
<span class="sd"> Attributes:</span>
|
|
<span class="sd"> data (numpy.ndarray): Spatial temperature profile within the brick wall.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes TInternal wrapper.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> data (array-like): Numerical temperature array.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">get_boundary_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">bc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Extracts boundary temperature values based on boundary conditions.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> axis (int, optional): Spatial axis (default is 0).</span>
|
|
<span class="sd"> upper (bool, optional): If True, gets right-hand boundary (oven-side),</span>
|
|
<span class="sd"> otherwise left-hand boundary (chamber-side). Defaults to False.</span>
|
|
<span class="sd"> bc (list, optional): Boundary conditions list.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: The computed boundary temperature value (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">dx</span> <span class="o">=</span> <span class="n">brick_thickness</span> <span class="o">/</span> <span class="n">n_grid_brick</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">upper</span><span class="p">:</span>
|
|
<span class="n">g_L</span> <span class="o">=</span> <span class="mf">0.0</span>
|
|
<span class="k">if</span> <span class="n">bc</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">bc</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">bc0</span> <span class="o">=</span> <span class="n">bc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bc0</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
|
|
<span class="n">g_L</span> <span class="o">=</span> <span class="n">bc0</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"derivative"</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">g_L</span> <span class="o">=</span> <span class="n">bc0</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">dx</span> <span class="o">*</span> <span class="n">g_L</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">T_R</span> <span class="o">=</span> <span class="mf">0.0</span>
|
|
<span class="k">if</span> <span class="n">bc</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">bc</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">bc1</span> <span class="o">=</span> <span class="n">bc</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bc1</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
|
|
<span class="n">T_R</span> <span class="o">=</span> <span class="n">bc1</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"value"</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">T_R</span> <span class="o">=</span> <span class="n">bc1</span>
|
|
<span class="k">return</span> <span class="n">T_R</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
|
|
|
|
|
|
<div class="doc doc-children">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.TInternal.__init__" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Initializes TInternal wrapper.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>data</code></td>
|
|
<td>
|
|
<code>array - like</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Numerical temperature array.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">255</span>
|
|
<span class="normal">256</span>
|
|
<span class="normal">257</span>
|
|
<span class="normal">258</span>
|
|
<span class="normal">259</span>
|
|
<span class="normal">260</span>
|
|
<span class="normal">261</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Initializes TInternal wrapper.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> data (array-like): Numerical temperature array.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h4 id="Battery.TInternal.get_boundary_values" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">get_boundary_values</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">bc</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
|
|
|
|
</h4>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Extracts boundary temperature values based on boundary conditions.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>axis</code></td>
|
|
<td>
|
|
<code>int</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Spatial axis (default is 0).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>0</code>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>upper</code></td>
|
|
<td>
|
|
<code>bool</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>If True, gets right-hand boundary (oven-side),
|
|
otherwise left-hand boundary (chamber-side). Defaults to False.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>False</code>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>bc</code></td>
|
|
<td>
|
|
<code>list</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Boundary conditions list.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>None</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>float</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>The computed boundary temperature value (K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">263</span>
|
|
<span class="normal">264</span>
|
|
<span class="normal">265</span>
|
|
<span class="normal">266</span>
|
|
<span class="normal">267</span>
|
|
<span class="normal">268</span>
|
|
<span class="normal">269</span>
|
|
<span class="normal">270</span>
|
|
<span class="normal">271</span>
|
|
<span class="normal">272</span>
|
|
<span class="normal">273</span>
|
|
<span class="normal">274</span>
|
|
<span class="normal">275</span>
|
|
<span class="normal">276</span>
|
|
<span class="normal">277</span>
|
|
<span class="normal">278</span>
|
|
<span class="normal">279</span>
|
|
<span class="normal">280</span>
|
|
<span class="normal">281</span>
|
|
<span class="normal">282</span>
|
|
<span class="normal">283</span>
|
|
<span class="normal">284</span>
|
|
<span class="normal">285</span>
|
|
<span class="normal">286</span>
|
|
<span class="normal">287</span>
|
|
<span class="normal">288</span>
|
|
<span class="normal">289</span>
|
|
<span class="normal">290</span>
|
|
<span class="normal">291</span>
|
|
<span class="normal">292</span>
|
|
<span class="normal">293</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">get_boundary_values</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">bc</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Extracts boundary temperature values based on boundary conditions.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> axis (int, optional): Spatial axis (default is 0).</span>
|
|
<span class="sd"> upper (bool, optional): If True, gets right-hand boundary (oven-side),</span>
|
|
<span class="sd"> otherwise left-hand boundary (chamber-side). Defaults to False.</span>
|
|
<span class="sd"> bc (list, optional): Boundary conditions list.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: The computed boundary temperature value (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">dx</span> <span class="o">=</span> <span class="n">brick_thickness</span> <span class="o">/</span> <span class="n">n_grid_brick</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">upper</span><span class="p">:</span>
|
|
<span class="n">g_L</span> <span class="o">=</span> <span class="mf">0.0</span>
|
|
<span class="k">if</span> <span class="n">bc</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">bc</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">bc0</span> <span class="o">=</span> <span class="n">bc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bc0</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
|
|
<span class="n">g_L</span> <span class="o">=</span> <span class="n">bc0</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"derivative"</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">g_L</span> <span class="o">=</span> <span class="n">bc0</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">dx</span> <span class="o">*</span> <span class="n">g_L</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">T_R</span> <span class="o">=</span> <span class="mf">0.0</span>
|
|
<span class="k">if</span> <span class="n">bc</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">bc</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">bc1</span> <span class="o">=</span> <span class="n">bc</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">bc1</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
|
|
<span class="n">T_R</span> <span class="o">=</span> <span class="n">bc1</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"value"</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">T_R</span> <span class="o">=</span> <span class="n">bc1</span>
|
|
<span class="k">return</span> <span class="n">T_R</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="Battery.Twall_model" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">Twall_model</span><span class="p">(</span><span class="n">x</span><span class="p">)</span></code>
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Calculates the coke oven wall temperature based on elapsed time since charging.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>x</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Elapsed time (hours).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>float</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Oven wall temperature (K).</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">504</span>
|
|
<span class="normal">505</span>
|
|
<span class="normal">506</span>
|
|
<span class="normal">507</span>
|
|
<span class="normal">508</span>
|
|
<span class="normal">509</span>
|
|
<span class="normal">510</span>
|
|
<span class="normal">511</span>
|
|
<span class="normal">512</span>
|
|
<span class="normal">513</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">Twall_model</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates the coke oven wall temperature based on elapsed time since charging.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> x (float): Elapsed time (hours).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> float: Oven wall temperature (K).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">interp</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">Twall_table</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">Twall_table</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="Battery.coke_oven_exhaust_stoichiometry" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">coke_oven_exhaust_stoichiometry</span><span class="p">(</span><span class="n">phi</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">return_unburned</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></code>
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Calculates exhaust gas composition for coke oven gas combustion.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>phi</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Equivalence ratio. Defaults to 1.0.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>1.0</code>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>return_unburned</code></td>
|
|
<td>
|
|
<code>bool</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>If True, returns both unburned and
|
|
burned gas compositions. Defaults to False.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<code>False</code>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>dict or tuple: Burned composition dictionary, or (unburned, burned) tuple.</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1105</span>
|
|
<span class="normal">1106</span>
|
|
<span class="normal">1107</span>
|
|
<span class="normal">1108</span>
|
|
<span class="normal">1109</span>
|
|
<span class="normal">1110</span>
|
|
<span class="normal">1111</span>
|
|
<span class="normal">1112</span>
|
|
<span class="normal">1113</span>
|
|
<span class="normal">1114</span>
|
|
<span class="normal">1115</span>
|
|
<span class="normal">1116</span>
|
|
<span class="normal">1117</span>
|
|
<span class="normal">1118</span>
|
|
<span class="normal">1119</span>
|
|
<span class="normal">1120</span>
|
|
<span class="normal">1121</span>
|
|
<span class="normal">1122</span>
|
|
<span class="normal">1123</span>
|
|
<span class="normal">1124</span>
|
|
<span class="normal">1125</span>
|
|
<span class="normal">1126</span>
|
|
<span class="normal">1127</span>
|
|
<span class="normal">1128</span>
|
|
<span class="normal">1129</span>
|
|
<span class="normal">1130</span>
|
|
<span class="normal">1131</span>
|
|
<span class="normal">1132</span>
|
|
<span class="normal">1133</span>
|
|
<span class="normal">1134</span>
|
|
<span class="normal">1135</span>
|
|
<span class="normal">1136</span>
|
|
<span class="normal">1137</span>
|
|
<span class="normal">1138</span>
|
|
<span class="normal">1139</span>
|
|
<span class="normal">1140</span>
|
|
<span class="normal">1141</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">coke_oven_exhaust_stoichiometry</span><span class="p">(</span><span class="n">phi</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">return_unburned</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Calculates exhaust gas composition for coke oven gas combustion.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> phi (float, optional): Equivalence ratio. Defaults to 1.0.</span>
|
|
<span class="sd"> return_unburned (bool, optional): If True, returns both unburned and</span>
|
|
<span class="sd"> burned gas compositions. Defaults to False.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> dict or tuple: Burned composition dictionary, or (unburned, burned) tuple.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># Define the oxidizer composition, here air with 21 mol-% O2 and 79 mol-% N2</span>
|
|
<span class="n">air</span> <span class="o">=</span> <span class="s2">"O2:1,N2:3.762"</span>
|
|
<span class="n">coke_oven_fuel</span> <span class="o">=</span> <span class="s2">"H2:6.42, O2:0.39, N2:47.28, CH4:1.79, CO:24.25, CO2:19.72, C2H4:0.13, C2H6:0.04"</span>
|
|
|
|
<span class="n">mix</span> <span class="o">=</span> <span class="n">ct</span><span class="o">.</span><span class="n">Solution</span><span class="p">(</span><span class="s1">'gri30.yaml'</span><span class="p">)</span>
|
|
|
|
<span class="n">mix</span><span class="o">.</span><span class="n">TP</span> <span class="o">=</span> <span class="mi">25</span><span class="o">+</span><span class="mf">273.15</span><span class="p">,</span> <span class="n">ct</span><span class="o">.</span><span class="n">one_atm</span>
|
|
<span class="n">mix</span><span class="o">.</span><span class="n">set_equivalence_ratio</span><span class="p">(</span><span class="n">phi</span><span class="o">=</span><span class="n">phi</span><span class="p">,</span> <span class="n">fuel</span><span class="o">=</span><span class="n">coke_oven_fuel</span><span class="p">,</span> <span class="n">oxidizer</span><span class="o">=</span><span class="n">air</span><span class="p">)</span>
|
|
|
|
<span class="n">element_X</span> <span class="o">=</span> <span class="p">{</span><span class="n">ename</span><span class="p">:</span> <span class="n">mix</span><span class="o">.</span><span class="n">elemental_mole_fraction</span><span class="p">(</span>
|
|
<span class="n">ename</span><span class="p">)</span> <span class="k">for</span> <span class="n">ename</span> <span class="ow">in</span> <span class="n">mix</span><span class="o">.</span><span class="n">element_names</span><span class="p">}</span>
|
|
|
|
<span class="n">exhaust</span> <span class="o">=</span> <span class="n">ct</span><span class="o">.</span><span class="n">Solution</span><span class="p">(</span><span class="s1">'gri30.yaml'</span><span class="p">)</span>
|
|
<span class="n">exhaust</span><span class="o">.</span><span class="n">TPX</span> <span class="o">=</span> <span class="p">(</span><span class="mi">25</span><span class="o">+</span><span class="mf">273.15</span><span class="p">,</span> <span class="n">ct</span><span class="o">.</span><span class="n">one_atm</span><span class="p">,</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"CO2"</span><span class="p">:</span> <span class="n">element_X</span><span class="p">[</span><span class="s1">'C'</span><span class="p">],</span>
|
|
<span class="s2">"H2O"</span><span class="p">:</span> <span class="n">element_X</span><span class="p">[</span><span class="s1">'H'</span><span class="p">]</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span>
|
|
<span class="s2">"O2"</span><span class="p">:</span> <span class="p">(</span><span class="n">element_X</span><span class="p">[</span><span class="s1">'O'</span><span class="p">]</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="n">element_X</span><span class="p">[</span><span class="s1">'C'</span><span class="p">]</span> <span class="o">-</span> <span class="n">element_X</span><span class="p">[</span><span class="s1">'H'</span><span class="p">]</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span>
|
|
<span class="s2">"N2"</span><span class="p">:</span> <span class="n">element_X</span><span class="p">[</span><span class="s1">'N'</span><span class="p">]</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">return_unburned</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">mix</span><span class="o">.</span><span class="n">mole_fraction_dict</span><span class="p">(</span><span class="n">threshold</span><span class="o">=-</span><span class="mi">1</span><span class="p">),</span> <span class="n">exhaust</span><span class="o">.</span><span class="n">mole_fraction_dict</span><span class="p">(</span><span class="n">threshold</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">exhaust</span><span class="o">.</span><span class="n">mole_fraction_dict</span><span class="p">(</span><span class="n">threshold</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="doc doc-object doc-function">
|
|
|
|
|
|
<h3 id="Battery.wall_solve_wrapper" class="doc doc-heading">
|
|
<code class="highlight language-python"><span class="n">wall_solve_wrapper</span><span class="p">(</span><span class="n">t_range</span><span class="p">,</span> <span class="n">wall</span><span class="p">)</span></code>
|
|
|
|
</h3>
|
|
|
|
|
|
<div class="doc doc-contents ">
|
|
|
|
<p>Worker function wrapper to solve wall heat equation in parallel.</p>
|
|
|
|
|
|
<p><span class="doc-section-title">Parameters:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
<th>Default</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>t_range</code></td>
|
|
<td>
|
|
<code>float</code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Time range to solve (seconds).</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
<tr class="doc-section-item">
|
|
<td><code>wall</code></td>
|
|
<td>
|
|
<code><a class="autorefs autorefs-internal" title="Battery.RefractoryWall" href="#Battery.RefractoryWall">RefractoryWall</a></code>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>Wall object instance to solve.</p>
|
|
</div>
|
|
</td>
|
|
<td>
|
|
<em>required</em>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
|
|
<p><span class="doc-section-title">Returns:</span></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Name</th> <th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="doc-section-item">
|
|
<td><code>tuple</code></td> <td>
|
|
</td>
|
|
<td>
|
|
<div class="doc-md-description">
|
|
<p>(updated T_internal field, updated boundary T_chamber temperature)</p>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<details class="quote">
|
|
<summary>Source code in <code>Battery.py</code></summary>
|
|
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">560</span>
|
|
<span class="normal">561</span>
|
|
<span class="normal">562</span>
|
|
<span class="normal">563</span>
|
|
<span class="normal">564</span>
|
|
<span class="normal">565</span>
|
|
<span class="normal">566</span>
|
|
<span class="normal">567</span>
|
|
<span class="normal">568</span>
|
|
<span class="normal">569</span>
|
|
<span class="normal">570</span>
|
|
<span class="normal">571</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span> <span class="nf">wall_solve_wrapper</span><span class="p">(</span><span class="n">t_range</span><span class="p">,</span> <span class="n">wall</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""Worker function wrapper to solve wall heat equation in parallel.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> t_range (float): Time range to solve (seconds).</span>
|
|
<span class="sd"> wall (RefractoryWall): Wall object instance to solve.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> tuple: (updated T_internal field, updated boundary T_chamber temperature)</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">wall</span><span class="o">.</span><span class="n">solve</span><span class="p">(</span><span class="n">t_range</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">wall</span><span class="o">.</span><span class="n">T_internal</span><span class="p">,</span> <span class="n">wall</span><span class="o">.</span><span class="n">T_chamber</span>
|
|
</code></pre></div></td></tr></table></div>
|
|
</details>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</article>
|
|
</div>
|
|
|
|
|
|
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
|
</div>
|
|
|
|
</main>
|
|
|
|
<footer class="md-footer">
|
|
|
|
<div class="md-footer-meta md-typeset">
|
|
<div class="md-footer-meta__inner md-grid">
|
|
<div class="md-copyright">
|
|
|
|
|
|
Made with
|
|
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
|
Material for MkDocs
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
</div>
|
|
<div class="md-dialog" data-md-component="dialog">
|
|
<div class="md-dialog__inner md-typeset"></div>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<script id="__config" type="application/json">{"annotate": null, "base": "../..", "features": ["navigation.tabs", "navigation.sections", "navigation.expand", "content.code.copy"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
|
|
|
|
|
<script src="../../assets/javascripts/bundle.79ae519e.min.js"></script>
|
|
|
|
|
|
</body>
|
|
</html> |