H.Genshttps://h-gens.github.io/2016-02-12T15:25:00-05:00Python as a MATLAB alternative2016-02-12T15:25:00-05:002016-02-12T15:25:00-05:00H.G.tag:h-gens.github.io,2016-02-12:/python-as-a-matlab-alternative.html<p>Python can be used as a MATLAB alternative for scientific analysis. This post contains installation advice and example code in both languages.</p><p>I used MATLAB heavily throughout graduate school for analysis of measured data. I parsed text files, created plots for publication, performed optimization, and created GUIs when needed. There really wasn't anything that I felt the tool couldn't do with respect to my needs at the time. I happily continued using MATLAB upon joining my first company until one day we ran out of licenses. At that moment I realized I'd locked myself into a tool whose limited availability was directly related to my ability to do work. Fortunately for me, this came at a point where several established alternatives already existed, and I settled upon Python. </p>
<p>For a Windows user, recreating a MATLAB-like experience is immediately possible by downloading <a href="https://winpython.github.io/">WinPython</a> and using the <a href="https://github.com/spyder-ide/spyder">Spyder IDE</a>. Below is a quick screenshot of the IDE on my computer. Any MATLAB user should quickly appreciate the similarity. </p>
<p><img alt="Spyder IDE" src="images/2016-02-12-matlab-to-python/spyder_ide.png"> </p>
<h2>Details</h2>
<p>Scientific Python is enabled by the "holy trinity" of three Python packages: </p>
<ul>
<li><a href="http://www.numpy.org/">numpy </a></li>
<li><a href="https://www.scipy.org/">matplotlib</a> </li>
<li><a href="http://matplotlib.org/">scipy</a> </li>
</ul>
<p>numpy adds fast arrays/matrices to Python and is the foundation for scipy, which has higher-level mathematical/statistical tools such as curve fitting. matplotlib provides the plotting interface. There are <strong>many</strong> other packages available for scientific computing. </p>
<p>If you were able to learn MATLAB, then you are capable of learning Python. Having been subjected to many programming languages, I can honestly say that Python was the easiest to learn. There are many high-quality tutorials online, and any question a beginner can think of probably already has an answer on <a href="https://stackoverflow.com/questions/tagged/python?sort=frequent&pageSize=15">stackoverflow</a>. Python can be taken anywhere, and I often open up a Python terminal to evaluate expressions instead of losing my sanity using Windows Calculator. </p>
<h2>Installation</h2>
<p>For a Windows user, the easiest way to get started is to download and install <a href="https://winpython.github.io/">WinPython</a> (WinPython comes with Python, so no other downloads are needed). "Installation" just unarchives the contents to a directory of your choosing, which means you do not need administrator rights to install (it's portable). Since it's localized/portable, it won't interfere with a preexisting Python installation. After installation, navigate to the created directory and run Spyder. </p>
<p>The reason WinPython is so large is that it comes with lots of other packages that are useful for scientific analysis. An alternative is to use <a href="https://python-xy.github.io/">Python(x,y)</a>, but it has some limitations: it's not portable, it's still on Python 2.7, and the included version of Python is not 64bit. Some interesting history regarding WinPython and Python(x,y) can be read <a href="http://sourceforge.net/p/winpython/wiki/Roadmap/">here</a>. </p>
<p>A Linux user has it a little easier and can install numpy/scipy/matplotlib from the command line. <a href="https://www.scipy.org/install.html">https://www.scipy.org/install.html</a></p>
<h2>Suggestions for Spyder</h2>
<ul>
<li>
<p>If you experience <a href="https://github.com/spyder-ide/spyder/issues/1831">this bug</a> that causes the user to have to press "run" multiple times, then the solution is to use WinPython 2.7 or just use the IPython console. By default, plots created in the IPython console are displayed inline, which can be changed in Tools -> Preferences -> IPython Console -> Graphics tab -> Backend. </p>
</li>
<li>
<p>If you're new to Python, then it is helpful to turn on automatic help information. In WinPython 3.x, this is in Tools -> Preferences -> Object inspector -> Automatic connections. It's enabled automatically in the version of Spyder bundled in my 2.7 version of Python(x,y) (find in in Tools -> Preferences -> Console -> Introspection tab). </p>
</li>
<li>
<p>In MATLAB, figures appear automatically upon typing <code>figure(1)</code>. To replicate this behavior, one must enable matplotlib's "interactive" mode. One can either add <code>import matplotlib; matplotlib.interactive(True)</code> to each script, or specify a Spyder startup script such as spyderlib\scientific_startup.py via Tools -> Preferences -> Console (or IPython console). </p>
</li>
<li>
<p>Regardless if one uses MATLAB or matplotlib, it becomes annoying to move/resize numerous figures created by a script. <a href="https://h-gens.github.io/creating-a-grid-of-matplotlib-figures.html">matplotgrid</a> is a tool I created for arranging multiple figures into a grid. This is actually something I previously did in MATLAB but brought over to Python since it was so useful. </p>
</li>
</ul>
<h2>Plotting examples</h2>
<p>The following code blocks accomplish the same thing: they demonstrate how one would plot a squared sinusoid. The first example is in MATLAB and the second is in Python. The figures from both blocks are shown. </p>
<p>MATLAB example: </p>
<div class="highlight"><pre><span></span><span class="n">N</span> <span class="p">=</span> <span class="mi">100</span>
<span class="n">L</span> <span class="p">=</span> <span class="mi">4</span> <span class="o">*</span> <span class="nb">pi</span>
<span class="n">dx</span> <span class="p">=</span> <span class="n">L</span> <span class="o">/</span> <span class="p">(</span><span class="n">N</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">x</span> <span class="p">=</span> <span class="mi">0</span><span class="p">:</span><span class="n">dx</span><span class="p">:</span><span class="n">L</span>
<span class="n">y</span> <span class="p">=</span> <span class="nb">sin</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.^</span><span class="mi">2</span>
<span class="n">figure</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">clf</span><span class="p">()</span>
<span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="s">'b-'</span><span class="p">,</span> <span class="s">'LineWidth'</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">xlabel</span><span class="p">(</span><span class="s">'x'</span><span class="p">,</span> <span class="s">'FontSize'</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span>
<span class="n">ylabel</span><span class="p">(</span><span class="s">'sin(x)^2'</span><span class="p">,</span> <span class="s">'FontSize'</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span>
<span class="n">axis</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">4</span> <span class="o">*</span> <span class="nb">pi</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
</pre></div>
<p><img alt="MATLAB output" src="images/2016-02-12-matlab-to-python/example_matlab.png"> </p>
<p>Python example: </p>
<div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span>
<span class="n">N</span> <span class="o">=</span> <span class="mi">100</span>
<span class="n">L</span> <span class="o">=</span> <span class="mi">4</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</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="mi">0</span><span class="p">,</span> <span class="n">L</span><span class="p">,</span> <span class="n">N</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">**</span> <span class="mi">2</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">clf</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="s1">'b-'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'x'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">16</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'sin(x)$^2$'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">16</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">4</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="n">plt</span><span class="o">.</span><span class="n">tight_layout</span><span class="p">()</span>
</pre></div>
<p><img alt="Python output" src="images/2016-02-12-matlab-to-python/example_python.png"> </p>
<blockquote>
<p>One could use <code>plt.xticks([0, 5, 10])</code> and <code>plt.yticks([0, 0.5, 1])</code> to make them even more similar. </p>
</blockquote>Creating a grid of matplotlib figures2015-12-13T16:49:00-05:002015-12-13T16:49:00-05:00H.G.tag:h-gens.github.io,2015-12-13:/creating-a-grid-of-matplotlib-figures.html<p>Whenever I'm analyzing a dataset, I tend to create lots of different plots (e.g., y-axis transforms, different x-variables, etc.). Usually, it's a lot more instructive to view all these plots at once so that differences can be readily viewed. Since it rapidly becomes tedious to manually position/resize the automatically-created plotting windows, I created a tool called <a href="http://github.com/h-gens/matplotgrid"><strong>matplotgrid</strong></a> that tiles the windows.</p><p>Whenever I'm analyzing a dataset, I tend to create lots of different plots (e.g., y-axis transforms, different x-variables, etc.). Usually, it's a lot more instructive to view all these plots at once so that differences can be readily viewed. Since it rapidly becomes tedious to manually position/resize the automatically-created plotting windows, I wrote a tool called <a href="http://github.com/h-gens/matplotgrid"><strong>matplotgrid</strong></a> that tiles the windows. Below is a demonstration of what the tiling looks like. </p>
<p><img alt="Example 1 result" src="images/2015-12-13-matplotgrid/example1.png"> </p>
<blockquote>
<p>from matplotgrid import GridCreator; gc = GridCreator(); gc.create(8) </p>
</blockquote>
<p>This tool will be especially useful for those who work within the Spyder IDE (<a href="https://winpython.github.io/">https://winpython.github.io/</a>) and execute scripts via the Spyder console (a MATLAB-like experience). </p>
<h2>Arguments</h2>
<p><a href="http://github.com/h-gens/matplotgrid"><strong>matplotgrid</strong></a> is controlled by four main arguments: </p>
<ul>
<li>Number of rows in the grid. </li>
<li>Number of columns in the grid. </li>
<li>The monitors to use. <ul>
<li>If this is an integer, then it represents the monitor at which the tiling begins. </li>
<li>If this is a list of integers, then tiling will be constrained to the monitors contained in the list. </li>
</ul>
</li>
<li>Number of figures to create. <ul>
<li>If this is an integer, then N figures are created numbered 1 through N. </li>
<li>If this is a list of integers of length N, then N figures are created numbered according to the content of the list. </li>
</ul>
</li>
</ul>
<h2>Behavior</h2>
<ul>
<li><a href="http://github.com/h-gens/matplotgrid"><strong>matplotgrid</strong></a> automatically detects the number of monitors and their resolutions through the <a href="https://github.com/rr-/screeninfo"><strong>screeninfo</strong></a> module. </li>
<li>Unless otherwise instructed by an argument, the grid is first constructed on the left-most monitor. The first figure is created in the top-left of that first monitor. If enough figures have been created such that the right-most monitor has been filled, then figure creation wraps back around and begins again on the left-most monitor. </li>
<li>Integer row/columns are the most appropriate, but fractional values are allowed (the grid will just extend off-screen). </li>
<li>The same row/column settings are applied to each monitor, meaning figure size will vary between monitors with different resolution. </li>
</ul>
<blockquote>
<p><em>NOTE</em>: <a href="http://github.com/h-gens/matplotgrid"><strong>matplotgrid</strong></a>'s goal is to pack the figures as close as possible. How successful this is depends on the operating system and theme because these determine the border surrounding the figure. The largest contribution to the border is the titlebar (in Windows this contains the window's title and the minimize/maximize/close icons). I chose default values that reflected the border for the Windows 7 "Aero" theme. These defaults are configurable via the <code>prop</code> kwarg when initializing the GridCreator class. </p>
</blockquote>
<h2>Suggestions</h2>
<ul>
<li>As figures are made smaller, the margins (where axis labels are written) are not automatically adjusted. The easiest solution is to call matplotlib.pyplot.tight_layout() on each figure. </li>
<li>Figures will only be created automatically if interactive mode has been enabled with <code>matplotlib.pyplot.ion()</code> or <code>matplotlib.interactive(True)</code>. My startup script for Spyder is spyderlib\scientific_startup.py, which turns interactive mode on automatically. </li>
</ul>
<h2>Usage</h2>
<p>Example 1 </p>
<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">matplotgrid</span> <span class="kn">import</span> <span class="n">GridCreator</span>
<span class="c1"># Define a grid with 3 rows and 6 columns. </span>
<span class="n">gc</span> <span class="o">=</span> <span class="n">GridCreator</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
<span class="c1"># Create 8 figures. </span>
<span class="n">gc</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
</pre></div>
<p>Example 2 </p>
<div class="highlight"><pre><span></span><span class="c1"># create four figures, numbered 9, 10, 11, 12. </span>
<span class="n">gc</span><span class="o">.</span><span class="n">create</span><span class="p">([</span><span class="mi">9</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">12</span><span class="p">])</span>
</pre></div>
<p>Example 3 </p>
<div class="highlight"><pre><span></span><span class="c1"># Create four figures on the second monitor from left.</span>
<span class="n">gc</span> <span class="o">=</span> <span class="n">GridCreator</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">gc</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
</pre></div>
<p>Example 4 </p>
<div class="highlight"><pre><span></span><span class="c1"># Create twenty-two figures but constrain all figures to the first</span>
<span class="c1"># monitor from left.</span>
<span class="n">gc</span> <span class="o">=</span> <span class="n">GridCreator</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">gc</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="mi">22</span><span class="p">)</span>
</pre></div>
<p>The repository can be found <a href="http://github.com/h-gens/matplotgrid">here</a>. </p>Cycling across the U.S.2015-11-26T17:39:00-05:002015-11-26T17:39:00-05:00H.G.tag:h-gens.github.io,2015-11-26:/cycling-across-the-us.html<p>One year, I got it in my head that I wanted to ride my bicycle across the country. What follows is a description of my approach in the event that someone else is searching for information on this topic.</p><p>One year, I got it in my head that I wanted to ride across the country. I was several years removed from being an active cyclist but was experienced enough so that the prospect of such an undertaking wasn't daunting. My only concerns were weather, mechanical problems, and logistics (food/hotels/water). What follows is a description of my approach in the event that someone else is searching for information on this topic. </p>
<h1>Details</h1>
<p>My approach was atypical. Most folks camp and generally take their time, so most everyone I met was surprised by how little I was carrying. I came from a racing background (amateur level but way too into it) and preferred going fast and doing bigger distances. To realize these preferences, I had to travel as lightly as possible and spend more money. Being out of cycling shape coupled with the big distances led to some physical problems (noted below under <strong>Physical toll</strong>). </p>
<p>I suppose one could say that I traveled "ultralight," although I hesitate to use that term since I've read of riders carrying less. </p>
<p><img alt="profile view of loaded bike" src="images/2015-11-26-cycling-across-the-country/Day37_IMGP0267.JPG"></p>
<h2>Route</h2>
<p>I started inland in VA and ended inland in CA. I had enough cycling experience in both start/end locations and wasn't interested in the "dip your wheel in both oceans" thing. Much more appealing was traveling through the middle of the U.S. </p>
<p>My route followed the <a href="http://www.adventurecycling.org/routes-and-maps/adventure-cycling-route-network/transamerica-trail/">TransAmerica Trail</a> to Pueblo, CO and then switched to the <a href="http://www.adventurecycling.org/routes-and-maps/adventure-cycling-route-network/western-express/">Western Express</a>. <strong>Highly recommended</strong> maps are available from <a href="http://www.adventurecycling.org/">Adventure Cycling</a>. These maps show what level of service is available in each town (hotel, gas station, etc.), which is incredibly useful. </p>
<p>Total distance - 3200 miles<br>
Number of riding days - 30<br>
Number of rest days - 5<br>
Daily average excluding rest days - 105<br>
Minimum daily distance - 45 miles<br>
Maximum daily distance - 180 miles </p>
<h2>Weather and timing</h2>
<p>Timing is important since some of the mountain passes along the route can be closed due to snow. The year I left was a heavy snowfall year and some passes had stayed closed into June. I saw heavy amounts of snow on both sides of the road in early July when crossing into CA. </p>
<p>Regardless of what direction you ride, the wind can be against you for days on end in the western, more open portion of the route. Prevailing winds (aka <a href="https://suite.io/jon-plotkin/5xp02e9">westerlies</a> in the U.S.) are directed from west to east, so conventional wisdom says to start in the west. A rider who had done the route before told me of fighting the wind for days on the Western Express while heading <strong>east</strong>, which just emphasizes how locally variable the weather can be. </p>
<p>Arriving to the Western Express portion of the route late in the year can also be problematic due to increased temperatures. Furthermore, too late in the year and there can be flooding when rainstorms occur. <a href="http://www.adventurecycling.org/">Adventure Cycling</a> suggests finishing the Western Express portion by July. Also, there can be flooding in the midwest approaching the Mississippi depending on the time of year. </p>
<p>Tornados are a potential reality in some portions of the route. I checked the weather pretty carefully every day but there's not much to do (other than lay in a ditch?) if you are caught without shelter nearby. I took refuge in a church during a bad thunderstorm in KY that had at least one local heading to a friend's basement (the late-morning sky turned a strange brown color). </p>
<p>The mountain passes and parts of the western states can be incredibly cold, even in late June. I had trouble descending Monarch pass in CO because of cold hands and experienced an unbelievably cold morning in Utah that had me dismount and shiver until the sun got higher. It's something I just accepted since the goal was to travel light. Thankfully, cold weather wasn't a problem outside those two instances. </p>
<p>I left in late May and arrived early July. </p>
<h2>Budget</h2>
<p>I credit card camped (i.e., stayed in hotels) and ate in restaurants for dinner, which drove the budget up. Relying on hotels heavily influenced how far I could ride in a day since there had to be a hotel where I finished. Dinner was often expensive because I would order the same thing twice. Away from big cities, hotels averaged significantly less. </p>
<p>A large portion of my budget went to gear. I had wheels custom built with a high spoke count to avoid a serious mechanical issue in the middle of nowhere. If your rim cracks or the wheel otherwise fails you can be stuck in a town with no bike shop waiting for a shipment to arrive. There aren't a lot of bike shops directly along the route. </p>
<h2>Gear</h2>
<p>The following amount of items in a saddlebag on a smaller bike may be cumbersome (I had a 65cm frame). </p>
<p><strong>Bicycle</strong><br>
- 2004 Cannondale R2000 with Ultegra group<br>
- custom made 700C wheels using DT Swiss parts<br>
- <a href="https://www.revelatedesigns.com/index.cfm?fuseaction=store.catalog&CategoryID=4&ProductID=1">Revelate Viscacha saddlebag</a><br>
- SKS Raceblade front/rear fenders with added 3M reflective tape<br>
- small saddle bag that one might normally have on a road bike<br>
- Specialized Roubaix Armadillo tires, 700x23/25c<br>
- Speedplay X2 pedals </p>
<p><strong>Maintenance</strong><br>
- allen wrenches<br>
- big frame pump (to reach 100+ psi)<br>
- chain lube<br>
- chain tool (full size because I hate miniature ones)<br>
- leatherman<br>
- new chain and rear cassette halfway through<br>
- Park Tools tire boots (instead of a spare tire)<br>
- Schraeder to Presta adapter<br>
- spare spokes taped to frame<br>
- spare SRAM chain masterlink<br>
- tire levers, patch kit, two spare tubes </p>
<p><strong>Clothes</strong><br>
- arm warmers<br>
- Keen closed-toe sandals<br>
- one pair of shorts<br>
- two cycling jerseys<br>
- two pairs of cycling shorts<br>
- two pairs of socks<br>
- two pairs of underwear<br>
- two small Sea-to-Summit dry bags<br>
- two t-shirts<br>
- windproof vest </p>
<p><strong>Electronics</strong><br>
- camera/phone<br>
- flashing red LED rear light (always on, day or night)<br>
- Garmin Oregon GPS<br>
- handlebar light<br>
- iPad<br>
- rechargeable NiMH batteries and charger<br>
- SPOT satellite tracker </p>
<p><strong>Misc</strong><br>
- DZ Nutz chamois cream<br>
- four water bottles<br>
- hydration backpack purchased in KS<br>
- small combination bike lock (I hardly used it)<br>
- sunscreen<br>
- toothbrush + small toothpaste tube </p>
<p>I stored the paper maps on the iPad by taking pictures of them. I also manually created the entire route in the Garmin mapping software and saved it in the GPS. </p>
<p>All garments were made from wicking polyester. Underwear/socks/shirts went into one of the drybags. The other drybag contained electronics. </p>
<p>Everything fit into the giant saddlebag, which predictably swayed slightly when pedalling while standing up. I got used to it. Once the trip was over I had to relearn how to ride standing up since the swaying compensation had become innate. The sandals were strapped to the saddlebag/saddle. </p>
<p>Every night in the hotel room I would hand wash the cycling clothes I wore that day in the tub. I used a washing machine a few times. </p>
<p>Two water bottles were stored in cages on the bike's frame. Two water bottles were stored in rear jersey pockets. I bought a hydration backpack in KS once services started to get more spread out. Some Western Express stretches require you to ride ~100 miles without a gas station. </p>
<p>At the end of every day I "checked-in" with the SPOT personal locator beacon. It has a tracking feature which I did not use in order to conserve battery life (the SPOT used AAA Lithium ion batteries which I didn't feel like tracking down during the trip). </p>
<h1>Characteristic road dangers of each state</h1>
<p>I really enjoyed the route for the most part. Particularly the western Virginia portion because it's composed of mostly quiet and extremely scenic country roads. However, it would be incorrect to say that it's a safe trip because different regions presented unique challenges out on the road. </p>
<ul>
<li><strong>Kentucky</strong> - coal trucks, deep rumble strips + no shoulder, dogs </li>
<li><strong>Missouri</strong> - logging trucks, dogs </li>
<li><strong>Kansas</strong> - big rig trucks. </li>
<li><strong>Colorado</strong> - lots of RVs, campers, and in general, drivers that seemed to pass very closely </li>
<li><strong>Utah</strong> - rental RV vehicles </li>
<li><strong>Nevada</strong> - deep rumble strips on highway 50, serious water challenges due to spread-out gas stations </li>
</ul>
<p>Dogs were a problem because folks out in the rural areas do not have fences. I met a local cyclist out for a ride in Kentucky who had pepper spray mounted to his handlebars. The only time I was truly concerned was when a pack of dogs from a neighborhood in Missouri surrounded me and I couldn't yell them off (they eventually went away). </p>
<p><a href="https://en.wikipedia.org/wiki/Semi-trailer_truck">Big rig trucks</a> had to be treated with respect. There were tons of Kentucky coal trucks hauling loads in the eastern portion. I was repeatedly told that the logging trucks in Missouri were unable to stop going downhill due to the heavy loads. On the two-lane highway 96 in Kansas, very large trucks would unavoidably pass closely and their size/speed would displace such a huge volume of air that I would get pulled towards the truck. People have <a href="http://www.pressherald.com/2013/06/27/crash-report-cites-truck-draft-in-trek-across-maine-cyclists-death/">died</a> that way (getting sucked-in under the truck). </p>
<p>My strategy was to just pull over if a truck was approaching from behind and there was oncoming traffic that would prevent them from moving over. Maybe typical touring cyclists with heavier loads (full camping gear, paniers) are more stable and do not have the air-driven "suck-in" problem? I didn't mind pulling over: Besides the safety aspect, the drivers of these trucks had jobs to do and I was just on vacation. </p>
<p>RVs were nerve-wracking because while a big-rig truck is (presumably) driven by a professional, RV owners are probably everyday people like you and me. Especially the drivers of the rental RVs. This knowledge made me very careful when an RV was about to pass. Sometimes, I just pulled over. Also, the folks in the western states take things to a new level! In Colorado and westward, I saw <a href="http://rv-roadtrips.thefuntimesguide.com/2010/02/rv_towing-2.php">triple towing</a> for the first time (e.g., pickup truck towing a camper towing a boat). </p>
<h1>Physical toll</h1>
<p>These things mainly happened because I wanted to do high mileage days without doing hardly any bike training before leaving. The extra weight from gear made things worse than normal. </p>
<ul>
<li>Aching quadriceps in the second through third weeks from riding my way into shape. They weren't sore, they just ached. I had to easy-pedal in the small ring for a while, which was frustrating. It was a really weird feeling but eventually went away. </li>
<li>Severe neck pain from constantly checking behind me for traffic because I was too dumb to take a mirror. While this became somewhat manageable, it prevented me from doing more long distance rides after the trip. </li>
<li>Numb big toes on each foot because my shoes fit poorly. This persisted for a few months after the trip was over. </li>
<li>Aching palms when leaning on handlebars because I did not wear gloves. This persisted for far less time than the numb toes. </li>
</ul>
<p>The neck pain was the worst and kept me from riding more once I was done. It peaked in severity around the late second week and became manageable after the third week. At its peak, the pain got to the point where I could no longer rotate my head and look behind me for traffic. There are some simple solutions that I ignored: </p>
<ul>
<li>Ride less each day (no thanks). </li>
<li>Ride more before leaving so that the neck muscles are more prepared (I went on about a half dozen rides to wake up the legs). </li>
<li>Use a touring bike or raise the stem to make the back more upright. </li>
<li>Take a simple handlebar mirror to avoid constantly turning around and looking for traffic. </li>
</ul>
<h1>Benefits</h1>
<ul>
<li>Extreme patience with things like waiting in line, traffic, etc. </li>
<li>Newfound appreciation for remote areas of states that I was unlikely to ever visit. </li>
<li>Ability to grind away in the big ring for 12+ hours and climb forever. <em>Tradeoff:</em> complete inability to sprint, which felt really weird. </li>
</ul>
<h1>What I would do differently</h1>
<ul>
<li>Take a smaller tablet. </li>
<li>Take a handlebar mirror. </li>
<li>Wear padded gloves. </li>
<li>Spend time finding better-fitting shoes. </li>
<li>Try to incorporate a <a href="https://www.revelatedesigns.com/index.cfm/store.catalog/frame-bags/TangleFrameBag">frame bag</a> so the saddle bag wouldn't be so large. </li>
<li>Train more beforehand so that big days (~200 miles) could be done earlier in the trip. </li>
<li>Figure out how to reliably inflate tires using a gas station air pump. I imagine this is kinda tricky because it would be easy to overinflate. I had trouble getting the frame pump to put out 110+ psi. Low tire pressure on skinny road tires while carrying extra gear = a slow bike. </li>
<li>Never turn down water in the desert (I did that once after miscalculating and really regretted it). </li>
</ul>
<h1>Images</h1>
<div class="container" style="max-width:750px">
<ul class="gridderB">
<li class="gridder-list" data-griddercontent="#gridderB-content-1">
<img src="images/2015-11-26-cycling-across-the-country/Day01_IMGP0013.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-2">
<img src="images/2015-11-26-cycling-across-the-country/Day23_IMGP0093.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-3">
<img src="images/2015-11-26-cycling-across-the-country/Day02_IMGP0021.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-4">
<img src="images/2015-11-26-cycling-across-the-country/Day09_IMGP0148.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-5">
<img src="images/2015-11-26-cycling-across-the-country/Day14_IMGP0229.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-6">
<img src="images/2015-11-26-cycling-across-the-country/Day16_IMGP0241.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-7">
<img src="images/2015-11-26-cycling-across-the-country/Day16_IMGP0244.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-8">
<img src="images/2015-11-26-cycling-across-the-country/Day22_IMGP0085.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-9">
<img src="images/2015-11-26-cycling-across-the-country/Day29_IMGP0172.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-10">
<img src="images/2015-11-26-cycling-across-the-country/Day34_IMGP0244.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-11">
<img src="images/2015-11-26-cycling-across-the-country/Day07_IMGP0111.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-15">
<img src="images/2015-11-26-cycling-across-the-country/Day18_IMGP0024.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-12">
<img src="images/2015-11-26-cycling-across-the-country/Day11_IMGP0186.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-13">
<img src="images/2015-11-26-cycling-across-the-country/Day13_IMGP0198.JPG" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-14">
<img src="images/2015-11-26-cycling-across-the-country/Day19_IMGP0039.JPG" class="img-responsive" />
</li>
</ul>
<div id="gridderB-content-1" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day01_IMGP0013.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Some roads are in the middle of nowhere.</p>
</div>
</div>
</div>
<div id="gridderB-content-2" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day23_IMGP0093.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Some roads are four lane highways.</p>
</div>
</div>
</div>
<div id="gridderB-content-3" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day02_IMGP0021.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Drying washed clothes. Since the flash was on, you can see the 3M reflective tape I added to the fenders. It's difficult to see, but the small combination lock is wrapped around the head tube.</p>
</div>
</div>
</div>
<div id="gridderB-content-4" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day09_IMGP0148.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Ohio River ferry crossing</p>
</div>
</div>
</div>
<div id="gridderB-content-5" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day14_IMGP0229.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Bridge under construction.</p>
</div>
</div>
</div>
<div id="gridderB-content-6" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day16_IMGP0241.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">While everyone I met was using paper maps to navigate, I was using a GPS. This was really nice and only failed me once. I was riding along in Kansas and noticed traffic had pretty much disappeared. In fact, the road became pretty desolate, but I kept going because the GPS said to. Eventually, the road completely dead-ends into grass. The Garmin mapping software was unaware a new road had been constructed off to the right.</p>
</div>
</div>
</div>
<div id="gridderB-content-7" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day16_IMGP0244.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">One of the more obvious signs along the route.</p>
</div>
</div>
</div>
<div id="gridderB-content-8" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day22_IMGP0085.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Eastern Colorado meets western Kansas.</p>
</div>
</div>
</div>
<div id="gridderB-content-9" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day29_IMGP0172.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">I saw maybe five cars during the 5+ hours I was on this stretch in Utah.</p>
</div>
</div>
</div>
<div id="gridderB-content-10" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day34_IMGP0244.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Nevada/Utah area. I think everyone takes a picture like this. One goes straight ahead for 20 miles, climbs a mountain, decends mountain, repeat ... This is one of the longest stretches without services (about 80 miles).</p>
</div>
</div>
</div>
<div id="gridderB-content-11" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day07_IMGP0111.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">One runs into other cyclists riding the TransAmerica Trail. I probably saw at least a dozen. Everyone I met was camping.</p>
</div>
</div>
</div>
<div id="gridderB-content-15" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day18_IMGP0024.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Self portrait.</p>
</div>
</div>
</div>
<div id="gridderB-content-12" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day11_IMGP0186.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Road surfaces of the U.S., part I. Different areas had different colors to the road, which I assume was indicative of whatever local quarry was used. (Yes, things do get boring.)</p>
</div>
</div>
</div>
<div id="gridderB-content-13" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day13_IMGP0198.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Road surfaces of the U.S., part II.</p>
</div>
</div>
</div>
<div id="gridderB-content-14" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-26-cycling-across-the-country/Day19_IMGP0039.JPG" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Road surfaces of the U.S., part III.</p>
</div>
</div>
</div>
</div>
<h1>Anecdotes</h1>
<ul>
<li>I was climbing a mountain pass in eastern Kentucky that wouldn't seem to end. Eventually a driver pulled up in an old Camry to say hello. After a brief exchange of formalities through the passenger side window, he says "hold on." We proceed to continue making idle conversation as he pulls me up the mountain for about 5 minutes (I'm hanging onto the car while riding). He was a super nice guy and even offered me a beer. This was a narrow, winding road in Appalachia and I almost went off the edge when a car approached us from the opposite direction. While I would have made it over the pass regardless, this kind gesture was an amazing psychological boost. </li>
<li>The Ohio river is crossed at Cave-In-Rock, IL. While there is no real story to go with this one, it was a unique experience to ride my bike onto a ferry, cross the river, and then ride off. I guess it doesn't take much to entertain me. </li>
<li>Crossing the Mississippi river at Chester, IL was nerve wracking. There is a shoulder on the bridge but it's elevated by a foot so it's impossible to move over for traffic. Vehicles are moving quickly and the Mississippi is a <strong>wide</strong> river. I asked a trooper if he had any crossing-by-bike advice, and he didn't. All he said was, "maybe you'll get them to actually slow down," which wasn't exactly encouraging. So I waited for a big gap and went all-out. I don't know how, but I'd chosen perfectly since no traffic was in my lane. I hadn't escaped the bridge for 30 seconds when big rigs come flying by. It was one of the more stressful traffic situations of the trip. </li>
<li>I'm riding along in Missouri when all of a sudden I'm greeted with a "road closed" sign. I mean, this is a pretty jarring experience because no other alternative really comes to mind. I don't live here, I've never been here, and a detour would probably add 20 miles. Instead of turning back (and taking what route?), I continue forward to see just how "closed" this road is. Turns out, very closed. See, the state of Missouri decided to spend money on rural bridges the summer I went on my trip. In this case, the workers were replacing a bridge spanning a 30ft creek. I dismount, walk over, and am eventually waived over this partially completed bridge. This scenario repeated itself twice. </li>
<li>You see all kinds of nice and interesting people along the route. I met a couple riding from California to Colorado to their own wedding. One young guy had his dog with him on a trailer, but had to rent a car and take the dog home because of the heat. Another rider was on a singlespeed bike. Also, there's all kinds of other people just crossing the U.S. at any given time via other means. Groups of touring motorcyclists are a common sight (I think they're as concerned/respectful of trucks and wind as cyclists). Finally, there was one person I saw only briefly because I was descending fast. I heard it was a visitor from Japan on some type of pedaling machine (I've already forgotten; a three wheeled cart maybe?) with a HUGE basket just filled with stuff. </li>
<li>I found it really hard to carry enough water in Nevada. Unlike an east coast "hot," a Nevada hot doesn't drench your clothes in sweat. Instead, you're constantly losing fluid while staying dry. Well, one day I had miscalculated my fluid intake and was getting in serious trouble towards the end. I was less than 15 miles from my destination but needed to make it up one final 20+ minute climb. The problem was that I was developing a headache and pretty much out of water. You can't just pull over at a gas station because this is rural Nevada -- there really aren't any outside of town. So I'm climbing up the pass, deciding if I need to pull over and waive down a car, when I see an older gentleman already pulled over. He's standing by his car, arm outstretched holding a water bottle, and shouting "domestique!" This guy was scouting locations to do a bike trip with his own son and just happened to be there when I needed help the most. It was incredible. </li>
<li>A Days Inn in Montrose, Colorado had this laminated message on its beds. One can find variations of this "Stranger within our gates" message in other places, but I had never seen it until then. <blockquote>
<p>Because this is a human institution to serve people, we hope that God will grant you peace and rest while you are under our roof. May those that you love be near you in your thoughts and dreams. Even though we may not get to know you, we hope that you will be comfortable and happy as if you were in your own house. May the business that brought you our way prosper. May every call you make and every message you receive add to your journey. We are all travelers. From "birth to death" we travel between eternities. May these days be pleasant for you, profitable for society, helpful for those you meet, and a joy to those we know and love you best. </p>
</blockquote>
</li>
</ul>
<h1>Closing</h1>
<p>I can't say that cycling across the U.S. is the safest thing in the world to do, but it certainly is one of the best ways to appreciate the landscape. I went as fast as possible, but that made it fun for me. Others may enjoy camping and spending time in the national parks along the route. Regardless of how one approaches such a trip, he/she is unlikely to experience anything similar ever again. </p>
<h1>Useful resources</h1>
<ul>
<li><a href="http://www.adventurecycling.org">Adventure Cycling</a> (maps, route information, forums) </li>
<li><a href="https://www.reddit.com/r/bicycletouring/">bicycletouring subreddit</a> (riders post their travel logs here, which is super useful) </li>
<li><a href="http://www.crazyguyonabike.com/">crazyguyonabike</a> </li>
</ul>
<script>
jQuery(document).ready(function ($) {
// Call Gridder 1
$(".gridderB").gridderExpander({
scroll: true,
scrollOffset: 60,
scrollTo: "panel", // panel or listitem
animationSpeed: 400,
animationEasing: "easeInOutExpo",
onStart: function(){
// console.log("Gridder Inititialized");
},
onContent: function(){
// console.log("Gridder Content Loaded");
// $(".carousel").carousel();
},
onClosed: function(){
// console.log("Gridder Closed");
}
});
// Call Gridder 1
$(".gridderA").gridderExpander({
scroll: true,
scrollOffset: 60,
scrollTo: "panel", // panel or listitem
animationSpeed: 400,
animationEasing: "easeInOutExpo",
onStart: function(){
// console.log("Gridder Inititialized");
},
onContent: function(){
// console.log("Gridder Content Loaded");
// $(".carousel").carousel();
},
onClosed: function(){
// console.log("Gridder Closed");
}
});
});
</script>Prindle 19 basics2015-11-23T21:12:00-05:002015-11-23T21:12:00-05:00H.G.tag:h-gens.github.io,2015-11-23:/prindle-19-basics.html<p>My first sailboat was a Prindle 19 catamaran, and I had no idea what I was doing when I started. This post attempts to document the things I learned.</p><p>I bought a Prindle 19 catamaran as my first boat. While I was comfortable on/in the water, I hardly knew anything about sailing. There was a lot to learn, which is what this post attempts to document. </p>
<p>Maybe this will help someone else out there feel less intimidated with regards to getting into catamarans. My advice is to ignore the racing-minded folk whose comments are always couched in terms of racing and remember one thing instead: <em>the basics of sailing are easy but sailing well is difficult</em>. Who cares about the latter if you just want to have fun. Know your right-of-way rules and stay out of trouble. </p>
<p><img alt="boat from stern" src="images/2015-11-23-prindle19-howto/boat-from-stern.jpg"></p>
<h1>Definitions</h1>
<ul>
<li><strong>Bitter end</strong> - The end of a line. </li>
<li><strong>Block</strong> - Nautical term for a pulley. </li>
<li><strong>Bolt rope</strong> - The portion of the mainsail's luff that attaches to the mast. It resembles a rope that has sailcloth wrapped around it. </li>
<li><strong>Bow</strong> - Front of the boat. </li>
<li><strong>Clew</strong> - The bottom corner of the sail that is closest to the stern. </li>
<li><strong>Curf</strong> - The mast's channel through which the mainsail's bolt rope is fed. </li>
<li><strong>Foot</strong> - The bottom of the sail. </li>
<li><strong>Forestay</strong> - Metal cabling that extends from the bow to the top of the mast. </li>
<li><strong>Forestay Y</strong> - The branching of the forestay into two cables terminating at the port/starboard bows. </li>
<li><strong>Halyard</strong> - A line that raises a sail. </li>
<li><strong>Head</strong>- The top of the sail. </li>
<li><strong>Luff</strong> - The vertical edge of a raised sail that faces the bow. </li>
<li><strong>Mast locking hook</strong> - Hook at the top of the mast where the main halyard ring attaches. </li>
<li><strong>Port</strong> - Left side of the boat when standing in the middle of the boat and facing the bow. </li>
<li><strong>Safety position</strong> - When the boat is positioned so that the wind is crossing its side with the jib/mainsheet lines let out so that the sails are not powered up. </li>
<li><strong>Shroud</strong> - Metal cabling that extends from the top of the mast to either the port or starboard side of the boat. </li>
<li><strong>Stern</strong> - Rear of the boat. </li>
<li><strong>Starboard</strong> - Right side of the boat when standing in the middle of the boat and facing the bow. </li>
<li>Reference: <a href="https://en.wikipedia.org/wiki/Parts_of_a_sail">Parts of a sail</a> </li>
</ul>
<h1>Section I: Rigging</h1>
<h2>Preparation</h2>
<ol>
<li>Raise mast.</li>
<li>Insert drain plugs. </li>
<li>Insert hull access port covers. </li>
<li>Lock the rudders in the "up" position. </li>
<li>Attach the tiller. </li>
<li>Connect the boom to the mast and connect the mast rotation line from the boom, through the wishbone on the mast, and finally back through the V-cleat on the boom. </li>
<li>Install the traveler line, if necessary. Thread the traveler line through the "eye strap" on the rear crossbar and tie a figure-8 knot at the bitter end. </li>
<li>Install the main blocks/sheet by shackling the base of the main blocks to the traveler. Do not attach to the boom. Consider tying together the bitter ends of the mainsheet and traveler line. </li>
<li>Place the beach wheels under the boat and parallel with the shrouds. At each shroud, pull up tightly on the adjacent wheel's rope and wrap multiple times around the shroud. Secure with an easy-to-remove knot (the multiple wraps will hold things in place). </li>
<li>Move the boat so that its bows are facing into the wind. </li>
</ol>
<h2>Raising the jib</h2>
<ol>
<li>Orient the S-hook on the jib halyard so that it appears as an "S" when viewed from the port side of the boat. </li>
<li>Use a shackle to connect the lower part of the S-hook to the eyelet on the jib's head. </li>
<li>Partially zip the jib to the forestay by enclosing the forestay and jib halyard in the jib's luff. (Once raised, the jib halyard should be total enclosed in the zipper just like the forestay.) </li>
<li>Raise the jib. Closer the zipper as it's raised. </li>
<li>When the S-hook reaches the jib halyard ring near the top of the forestay, it must be locked into the halyard ring. Pull on the jib halyard so that the S-hook goes through/above the halyard ring, and then pull down on the clew until the S-hook catches. </li>
<li>Leave around 1 foot of the jib's luff unzipped. </li>
<li>Coil the remaining jib halyard line and store inside the zipper. </li>
<li>Tightly wrap the jib downhaul around the forestay Y and secure in the jib cleat. </li>
<li>Using a bungee, furl the jib (wrap it around the forestay) to keep it from flapping. </li>
</ol>
<h2>Raising the main</h2>
<ol>
<li>Connect the main halyard's ring to the eyelet on the mainsail's head using a shackle. </li>
<li>Feed the mainsail's bolt rope into the mast's curf. </li>
<li>Raise the mainsail by pulling on the main halyard. </li>
<li>The mainsail is locked-in when the halyard ring reaches the mast’s locking hook. The ring will fly completely past the hook if you pull up too hard on the main halyard. If that happens, then the mainsail will lower without locking-in. The idea is to pull up just hard enough so that the ring partially passes the locking hook. If done correctly, the ring will then settle upon the hook when tension is removed from the main halyard. </li>
<li>Tug down on the foot of the sail to ensure the halyard ring is locked. </li>
<li>Coil the main halyard and store in a trampoline pocket. </li>
<li>Thread the downhaul lines on each side of the mainsail. </li>
<li>Use a shackle to connect the boom to the clew of the mainsail. </li>
<li>Leave boom disconnected from the mainsheet blocks. </li>
</ol>
<h2>Launching</h2>
<ol>
<li>Uncleat jib/mainsail/traveler lines and let out plenty of line. This will help avoid powering up the sails before launching. </li>
<li>Roll the boat into the water. </li>
<li>Point the bow of the boat into the wind. </li>
<li>Have another person stand in the water at the bow while holding onto one side of the forestay Y. This keeps the bows from rotating downwind and the sails from powering up. One can think of this as "weather-vaning" the boat, and doing so effectively puts the boat into neutral. </li>
<li>Remove wheels and store on shore. </li>
<li>Walk the boat to deeper water and lock the rudders in the down position. </li>
<li>Unfurl the jib and connect the jib line to the clew. This can be done with a knot, shackle, or climbing carabiner. </li>
<li>Connect the mainsheet blocks to the boom using a shackle or carabiner. </li>
<li>Give the bow a shove so that the boat rotates partially downwind into the safety position and hop on. </li>
<li>Sheet in the jib, then the main. </li>
<li>Rotate the centerboards to the down position if heading upwind. </li>
<li>Done. </li>
</ol>
<h2>De-rigging and storage</h2>
<ol>
<li>Perform the rigging steps in reverse. </li>
<li><em>Suggestion:</em> leave the drain plugs and hull access port covers open. Yes, water may go in the access port covers but it's going to drain/evaporate. </li>
<li><em>Suggestion:</em> place cushioning under the sterns. Closed-cell foam works great. Use kayak transportation foam (for car-topping) or cut a camping pad into sheets and stack them together. </li>
<li>Place the beach wheels' axle one foot forward of the front crossbar and secure the wheels' rope to shroud. This keeps the boat at an angle and drains water. The boat can also be left lying flat on the ground, which should be better for longer-term storage. </li>
</ol>
<h1>Section II: Prindle 19 features</h1>
<h3>Barberhauler</h3>
<p>This is intended to help with downwind performance of the jib, I think. The barberhauler line effectively pulls on the jib's clew so that the jib's foot is more parallel with the front crossbar. I found it annoying since the previous owner had done a poor job of installing the small blocks that attach to the front crossbar. I always meant to remove it but never got around to it. </p>
<h3>Four-way jib system</h3>
<p>I never figured out how to use this system properly and instead just set it in a constant configuration. It's for people who actually know how to sail. I would suggest removing it if you value trampoline space over performance. </p>
<h3>Rotating centerboards</h3>
<p>These are self-explanatory. However, one does not rotate them all the way up when going downwind, which is when one makes use of a shock cord running from the shroud to the centerboard's pivoting cylinder. From <a href="http://www.catsailor.com/forums/ubbthreads.php?ubb=showflat&Number=52609">"gregP19" on catsailor.com</a>:</p>
<blockquote>
<p>"Each centerboard had a short piece of pvc pipe that slips thru a hole in the board. This piece of pvc acts as a kind of axle allowing the board to pivot into or out of the trunk. The outboard end of this piece of pvc has a small hole that has a 3/8"(I think) piece of shock cord with a stopper knot to hold it in place. The other end of this piece of shock cord is formed into a loop. Hog rings work well here if they are taped to avoid scratching. This loop slides over the shroud chainplate with no slack. When you are going downwind you want your boards up, but not completely up into the trunk because the P19 doesn't have gaskets like the Tornado and you get gurgling in the trunk. The idea is to rotate the board up most of the way and lock it in place. To do this you push the piece of shock cord a couple of inches forward of the verticle slot in the trunk where it normally stays out of the way. You then push the centerboard up and rotate it forward until it jams against the shock cord and stays in place. It's a very simple, foolproof system."</p>
</blockquote>
<h1>Section III: Righting</h1>
<p>In my brief experience, a capsize was always caused by a cleated mainsheet. If the mainsheet is left uncleated at all times, the operator can quickly perform an emergency release during an unexpected gust. Fortunately, the boat is not too difficult to right, especially with more than one person. If all else fails, hail a motorboat and have them "walk the mast" with their hands while you lean backwards on the righting line. </p>
<p>To practice righting, intentionally capsize in deep-enough water by pulling on one of the shrouds or trapeze lines with a partner. The boat will come down in slow motion if the mainsail is on. Stay near the trampoline as the boat falls so that the boom does not hit you. </p>
<p>In high winds it can actually be easier to right the boat. However, the boat must be positioned so that the wind flows under the mainsail (equivalent to the bows pointed into the wind). I believe one would have to stand on the submerged hull closer to its bow in order to get the boat to rotate, although the Prindle 19 manual says to walk towards the stern. I have no experience doing this. </p>
<p>I have no experience righting from the turtle position (capsized boat with mast straight down in the water) because my mast was apparently well-sealed. The idea is to take the righting line and lean backward from one of the hulls (same idea as righting from a non-turtled position). </p>
<h3>Dry-capsize</h3>
<p>When on land, it is sometimes helpful to lay the boat on its side so that problems near the top of the mast can be sorted out. Lay the boat down flat and clear our any rocks the hull might land on. With another person (if necessary) grab a trapeze line and pull. Once the boat reaches its tipping point, the mast can be caught by reaching for a shroud. </p>
<h2>Righting procedure</h2>
<ol>
<li>Uncleat the jib/mainsheets and traveler. Let the lines out as far as possible. If the lines are left cleated the sails may scoop up water and make righting impossible. </li>
<li>Throw the righting bag or line over the non-submerged hull. </li>
<li>Stand parallel with the front crossbar. </li>
<li>Fill the righting bag with water or attach righting line to harness hook by creating a loop in the line. </li>
<li>Lean back. If present, the righting bag should be behind you and over one of your shoulders. Your legs must be as far out as possible. The idea is to push your center of mass away from the boat as far as possible in order to create a large righting moment. </li>
<li>The boat should right. Be patient. Watch out for the dolphin striker and hull falling down. </li>
<li>Climb aboard. </li>
<li>If the righting bag was used, it may begin to act like a huge sea anchor. Try to pull it aboard by pulling the bottom of the bag so that you don't have to fight the sea anchor effect. </li>
</ol>
<h1>Section IV: Maintenance</h1>
<h3>Beach wheels</h3>
<p>I purchased <a href="http://www.murrays.com/mm5/merchant.mvc?Screen=PROD&Product_Code=13-1402&Category_Code=C-TP">beach wheels from murrays.com</a> that are actually sourced from Florida Sailcraft. I don’t think these require any maintenance and I’ve heard stories of beach wheels being left outside for years and years. They're incredibly simple. Each wheel’s bearings are actually just a bunch of nylon cylinders that are kept in place by a metal annulus on each side of the wheel (cotter pins keep each annulus in place). </p>
<h3>Boat cover</h3>
<p>A sunbrella cover is suggested to preserve the trampoline from UV degradation. I had one made locally. The cheap/lazy solution is a tarp, which will only last about a season -- it's amazing what happens to a tarp left outside over a year. It just starts to disintegrate, which doesn't sit well with me because that means the plastic material is dispersing into the environment. </p>
<h3>Bolt rope lubrication</h3>
<p>Apply paraffin wax to the mainsail's bolt rope to make raising/lowering easier. "Gulf Wax Household Paraffin Wax" can be found at walmart or amazon. </p>
<h3>Cleat rebuild</h3>
<p>As cleats age, they may need their Delrin bearings replaced. This is an easy fix. The cleats on my boat were Harken 150 types. Order a Harken 150 rebuild kit and disassemble/clean cleat before replacing the bearings. Some of my boat’s cleats were so old they did not use all the parts present in the rebuild kit. Search for "H150 Cam Rebuild Kit" on <a href="http://www.apsltd.com">ASP Ltd</a>. </p>
<h3>Non-skid decking</h3>
<p>I placed spongy non-skid material on the hulls' top surfaces. It was purchased from a company that sells a product called <a href="http://www.raptordeck.com">"Raptor deck"</a>. They produce a foam non-skid with adhesive backing (grooves are cut into the foam surface to form diamond shapes). They shape the panels according to a stencil or measurements you provide. I had to sand off the previous non-skid that had been painted on so that the adhesive would adhere better. </p>
<h3>Raising/lowering the mast</h3>
<p>Insert the mast step hinge and the two mast hinge pins. Have one person on the trampoline ready to support the mast and another person at the forestay. The person at the forestay removes the forestay shackle and lets go of the forestay. The person on the trampoline must support the mast and must be strong enough to do so. Other people have devised electronic winching mechanisms so they can do this solo. </p>
<p>For transporting, the shrouds are coiled (without detaching them from the mast or the hulls' shroud chainplates) and secured to the trampoline. </p>
<h3>Wintering</h3>
<p>Remove beach wheels from under the boat so that the hulls lay on the ground. Optionally, place a strip of carpet under each hull. Choose a width that prevents grass from growing into and possibly staining the hulls. I've seen boats wintered without carpet and they seemed fine in the Spring. Last I spoke with an older member of my sailing club, there are two schools of thought regarding the shrouds' tension (slackened or leave tightened) for mast-up boat storage over the winter. From our discussion, the conclusion was to just leave them alone. </p>
<h3>Replacement lines</h3>
<p>What follows is a list of lines used on the Prindle 19 and their diameters. Precut lines can be purchased from <a href="http://www.saltydogmarine.com/product_info.php?cPath=421&products_id=3858">Salty Dog Marine</a>. </p>
<table>
<tr>
<td></td>
<td colspan=2>Diameter</td>
<td colspan=2>Length</td>
<td></td>
</tr>
<tr>
<td>Name</td>
<td>inches</td>
<td>mm</td>
<td>ft</td>
<td>cm</td>
<td>qty</td>
</tr>
<tr>
<td>Barberhauler</td>
<td>1/4</td>
<td>6</td>
<td>18</td>
<td>487.7</td>
<td>1</td>
</tr>
<tr>
<td>Batten ties</td>
<td>3/32</td>
<td>2</td>
<td>1.83</td>
<td>55.9</td>
<td>11</td>
</tr>
<tr>
<td>Downhaul</td>
<td>1/4</td>
<td>6</td>
<td>15</td>
<td>457.2</td>
<td>1</td>
</tr>
<tr>
<td>Jib block adjustment</td>
<td>1/4</td>
<td>6</td>
<td>9</td>
<td>274.3</td>
<td>2</td>
</tr>
<tr>
<td>Jib clew bridle</td>
<td>3/16</td>
<td>5</td>
<td>6</td>
<td>182.9</td>
<td>1</td>
</tr>
<tr>
<td>Jib halyard</td>
<td>5/32</td>
<td>4</td>
<td>22</td>
<td>670.6</td>
<td>2</td>
</tr>
<tr>
<td>Jib sheet</td>
<td>5/16</td>
<td>8</td>
<td>33</td>
<td>1005.8</td>
<td>1</td>
</tr>
<tr>
<td>Main halyard</td>
<td>3/16</td>
<td>5</td>
<td>61</td>
<td>1859.3</td>
<td>1</td>
</tr>
<tr>
<td>Main sheet</td>
<td>3/8</td>
<td>10</td>
<td>40</td>
<td>1219.2</td>
<td>1</td>
</tr>
<tr>
<td>Mast rotator</td>
<td>3/16</td>
<td>5</td>
<td>5</td>
<td>152.4</td>
<td>1</td>
</tr>
<tr>
<td>Rudder pull down</td>
<td>1/4</td>
<td>6</td>
<td>4</td>
<td>121.9</td>
<td>2</td>
</tr>
<tr>
<td>Rudder pull up</td>
<td>1/4</td>
<td>6</td>
<td>5</td>
<td>152.4</td>
<td>2</td>
</tr>
<tr>
<td>Tramp lace</td>
<td>3/16</td>
<td>5</td>
<td>19</td>
<td>579.1</td>
<td>2</td>
</tr>
<tr>
<td>Trapeze adjustment</td>
<td>1/4</td>
<td>6</td>
<td>3.5</td>
<td>106.7</td>
<td>4</td>
</tr>
<tr>
<td>Traveler</td>
<td>5/16</td>
<td>8</td>
<td>10</td>
<td>304.8</td>
<td>1</td>
</tr>
</table>
<h1>Section V: Images</h1>
<div class="container" style="max-width:750px">
<ul class="gridderA">
<li class="gridder-list" data-griddercontent="#gridderA-content-2">
<img src="images/2015-11-23-prindle19-howto/boom-bolt.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderA-content-5">
<img src="images/2015-11-23-prindle19-howto/halyard-ring.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderA-content-6">
<img src="images/2015-11-23-prindle19-howto/wheels-to-shroud.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderA-content-8">
<img src="images/2015-11-23-prindle19-howto/boom-clew-attach.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderA-content-7">
<img src="images/2015-11-23-prindle19-howto/hull-cushion.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderA-content-1">
<img src="images/2015-11-23-prindle19-howto/traveler-figure-8.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderA-content-3">
<img src="images/2015-11-23-prindle19-howto/boom-mast-rotation.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderA-content-4">
<img src="images/2015-11-23-prindle19-howto/bowline-to-traveler.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderA-content-9">
<img src="images/2015-11-23-prindle19-howto/mast-step-hinge.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderA-content-10">
<img src="images/2015-11-23-prindle19-howto/mast-supporter.jpg" class="img-responsive" />
</li>
</ul>
<div id="gridderA-content-2" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/boom-bolt.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Boom connects to mast with a single, long clevis pin.</p>
</div>
</div>
</div>
<div id="gridderA-content-5" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/halyard-ring.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">This is an "Aussie" halyard ring because it has the halyard attachment ring offset ~30 degrees from center.</p>
</div>
</div>
</div>
<div id="gridderA-content-6" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/wheels-to-shroud.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">When securing the beach wheels to the boat, wrap the shroud several times and secure in an easy-to-remove manner.</p>
</div>
</div>
</div>
<div id="gridderA-content-8" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/boom-clew-attach.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Example showing mainsheet blocks attached to the boom with a caribiner. The shackle at the top connects the boom's outhaul with the mainsail's clew.</p>
</div>
</div>
</div>
<div id="gridderA-content-7" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/hull-cushion.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Example of cushioning provided to the stern using stacked sheets of foam camping pads.</p>
</div>
</div>
</div>
<div id="gridderA-content-1" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/traveler-figure-8.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Traveler line goes through a "pad eye" (or, "eye strap") on the rear cross bar and a figure-8 knot keeps it from being pulled through.</p>
</div>
</div>
</div>
<div id="gridderA-content-3" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/boom-mast-rotation.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Mast rotation line.</p>
</div>
</div>
</div>
<div id="gridderA-content-4" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/bowline-to-traveler.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Connect the traveler and mainsheet lines to make it easier to access the traveler line.</p>
</div>
</div>
</div>
<div id="gridderA-content-9" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/mast-step-hinge.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">Mast step hinge and pins. I think that only one of the pins is truly a mast step hinge pin (the larger diameter one with the ring).</p>
</div>
</div>
</div>
<div id="gridderA-content-10" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/mast-supporter.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<p style="max-width:750px">PVC mast support for trailering. The cutout on the left rests on the rear crossbar, and the cutout on the right supports the mast (place padding here).</p>
</div>
</div>
</div>
</div>
<h3>Coiling lines</h3>
<p>Use this technique when coiling lines to avoid twisting them and making the unraveling process a mess. </p>
<div class="container" style="max-width:750px">
<ul class="gridderB">
<li class="gridder-list" data-griddercontent="#gridderB-content-1">
<img src="images/2015-11-23-prindle19-howto/coiling-1.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-2">
<img src="images/2015-11-23-prindle19-howto/coiling-2.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-3">
<img src="images/2015-11-23-prindle19-howto/coiling-3.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-4">
<img src="images/2015-11-23-prindle19-howto/coiling-4.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-5">
<img src="images/2015-11-23-prindle19-howto/coiling-5.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-6">
<img src="images/2015-11-23-prindle19-howto/coiling-6.jpg" class="img-responsive" />
</li>
<li class="gridder-list" data-griddercontent="#gridderB-content-7">
<img src="images/2015-11-23-prindle19-howto/coiling-7.jpg" class="img-responsive" />
</li>
</ul>
<div id="gridderB-content-1" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/coiling-1.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<h2>Step 1</h2>
<p style="max-width:750px">Alternately drape the line over each side of your hand.</p>
</div>
</div>
</div>
<div id="gridderB-content-2" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/coiling-2.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<h2>Step 2</h2>
<p style="max-width:750px">Fold the draped line in half.</p>
</div>
</div>
</div>
<div id="gridderB-content-3" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/coiling-3.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<h2>Step 3</h2>
<p style="max-width:750px">Use the remaining uncoiled line and wrap it around the folded line.</p>
</div>
</div>
</div>
<div id="gridderB-content-4" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/coiling-4.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<h2>Step 4</h2>
<p style="max-width:750px">Take the remaining line and form a loop.</p>
</div>
</div>
</div>
<div id="gridderB-content-5" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/coiling-5.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<h2>Step 5</h2>
<p style="max-width:750px">Push the loop through the inside center of the folded line.</p>
</div>
</div>
</div>
<div id="gridderB-content-6" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/coiling-6.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<h2>Step 6</h2>
<p style="max-width:750px">Bring the loop back over the outside of the folded line.</p>
</div>
</div>
</div>
<div id="gridderB-content-7" class="gridder-content">
<div class="row">
<div class="col-sm-6">
<img src="images/2015-11-23-prindle19-howto/coiling-7.jpg" class="img-responsive" />
</div>
<div class="col-sm-6">
<h2>Step 7</h2>
<p style="max-width:750px">Cinch tightly. The bitter end should be secured and the coil now fixed in place.</p>
</div>
</div>
</div>
</div>
<h1>Section VI: Helpful links</h1>
<ul>
<li><a href="http://www.thebeachcats.com">The Beach Cats</a></li>
<li><a href="docs/P19_18-2-1.pdf">Prindle 19 manual</a></li>
<li><a href="docs/cat_trax.pdf">Cat trax instructions</a></li>
</ul>
<script>
jQuery(document).ready(function ($) {
// Call Gridder 1
$(".gridderB").gridderExpander({
scroll: true,
scrollOffset: 60,
scrollTo: "panel", // panel or listitem
animationSpeed: 400,
animationEasing: "easeInOutExpo",
onStart: function(){
// console.log("Gridder Inititialized");
},
onContent: function(){
// console.log("Gridder Content Loaded");
// $(".carousel").carousel();
},
onClosed: function(){
// console.log("Gridder Closed");
}
});
// Call Gridder 1
$(".gridderA").gridderExpander({
scroll: true,
scrollOffset: 60,
scrollTo: "panel", // panel or listitem
animationSpeed: 400,
animationEasing: "easeInOutExpo",
onStart: function(){
// console.log("Gridder Inititialized");
},
onContent: function(){
// console.log("Gridder Content Loaded");
// $(".carousel").carousel();
},
onClosed: function(){
// console.log("Gridder Closed");
}
});
});
</script>Recovering a lost combination2015-11-21T14:21:00-05:002015-11-21T14:21:00-05:00H.G.tag:h-gens.github.io,2015-11-21:/recovering-a-lost-combination.html<p>An example of using Python to recover a lock's forgotten combination.</p><style type="text/css">/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI colors. */
.ansibold {
font-weight: bold;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
color: black;
}
.ansired {
color: darkred;
}
.ansigreen {
color: darkgreen;
}
.ansiyellow {
color: #c4a000;
}
.ansiblue {
color: darkblue;
}
.ansipurple {
color: darkviolet;
}
.ansicyan {
color: steelblue;
}
.ansigray {
color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
background-color: black;
}
.ansibgred {
background-color: red;
}
.ansibggreen {
background-color: green;
}
.ansibgyellow {
background-color: yellow;
}
.ansibgblue {
background-color: blue;
}
.ansibgpurple {
background-color: magenta;
}
.ansibgcyan {
background-color: cyan;
}
.ansibggray {
background-color: gray;
}
div.cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
border-radius: 2px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: transparent;
width: 100%;
padding: 5px;
/* This acts as a spacer between cells, that is outside the border */
margin: 0px;
outline: none;
border-left-width: 1px;
padding-left: 5px;
background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
}
div.cell.jupyter-soft-selected {
border-left-color: #90CAF9;
border-left-color: #E3F2FD;
border-left-width: 1px;
padding-left: 5px;
border-right-color: #E3F2FD;
border-right-width: 1px;
background: #E3F2FD;
}
@media print {
div.cell.jupyter-soft-selected {
border-color: transparent;
}
}
div.cell.selected {
border-color: #ababab;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
}
@media print {
div.cell.selected {
border-color: transparent;
}
}
div.cell.selected.jupyter-soft-selected {
border-left-width: 0;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
}
.edit_mode div.cell.selected {
border-color: #66BB6A;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
}
@media print {
.edit_mode div.cell.selected {
border-color: transparent;
}
}
.prompt {
/* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
min-width: 14ex;
/* This padding is tuned to match the padding on the CodeMirror editor. */
padding: 0.4em;
margin: 0px;
font-family: monospace;
text-align: right;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
/* Don't highlight prompt number selection */
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
/* Use default cursor */
cursor: default;
}
@media (max-width: 540px) {
.prompt {
text-align: left;
}
}
div.inner_cell {
min-width: 0;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
border: 1px solid #cfcfcf;
border-radius: 2px;
background: #f7f7f7;
line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
is no content in the output_subarea and the prompt. The main purpose of this is
to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
padding-top: 0;
padding-bottom: 0;
}
div.unrecognized_cell {
padding: 5px 5px 5px 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.unrecognized_cell .inner_cell {
border-radius: 2px;
padding: 5px;
font-weight: bold;
color: red;
border: 1px solid #cfcfcf;
background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
color: inherit;
text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
color: inherit;
text-decoration: none;
}
@media (max-width: 540px) {
div.unrecognized_cell > div.prompt {
display: none;
}
}
div.code_cell {
/* avoid page breaking on code cells when printing */
}
@media print {
div.code_cell {
page-break-inside: avoid;
}
}
/* any special styling for code cells that are currently running goes here */
div.input {
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.input {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
color: #303F9F;
border-top: 1px solid transparent;
}
div.input_area > div.highlight {
margin: 0.4em;
border: none;
padding: 0px;
background-color: transparent;
}
div.input_area > div.highlight > pre {
margin: 0px;
border: none;
padding: 0px;
background-color: transparent;
}
/* The following gets added to the <head> if it is detected that the user has a
* monospace font with inconsistent normal/bold/italic height. See
* notebookmain.js. Such fonts will have keywords vertically offset with
* respect to the rest of the text. The user should select a better font.
* See: https://github.com/ipython/ipython/issues/1503
*
* .CodeMirror span {
* vertical-align: bottom;
* }
*/
.CodeMirror {
line-height: 1.21429em;
/* Changed from 1em to our global default */
font-size: 14px;
height: auto;
/* Changed to auto to autogrow */
background: none;
/* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
/* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
/* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
overflow-y: hidden;
overflow-x: auto;
}
.CodeMirror-lines {
/* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
/* we have set a different line-height and want this to scale with that. */
padding: 0.4em;
}
.CodeMirror-linenumber {
padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
border-bottom-left-radius: 2px;
border-top-left-radius: 2px;
}
.CodeMirror pre {
/* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
/* .CodeMirror-lines */
padding: 0;
border: 0;
border-radius: 0;
}
/*
Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
Adapted from GitHub theme
*/
.highlight-base {
color: #000;
}
.highlight-variable {
color: #000;
}
.highlight-variable-2 {
color: #1a1a1a;
}
.highlight-variable-3 {
color: #333333;
}
.highlight-string {
color: #BA2121;
}
.highlight-comment {
color: #408080;
font-style: italic;
}
.highlight-number {
color: #080;
}
.highlight-atom {
color: #88F;
}
.highlight-keyword {
color: #008000;
font-weight: bold;
}
.highlight-builtin {
color: #008000;
}
.highlight-error {
color: #f00;
}
.highlight-operator {
color: #AA22FF;
font-weight: bold;
}
.highlight-meta {
color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
color: #00f;
}
.highlight-string-2 {
color: #f50;
}
.highlight-qualifier {
color: #555;
}
.highlight-bracket {
color: #997;
}
.highlight-tag {
color: #170;
}
.highlight-attribute {
color: #00c;
}
.highlight-header {
color: blue;
}
.highlight-quote {
color: #090;
}
.highlight-link {
color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
color: #008000;
font-weight: bold;
}
.cm-s-ipython span.cm-atom {
color: #88F;
}
.cm-s-ipython span.cm-number {
color: #080;
}
.cm-s-ipython span.cm-def {
color: #00f;
}
.cm-s-ipython span.cm-variable {
color: #000;
}
.cm-s-ipython span.cm-operator {
color: #AA22FF;
font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
color: #333333;
}
.cm-s-ipython span.cm-comment {
color: #408080;
font-style: italic;
}
.cm-s-ipython span.cm-string {
color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
color: #f50;
}
.cm-s-ipython span.cm-meta {
color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
color: #555;
}
.cm-s-ipython span.cm-builtin {
color: #008000;
}
.cm-s-ipython span.cm-bracket {
color: #997;
}
.cm-s-ipython span.cm-tag {
color: #170;
}
.cm-s-ipython span.cm-attribute {
color: #00c;
}
.cm-s-ipython span.cm-header {
color: blue;
}
.cm-s-ipython span.cm-quote {
color: #090;
}
.cm-s-ipython span.cm-link {
color: #00c;
}
.cm-s-ipython span.cm-error {
color: #f00;
}
.cm-s-ipython span.cm-tab {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
background-position: right;
background-repeat: no-repeat;
}
div.output_wrapper {
/* this position must be relative to enable descendents to be absolute within it */
position: relative;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
/* ideally, this would be max-height, but FF barfs all over that */
height: 24em;
/* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
width: 100%;
overflow: auto;
border-radius: 2px;
-webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
margin: 0px;
padding: 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
div.out_prompt_overlay {
height: 100%;
padding: 0px 0.4em;
position: absolute;
border-radius: 2px;
}
div.out_prompt_overlay:hover {
/* use inner shadow to get border that is computed the same on WebKit/FF */
-webkit-box-shadow: inset 0 0 1px #000;
box-shadow: inset 0 0 1px #000;
background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
padding: 0px;
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.output_area .MathJax_Display {
text-align: left !important;
}
div.output_area
div.output_area
div.output_area img,
div.output_area svg {
max-width: 100%;
height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
max-width: none;
}
/* This is needed to protect the pre formating from global settings such
as that of bootstrap */
.output {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
@media (max-width: 540px) {
div.output_area {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
div.output_area pre {
margin: 0;
padding: 0;
border: 0;
vertical-align: baseline;
color: black;
background-color: transparent;
border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
the prompt div. */
div.output_subarea {
overflow-x: auto;
padding: 0.4em;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
output types */
/* all text output has this class: */
div.output_text {
text-align: left;
color: #000;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
background: #fdd;
/* very light red background for stderr */
}
div.output_latex {
text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
padding: 0;
}
.js-error {
color: darkred;
}
/* raw_input styles */
div.raw_input_container {
line-height: 1.21429em;
padding-top: 5px;
}
pre.raw_input_prompt {
/* nothing needed here. */
}
input.raw_input {
font-family: monospace;
font-size: inherit;
color: inherit;
width: auto;
/* make sure input baseline aligns with prompt */
vertical-align: baseline;
/* padding + margin = 0.5em between prompt and cursor */
padding: 0em 0.25em;
margin: 0em 0.25em;
}
input.raw_input:focus {
box-shadow: none;
}
p.p-space {
margin-bottom: 10px;
}
div.output_unrecognized {
padding: 5px;
font-weight: bold;
color: red;
}
div.output_unrecognized a {
color: inherit;
text-decoration: none;
}
div.output_unrecognized a:hover {
color: inherit;
text-decoration: none;
}
.rendered_html {
color: #000;
/* any extras will just be numbers: */
}
.rendered_html :link {
text-decoration: underline;
}
.rendered_html :visited {
text-decoration: underline;
}
.rendered_html h1:first-child {
margin-top: 0.538em;
}
.rendered_html h2:first-child {
margin-top: 0.636em;
}
.rendered_html h3:first-child {
margin-top: 0.777em;
}
.rendered_html h4:first-child {
margin-top: 1em;
}
.rendered_html h5:first-child {
margin-top: 1em;
}
.rendered_html h6:first-child {
margin-top: 1em;
}
.rendered_html * + ul {
margin-top: 1em;
}
.rendered_html * + ol {
margin-top: 1em;
}
.rendered_html pre,
.rendered_html tr,
.rendered_html th,
.rendered_html td,
.rendered_html * + table {
margin-top: 1em;
}
.rendered_html * + p {
margin-top: 1em;
}
.rendered_html * + img {
margin-top: 1em;
}
.rendered_html img,
.rendered_html img.unconfined,
div.text_cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.text_cell > div.prompt {
display: none;
}
}
div.text_cell_render {
/*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
outline: none;
resize: none;
width: inherit;
border-style: none;
padding: 0.5em 0.5em 0.5em 0.4em;
color: #000;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
a.anchor-link:link {
text-decoration: none;
padding: 0px 20px;
visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
visibility: visible;
}
.text_cell.rendered .input_area {
display: none;
}
.text_cell.rendered
.text_cell.unrendered .text_cell_render {
display: none;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
font-weight: bold;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
font-size: 185.7%;
}
.cm-header-2 {
font-size: 157.1%;
}
.cm-header-3 {
font-size: 128.6%;
}
.cm-header-4 {
font-size: 110%;
}
.cm-header-5 {
font-size: 100%;
font-style: italic;
}
.cm-header-6 {
font-size: 100%;
font-style: italic;
}
</style>
<style type="text/css">.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>
<style type="text/css">
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }
.ansi-bold { font-weight: bold; }
</style>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>I lost the combination to an old Master Lock of mine. Fortunately, figuring out the combination for my type of lock is a <a href="http://www.wikihow.com/Crack-a-%22Master-Lock%22-Combination-Lock">well-known process</a>. Unfortunately, the previous link's method for finding the third value in the combination did not work for me, but I <a href="http://masterunlocked.com/index1.html">found instructions</a> that were very helpful. Once the third value is found there is an algorithm to generate 80 possible combinations, which is where Python comes in.</p>
<h4 id="Procedure-outline">Procedure outline<a class="anchor-link" href="#Procedure-outline">¶</a></h4><p><em>Only apply this method to locks for which you are the sole owner.</em></p>
<ol>
<li><p>Clear the lock by spinning the dial clockwise by three revolutions, ending with the dial set to zero.</p>
</li>
<li><p>Rotate the dial through its twelve "sticking points" and find the non-fake sticking point. This non-fake point is the third value in the lock's combination.</p>
</li>
<li><p>Once the third value is found, run the script that follows.</p>
</li>
</ol>
<h4 id="Sticking-points">Sticking points<a class="anchor-link" href="#Sticking-points">¶</a></h4><ul>
<li><p>Sticking points occur when you pull up on the shackle and are only able to rotate the dial by approximately +/- 0.5.</p>
</li>
<li><p>Once you've found a sticking point, move to the next one by removing tension from the shackle. Rotate the dial slightly counter-clockwise so that the next sticking point will catch upon tensioning the shackle again.</p>
</li>
</ul>
<h4 id="A-sticking-point-is-likely-fake-if:">A sticking point is likely fake if:<a class="anchor-link" href="#A-sticking-point-is-likely-fake-if:">¶</a></h4><ul>
<li><p>The dial pivots between two whole numbers (e.g., 20 and 21).</p>
</li>
<li><p>When you pull up super hard on the shackle the dial's rotation becomes limited. (When I successfully found my third value, the dial rotated by +/-0.5 freely regardless of how much tension I applied to the shackle.)</p>
</li>
</ul>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Python-implementation">Python implementation<a class="anchor-link" href="#Python-implementation">¶</a></h1>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [1]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">"""</span>
<span class="sd">1. First find the non-fake sticking point (the third value).</span>
<span class="sd">2. Enter the third_value below, then run the script.</span>
<span class="sd">3. Try each combination until the correct one is found.</span>
<span class="sd">"""</span>
<span class="c1"># ------------------------</span>
<span class="c1"># user-defined input</span>
<span class="c1"># ------------------------</span>
<span class="c1"># Find the third value manually, then assign it here.</span>
<span class="n">third_value</span> <span class="o">=</span> <span class="mi">20</span>
<span class="c1"># ------------------------</span>
<span class="c1"># algorithm</span>
<span class="c1"># ------------------------</span>
<span class="c1"># Divide by 4 and store the remainder. The remainder is called the</span>
<span class="c1"># "magic number"</span>
<span class="n">magic_number</span> <span class="o">=</span> <span class="n">third_value</span> <span class="o">%</span> <span class="mi">4</span>
<span class="c1"># Compute the possible values for the first value.</span>
<span class="n">first_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">magic_number</span> <span class="o">+</span> <span class="mi">4</span> <span class="o">*</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">xrange</span><span class="p">(</span><span class="mi">10</span><span class="p">)]</span>
<span class="c1"># Compute the possible values for the second value.</span>
<span class="k">if</span> <span class="n">magic_number</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]:</span>
<span class="n">magic_number</span> <span class="o">+=</span> <span class="mi">2</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">magic_number</span> <span class="o">-=</span> <span class="mi">2</span>
<span class="n">second_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">magic_number</span> <span class="o">+</span> <span class="mi">4</span> <span class="o">*</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">xrange</span><span class="p">(</span><span class="mi">10</span><span class="p">)]</span>
<span class="c1"># The two values closest to third_value can be eliminated.</span>
<span class="n">second_values</span> <span class="o">=</span> <span class="p">[</span><span class="n">v</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">second_values</span> <span class="k">if</span> <span class="nb">abs</span><span class="p">(</span><span class="n">third_value</span> <span class="o">-</span> <span class="n">v</span><span class="p">)</span> <span class="o">></span> <span class="mi">2</span><span class="p">]</span>
<span class="c1"># Compute the possible combinations.</span>
<span class="k">for</span> <span class="n">n1</span> <span class="ow">in</span> <span class="n">first_values</span><span class="p">:</span>
<span class="k">for</span> <span class="n">n2</span> <span class="ow">in</span> <span class="n">second_values</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="si">%d</span><span class="s1"> - </span><span class="si">%d</span><span class="s1"> - </span><span class="si">%d</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">n1</span><span class="p">,</span> <span class="n">n2</span><span class="p">,</span> <span class="n">third_value</span><span class="p">))</span>
<span class="c1"># Uncomment the following line to pause the looping.</span>
<span class="c1"># r = raw_input('continue ?')</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>0 - 2 - 20
0 - 6 - 20
0 - 10 - 20
0 - 14 - 20
0 - 26 - 20
0 - 30 - 20
0 - 34 - 20
0 - 38 - 20
4 - 2 - 20
4 - 6 - 20
4 - 10 - 20
4 - 14 - 20
4 - 26 - 20
4 - 30 - 20
4 - 34 - 20
4 - 38 - 20
8 - 2 - 20
8 - 6 - 20
8 - 10 - 20
8 - 14 - 20
8 - 26 - 20
8 - 30 - 20
8 - 34 - 20
8 - 38 - 20
12 - 2 - 20
12 - 6 - 20
12 - 10 - 20
12 - 14 - 20
12 - 26 - 20
12 - 30 - 20
12 - 34 - 20
12 - 38 - 20
16 - 2 - 20
16 - 6 - 20
16 - 10 - 20
16 - 14 - 20
16 - 26 - 20
16 - 30 - 20
16 - 34 - 20
16 - 38 - 20
20 - 2 - 20
20 - 6 - 20
20 - 10 - 20
20 - 14 - 20
20 - 26 - 20
20 - 30 - 20
20 - 34 - 20
20 - 38 - 20
24 - 2 - 20
24 - 6 - 20
24 - 10 - 20
24 - 14 - 20
24 - 26 - 20
24 - 30 - 20
24 - 34 - 20
24 - 38 - 20
28 - 2 - 20
28 - 6 - 20
28 - 10 - 20
28 - 14 - 20
28 - 26 - 20
28 - 30 - 20
28 - 34 - 20
28 - 38 - 20
32 - 2 - 20
32 - 6 - 20
32 - 10 - 20
32 - 14 - 20
32 - 26 - 20
32 - 30 - 20
32 - 34 - 20
32 - 38 - 20
36 - 2 - 20
36 - 6 - 20
36 - 10 - 20
36 - 14 - 20
36 - 26 - 20
36 - 30 - 20
36 - 34 - 20
36 - 38 - 20
</pre>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML';
mathjaxscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: 'center'," +
" displayIndent: '0em'," +
" showMathMenu: true," +
" tex2jax: { " +
" inlineMath: [ ['$','$'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" linebreaks: { automatic: true, width: '95% container' }, " +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'black ! important'} }" +
" } " +
"}); ";
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>
<p>Download this post's IPython notebook <a href="https://github.com/h-gens/h-gens.github.io-pelican/tree/master/content/notebooks/">here</a>. </p>Controlling instruments over GPIB with SCPI2015-04-17T20:41:00-05:002015-04-17T20:41:00-05:00H.G.tag:h-gens.github.io,2015-04-17:/controlling-instruments-over-gpib-with-scpi.html<p>A quick introduction to interfacing with lab equipment over GPIB with the <a href="https://pyvisa.readthedocs.org/en/stable/">PyVISA</a> library by sending SCPI commands. A simple script is shown that executes a staircase measurement on an Agilent E5270.</p><p>An electronics lab contains equipment that can usually be controlled through at least two means:</p>
<ol>
<li>the instrument's front panel </li>
<li>the instrument's GPIB address </li>
</ol>
<p>GPIB stands for <a href="https://en.wikipedia.org/wiki/IEEE-488">General Purpose Interface Bus</a> and provides a way of sending commands to the instrument. These commands are referred to as SCPI commands (<a href="https://en.wikipedia.org/wiki/Standard_Commands_for_Programmable_Instrumentation">Standard Commands for Programmable Instruments</a>), which are often found listed in an instrument's programming manual. Every operation that can be performed via the instrument's front panel should have an equivalent SCPI command. </p>
<p>This post shows a brief Python script that talks to an Agilent E5270 DC parameteric measurement instrument and conducts a staircase sweep. To run it one needs a GPIB card on the controlling computer, the <a href="https://pyvisa.readthedocs.org/en/stable/">PyVISA</a> package, Keysight IO Libraries Suite, and the GPIB address of the E5270. The script should also work with an HP4142, which has almost identical settings and SCPI commands. </p>
<h3>Why Python?</h3>
<p>Well, I personally do data analysis in Python (numpy/scipy/matplotlib modules and the Spyder IDE that is reminiscent of MATLAB; see <a href="https://code.google.com/p/pythonxy/">Python(x,y)</a> or <a href="https://winpython.github.io/">WinPython</a>), so it made sense for me to automate measurements in a language I'm already comfortable in. I find the file IO and string/data manipulation features of Python to be much easier to use and read than those available in other languages. Just by glancing at example code in an instrument programming manual written in C++ or Visual Basic makes me readily appreciative of the straightforwardness and readibility of Python code. </p>
<h3>Useful links</h3>
<ul>
<li><a href="http://cp.literature.agilent.com/litweb/pdf/E5260-90010.pdf">Agilent E5270 Series Programming Guide</a></li>
<li><a href="http://www.keysight.com/en/pd-1985909/io-libraries-suite?&cc=US&lc=eng">Keysight IO Libraries Suite</a><br>
(Note: Keysight was the electronics measurement division of Agilent before being spun-off. Similarly, Agilent was the electronics measurement division of HP before being spun-off.)</li>
</ul>
<h2>Example Python script</h2>
<div class="highlight"><pre><span></span><span class="sd">"""</span>
<span class="sd">A sequence of commands to execute a staircase measurement of a 3-terminal</span>
<span class="sd">transistor (source/gate/drain terminals)</span>
<span class="sd">Assumed SMUs (source measure units) and their channels:</span>
<span class="sd"> two high-power SMUs on channels 2 and 4</span>
<span class="sd"> one medium-power SMU on channel 5</span>
<span class="sd">Biasing conditions:</span>
<span class="sd"> source on channel 2 is biased at a constant 0V. </span>
<span class="sd"> drain on channel 4 is staircased from 0 to 10V by 0.1V. </span>
<span class="sd"> gate on channel 5 is biased at a constant 3V.</span>
<span class="sd">See manual for a description of arguments passed to each SCPI command.</span>
<span class="sd">"""</span>
<span class="kn">import</span> <span class="nn">visa</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>
<span class="c1"># the GPIB card number on the local computer</span>
<span class="n">card_address</span> <span class="o">=</span> <span class="mi">0</span>
<span class="c1"># the instrument's GPIB address</span>
<span class="n">instrument_address</span> <span class="o">=</span> <span class="mi">17</span>
<span class="n">rm</span> <span class="o">=</span> <span class="n">visa</span><span class="o">.</span><span class="n">ResourceManager</span><span class="p">()</span>
<span class="n">m</span> <span class="o">=</span> <span class="n">rm</span><span class="o">.</span><span class="n">open_resource</span><span class="p">(</span>
<span class="s1">'GPIB</span><span class="si">%d</span><span class="s1">::</span><span class="si">%d</span><span class="s1">::INSTR'</span> <span class="o">%</span> <span class="p">(</span><span class="n">card_address</span><span class="p">,</span> <span class="n">instrument_address</span><span class="p">)</span>
<span class="p">)</span>
<span class="c1"># -----------------</span>
<span class="c1"># instrument setup</span>
<span class="c1"># -----------------</span>
<span class="c1"># reset the instrument</span>
<span class="n">m</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'*rst'</span><span class="p">)</span>
<span class="c1"># set the measurement mode to staircase sweep</span>
<span class="c1"># specify the channels that should be measured</span>
<span class="n">m</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'mm 2,2,4,5'</span><span class="p">)</span>
<span class="c1"># configure the staircase on channel 4 (drain)</span>
<span class="n">m</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'wv 4,1,0,0,10,101,1e-2'</span><span class="p">)</span>
<span class="c1"># enable the output switches on channels 2,4,5</span>
<span class="n">m</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'cn 2,4,5'</span><span class="p">)</span>
<span class="c1"># set the bias of the constant channels 2/5 (source/gate)</span>
<span class="n">m</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'dv 2,0,0,1e-2'</span><span class="p">)</span>
<span class="n">m</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'dv 5,0,3,1e-4'</span><span class="p">)</span>
<span class="c1"># -----------------</span>
<span class="c1"># execute and close</span>
<span class="c1"># -----------------</span>
<span class="c1"># execute the measurement</span>
<span class="n">m</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'xe'</span><span class="p">)</span>
<span class="c1"># close all channels so they no longer are outputting voltage</span>
<span class="n">m</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'cl'</span><span class="p">)</span>
<span class="c1"># read the result from the output buffer</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
</pre></div>
<p>While the measurement data is now held in the <code>result</code> variable, it needs to be processed. As-is, <code>result</code> is a string composed of comma-separated values. If this string were to be split by commas (i.e., <code>result.split(',')</code>) then the length of the resulting list would be 3 x <code>len(staircase)</code>. One multiplies by 3 because for each point in the staircase sweep there are three channels measured whose values appear consecutively in the <code>result</code> string. </p>
<blockquote>
<p><strong>Example <code>result</code> string:</strong> NEI+0.00005E-09,NBI+0.00000E-09,NDI+0.00010E-09,NEI+0.00010E-09,NBI+0.00007E-09,NDI+0.00080E-09, ... (Notice how the second character's cycle starts over after the third group of values.)</p>
</blockquote>
<p>In each comma-separated value there are three preceding characters. The first character is the status code. The second character is the letter code. There is a unique letter code for each channel in the E5270, so a mapping dictionary is referred to in order to figure out which channel corresponds to which letter code. The third character indicates the data type. See page 36 of the programming manual linked above. </p>
<h2>Processing the result</h2>
<div class="highlight"><pre><span></span><span class="c1"># -----------------</span>
<span class="c1"># parsing data</span>
<span class="c1"># -----------------</span>
<span class="c1"># this is the letter code mapping dictionary</span>
<span class="c1"># (see page 37 of the programming manual)</span>
<span class="n">CHANNELS</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">'B'</span><span class="p">:</span> <span class="s1">'Is'</span><span class="p">,</span> <span class="c1"># channel 2</span>
<span class="s1">'D'</span><span class="p">:</span> <span class="s1">'Id'</span><span class="p">,</span> <span class="c1"># channel 4</span>
<span class="s1">'E'</span><span class="p">:</span> <span class="s1">'Ig'</span><span class="p">,</span> <span class="c1"># channel 5</span>
<span class="p">}</span>
<span class="c1"># split the CSV string so it can be iterated over</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)</span>
<span class="n">currents</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">'Id'</span><span class="p">:</span> <span class="p">[],</span>
<span class="s1">'Is'</span><span class="p">:</span> <span class="p">[],</span>
<span class="s1">'Ig'</span><span class="p">:</span> <span class="p">[]</span>
<span class="p">}</span>
<span class="c1"># iterate over the result list and store the values as floats</span>
<span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
<span class="c1"># get the terminal name by consulting the mapping dictionary</span>
<span class="n">terminal_name</span> <span class="o">=</span> <span class="n">CHANNELS</span><span class="p">[</span><span class="n">entry</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="c1"># convert the numerical portion of the string to a float</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">entry</span><span class="p">[</span><span class="mi">3</span><span class="p">:])</span>
<span class="c1"># store value within the 'currents' dict</span>
<span class="n">currents</span><span class="p">[</span><span class="n">terminal_name</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="c1"># -----------------</span>
<span class="c1"># plotting</span>
<span class="c1"># -----------------</span>
<span class="c1"># create the independent variable (Vd) so the result can be plotted</span>
<span class="n">Vd</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="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">101</span><span class="p">)</span>
<span class="c1"># plot the data</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">clf</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vd</span><span class="p">,</span> <span class="n">currents</span><span class="p">[</span><span class="s1">'Id'</span><span class="p">])</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">clf</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">semilogy</span><span class="p">(</span><span class="n">Vd</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">currents</span><span class="p">[</span><span class="s1">'Ig'</span><span class="p">]))</span>
</pre></div>
<h3>Suggestions</h3>
<ul>
<li>The PyVISA syntax used in the example code is for PyVISA version 1.5 and up (the syntax changed relative to previous versions; see <a href="https://pyvisa.readthedocs.org/en/stable/migrating.html">Migrating from PyVISA < 1.5</a>.) </li>
<li>Python can actually submit SCPI commands too fast for some instruments. In this case, it's useful to add a <code>time.sleep()</code> statement after each <code>write()</code> operation. </li>
<li>Use <code>rm.list_resources()</code> to print a list of visible instruments. </li>
</ul>
<h3>Closing</h3>
<p>That concludes the quick introduction to instrument control via GPIB+SCPI. In a more complete instrument controller, I would send additional commands to change instrument settings such as integration time and store results in <a href="http://pandas.pydata.org/">pandas</a> DataFrames (or numpy arrays). Instead of a one-off script, it is often useful to create a class for a particular instrument that contains methods to perform many different types of measurements. This makes the instrument an importable library with a human-readable command set and avoids having to write/remember SCPI commands. </p>Pi and Pythagoras2015-03-14T03:14:00-05:002015-03-14T03:14:00-05:00H.G.tag:h-gens.github.io,2015-03-14:/pi-and-pythagoras.html<p>This post contains a derivation of a recurrence relation that can be used to calculate $\pi$. While it's not useful for the purpose of calculating to any decimal place imaginable, what's notable is that it only uses the Pythagorean thereom and should therefore be easy to follow. Unsurprisingly, the recurrence relation is neither original nor unique because it falls under the category of using polygons to compute $\pi$ (<a href="https://en.wikipedia.org/wiki/Pi#Polygon_approximation_era">attributed to Archimedes</a>). At the end of the notebook, the derived recurrence relation is implemented in code and run.</p><style type="text/css">/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI colors. */
.ansibold {
font-weight: bold;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
color: black;
}
.ansired {
color: darkred;
}
.ansigreen {
color: darkgreen;
}
.ansiyellow {
color: #c4a000;
}
.ansiblue {
color: darkblue;
}
.ansipurple {
color: darkviolet;
}
.ansicyan {
color: steelblue;
}
.ansigray {
color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
background-color: black;
}
.ansibgred {
background-color: red;
}
.ansibggreen {
background-color: green;
}
.ansibgyellow {
background-color: yellow;
}
.ansibgblue {
background-color: blue;
}
.ansibgpurple {
background-color: magenta;
}
.ansibgcyan {
background-color: cyan;
}
.ansibggray {
background-color: gray;
}
div.cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
border-radius: 2px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: transparent;
width: 100%;
padding: 5px;
/* This acts as a spacer between cells, that is outside the border */
margin: 0px;
outline: none;
border-left-width: 1px;
padding-left: 5px;
background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
}
div.cell.jupyter-soft-selected {
border-left-color: #90CAF9;
border-left-color: #E3F2FD;
border-left-width: 1px;
padding-left: 5px;
border-right-color: #E3F2FD;
border-right-width: 1px;
background: #E3F2FD;
}
@media print {
div.cell.jupyter-soft-selected {
border-color: transparent;
}
}
div.cell.selected {
border-color: #ababab;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
}
@media print {
div.cell.selected {
border-color: transparent;
}
}
div.cell.selected.jupyter-soft-selected {
border-left-width: 0;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
}
.edit_mode div.cell.selected {
border-color: #66BB6A;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
}
@media print {
.edit_mode div.cell.selected {
border-color: transparent;
}
}
.prompt {
/* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
min-width: 14ex;
/* This padding is tuned to match the padding on the CodeMirror editor. */
padding: 0.4em;
margin: 0px;
font-family: monospace;
text-align: right;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
/* Don't highlight prompt number selection */
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
/* Use default cursor */
cursor: default;
}
@media (max-width: 540px) {
.prompt {
text-align: left;
}
}
div.inner_cell {
min-width: 0;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
border: 1px solid #cfcfcf;
border-radius: 2px;
background: #f7f7f7;
line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
is no content in the output_subarea and the prompt. The main purpose of this is
to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
padding-top: 0;
padding-bottom: 0;
}
div.unrecognized_cell {
padding: 5px 5px 5px 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.unrecognized_cell .inner_cell {
border-radius: 2px;
padding: 5px;
font-weight: bold;
color: red;
border: 1px solid #cfcfcf;
background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
color: inherit;
text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
color: inherit;
text-decoration: none;
}
@media (max-width: 540px) {
div.unrecognized_cell > div.prompt {
display: none;
}
}
div.code_cell {
/* avoid page breaking on code cells when printing */
}
@media print {
div.code_cell {
page-break-inside: avoid;
}
}
/* any special styling for code cells that are currently running goes here */
div.input {
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.input {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
color: #303F9F;
border-top: 1px solid transparent;
}
div.input_area > div.highlight {
margin: 0.4em;
border: none;
padding: 0px;
background-color: transparent;
}
div.input_area > div.highlight > pre {
margin: 0px;
border: none;
padding: 0px;
background-color: transparent;
}
/* The following gets added to the <head> if it is detected that the user has a
* monospace font with inconsistent normal/bold/italic height. See
* notebookmain.js. Such fonts will have keywords vertically offset with
* respect to the rest of the text. The user should select a better font.
* See: https://github.com/ipython/ipython/issues/1503
*
* .CodeMirror span {
* vertical-align: bottom;
* }
*/
.CodeMirror {
line-height: 1.21429em;
/* Changed from 1em to our global default */
font-size: 14px;
height: auto;
/* Changed to auto to autogrow */
background: none;
/* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
/* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
/* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
overflow-y: hidden;
overflow-x: auto;
}
.CodeMirror-lines {
/* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
/* we have set a different line-height and want this to scale with that. */
padding: 0.4em;
}
.CodeMirror-linenumber {
padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
border-bottom-left-radius: 2px;
border-top-left-radius: 2px;
}
.CodeMirror pre {
/* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
/* .CodeMirror-lines */
padding: 0;
border: 0;
border-radius: 0;
}
/*
Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
Adapted from GitHub theme
*/
.highlight-base {
color: #000;
}
.highlight-variable {
color: #000;
}
.highlight-variable-2 {
color: #1a1a1a;
}
.highlight-variable-3 {
color: #333333;
}
.highlight-string {
color: #BA2121;
}
.highlight-comment {
color: #408080;
font-style: italic;
}
.highlight-number {
color: #080;
}
.highlight-atom {
color: #88F;
}
.highlight-keyword {
color: #008000;
font-weight: bold;
}
.highlight-builtin {
color: #008000;
}
.highlight-error {
color: #f00;
}
.highlight-operator {
color: #AA22FF;
font-weight: bold;
}
.highlight-meta {
color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
color: #00f;
}
.highlight-string-2 {
color: #f50;
}
.highlight-qualifier {
color: #555;
}
.highlight-bracket {
color: #997;
}
.highlight-tag {
color: #170;
}
.highlight-attribute {
color: #00c;
}
.highlight-header {
color: blue;
}
.highlight-quote {
color: #090;
}
.highlight-link {
color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
color: #008000;
font-weight: bold;
}
.cm-s-ipython span.cm-atom {
color: #88F;
}
.cm-s-ipython span.cm-number {
color: #080;
}
.cm-s-ipython span.cm-def {
color: #00f;
}
.cm-s-ipython span.cm-variable {
color: #000;
}
.cm-s-ipython span.cm-operator {
color: #AA22FF;
font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
color: #333333;
}
.cm-s-ipython span.cm-comment {
color: #408080;
font-style: italic;
}
.cm-s-ipython span.cm-string {
color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
color: #f50;
}
.cm-s-ipython span.cm-meta {
color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
color: #555;
}
.cm-s-ipython span.cm-builtin {
color: #008000;
}
.cm-s-ipython span.cm-bracket {
color: #997;
}
.cm-s-ipython span.cm-tag {
color: #170;
}
.cm-s-ipython span.cm-attribute {
color: #00c;
}
.cm-s-ipython span.cm-header {
color: blue;
}
.cm-s-ipython span.cm-quote {
color: #090;
}
.cm-s-ipython span.cm-link {
color: #00c;
}
.cm-s-ipython span.cm-error {
color: #f00;
}
.cm-s-ipython span.cm-tab {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
background-position: right;
background-repeat: no-repeat;
}
div.output_wrapper {
/* this position must be relative to enable descendents to be absolute within it */
position: relative;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
/* ideally, this would be max-height, but FF barfs all over that */
height: 24em;
/* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
width: 100%;
overflow: auto;
border-radius: 2px;
-webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
margin: 0px;
padding: 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
div.out_prompt_overlay {
height: 100%;
padding: 0px 0.4em;
position: absolute;
border-radius: 2px;
}
div.out_prompt_overlay:hover {
/* use inner shadow to get border that is computed the same on WebKit/FF */
-webkit-box-shadow: inset 0 0 1px #000;
box-shadow: inset 0 0 1px #000;
background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
padding: 0px;
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.output_area .MathJax_Display {
text-align: left !important;
}
div.output_area
div.output_area
div.output_area img,
div.output_area svg {
max-width: 100%;
height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
max-width: none;
}
/* This is needed to protect the pre formating from global settings such
as that of bootstrap */
.output {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
@media (max-width: 540px) {
div.output_area {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
div.output_area pre {
margin: 0;
padding: 0;
border: 0;
vertical-align: baseline;
color: black;
background-color: transparent;
border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
the prompt div. */
div.output_subarea {
overflow-x: auto;
padding: 0.4em;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
output types */
/* all text output has this class: */
div.output_text {
text-align: left;
color: #000;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
background: #fdd;
/* very light red background for stderr */
}
div.output_latex {
text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
padding: 0;
}
.js-error {
color: darkred;
}
/* raw_input styles */
div.raw_input_container {
line-height: 1.21429em;
padding-top: 5px;
}
pre.raw_input_prompt {
/* nothing needed here. */
}
input.raw_input {
font-family: monospace;
font-size: inherit;
color: inherit;
width: auto;
/* make sure input baseline aligns with prompt */
vertical-align: baseline;
/* padding + margin = 0.5em between prompt and cursor */
padding: 0em 0.25em;
margin: 0em 0.25em;
}
input.raw_input:focus {
box-shadow: none;
}
p.p-space {
margin-bottom: 10px;
}
div.output_unrecognized {
padding: 5px;
font-weight: bold;
color: red;
}
div.output_unrecognized a {
color: inherit;
text-decoration: none;
}
div.output_unrecognized a:hover {
color: inherit;
text-decoration: none;
}
.rendered_html {
color: #000;
/* any extras will just be numbers: */
}
.rendered_html :link {
text-decoration: underline;
}
.rendered_html :visited {
text-decoration: underline;
}
.rendered_html h1:first-child {
margin-top: 0.538em;
}
.rendered_html h2:first-child {
margin-top: 0.636em;
}
.rendered_html h3:first-child {
margin-top: 0.777em;
}
.rendered_html h4:first-child {
margin-top: 1em;
}
.rendered_html h5:first-child {
margin-top: 1em;
}
.rendered_html h6:first-child {
margin-top: 1em;
}
.rendered_html * + ul {
margin-top: 1em;
}
.rendered_html * + ol {
margin-top: 1em;
}
.rendered_html pre,
.rendered_html tr,
.rendered_html th,
.rendered_html td,
.rendered_html * + table {
margin-top: 1em;
}
.rendered_html * + p {
margin-top: 1em;
}
.rendered_html * + img {
margin-top: 1em;
}
.rendered_html img,
.rendered_html img.unconfined,
div.text_cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.text_cell > div.prompt {
display: none;
}
}
div.text_cell_render {
/*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
outline: none;
resize: none;
width: inherit;
border-style: none;
padding: 0.5em 0.5em 0.5em 0.4em;
color: #000;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
a.anchor-link:link {
text-decoration: none;
padding: 0px 20px;
visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
visibility: visible;
}
.text_cell.rendered .input_area {
display: none;
}
.text_cell.rendered
.text_cell.unrendered .text_cell_render {
display: none;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
font-weight: bold;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
font-size: 185.7%;
}
.cm-header-2 {
font-size: 157.1%;
}
.cm-header-3 {
font-size: 128.6%;
}
.cm-header-4 {
font-size: 110%;
}
.cm-header-5 {
font-size: 100%;
font-style: italic;
}
.cm-header-6 {
font-size: 100%;
font-style: italic;
}
</style>
<style type="text/css">.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>
<style type="text/css">
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }
.ansi-bold { font-weight: bold; }
</style>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<center><img src="../images/2015-03-14-pi-and-pythagoras/figure_1.png"></center>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="1.0-Introduction">1.0 Introduction<a class="anchor-link" href="#1.0-Introduction">¶</a></h2><p>This post contains a derivation of a recurrence relation that can be used to calculate $\pi$. While it's not useful for the purpose of calculating to any decimal place imaginable, what's notable is that it only uses the Pythagorean thereom and should therefore be easy to follow. Unsurprisingly, the recurrence relation is neither original nor unique because it falls under the category of using polygons to compute $\pi$ (<a href="https://en.wikipedia.org/wiki/Pi#Polygon_approximation_era">attributed to Archimedes</a>). At the end of the notebook, the derived recurrence relation is implemented in code and run.</p>
<p>There is more than one way to use polygons in the computation of $\pi$. One could follow <a href="http://itech.fgcu.edu/faculty/clindsey/mhf4404/archimedes/archimedes.html">Archimedes' proof</a>, which uses a theorem from Euclid's <em>Elements</em>. There are other <a href="http://www.themathpage.com/atrig/pi.htm">discussions</a> that make use of trigonometric functions. Of course, one could just use the Pythagorean theorem by reducing the n-sided polygons to right triangles, as done here.</p>
<p>I went through a few pages of google search results and found similar posts. (I posted this anyway because it was fun and mainly an excuse to create an IPython notebook.) The first link's code can achieve a much larger decimal place than that shown here because the author used a specialized decimal type instead of the default float type available in Python.</p>
<ul>
<li><a href="http://www.craig-wood.com/nick/articles/pi-archimedes/">Pi - Archimedes</a> </li>
<li><a href="http://www.physicsinsights.org/pi_from_pythagoras-1.html">Finding π from Pythagoras's Theorem</a>. </li>
</ul>
<p>A good historical account of $\pi$ that I found while briefly searching is found <a href="http://www.math.rutgers.edu/~cherlin/History/Papers2000/wilson.html">here</a>.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="2.0-Problem-set-up">2.0 Problem set up<a class="anchor-link" href="#2.0-Problem-set-up">¶</a></h2><p>Consider one quarter of a circle with arbitrary radius, $r$, between $0$ and $90$ degrees. The below will mathematically describe the outer perimeter of many triangles drawn inside this region. The outer perimeter is composed of the triangles whose hypotneuses are closest to the circle's arc. The quantity of triangles drawn will be proportional to an integer index, $n$. All variables make reference to $n$ via a subscript.</p>
<h4 id="Variable-definitions">Variable definitions<a class="anchor-link" href="#Variable-definitions">¶</a></h4><ul>
<li><p>$r$ is the radius.</p>
</li>
<li><p>$T_n$ refers to any right triangle newly established at the $n$-th iteration.</p>
</li>
<li><p>$L_n$ refers to any right triangle's leg.</p>
</li>
<li><p>$H_n$ refers to the hypotneuse of any small triangle ($T_{nS}$) that composes a portion of the outer perimeter.</p>
</li>
<li><p>$P_n$ is the outer perimeter.</p>
</li>
</ul>
<h4 id="Subscript-meanings">Subscript meanings<a class="anchor-link" href="#Subscript-meanings">¶</a></h4><ul>
<li><p>Subscripts $B$ and $S$ refer to any big and small triangles, respectively.</p>
</li>
<li><p>$L_{nB}$ indicates a leg that is unique to $T_{nB}$.</p>
</li>
<li><p>$L_{nS}$ indicates a leg that is unique to $T_{nS}$.</p>
</li>
<li><p>$L_{nC}$ indicates a leg that is common to $T_{nB}$ and $T_{nS}$.</p>
</li>
</ul>
<p>Below are explanatory images that indicate most of the above variables. They are for $n = 1$, and the procedure to arrive at the drawn line segments is outlined in the following subsections. The first figure indicates triangles, and the second figure indicates line segment lengths. Omitted from the second figure are the radius labels (the radii are at $0^o$, $45^o$, and $90^o$). The figures are an attempt to convey that there are two sets (big/small) of identical triangles at each iteration, and that by calculating the properties of one triangle in each set, all other triangles' properties are known.</p>
<p>Blue lines always correspond to refinements made at the previous iteration. Green lines are the new refinements made at the current iteration. This combination of line segments produces the set of $T_{nB}$ and $T_{nS}$ at iteration $n$.</p>
<center><img src="../images/2015-03-14-pi-and-pythagoras/figure_2.png"> <img src="../images/2015-03-14-pi-and-pythagoras/figure_3.png"></center>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="3.0-Analysis">3.0 Analysis<a class="anchor-link" href="#3.0-Analysis">¶</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="3.1-Analysis-for-n-=-0">3.1 Analysis for n = 0<a class="anchor-link" href="#3.1-Analysis-for-n-=-0">¶</a></h3><p>Inside the starting region a right triangle is created by connecting points $(0, r)$ and $(r, 0)$. The hypotneuse can be easily calculated by the Pythagorean thereom, and for $n=0$ the hypotneuse happens to be equal to the outer perimeter.</p>
<center><img src="../images/2015-03-14-pi-and-pythagoras/figure_4.png"></center>$$
\begin{aligned}
H_0 &= \sqrt{r^2 + r^2} \\
P_0 &= H_0 = \sqrt{2} \cdot r
\end{aligned}
$$
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="3.2-Analysis-for-n-=-1">3.2 Analysis for n = 1<a class="anchor-link" href="#3.2-Analysis-for-n-=-1">¶</a></h3><p>The previous right triangle's hypotneuse ($H_0$) is bisected by a line from the origin to the circle's perimeter at an angle exactly halfway between the legs (or <a href="https://en.wikipedia.org/wiki/Cathetus">catheti</a>) of $T_0$. This action creates four new right triangles since the hypotneuse of $T_0$ forms a right angle with the bisecting line. These new triangles are two of $T_{1B}$ and two of $T_{1S}$.</p>
<center><img src="../images/2015-03-14-pi-and-pythagoras/figure_5.png"></center><p>Since the hypotneuse of $T_0$ has been bisected, the leg that is common to any $T_{1B}$, $T_{1S}$ pair is known (this is $L_{1C}$). The hypotneuse of $T_{1B}$ is known because it is just $T_0$'s leg, $r$. Therefore, we can solve for the missing leg, $L_{1B}$.</p>
$$
\begin{aligned}
L_{1C} &= \frac{H_0}{2} \\
L_{1B} &= \sqrt{r^2 - L_{1C}^2}
\end{aligned}
$$<p>The line segment labeled $L_{1S}$ is just the radius minus $L_{1B}$. This permits calculation of $H_1$, which is the hypotneuse of the small triangle $T_{1S}$.</p>
$$
\begin{aligned}
L_{1S} &= r - L_{1B} \\
H_1 &= \sqrt{L_{1S}^2 + L_{1C}^2}
\end{aligned}
$$<p>Finally, the outer perimeter defined by the two new small right triangles is twice the value of a single small triangle's hypotneuse, $H_1$.</p>
$$
\begin{aligned}
P_1 &= 2 \cdot H_1 \\
&= 2 \cdot \sqrt{L_{1S}^2 + L_{1C}^2}
\end{aligned}
$$
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="3.3-Analysis-at-n-=-2-and-above">3.3 Analysis at n = 2 and above<a class="anchor-link" href="#3.3-Analysis-at-n-=-2-and-above">¶</a></h3><p>As the index increases, the efforts in the above are repeated. $2^{n+1}$ right triangles are created, of which half are $T_{nB}$ and half are $T_{nS}$. Any $T_{nB}$ will have a leg that's shared with a $T_{nS}$ called $L_{nC}$. This common leg is exactly half the hypotneuse from the previous iteration. Using this information one can solve for $L_{nB}$, $L_{nS}$, and $H_n$.</p>
$$
\begin{aligned}
L_{nC} &= \frac{H_{n-1}}{2} \\
L_{nB} &= \sqrt{r^2 - L_{nC}^2} \\
L_{nS} &= r - L_{nB}
\end{aligned}
$$<p></p>
<p>With the legs of $T_{nS}$ known, one can find the hypotneuse of $T_{nS}$ using the Pythagorean theorem.</p>
$$
\begin{aligned}
H_n &= \sqrt{L_{nS}^2 + L_{nC}^2} \\
&= \sqrt{\left(r - \sqrt{r^2 - \left(\frac{H_{n-1}}{2}\right)^2}\right)^2 + \left(\frac{H_{n-1}}{2}\right)^2}
\end{aligned}
$$<p></p>
<p>The above is a recurrence relation for $H_n$ for all $n > 0$. The initial value derived above, $H_0$, is just $\sqrt{2} \cdot r$. The perimeter at an arbitrary index is comprised of $2^n$ right triangles' hypotneuses.</p>
$$
\begin{aligned}
P_n &= 2^n \cdot H_n \\
&= 2^n \cdot \sqrt{\left(r - \sqrt{r^2 - \frac{H_{n-1}^2}{4}}\right)^2 + \frac{H_{n-1}^2}{4}}
\end{aligned}
$$<p></p>
<p>Below are plots for $n = 2$ and $n = 3$. Only $T_n$ and $T_{n-1}$ are drawn to reduce graphical clutter. The new iteration's triangles become more difficult to see as the index increases so plots of $n \geq 4$ are not shown.</p>
<center><img src="../images/2015-03-14-pi-and-pythagoras/figure_6.png"><img src="../images/2015-03-14-pi-and-pythagoras/figure_7.png"></center>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="4.0-Computing-$\pi$">4.0 Computing $\pi$<a class="anchor-link" href="#4.0-Computing-$\pi$">¶</a></h2><p>The circumference of the circle is approximated by $4 \cdot P_n$, where the factor of four is present since we only considered the region between $0$ and $90$ degrees (all other regions are identical). The quantity $4 \cdot P_n$ will always be slightly smaller than the true circumference but would converge in the limit as $n \rightarrow \infty$. Equating $4 \cdot P_n$ with the true circumference, $\pi \cdot 2 \cdot r$, and solving for $\pi$ yields:</p>
$$
\begin{aligned}
\pi &= \lim_{n\rightarrow\infty} \frac{2 \cdot P_n}{r}
\end{aligned}
$$<p>Since computing something to infinity is not possible, let's accept that we're stuck with an approximation and recognize it using $\approx$ in the below expression for $\pi$. These equations are readily implemented in code with a <code>for</code> loop and can be evaluated for as large an $n$ that our computing resources will permit.</p>
$$
\begin{aligned}
H_0 &= \sqrt{2} \cdot r \\
H_n &= \sqrt{\left(r - \sqrt{r^2 - \frac{H_{n-1}^2}{4}}\right)^2 + \frac{H_{n-1}^2}{4}} \mbox{ , for } n>0 \\
\pi &\approx \frac{2^{n+1}}{r} \cdot H_n
\end{aligned}
$$<p>The downside to this approach is that as $n$ increases, $H_n$ gets smaller and smaller. For example, consider the unit circle with $r = 1$. As $n$ increases, the above equation presents a precision challenge for any computer since it involves the difference of a constant (unity) with an ever-decreasing quantity ($H_{n-1}^2/4$) that approaches zero as $n \rightarrow \infty$.</p>
<h3 id="4.1-In-terms-of-incremental-area">4.1 In terms of incremental area<a class="anchor-link" href="#4.1-In-terms-of-incremental-area">¶</a></h3><p>It is also possible to use the triangles' areas to compute $\pi$. The additional area contributed by each iteration can be computed by analyzing $T_{nS}$, the area of which is written below by using the Pythagorean theorem for $L_{nS}$.</p>
$$
\begin{aligned}
A_{TnS} &= \frac{1}{2} \cdot L_{nC} \cdot L_{nS} \\
&= \frac{1}{2} \cdot \frac{H_{n-1}}{2} \cdot \sqrt{H_n^2 - \left( \frac{H_{n-1}}{2} \right)^2} \\
&= \frac{H_{n-1}}{4} \cdot \left(r - \sqrt{r^2 - \left( \frac{H_{n-1}}{2} \right)^2} \right)
\end{aligned}
$$<p>There are $2^n$ such $T_{nS}$ in the region between $0$ and $90$ degrees. Therefore, multiplying $A_{TnS}$ by $2^{n+2}$ gives the total incremental area at an arbitrary index, $\Delta A_n$.</p>
$$
\begin{aligned}
\Delta A_n &= 2^{n+2} \cdot A_{TnS} \\
&= 2^n \cdot H_{n-1} \cdot \left(r - \sqrt{r^2 - \left( \frac{H_{n-1}}{2} \right)^2} \right)
\end{aligned}
$$<p>The total area at some index, $A_n$, is an accumulation of $\Delta A_n$ plus the initial value, $A_0$.</p>
$$
\begin{aligned}
A_0 &= 2 \cdot r^2 \\
A_n &= A_0 + \sum_n \Delta A_n \mbox{ , for } n>0
\end{aligned}
$$<p>As for the perimeter case, if the area-based result is used to compute $\pi$ then it is at best an approximation. When implemented in code it has the same precision limitations as the perimeter case.</p>
$$
\begin{aligned}
\pi &\approx \frac{A_n}{r^2}
\end{aligned}
$$
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="5.0-Python-implementation">5.0 Python implementation<a class="anchor-link" href="#5.0-Python-implementation">¶</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [8]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">math</span> <span class="k">import</span> <span class="n">sqrt</span>
<span class="c1"># http://www.piday.org/million/</span>
<span class="n">PI</span> <span class="o">=</span> <span class="s1">'3.141592653589793238462643383279502884197169399375'</span> <span class="c1"># and many more ...</span>
<span class="k">def</span> <span class="nf">compare_pi</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
<span class="sd">"""</span>
<span class="sd"> Compare the approximation to pi given by 'value' to the actual value.</span>
<span class="sd"> - 'value' argument must be a float</span>
<span class="sd"> """</span>
<span class="c1"># first, convert 'value' into a super-long string</span>
<span class="n">value</span> <span class="o">=</span> <span class="s1">'</span><span class="si">%.050g</span><span class="s1">'</span> <span class="o">%</span> <span class="n">value</span>
<span class="c1"># next, iterate over the characters in the PI string</span>
<span class="c1"># if there is a mismatch between PI and value, stop iterating</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">xrange</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">PI</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">PI</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="n">value</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
<span class="nb">print</span> <span class="s1">'correct portion = </span><span class="si">%s</span><span class="s1">'</span> <span class="o">%</span> <span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">i</span><span class="p">]</span>
<span class="c1"># the conditional ignores each string's decimal symbol</span>
<span class="nb">print</span> <span class="s1">'mismatch at digit </span><span class="si">%d</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span> <span class="k">if</span> <span class="n">i</span> <span class="o">></span> <span class="mi">0</span> <span class="k">else</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">break</span>
<span class="c1"># assign the radius and number of iterations</span>
<span class="c1"># make r a float to avoid unintentional integer division</span>
<span class="n">r</span> <span class="o">=</span> <span class="mf">1.0</span>
<span class="c1"># in its current form, the best this script can do is 16 decimal places</span>
<span class="c1"># this occurs for iterations >= 24</span>
<span class="n">iterations</span> <span class="o">=</span> <span class="mi">24</span>
<span class="c1"># during every loop:</span>
<span class="c1"># (1) compute the current hypotneuse using the previous hypotneuse</span>
<span class="c1"># (2) compute pi using the current hypotneuse</span>
<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">xrange</span><span class="p">(</span><span class="n">iterations</span><span class="p">):</span>
<span class="k">if</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">H_current</span> <span class="o">=</span> <span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">r</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">H_current</span> <span class="o">=</span> <span class="n">sqrt</span><span class="p">(</span>
<span class="p">(</span><span class="n">r</span> <span class="o">-</span> <span class="n">sqrt</span><span class="p">(</span><span class="n">r</span> <span class="o">**</span> <span class="mi">2</span> <span class="o">-</span> <span class="n">H_previous</span> <span class="o">**</span> <span class="mi">2</span> <span class="o">/</span> <span class="mi">4</span><span class="p">))</span> <span class="o">**</span> <span class="mi">2</span> <span class="o">+</span>
<span class="n">H_previous</span> <span class="o">**</span> <span class="mi">2</span> <span class="o">/</span> <span class="mi">4</span>
<span class="p">)</span>
<span class="n">pi_approximated</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">**</span> <span class="p">(</span><span class="n">n</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">H_current</span> <span class="o">/</span> <span class="n">r</span>
<span class="n">H_previous</span> <span class="o">=</span> <span class="n">H_current</span>
<span class="c1"># conditional that avoids printing each iteration's details</span>
<span class="k">if</span> <span class="n">n</span> <span class="o">></span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">n</span> <span class="o"><</span> <span class="n">iterations</span> <span class="o">-</span> <span class="mi">2</span><span class="p">:</span>
<span class="k">if</span> <span class="n">n</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">]:</span>
<span class="nb">print</span> <span class="s1">'...'</span>
<span class="k">continue</span>
<span class="nb">print</span> <span class="s1">'--------------------------------------------------------'</span>
<span class="nb">print</span> <span class="s1">'iteration number </span><span class="si">%d</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">n</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="nb">print</span> <span class="s1">'n = </span><span class="si">{:}</span><span class="s1">, which gives </span><span class="si">{:,}</span><span class="s1"> triangles'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="mi">2</span> <span class="o">**</span> <span class="p">(</span><span class="n">n</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span>
<span class="nb">print</span> <span class="s1">'calculated pi = </span><span class="si">%.030g</span><span class="s1">'</span> <span class="o">%</span> <span class="n">pi_approximated</span>
<span class="n">compare_pi</span><span class="p">(</span><span class="n">pi_approximated</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>--------------------------------------------------------
iteration number 1
n = 0, which gives 2 triangles
calculated pi = 2.82842712474619029094924371748
correct portion =
mismatch at digit 1
--------------------------------------------------------
iteration number 2
n = 1, which gives 4 triangles
calculated pi = 3.061467458920718698323071294
correct portion = 3.
mismatch at digit 2
...
...
...
--------------------------------------------------------
iteration number 23
n = 22, which gives 8,388,608 triangles
calculated pi = 3.14159265358977624060798916616
correct portion = 3.1415926535897
mismatch at digit 15
--------------------------------------------------------
iteration number 24
n = 23, which gives 16,777,216 triangles
calculated pi = 3.14159265358979000737349451811
correct portion = 3.14159265358979
mismatch at digit 16
</pre>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML';
mathjaxscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: 'center'," +
" displayIndent: '0em'," +
" showMathMenu: true," +
" tex2jax: { " +
" inlineMath: [ ['$','$'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" linebreaks: { automatic: true, width: '95% container' }, " +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'black ! important'} }" +
" } " +
"}); ";
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>
<p>Download this post's IPython notebook <a href="https://github.com/h-gens/h-gens.github.io-pelican/tree/master/content/notebooks/">here</a>. </p>Automated drawing of the MOS band diagram2015-02-28T15:10:00-05:002015-02-28T15:10:00-05:00H.G.tag:h-gens.github.io,2015-02-28:/automated-drawing-of-the-mos-band-diagram.html<p>The MOS capacitor's band diagram can be drawn using results from the one-dimensional solution of Poisson's equation. This post uses the results from the <a href="https://h-gens.github.io/electrical-characteristics-of-the-mos-capacitor.html">MOS capacitor analysis</a> to automate drawing of the band diagram. Written in an IPython notebook so that the code is shown alongside the discussion.</p><p>This post is part of a 4-part series on physics-based modeling of the MOS capacitor. </p>
<ul>
<li><a href="https://h-gens.github.io/electrical-characteristics-of-the-mos-capacitor.html">MOS capacitor derivation</a> </li>
<li><a href="https://h-gens.github.io/gausss-law-as-used-in-mos-derivations.html">Gauss's Law as used in MOS derivations</a> </li>
<li><a href="https://h-gens.github.io/mos-surface-potential-equation.html">MOS surface potential equation</a> </li>
<li><a href="https://h-gens.github.io/automated-drawing-of-the-mos-band-diagram.html">Automated drawing of the MOS band diagram</a> </li>
</ul>
<style type="text/css">/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI colors. */
.ansibold {
font-weight: bold;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
color: black;
}
.ansired {
color: darkred;
}
.ansigreen {
color: darkgreen;
}
.ansiyellow {
color: #c4a000;
}
.ansiblue {
color: darkblue;
}
.ansipurple {
color: darkviolet;
}
.ansicyan {
color: steelblue;
}
.ansigray {
color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
background-color: black;
}
.ansibgred {
background-color: red;
}
.ansibggreen {
background-color: green;
}
.ansibgyellow {
background-color: yellow;
}
.ansibgblue {
background-color: blue;
}
.ansibgpurple {
background-color: magenta;
}
.ansibgcyan {
background-color: cyan;
}
.ansibggray {
background-color: gray;
}
div.cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
border-radius: 2px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: transparent;
width: 100%;
padding: 5px;
/* This acts as a spacer between cells, that is outside the border */
margin: 0px;
outline: none;
border-left-width: 1px;
padding-left: 5px;
background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
}
div.cell.jupyter-soft-selected {
border-left-color: #90CAF9;
border-left-color: #E3F2FD;
border-left-width: 1px;
padding-left: 5px;
border-right-color: #E3F2FD;
border-right-width: 1px;
background: #E3F2FD;
}
@media print {
div.cell.jupyter-soft-selected {
border-color: transparent;
}
}
div.cell.selected {
border-color: #ababab;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
}
@media print {
div.cell.selected {
border-color: transparent;
}
}
div.cell.selected.jupyter-soft-selected {
border-left-width: 0;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
}
.edit_mode div.cell.selected {
border-color: #66BB6A;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
}
@media print {
.edit_mode div.cell.selected {
border-color: transparent;
}
}
.prompt {
/* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
min-width: 14ex;
/* This padding is tuned to match the padding on the CodeMirror editor. */
padding: 0.4em;
margin: 0px;
font-family: monospace;
text-align: right;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
/* Don't highlight prompt number selection */
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
/* Use default cursor */
cursor: default;
}
@media (max-width: 540px) {
.prompt {
text-align: left;
}
}
div.inner_cell {
min-width: 0;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
border: 1px solid #cfcfcf;
border-radius: 2px;
background: #f7f7f7;
line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
is no content in the output_subarea and the prompt. The main purpose of this is
to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
padding-top: 0;
padding-bottom: 0;
}
div.unrecognized_cell {
padding: 5px 5px 5px 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.unrecognized_cell .inner_cell {
border-radius: 2px;
padding: 5px;
font-weight: bold;
color: red;
border: 1px solid #cfcfcf;
background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
color: inherit;
text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
color: inherit;
text-decoration: none;
}
@media (max-width: 540px) {
div.unrecognized_cell > div.prompt {
display: none;
}
}
div.code_cell {
/* avoid page breaking on code cells when printing */
}
@media print {
div.code_cell {
page-break-inside: avoid;
}
}
/* any special styling for code cells that are currently running goes here */
div.input {
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.input {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
color: #303F9F;
border-top: 1px solid transparent;
}
div.input_area > div.highlight {
margin: 0.4em;
border: none;
padding: 0px;
background-color: transparent;
}
div.input_area > div.highlight > pre {
margin: 0px;
border: none;
padding: 0px;
background-color: transparent;
}
/* The following gets added to the <head> if it is detected that the user has a
* monospace font with inconsistent normal/bold/italic height. See
* notebookmain.js. Such fonts will have keywords vertically offset with
* respect to the rest of the text. The user should select a better font.
* See: https://github.com/ipython/ipython/issues/1503
*
* .CodeMirror span {
* vertical-align: bottom;
* }
*/
.CodeMirror {
line-height: 1.21429em;
/* Changed from 1em to our global default */
font-size: 14px;
height: auto;
/* Changed to auto to autogrow */
background: none;
/* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
/* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
/* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
overflow-y: hidden;
overflow-x: auto;
}
.CodeMirror-lines {
/* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
/* we have set a different line-height and want this to scale with that. */
padding: 0.4em;
}
.CodeMirror-linenumber {
padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
border-bottom-left-radius: 2px;
border-top-left-radius: 2px;
}
.CodeMirror pre {
/* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
/* .CodeMirror-lines */
padding: 0;
border: 0;
border-radius: 0;
}
/*
Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
Adapted from GitHub theme
*/
.highlight-base {
color: #000;
}
.highlight-variable {
color: #000;
}
.highlight-variable-2 {
color: #1a1a1a;
}
.highlight-variable-3 {
color: #333333;
}
.highlight-string {
color: #BA2121;
}
.highlight-comment {
color: #408080;
font-style: italic;
}
.highlight-number {
color: #080;
}
.highlight-atom {
color: #88F;
}
.highlight-keyword {
color: #008000;
font-weight: bold;
}
.highlight-builtin {
color: #008000;
}
.highlight-error {
color: #f00;
}
.highlight-operator {
color: #AA22FF;
font-weight: bold;
}
.highlight-meta {
color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
color: #00f;
}
.highlight-string-2 {
color: #f50;
}
.highlight-qualifier {
color: #555;
}
.highlight-bracket {
color: #997;
}
.highlight-tag {
color: #170;
}
.highlight-attribute {
color: #00c;
}
.highlight-header {
color: blue;
}
.highlight-quote {
color: #090;
}
.highlight-link {
color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
color: #008000;
font-weight: bold;
}
.cm-s-ipython span.cm-atom {
color: #88F;
}
.cm-s-ipython span.cm-number {
color: #080;
}
.cm-s-ipython span.cm-def {
color: #00f;
}
.cm-s-ipython span.cm-variable {
color: #000;
}
.cm-s-ipython span.cm-operator {
color: #AA22FF;
font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
color: #333333;
}
.cm-s-ipython span.cm-comment {
color: #408080;
font-style: italic;
}
.cm-s-ipython span.cm-string {
color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
color: #f50;
}
.cm-s-ipython span.cm-meta {
color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
color: #555;
}
.cm-s-ipython span.cm-builtin {
color: #008000;
}
.cm-s-ipython span.cm-bracket {
color: #997;
}
.cm-s-ipython span.cm-tag {
color: #170;
}
.cm-s-ipython span.cm-attribute {
color: #00c;
}
.cm-s-ipython span.cm-header {
color: blue;
}
.cm-s-ipython span.cm-quote {
color: #090;
}
.cm-s-ipython span.cm-link {
color: #00c;
}
.cm-s-ipython span.cm-error {
color: #f00;
}
.cm-s-ipython span.cm-tab {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
background-position: right;
background-repeat: no-repeat;
}
div.output_wrapper {
/* this position must be relative to enable descendents to be absolute within it */
position: relative;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
/* ideally, this would be max-height, but FF barfs all over that */
height: 24em;
/* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
width: 100%;
overflow: auto;
border-radius: 2px;
-webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
margin: 0px;
padding: 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
div.out_prompt_overlay {
height: 100%;
padding: 0px 0.4em;
position: absolute;
border-radius: 2px;
}
div.out_prompt_overlay:hover {
/* use inner shadow to get border that is computed the same on WebKit/FF */
-webkit-box-shadow: inset 0 0 1px #000;
box-shadow: inset 0 0 1px #000;
background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
padding: 0px;
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.output_area .MathJax_Display {
text-align: left !important;
}
div.output_area
div.output_area
div.output_area img,
div.output_area svg {
max-width: 100%;
height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
max-width: none;
}
/* This is needed to protect the pre formating from global settings such
as that of bootstrap */
.output {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
@media (max-width: 540px) {
div.output_area {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
div.output_area pre {
margin: 0;
padding: 0;
border: 0;
vertical-align: baseline;
color: black;
background-color: transparent;
border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
the prompt div. */
div.output_subarea {
overflow-x: auto;
padding: 0.4em;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
output types */
/* all text output has this class: */
div.output_text {
text-align: left;
color: #000;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
background: #fdd;
/* very light red background for stderr */
}
div.output_latex {
text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
padding: 0;
}
.js-error {
color: darkred;
}
/* raw_input styles */
div.raw_input_container {
line-height: 1.21429em;
padding-top: 5px;
}
pre.raw_input_prompt {
/* nothing needed here. */
}
input.raw_input {
font-family: monospace;
font-size: inherit;
color: inherit;
width: auto;
/* make sure input baseline aligns with prompt */
vertical-align: baseline;
/* padding + margin = 0.5em between prompt and cursor */
padding: 0em 0.25em;
margin: 0em 0.25em;
}
input.raw_input:focus {
box-shadow: none;
}
p.p-space {
margin-bottom: 10px;
}
div.output_unrecognized {
padding: 5px;
font-weight: bold;
color: red;
}
div.output_unrecognized a {
color: inherit;
text-decoration: none;
}
div.output_unrecognized a:hover {
color: inherit;
text-decoration: none;
}
.rendered_html {
color: #000;
/* any extras will just be numbers: */
}
.rendered_html :link {
text-decoration: underline;
}
.rendered_html :visited {
text-decoration: underline;
}
.rendered_html h1:first-child {
margin-top: 0.538em;
}
.rendered_html h2:first-child {
margin-top: 0.636em;
}
.rendered_html h3:first-child {
margin-top: 0.777em;
}
.rendered_html h4:first-child {
margin-top: 1em;
}
.rendered_html h5:first-child {
margin-top: 1em;
}
.rendered_html h6:first-child {
margin-top: 1em;
}
.rendered_html * + ul {
margin-top: 1em;
}
.rendered_html * + ol {
margin-top: 1em;
}
.rendered_html pre,
.rendered_html tr,
.rendered_html th,
.rendered_html td,
.rendered_html * + table {
margin-top: 1em;
}
.rendered_html * + p {
margin-top: 1em;
}
.rendered_html * + img {
margin-top: 1em;
}
.rendered_html img,
.rendered_html img.unconfined,
div.text_cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.text_cell > div.prompt {
display: none;
}
}
div.text_cell_render {
/*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
outline: none;
resize: none;
width: inherit;
border-style: none;
padding: 0.5em 0.5em 0.5em 0.4em;
color: #000;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
a.anchor-link:link {
text-decoration: none;
padding: 0px 20px;
visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
visibility: visible;
}
.text_cell.rendered .input_area {
display: none;
}
.text_cell.rendered
.text_cell.unrendered .text_cell_render {
display: none;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
font-weight: bold;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
font-size: 185.7%;
}
.cm-header-2 {
font-size: 157.1%;
}
.cm-header-3 {
font-size: 128.6%;
}
.cm-header-4 {
font-size: 110%;
}
.cm-header-5 {
font-size: 100%;
font-style: italic;
}
.cm-header-6 {
font-size: 100%;
font-style: italic;
}
</style>
<style type="text/css">.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>
<style type="text/css">
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }
.ansi-bold { font-weight: bold; }
</style>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="1.0-Introduction--">1.0 Introduction <a class="anchor-link" href="#1.0-Introduction--">¶</a></h2><p>The MOS capacitor's band diagram can be drawn using results from the one-dimensional <a href="/mos-capacitor-derivation.html">solution of Poisson's equation</a>. The accuracy of the resulting band diagram is only as good as the approximations used in the analysis. Zero gate leakage is assumed.</p>
<p>This notebook draws the band diagram for the nickel-SiO2-Si system at an arbitrary gate-bulk bias. It uses published conduction/valence band offsets (CBO/VBO) for SiO2 on silicon [1]. Other insulators can be substituted if their CBO/VBO are known, either from published measurements or by resorting to the <a href="https://en.wikipedia.org/wiki/Anderson%27s_rule">affinity rule</a>. The CBO/VBO values have no effect on the computed band-bending since gate leakage is ignored, so even fictional values can be input. CBO/VBO are only included so that the insulator can be outlined while showing the effect of $\psi_{ox}$.</p>
<p>The y-axis of the resulting band diagram will be in eV. However, the values should be interpreted as being relative to the semiconductor's neutral bulk valence band level, $E_v(y\rightarrow\infty)$.</p>
<center><img src="../images/2015-02-25-MOSCAP-derivations/mos_cross_section.png"></center><h3 id="1.1-A-brief-primer-on-band-bending">1.1 A brief primer on band-bending<a class="anchor-link" href="#1.1-A-brief-primer-on-band-bending">¶</a></h3><p>The amount of band-bending in the semiconductor at an arbitrary depth is quantified as potential, $\psi$. The surface potential, $\psi_s$, is the total band-bending from the neutral bulk to the oxide/semiconductor interface.</p>
<ul>
<li>Band-bending is positive when a band is bent downward. </li>
<li>Band-bending is negative when a band is bent upward. </li>
</ul>
<p>Below is an image showing band-bending in an MOS device when $V_{gb}$, $\psi_{ox}$, and $\psi_s$ are all positive.</p>
<center><img src="../images/2015-02-28-MOS-band-diagram/band_bending.png"></center>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="2.0-Constants-and-utility-functions">2.0 Constants and utility functions<a class="anchor-link" href="#2.0-Constants-and-utility-functions">¶</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [1]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="kn">import</span> <span class="nn">matplotlib</span> <span class="k">as</span> <span class="nn">mpl</span>
<span class="kn">from</span> <span class="nn">scipy.integrate</span> <span class="k">import</span> <span class="n">quad</span>
<span class="c1"># The 'inline' statement keeps the plot windows from showing up as</span>
<span class="c1"># independent windows. Instead, they show up in the notebook.</span>
<span class="o">%</span><span class="k">matplotlib</span> inline
<span class="c1"># make all lines have this thickness by default</span>
<span class="n">mpl</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">'lines.linewidth'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2</span>
<span class="c1"># set a default figure size</span>
<span class="n">mpl</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">'figure.figsize'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
<span class="c1"># -----------------------</span>
<span class="c1"># user-defined settings</span>
<span class="c1"># -----------------------</span>
<span class="n">T</span> <span class="o">=</span> <span class="mi">300</span> <span class="c1"># lattice temperature, Kelvin</span>
<span class="n">tox</span> <span class="o">=</span> <span class="mf">20e-9</span> <span class="o">*</span> <span class="mi">100</span> <span class="c1"># 50 nm oxide converted to cm</span>
<span class="n">Nd</span> <span class="o">=</span> <span class="mf">1e16</span> <span class="c1"># donor doping concentration, # / cm^3</span>
<span class="n">Na</span> <span class="o">=</span> <span class="mf">1e17</span> <span class="c1"># acceptor doping concentration, # / cm^3</span>
<span class="n">CBO</span> <span class="o">=</span> <span class="mf">3.5</span> <span class="c1"># SiO2/Si conduction band offset, eV</span>
<span class="n">VBO</span> <span class="o">=</span> <span class="mf">4.4</span> <span class="c1"># SiO2/Si valence band offset, eV</span>
<span class="c1"># -----------------------</span>
<span class="c1"># physical constants</span>
<span class="c1"># -----------------------</span>
<span class="n">e0</span> <span class="o">=</span> <span class="mf">8.854e-14</span> <span class="c1"># permittivity of free space, F / cm</span>
<span class="n">q</span> <span class="o">=</span> <span class="mf">1.602e-19</span> <span class="c1"># elementary charge, Coulombs</span>
<span class="n">k</span> <span class="o">=</span> <span class="mf">8.617e-5</span> <span class="c1"># Boltzmann constant, eV / K</span>
<span class="c1"># -----------------------</span>
<span class="c1"># material parameters </span>
<span class="c1"># -----------------------</span>
<span class="n">es</span> <span class="o">=</span> <span class="mf">11.7</span> <span class="c1"># relative permittivity, silicon</span>
<span class="n">eox</span> <span class="o">=</span> <span class="mf">3.9</span> <span class="c1"># relative permittivity, SiO2</span>
<span class="n">chi_s</span> <span class="o">=</span> <span class="mf">4.17</span> <span class="c1"># electron affinity, silicon, eV</span>
<span class="n">phi_m</span> <span class="o">=</span> <span class="mf">5.01</span> <span class="c1"># work function, nickel, eV</span>
<span class="c1"># bandgap, silicon, eV</span>
<span class="n">Eg</span> <span class="o">=</span> <span class="mf">1.17</span> <span class="o">-</span> <span class="mf">4.73e-4</span> <span class="o">*</span> <span class="n">T</span> <span class="o">**</span> <span class="mi">2</span> <span class="o">/</span> <span class="p">(</span><span class="n">T</span> <span class="o">+</span> <span class="mf">636.0</span><span class="p">)</span>
<span class="c1"># effective valence band DOS, silicon, # / cm^3</span>
<span class="n">Nv</span> <span class="o">=</span> <span class="mf">3.5e15</span> <span class="o">*</span> <span class="n">T</span> <span class="o">**</span> <span class="mf">1.5</span>
<span class="c1"># effective conduction band DOS, silicon, # / cm^3</span>
<span class="n">Nc</span> <span class="o">=</span> <span class="mf">6.2e15</span> <span class="o">*</span> <span class="n">T</span> <span class="o">**</span> <span class="mf">1.5</span>
<span class="k">def</span> <span class="nf">solve_bisection</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">xmin</span><span class="p">,</span> <span class="n">xmax</span><span class="p">):</span>
<span class="sd">"""</span>
<span class="sd"> Returns the independent value x satisfying func(x)=value.</span>
<span class="sd"> - uses the bisection search method</span>
<span class="sd"> https://en.wikipedia.org/wiki/Bisection_method</span>
<span class="sd"> Arguments:</span>
<span class="sd"> func - callable function of a single independent variable</span>
<span class="sd"> target - the value func(x) should equal</span>
<span class="sd"> [xmin, xmax] - the range over which x can exist</span>
<span class="sd"> """</span>
<span class="n">tol</span> <span class="o">=</span> <span class="mf">1e-10</span> <span class="c1"># when |a - b| <= tol, quit searching</span>
<span class="n">max_iters</span> <span class="o">=</span> <span class="mf">1e2</span> <span class="c1"># maximum number of iterations</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">xmin</span>
<span class="n">b</span> <span class="o">=</span> <span class="n">xmax</span>
<span class="n">cnt</span> <span class="o">=</span> <span class="mi">1</span>
<span class="c1"># before entering while(), calculate Fa</span>
<span class="n">Fa</span> <span class="o">=</span> <span class="n">target</span> <span class="o">-</span> <span class="n">func</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">a</span>
<span class="c1"># bisection search loop</span>
<span class="k">while</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">a</span> <span class="o">-</span> <span class="n">b</span><span class="p">)</span> <span class="o">></span> <span class="n">tol</span> <span class="ow">and</span> <span class="n">cnt</span> <span class="o"><</span> <span class="n">max_iters</span><span class="p">:</span>
<span class="n">cnt</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="c1"># make 'c' be the midpoint between 'a' and 'b'</span>
<span class="n">c</span> <span class="o">=</span> <span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">b</span><span class="p">)</span> <span class="o">/</span> <span class="mf">2.0</span>
<span class="c1"># calculate at the new 'c'</span>
<span class="n">Fc</span> <span class="o">=</span> <span class="n">target</span> <span class="o">-</span> <span class="n">func</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="k">if</span> <span class="n">Fc</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="c1"># 'c' was the sought-after solution, so quit</span>
<span class="k">break</span>
<span class="k">elif</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">Fa</span><span class="p">)</span> <span class="o">==</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">Fc</span><span class="p">):</span>
<span class="c1"># the signs were the same, so modify 'a'</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">c</span>
<span class="n">Fa</span> <span class="o">=</span> <span class="n">Fc</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># the signs were different, so modify 'b'</span>
<span class="n">b</span> <span class="o">=</span> <span class="n">c</span>
<span class="k">if</span> <span class="n">cnt</span> <span class="o">==</span> <span class="n">max_iters</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'WARNING: max iterations reached'</span><span class="p">)</span>
<span class="k">return</span> <span class="n">c</span>
<span class="c1"># -----------------------</span>
<span class="c1"># dependent calculations</span>
<span class="c1"># -----------------------</span>
<span class="c1"># intrinsic carrier concentration, silicon, # / cm^3</span>
<span class="n">ni</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">Nc</span> <span class="o">*</span> <span class="n">Nv</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="n">Eg</span> <span class="o">/</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">k</span> <span class="o">*</span> <span class="n">T</span><span class="p">))</span>
<span class="c1"># Energy levels are relative to one-another in charge expressions.</span>
<span class="c1"># - Therefore, it is OK to set Ev to a reference value of 0 eV.</span>
<span class="c1"># Usually, energy levels are given in Joules and one converts to eV.</span>
<span class="c1"># - I have just written each in eV to save time.</span>
<span class="n">Ev</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># valence band energy level</span>
<span class="n">Ec</span> <span class="o">=</span> <span class="n">Eg</span> <span class="c1"># conduction band energy level</span>
<span class="n">Ei</span> <span class="o">=</span> <span class="n">k</span> <span class="o">*</span> <span class="n">T</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">ni</span> <span class="o">/</span> <span class="n">Nc</span><span class="p">)</span> <span class="o">+</span> <span class="n">Ec</span> <span class="c1"># intrinsic energy level</span>
<span class="n">phit</span> <span class="o">=</span> <span class="n">k</span> <span class="o">*</span> <span class="n">T</span> <span class="c1"># thermal voltage, eV</span>
<span class="c1"># get the Fermi level in the bulk where there is no band-bending</span>
<span class="n">n</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">Ef</span><span class="p">:</span> <span class="n">Nc</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">((</span><span class="o">-</span><span class="n">Ec</span> <span class="o">+</span> <span class="n">Ef</span><span class="p">)</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="n">p</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">Ef</span><span class="p">:</span> <span class="n">Nv</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">((</span><span class="n">Ev</span> <span class="o">-</span> <span class="n">Ef</span><span class="p">)</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="n">func</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">Ef</span><span class="p">:</span> <span class="n">p</span><span class="p">(</span><span class="n">Ef</span><span class="p">)</span> <span class="o">-</span> <span class="n">n</span><span class="p">(</span><span class="n">Ef</span><span class="p">)</span> <span class="o">+</span> <span class="n">Nd</span> <span class="o">-</span> <span class="n">Na</span>
<span class="n">Ef</span> <span class="o">=</span> <span class="n">solve_bisection</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">Ev</span><span class="p">,</span> <span class="n">Ec</span><span class="p">)</span>
<span class="c1"># compute semiconductor work function (energy from vacuum to Ef)</span>
<span class="n">phi_s</span> <span class="o">=</span> <span class="n">chi_s</span> <span class="o">+</span> <span class="n">Ec</span> <span class="o">-</span> <span class="n">Ef</span>
<span class="c1"># flatband voltage and its constituent(s)</span>
<span class="c1"># - no defect-related charges considered</span>
<span class="n">phi_ms</span> <span class="o">=</span> <span class="n">phi_m</span> <span class="o">-</span> <span class="n">phi_s</span> <span class="c1"># metal-semiconductor workfunction, eV</span>
<span class="n">Vfb</span> <span class="o">=</span> <span class="n">phi_ms</span> <span class="c1"># flatband voltage, V</span>
<span class="c1"># oxide capacitance per unit area, F / cm^2</span>
<span class="n">Coxp</span> <span class="o">=</span> <span class="n">eox</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">/</span> <span class="n">tox</span>
<span class="c1"># if both Nd and Na are zero, then make one slightly higher</span>
<span class="c1"># calculate effective compensated doping densities</span>
<span class="c1"># - assume complete ionization</span>
<span class="k">if</span> <span class="n">Na</span> <span class="o">></span> <span class="n">Nd</span><span class="p">:</span>
<span class="n">Na</span> <span class="o">=</span> <span class="n">Na</span> <span class="o">-</span> <span class="n">Nd</span>
<span class="n">Nd</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">device_type</span> <span class="o">=</span> <span class="s1">'nMOS'</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">Nd</span> <span class="o">=</span> <span class="n">Nd</span> <span class="o">-</span> <span class="n">Na</span>
<span class="n">Na</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">device_type</span> <span class="o">=</span> <span class="s1">'pMOS'</span>
<span class="c1"># -----------------------</span>
<span class="c1"># define the SPE</span>
<span class="c1"># -----------------------</span>
<span class="c1"># compute equilibrium carrier concentrations</span>
<span class="n">n_o</span> <span class="o">=</span> <span class="n">Nc</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">((</span><span class="o">-</span><span class="n">Ec</span> <span class="o">+</span> <span class="n">Ef</span><span class="p">)</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="n">p_o</span> <span class="o">=</span> <span class="n">Nv</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">((</span><span class="n">Ev</span> <span class="o">-</span> <span class="n">Ef</span><span class="p">)</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="c1"># define the charge function so it can be used in the SPE</span>
<span class="n">f</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="n">psis</span> <span class="o">*</span> <span class="p">(</span><span class="n">Na</span> <span class="o">-</span> <span class="n">Nd</span><span class="p">)</span> \
<span class="o">+</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">p_o</span> <span class="o">*</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="n">psis</span> <span class="o">/</span> <span class="n">phit</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">phit</span> <span class="o">*</span> <span class="n">n_o</span> <span class="o">*</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">psis</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">Qs</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">q</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">*</span> <span class="n">es</span> <span class="o">*</span> <span class="n">f</span><span class="p">(</span><span class="n">psis</span><span class="p">))</span>
<span class="n">SPE</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="n">Vfb</span> <span class="o">+</span> <span class="n">psis</span> <span class="o">-</span> <span class="n">Qs</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">/</span> <span class="n">Coxp</span>
<span class="c1"># define the electric field for use in computing y(psi)</span>
<span class="n">E</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psi</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">psi</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">q</span> <span class="o">/</span> <span class="p">(</span><span class="n">es</span> <span class="o">*</span> <span class="n">e0</span><span class="p">)</span> <span class="o">*</span> <span class="n">f</span><span class="p">(</span><span class="n">psi</span><span class="p">))</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="3.0-Derivation-of-$\psi(y)$--">3.0 Derivation of $\psi(y)$ <a class="anchor-link" href="#3.0-Derivation-of-$\psi(y)$--">¶</a></h2><p>The first step to obtaining semiconductor potential ($\psi$) as a function of distance ($y$) from the oxide-semiconductor interface is to have an expression for electric field. The semiconductor's electric field is known from analysis of Poisson's equation. Only the <a href="/mos-capacitor-derivation.html">highlights of the derivation</a> are shown below.</p>
$$\begin{aligned}
\frac{d^2\psi}{dy^2} &= -\frac{\rho}{\epsilon_s} \\
\rightarrow \frac{1}{2} \frac{dE^2}{d\psi} &= -\frac{\rho}{\epsilon} \\
\int_{E(y=0)}^{E(y)} dE^2 &= -\frac{2}{\epsilon} \int_{\psi(y=0)}^{\psi(y)} \rho d\psi
\end{aligned}$$<p>The resulting $E$ is:</p>
$$\begin{aligned}
E &= \mbox{sign}(\psi) \sqrt{\frac{2q}{\epsilon_s} f(\psi)} \\
f(\psi) &= \phi_t p_o \left(e^{-\psi/\phi_t} - 1 \right) + \phi_t n_o \left(e^{\psi/\phi_t} - 1 \right) \\
& + \psi \left(N_a - N_d\right)
\end{aligned}$$<p>Now, a relationship between $E$ and $\psi$ is known. Obtaining the $y$ value at each $(\psi, E)$ pair comes from the one-dimensional potential/field relationship, $E = -dV/dy$. Rearranging the derivative and integrating gives a function for $y$. The resulting integral has no closed-form result and so must be discretely integrated. The subscript 'a' in $y_a$ and $\psi_a$ just means 'arbitrary' and is only added to avoid having the <a href="https://math.stackexchange.com/questions/109105/limit-of-integration-cant-be-the-same-as-variable-of-integration">variable of integration appear in the integral's limits</a>.</p>
$$\begin{aligned}
\int_0^{y_a} dy &= -\int_{\psi_s}^{\psi_a} \frac{d\psi}{E} \\
y_a &= \int_{\psi_a}^{\psi_s} \frac{d\psi}{\mbox{sign}(\psi) \sqrt{\frac{2q}{\epsilon_s} f(\psi)}}
\end{aligned}$$<p>The band diagram function will:</p>
<ol>
<li>Define/compute the surface potential ($\psi_s$), gate-bulk voltage ($V_{gb}$), and oxide potential ($\psi_{ox}$). </li>
<li>Create a new variable ($\psi$) that ranges from $\psi_s$ to near-zero. </li>
<li>At each $\psi$ value, numerically integrate the right-hand side of the $y$ expression to obtain the corresponding value of $y$. </li>
</ol>
<p>A function that performs the numerical integration is defined first so that it can be called during the band diagram drawing routine.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="3.1-$y$-computation-functions">3.1 $y$-computation functions<a class="anchor-link" href="#3.1-$y$-computation-functions">¶</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [2]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># -----------------------</span>
<span class="c1"># y-computation functions</span>
<span class="c1"># -----------------------</span>
<span class="c1"># this is the integrand needed to compute y</span>
<span class="n">integrand_y</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psi</span><span class="p">:</span> <span class="mi">1</span> <span class="o">/</span> <span class="n">E</span><span class="p">(</span><span class="n">psi</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">compute_y_vs_psi</span><span class="p">(</span><span class="n">psis</span><span class="p">):</span>
<span class="sd">"""</span>
<span class="sd"> This function creates a 'psi' variable ranging from psis to ~zero.</span>
<span class="sd"> It then computes the y-values corresponding to every value in psi.</span>
<span class="sd"> psis is the surface potential and must be a scalar constant.</span>
<span class="sd"> """</span>
<span class="c1"># handle the flatband case</span>
<span class="k">if</span> <span class="n">psis</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">y</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="mi">0</span><span class="p">,</span> <span class="mi">150</span><span class="p">,</span> <span class="mi">101</span><span class="p">)</span> <span class="o">*</span> <span class="mf">1e-7</span> <span class="c1"># convert nm to cm</span>
<span class="n">psi</span> <span class="o">=</span> <span class="mi">0</span> <span class="o">*</span> <span class="n">y</span>
<span class="k">return</span> <span class="n">y</span><span class="p">,</span> <span class="n">psi</span>
<span class="c1"># (1) let semiconductor potential range from psis to near-zero</span>
<span class="c1"># - could construct psi linearly and have a coarse y as psi -> 0</span>
<span class="c1"># - could construct psi log-spaced to make y more evenly spaced</span>
<span class="c1"># - solution: do a mixture </span>
<span class="n">psi1</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">psis</span><span class="p">,</span> <span class="n">psis</span> <span class="o">*</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mi">21</span><span class="p">)</span> <span class="c1"># linear spacing near y=0</span>
<span class="n">psi2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">logspace</span><span class="p">(</span> <span class="c1"># log spacing toward bulk</span>
<span class="n">np</span><span class="o">.</span><span class="n">log10</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">psis</span> <span class="o">*</span> <span class="mf">0.5</span><span class="p">)),</span>
<span class="n">np</span><span class="o">.</span><span class="n">log10</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">psis</span> <span class="o">*</span> <span class="mf">1e-3</span><span class="p">)),</span>
<span class="mi">101</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">psis</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">psi2</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> <span class="o">*</span> <span class="n">psi2</span>
<span class="c1"># combine the arrays, but leave out the common point (psis * 0.5)</span>
<span class="n">psi</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">hstack</span><span class="p">((</span><span class="n">psi1</span><span class="p">,</span> <span class="n">psi2</span><span class="p">[</span><span class="mi">1</span><span class="p">:]))</span>
<span class="c1"># (2) call compute_y() at every value in psi</span>
<span class="c1"># collect the returned y-values in an array</span>
<span class="n">y</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="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">psi</span><span class="p">:</span>
<span class="n">y_current</span><span class="p">,</span> <span class="n">error</span> <span class="o">=</span> <span class="n">quad</span><span class="p">(</span><span class="n">integrand_y</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">psis</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">hstack</span><span class="p">((</span><span class="n">y</span><span class="p">,</span> <span class="n">y_current</span><span class="p">))</span>
<span class="k">return</span> <span class="n">y</span><span class="p">,</span> <span class="n">psi</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="4.0-Computed-band-diagram">4.0 Computed band diagram<a class="anchor-link" href="#4.0-Computed-band-diagram">¶</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [3]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># -----------------------</span>
<span class="c1"># choose a potential to plot</span>
<span class="c1"># -----------------------</span>
<span class="c1"># psis = Ev - Ef # (very) strong accumulation</span>
<span class="c1"># psis = 0 # flatband</span>
<span class="c1"># psis = Ei - Ef # weak inversion</span>
<span class="c1"># psis = 2 * (Ei - Ef) # strong inversion</span>
<span class="n">psis</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="p">(</span><span class="n">Ei</span> <span class="o">-</span> <span class="n">Ef</span><span class="p">)</span> <span class="o">+</span> <span class="mi">3</span> <span class="o">*</span> <span class="n">phit</span> <span class="c1"># stronger inversion</span>
<span class="c1"># psis = Ec - Ef # (very) strong inversion</span>
<span class="c1"># psis = solve_bisection( # zero gate-bulk bias</span>
<span class="c1"># SPE, 0, Ev - Ef, Ec - Ef</span>
<span class="c1"># )</span>
<span class="c1"># compute the corresponding Vgb value</span>
<span class="n">Vgb</span> <span class="o">=</span> <span class="n">SPE</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span>
<span class="c1"># create figure, label axes, turn grid on</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'y (nm)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">14</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'relative to bulk valence band (eV)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">14</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="c1"># get psiox from the potential balance equation (see SPE derivation)</span>
<span class="n">psiox</span> <span class="o">=</span> <span class="n">Vgb</span> <span class="o">-</span> <span class="n">psis</span> <span class="o">-</span> <span class="n">phi_ms</span>
<span class="c1"># construct the psi vs y curve</span>
<span class="n">y</span><span class="p">,</span> <span class="n">psi</span> <span class="o">=</span> <span class="n">compute_y_vs_psi</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span>
<span class="c1"># y and tox are in cm, so convert to nm</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">y</span> <span class="o">/</span> <span class="mi">100</span> <span class="o">*</span> <span class="mf">1e9</span>
<span class="n">toxnm</span> <span class="o">=</span> <span class="n">tox</span> <span class="o">/</span> <span class="mi">100</span> <span class="o">*</span> <span class="mf">1e9</span>
<span class="c1"># plot the conduction/intrinsic/valence bands</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">Ev</span> <span class="o">-</span> <span class="n">psi</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">Ei</span> <span class="o">-</span> <span class="n">psi</span><span class="p">,</span> <span class="s1">'b--'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">Ec</span> <span class="o">-</span> <span class="n">psi</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">)</span>
<span class="c1"># plot the fermi level</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="mi">0</span> <span class="o">*</span> <span class="n">y</span> <span class="o">+</span> <span class="n">Ef</span><span class="p">,</span> <span class="s1">'k'</span><span class="p">)</span>
<span class="c1"># plot the SiO2 bands</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="n">Ev</span> <span class="o">-</span> <span class="n">psis</span> <span class="o">-</span> <span class="n">VBO</span><span class="p">,</span> <span class="n">Ec</span> <span class="o">-</span> <span class="n">psis</span> <span class="o">+</span> <span class="n">CBO</span><span class="p">],</span> <span class="s1">'r'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">[</span><span class="o">-</span><span class="n">toxnm</span><span class="p">,</span> <span class="o">-</span><span class="n">toxnm</span><span class="p">],</span>
<span class="p">[</span><span class="n">Ev</span> <span class="o">-</span> <span class="n">psis</span> <span class="o">-</span> <span class="n">VBO</span> <span class="o">-</span> <span class="n">psiox</span><span class="p">,</span> <span class="n">Ec</span> <span class="o">-</span> <span class="n">psis</span> <span class="o">+</span> <span class="n">CBO</span> <span class="o">-</span> <span class="n">psiox</span><span class="p">],</span>
<span class="s1">'r'</span>
<span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="o">-</span><span class="n">toxnm</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="n">Ev</span> <span class="o">-</span> <span class="n">psis</span> <span class="o">-</span> <span class="n">VBO</span> <span class="o">-</span> <span class="n">psiox</span><span class="p">,</span> <span class="n">Ev</span> <span class="o">-</span> <span class="n">psis</span> <span class="o">-</span> <span class="n">VBO</span><span class="p">],</span> <span class="s1">'r'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="o">-</span><span class="n">toxnm</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="n">Ec</span> <span class="o">-</span> <span class="n">psis</span> <span class="o">+</span> <span class="n">CBO</span> <span class="o">-</span> <span class="n">psiox</span><span class="p">,</span> <span class="n">Ec</span> <span class="o">-</span> <span class="n">psis</span> <span class="o">+</span> <span class="n">CBO</span><span class="p">],</span> <span class="s1">'r'</span><span class="p">)</span>
<span class="c1"># plot the gate's Fermi level</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="p">[</span><span class="o">-</span><span class="n">toxnm</span> <span class="o">-</span> <span class="mi">15</span><span class="p">,</span> <span class="o">-</span><span class="n">toxnm</span><span class="p">],</span>
<span class="p">[</span><span class="n">Ef</span> <span class="o">-</span> <span class="n">phi_ms</span> <span class="o">-</span> <span class="n">psis</span> <span class="o">-</span> <span class="n">psiox</span><span class="p">,</span> <span class="n">Ef</span> <span class="o">-</span> <span class="n">phi_ms</span> <span class="o">-</span> <span class="n">psis</span> <span class="o">-</span> <span class="n">psiox</span><span class="p">],</span>
<span class="s1">'k'</span>
<span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Vgb = </span><span class="si">%0.4g</span><span class="s1">, psiox = </span><span class="si">%0.4g</span><span class="s1">, psis = </span><span class="si">%0.4g</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">Vgb</span><span class="p">,</span> <span class="n">psiox</span><span class="p">,</span> <span class="n">psis</span><span class="p">))</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>Vgb = 1.953, psiox = 1.187, psis = 0.9128
</pre>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfkAAAFLCAYAAADVtPWaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALEgAACxIB0t1+/AAAIABJREFUeJzt3XucVVX9//HXMNwZEQVhuAiDAiqCooJm3sYsxb5mafpN
s3T0m6b2U0lT6msWaZa3UsMuahmVt/KSpX4tzdyKlonAiCDKTRhUQBiBAYbLwJzfH59zPGfOnJnZ
c2avvfec834+HuuxL+fM2R+W4/nMXmvttUBERERERERERERERERERERERERERERERERERERCUgrM
BZ6MOhAREZHOrEvUAeRwBfAWkIg6EBERkc4sbkl+GPBZ4NdAScSxiIiIdGpxS/K3A1cDjVEHIiIi
0tnFKcmfAnyI9cfrLl5ERKSD4pRMfwR8FdgJ9AT6Ao8B56beMGTIkMQHH3wQTXQiIiLRWAqMyucH
45TkMx0HfAv4XNb5RCKh8XguTZs2jWnTpkUdRsFTPbunOnZPdRyOkpISyDNfx6m5PpuyeQSWL18e
dQhFQfXsnurYPdVx/HWNOoAWvJgsIiIikqc438lLBKqqqqIOoSiont1THbunOo6/uPbJt0R98i6t
Xg1TpsCdd8KgQVFHIyIiFG6fvIRp5kwYPBjvj3+0RC9OeZ4XdQgFT3Xsnuo4/pTki10iAT/5CRx/
fPrc7bdHF4+IiARGzfXFrK4Ozj8fHn+86XnVsYhIbKi5Xtpv/nyYONESfN++8Oc/Rx2RiIgETEm+
GD3wABxxBCxeDAcdBK+/Dl/4AgBetJEVDfVluqc6dk91HH9K8sVk+3a49FL4ylegvh7OPRf+/W8Y
PTrqyERExAH1yReLmho44wyYNQu6d4fp0+HCC6Ek41cgta86FhGJjY70ycd1xjsJ0t//DuecA7W1
MGIEPPqo9ceLiEhBU3N9IWtshOuvh5NPtgQ/eTLMnt1qgvfCi66oqS/TPdWxe6rj+NOdfKGqrYWv
fhWeecaa4a+/Hq69Frro7zoRkWKhPvlCNGuW9b/X1ED//vDgg3DiiW3/nPrkRURiR8/Ji0kk4O67
4eijLcEffjjMmeMvwYuISMFRki8U9fVQVQUXXww7dtijci+9BMOHt+tjPCfBSTb1ZbqnOnZPdRx/
6pMvBIsXW/P8vHnQuzfcc4+NphcRkaKmPvnO7okn4LzzbB76MWPgscdg3Lj8Pkt98iIisRPGc/Kl
wERgDLA7sAFYDMwGduZzYemgnTtttPwtt9jxF78I991n89CLiIjQdp/8JGAGltT/DdwFTAV+njze
kHz9cGcRSnOrV8OnP20JvrTUlop95JFAErzX8ejEB/Vluqc6dk91HH+tJfk/A08Bm4HTgf7YXfze
yW1/4IvAFuBJ4PHcHyOBmjkTDjkEXnwRBg+GF16AK69sOj2tiIgIrbfxXw7cA2zz8Tm9gAuBnwUR
VCuKt08+kYDbb4drroFdu+C44+Dhh6G8PLhrqE9eRCR2OtIn39lu/4ozydfVwQUX2KA6sER/443Q
NeCHI5TkRURix+VkODXANKB9D1tLcObPh0mTLMH37QuPPw433xx8gk/ynHyqZFNfpnuqY/dUx/HX
VpJ/CPg68C7wd+BMoJvroCTpgQfgiCNg0SI46CB4/XU47bSooxIRkU7Cz+1/V+C/gP8BJmMj6u8H
fg285S60nIqjuX77dhtM94tf2PG558Ivf2kT3bik5noRkdgJs0++HDgPuAAYDfwHS/a/yefieSj8
JF9TA2eeCa+9Bt27w/TpcOGF4YyeV5IXEYmdMBeoWQ3cDOyHPVY3BhuBL0F49lk49FBL8CNGwCuv
wEUXhfp4nBfalYqb+jLdUx27pzqOv/Ym+RLgJOCPwMPJc3cFGlExamy09d4nT7Z14CdPhtmzYeLE
qCMTEZFOzO8t4kjgfKAKGAq8gDXT/xnY7iSy3Aqvub62Fr76VXjmGbtjnzYNvvtd6BLBAoFqrhcR
iR2Xc9d/Bet/Pw74AJvC9j5stL101Jw5cNhhtr/nnvDgg3DSSdHGJCIiBaOt28XfYqPpPwdUANeh
BB+cxsb0/ty5sUjwXtQBFAn1ZbqnOnZPdRx/bd3JDwPWhBFIUcrscx+u+YZERCRY7Wnj/yzwDWAf
4ERgJTZf/TLg+eBDy6nw+uTj1A8ep1hERAQI5xG6c4A/YWvIjyQ9610pcE0+FxYRERG3/Cb5qdhd
+xSgIeP8q8AhQQcl0fGiDqBIqC/TPdWxe6rj+POb5EcB/8pxfjPQN7hwREREJCh+2/iXAJcCzwKb
gIOxvvjzgW8BBzqJrjn1ybsUp1hERAQIp0/+HuBO4KjkhYZjE+PcCvwynwuLiIiIW36T/C3A48Bz
QG/gn1hy/yXBTmu7Nzab3gJgPnB5gJ8tPnhRB1Ak1JfpnurYPdVx/LX1nHyma4EfAWOxPw7ewpru
g9QAfBOoBsqA2dgfFgsDvo6IiEjBC295s/w8AUwn/Ry++uRdilMsIiICuOuTn4GtGe/HGGwK3CBV
YI/n/SfgzxURESkKrTXXLwVew/rG/wrMAmqwx+bKsMF3hwOnAuOA2wKMqwx4FLgieb2PVVVVUVFR
AUC/fv2YMGEClZWVQLp/qNMdJ/9tkceD9ZNMiUs8BXyc2ZcZh3gK8fiOO+4ojO+HGB9XV1czZcqU
2MRTKMee5zFjxgyAj/Ndvtq6/d8TOA84G7urLs14bRcwF3gI+D1Q26FI0roBTwHPAHdkvabmepdK
SvCAyjjEUuA8z/v4f25xQ3Xsnuo4HB1prm/PD5VhU9r2BTZiq9FtyeeibcTzO+wPhm/meF1J3qU4
xSIiIkB4ST4MRwMvAfOAVKb5DvC35L6SvEtxikVERIBwJsMJy8tYTBOw7oFDSCd4CYEXdQBFItX/
Ju6ojt1THcdf3JK8iIiIBCRuzfVtUXO9S3GKRUREgMJqrhcREZGAKMlLE17UARQJ9WW6pzp2T3Uc
f61NhvMCNsI91USQasPNPgb4VMBxiYiISAe11safubpcKfBlYDU2zWwJNttdOfAAttZ8GNQn71Kc
YhERESCc5+RvxxL9FTS9o0/NSHdFPhfPg5K8S3GKRUREgHAG3p2H3dlnfvsngF8A5+ZzYYknL+oA
ioT6Mt1THbunOo6/9gy8OyjHuXFBBSIiIiLB8nv7fxvwNeBm4N/Jc0cC12BLzF4ZfGg5qbnepTjF
IiIiQDh98qXAVdgqpOXJc6uAO4GfYCvShUFJ3qU4xSIiIkA4ffK7gFuAIcAeyTI0eS6sBC8h8KIO
oEioL9M91bF7quP4a+05+ZZsDDwKERERCZzf2//+wI3ACcBAmrYAJLA15sOg5nqX4hSLiIgAHWuu
93sn/2ts2dd7sL54ZQERKVqJBOzaBTt32rax0baZ+5nb7LJrl31GItH0fOo487XUfq7jzJKKq6Vz
qf3Mf0NL5/PdBxgzBsaPz69eJXh+/zKoA04EXnUYix+6k3eppAQPqIxDLAXO8zwqKyujDiO2EgnY
tg3q69Nl69amZdu29HbbNti+vel26VKPgQMr2bHDzu3YkS4NDeltdtm5s2lpaEgn9FTR/yIpHlDZ
5MzUqXDTTVHEUrjCuJNfC2zO5wIiUvgaG2HLFti40UpdXXpbVwebNjUtmzeny5Ytzbdbt8Y/kXbp
Al27QmmplS5dmu936ZLeLylper6kpOm5zONc+7mOswuk35faT20z91NaO+9nf+1a2GuvpufHafaU
WPH7l8FZwJlAFbDJWTRt0528S3GKRUKXSFhCrq2Fjz5qXtavT5cNG5qWjRuD/7Xp0QN69YI+fWzb
u7dte/WCnj2bbnv0sP3Mbap0727bbt3Sx926pbeZpWvX9H5pafpcqpSW2jaVbEXCEMZz8m8CFdid
/wqgIeO1BLlnw3NBSd6lOMUiHdbQAOvWwYcfWlm7Nl3WrUtv162zxF5ba03R+erTB/r2hd13t9K3
r5Xddmu6LSuz/bKydOnTx7a9e9t+796WUEUknOb6x1p5TRmhgHhk97CJC/n2ye/aZUl51Sorq1fD
mjW2Te2vWWNJvba2/XGVlcGee0L//rZNlT32SG/79UtvU6VvX7vrjRONe3BPdRx/fpP8NJdBiBS7
RMKavd9/H957z7YffJDerlpl2zVrLNH70aULDBhgfaYDB1rZay8rqfMDBljp399Kjx5u/50iEq7O
1quk5nqX4hRLAUkkrM965UqoqbHte++lt6lSX+/v8/r3h8GDobw8vR00yEpqf+BAS95q8hbp/MJo
ru8BXAucDewNdM94LYHNbS9SlBob7Q57+XJYsaJpqamx7SYfw1XLymDYMBg6NF2GDLFEPnRoOqHr
bltE/PKb5K/HRtj/GPgp8C1sIN5ZwPecRCaR8FCffC7r18OyZVbefde2y5fb/ooV9hx2a3r3huHD
rey9N+zc6XHssZUMG5ZO7LvvHso/pWiov9g91XH8+U3y/w1cDDwD3Ar8BVgKLAQ+DfzKSXQiIWls
tP7vJUusLFsGS5daWbbM+stb078/VFTAiBHp7YgRltRHjLCBapmPXHke6LtRRFzz28ZfD+wP1GDT
2p4CzAb2Ad4AdnMSXXPqk3cpTrE40Nhog9cWLYLFi9NlyRJL5q3djZeVwT77wMiRzcuIEfZImIiI
C2H0yddgS8vWYHfwk7Ek/wlgaz4XFnFl40Z45510WbQondhbG9w2aBCMGgX77tu8DBigyU9EpPPx
m+SfwFag+zdwB/AQcCGW+G91E5pEwaNz9MknEjY6/e23YeFC26bK6tUt/9zAgTB6dNMyapSVMO/G
1ZfpXrHV8Y4duRed6dkz9x+omzblXsSmb9/0tLiZ1q+31rCURAJeecXjc5+rzPl+iQe/Sf7bGfuP
Au8BRwHvAE8FHZRIyq5dNsDtrbdgwQLbLlxoZcuW3D/Tq5ethLXfflZS+6NH28Qt0rnt3Nl0cZqh
Q3MnpX/9y/7gy16g5tJLcz+hcNVVNq1valGa1GI0M2ZYd022yZMt8WWvPvfKK7kHUR54oE0PnL3i
3JIlNtFQtsGDbeKj7JXlamtbfv9HHzU/v26djRnJVlHRvvePGtW+90s8dLYGSPXJuxRhLI2N9rjZ
/PlWFiyw8vbb9mWey8CBcMABVvbfP1323jv3l76EJ7WKXF2dTbqT67/Hz39uSSNzoZotW+C3v82d
VIcPt0mBsqfebSnp9e/fvqTU0vvXrrXummwDBuSeVTCo97c3/vJye3/2ojPvvZf7/SNG2B8pKamf
W7q09SSfvUjNokW561+CE0afPMBhwBRgbPL4LazpfnY+F5biVVsL8+bBm2+my4IF9kWfy5Ahdhc0
dmy6HHCA7h5c2769+SI1GzbAl75kTcDZjj/eHidMrT6XSsYffmiJPtsNN9j8Atl+9rPcST51Z11S
0nShmoaG5u8F+Pzn7Y+G1AI1mQvV5HLbbfZZqUVqUttcsQA8/bT9MZO98lxLrUXz5tk2c0W6khJ7
8iKXDz5ofbW5bK11U+WyYkX73r9kSfveL/Hg9y+Dc4DfA/8kvab8J4BPYSvT/SHwyHLTnbxLAa8n
39BgA9/mzYM33rDtvHn25ZXLoEG2TOWBB6a3Y8cWZhN7FP3FqWlxsxenueqq3M3LQ4bYnXO25cvt
LjDbyJH2WkqPHta/O2tW7vffcIP9IZG5QE2fPnDKKTavQLZNmyxRd+/ubxBksfXJR0F1HI4w7uRv
BK4DfpR1/jvADYSX5CWm6uoskVdXp8uCBbkfS+vd25L4+PFNS667PWlZfX16YZrMBWouvzx3K8ex
x1pTbLazz86d5MvLrRsltTBNqnRt4Vvj6actAadWoGtrZr7rrmv735hJjymKtJ/fvwy2AAcD2Q02
o7Hn5HP83e2E7uRd8hnL2rUwezbMnQtz5tg2V/IAu7s7+GArBx1kZZ991Gfemvp6u+tOLVBz0km5
+zzHj7fxC9lmzYKJE5ufP/VUu9POXqTmoots0JaIxFMYd/IecDzNk/xxwIv5XFg6h48+sqTx+uu2
nT3bBvJk697dks7BB8Mhh6STuqZqbWrzZuvnzXWXe/bZ8Pe/Nx0MBfDii3YXnm3ECGtBKS9PL0xT
Xt5yi8hf/9rx+EWkc2ktyZ+esf9/2Lz1E7Fn5QGOBE5Dy9AWFA9YfC/MnAmvvmoTyGTr0wcmTIDD
DoNDD7WkfsAB8VtPPGoPPmiPU9XUpMuGDfC3v0GPHs37MrdtswTfrZv1h6cWqWlp4NdTeni1Veov
dk91HH+tJflHc5y7MFky3QX8IrCIJHIXXZTe79nTEvmkSdYEPHGiPW9ejEuYJhLWVZFapGb5citV
VXDkkc3f/9RT8NBDTc/16GGtI7max++6C+6+25rR1Z0hIkGI23Pyk7HH8kqBXwM3Z72uPnmXkrGc
eUaCY46Bo46yJvdiukPfscOeCujTp/lrF10E997b/Pwdd8AVVzQ///TT1hIyYoQ9uz98uDWla3pc
EWmPjvTJx+nrphSbQe/TwPvALGz9+oUZ71GSdykZS5x+KUSk8ym47+mIdSTJx6lR8HBsYN9yoAF4
GPh8lAEVIy/qAEREJDDtmfHOtaHAyozj94AjIoqlqHXWv8JfecVmS3v7bWsmT02HW1VlU6Xmev/D
D6cXqBk1yubzbuv57iBowJJ7cazj1PzzmXPXZ5bM17L3cx1nlszPz3UuM4a2zmefa2l/1iyPSZMq
m5zTfBfxEqck3zkzS4GpjDqAFmzYYIvTvPWW9ZeffXbz96xfD3/6U/p40CBbmOaAA3J/5lFHWYlC
3JJP3DU22h9tmWXbttxl+/ZUqWTu3PTiNNu323iL1LiL1II1DQ1NS2r63FRpaLCFZ3buTG8z9zMX
p8ncz9xmJvHCUtnszNSpcNNN4UciucUpyb8P7J1xvDd2N99EVVUVFRUVAPTr148JEyZ8/IXpeR5A
5ztO/tsijycZR1zimTHDY/p0WL26MjkVrr0+aVIlZ5/d/P0NDR7f/jacdlol++0Hc+dGG3+xHn/y
k5XU1cGzz3rU18OYMZVs2gSvvmrHQ4ZUsnkzvPWWx9at0K+fHa9cacddu1ZSXw/r13ts2wYNDZXJ
mRPt8zN+QzvlcUlJZXL4i0dJif17S0uhsdFe797dXt+506NLl/RxQ4Md9+hhxzt22M/37GnH27fb
z/fqZcfbtnnJef7teOtWe713bzuur7fX+/Sx+Orr7fU+fez1LVvsuKzMXt+ypen7s1/fvNleLy+3
47j8PnbGY8/zmDFjBsDH+S5f7enI7wWcAuwD3AOsB0YltznWVmq3rtjAuxOAD4DX0MC7cAU8d31r
tm+3ZvU337Q78Msua/6ed9+12fHAFiNJrTg3cSJMmeI8RKe8GDYlpyQSNslO9uI069dbi0r2duPG
9HbjRrubdiG1KE1qYZrMbY8etp+5XbfOY599KpssTJNaqKZbt/Q2s6QWpenWzR4TTW27drWS2s8+
l7lATeZ+ly7p/cxFaQpFnH+PC0kYM96NAv4BlAH9gEew5H5x8vhr+Vw8y07g/wF/x0ba/4amCV46
ubo6uPhiW6TmnXfSq5T16QPf+EbzZ8NHjLBZ2saOtb7yYnw2Pwj19bYS3Nq16ZK9SE1trW1TCT17
Odf2KC1Nz1/ft6/NOZ/a7rabTe6TvU0tUNO7t+2ntr162bZnz/YnR88D5R8pdn7/t3kKWIUl9Q3Y
PPbLgGOBGdjdfRh0J+9SB2NpaICFCy2Jn3NO8y/lxkb7Uq+vt9dGjUovTjN1qn2hiz9btjRfnCa1
QM2aNZbUU9stW9r/+WVlNl9+quyxR3rbr196myq7757e9upVWHerIlEL407+k9jSsruyzq8EhuRz
YSkM995r09/OnWurzu3YYeePPtruvjN16WJTvabWh8+1nGix27bNFqV5//30AjUffGBLvqa2q1bZ
sqt+9ehhI54HDmy+OM2AAVb697cyYIAl8+7d3f0bRSQ87Rl4l+t/+72BjQHFIjHg0Xy8bGuLqtx9
ty1ak7LvvjaXfSrZZ/t8Ec98sHWrLe6zcqUNSisrq+S992hSan2ObunRwxajGTw4vThNaoGaQYMs
oafO7bZbcd5Zq7/YPdVx/PlN8s8CVwIXZJzbHbgeeDrooCRa77wDL79sd+ivvmqPrT31FJx8cvP3
XnaZ9bUfcohNgdu3b/jxxkEiYQl6xYp0qalJb2tqrA+8LV27Nl2cZsgQS+RDh9p28GA7169fcSZu
EWkfv18TQ4EXkvsjgWpsMN4arF/+w+BDy0l98i59PK1t01i6doXp023QXDGrq0svTrNsmS1Ok7lQ
TVt93926wbBhNo99qgwbZmXoUDveay8tTiMiTYU1d31v4CzgMGw63NnAA8DWfC6cJyV5l5KxDBqY
XqDmiCPsLr0YBsU1Nlq/95IllsSXLrWybJmVtprS+/a1JwIqKmw7YoQtSpMq5eVK4CLSfoWyQI0f
SvIuJZ+TP64xUbBNwY2NNpht8eJ0WbLEytKlrT/j3bOnPbc/cmTTUlFhZY89/Mehvkz3VMfuqY7D
Ecbo+h8BK4C7s85fjDXlX5fPxSWeCiHBr19vYwveeQcWLUqXzDntcxk40AYPpso++6S35eWFUTci
Ujz8fmWtBE7Hln/NdDjwKDA8yKBaoTt5l+IUiw+NjTawbeFCmz0vs7Q2yG3gQBg9Ol1GjbLtvvsW
78BBEYmvMO7k9wLW5ThfCwzK58IifjU0WFP6ggU20n/hQtu+807Lzeu9e9viNPvtB2PGpLejR9uE
LSIixcBvkl8JHAe8m3X+GHIsIiOdl0d0K9Ht2mXJfP58S+ip7aJFluhzGTIE9t/fygEH2Ha//Wy0
epwHuakv0z3VsXuq4/jzm+R/BdyOTYjzfPLcp4EfAzc7iEsKWCJho9jffDNd5s+3O/SW7swrKmwO
+8yy//66KxcRaU172vh/DEwBUvOebQfuBL5DeGvBq0/eJQex1Nfb3fgbb9ic9qmyfn3u9w8fblPe
jhtn2wMPtGReVhZYSCIinUqYj9CVAWOT+wuBdsygHQgleZc6GMvq1VBd3bQsXmwD5LLtsUd6cZpU
OfBA3ZmLiGTTc/KdWcySvEfb68knEjY5zNy5MGeObefOtVXPspWW2p34wQfbtLepMmRIcT+Opr5M
91TH7qmOwxHG6PpewBXACcBAbMa7lARwUD4Xl/hLJGzq1tdfh1mzbDGaOXNgY45liXbbzZL5IYek
t2PH2iQyIiISPr9/GdwHnAY8gq0rn3mrlwB+EHBcLdGdvEvJWLwXEsycaYvTvPYarMvx8OTAgXDY
YXDooZbMDznEBsfFeUS7iEhnFEZz/UfAl4Dn8rlIgJTkXWphgZq99oJJk2DiRCuHHWaroRVzc7uI
SFjCaK6vB2ryuYB0Lh7W1J65QE1FhRJ60NSX6Z7q2D3Vcfz5TfK3YuvJX0x4j8tJRKqro45ARESC
4Pf+7ElsdruNwFvATizZlyS3pzqJrjk117sUp1hERAQIp7m+FniihdeUEURERGKos/W06k7eJZ/P
yUvHqS/TPdWxe6rjcHTkTr49DzyVABOxUfapSUbLgG75XFhERETc8vuXwSDgL9j68QlgNLAMuBvY
hk2UEwbdybsUp1hERAQI507+duBDoD/2OF3KI8BJ+VxYRERE3PKb5E8A/hfIXjtsGTA80IgkUl7U
ARQJz/OiDqHgqY7dUx3Hn98k3wtoyHF+ANZcLyIiIjHjt43/aWAetnb8JuBgbAa8PwKNwJlOomtO
ffIuxSkWEREBwpm7fizwElANHAs8BYwDdgeOApbkc/E8KMm7FKdYREQECGfg3VvAeOBf2CI1PYE/
ARMIL8FLCLyoAygS6st0T3Xsnuo4/vzOeAe2xOz3XAUiIiIiwWrt9v/QdnzOnI4G4pOa612KUywi
IgK465Nv9PkZCaA0n4vnQUnepTjFIiIigLs++X18ln3zubDEkxd1AEVCfZnuqY7dUx3HX2t98svD
CkJERESC197b/yHYDHfds86/FEw4bVJzvUtxikVERIBw1pMfAjwEHJPjtTD75EVERMQnv8/J3wHs
wibF2YIl+zOAhcDJbkKLTklJSXiFPP88c8SLOoAiob5M91TH7qmO48/vnfxxwCnA29id+1rgFWA7
cD3wbACx3Jq8xg5gKXA+sDGAzxURESlKfm8i64CDsMF4y4GvAC9jo+sXYAvYdNRngOexR/duSp77
dtZ71CfvUpxiERERIJxpbd8B9k/uvwFcAowALgXez+fCOTxH+tn8/wDDAvpcERGRouQ3yd8JDE7u
/wA4EXgX+Aa2znzQLgD+z8HnShu8qAMoEurLdE917J7qOP789snfn7E/B6jA7uxrsP55v54DynOc
/1/gyeT+tVi//IO5PqCqqoqKigoA+vXrx4QJE6isrATSv3Cd7jj5b4s8HmyZwdjEo2Mdd+C4uro6
VvEU4nF1dXWs4imUY8/zmDFjBsDH+S5fftv4v4CtKd/Qoau1rQq4EDgB2JbjdfXJuxSnWEREBAhn
PfmtQD3wCHZX/3I+F2vDZOAn2Ej+dS28R0nepTjFIiIiQDgD7wYB3wJGYa26y4Afkh6MF4TpQBnW
pD8X+EWAny0+eVEHUCRSTXPijurYPdVx/Pntk68DfpssQ4CzgHOwvvQ5wMQAYhkdwGeIiIhIUr6T
rfXAJq65Dnt+3m+LQEepud6lOMUiIiJAOM31qQt8CvgNsCa5nY0NkhMREZGY8ZvkbwNWAs8AA7AR
8OXA/wAvuAlNouBFHUCRUF+me6pj91TH8ee3T/6TwI3An4Bad+GIiIhIUOK0AJof6pN3KU6xiIgI
EF6fvIiIiHQiSvLShBd1AEVCfZnuqY7dUx3Hn5K8iIhIgVKffNTi1A8ep1hERAQIp0/+olZe+1U+
FxYRERG3/Cb5m4Ezcpy/G/hscOFI1LyoAygS6st0T3Xsnuo4/vw+J38G8DiwAfhH8tw92MpxlcGH
JSIiIh3Vnjb+M4BfAycBXwNOBI7HVqQLi/rkXYpTLCIiAnSsT97vnTzAo8CewEzgA+wO/t18Lioi
IiLutdaFQEVeAAAS70lEQVQnPx34WVYZjy1OMx/4ZsZ7pEB4UQdQJNSX6Z7q2D3Vcfy1dic/HsjV
brsU6JN8vaSF94iIiEjE9Jx81OLUDx6nWEREBNDc9SIiIpJDa831T2JN8W399ZAATg0sIomUh56J
DIPneVRWVkYdRkFTHbunOo6/1pJ8Lf6TvIiIiMSM+uSjFqd+8DjFIiIigPrkRUREJAe/Sf5J4K/J
7ZMZx6kiBcKLOoAioeeL3VMdu6c6jj+/M95l9893Aw4GhgF/dhCXiIiIdFBH++R/CmwEfhBALH6o
T96lOMUiIiJAx/rkO5rk9wNeBvbq4Of4pSTvUpxiERERINqBd2M6+PMSM17UARQJ9WW6pzp2T3Uc
f3775KfT9Hn4EmAIcDJwX9BBiYiISMf5vf33aJrkG4G1wD+xJL8z2LBapOZ6l+IUi4iIANH2yYdN
Sd6lOMUiIiJAuH3yvYBxydIrnwtKvHlRB1Ak1JfpnurYPdVx/PlN8j2BO4H1wLxkWQ/8LPmaiIiI
xIzf2//7gBOBqcCryXOfAG4C/gGcH3xoOam53qU4xSIiIkA4ffKbgC8Cz2ad/wzwOLBbPhfPg5K8
S3GKRUREgHD65LcA7+U4/z5Qn8+FJZ68qAMoEurLdE917J7qOP78Jvm7gO8DvTPO9Qa+l3xNRERE
Yqa12/8nST8bXwIchz0PPy95PB6bTMcDTnUXYhNqrncpTrGIiAjQseb61ma8y1x5LoH1vWd6N7kN
MiNcBdwKDAA+CvBzRUREik5rSb4qrCCS9sYG8q0I+bqSwQMqI46hGHieR2VlZdRhFDTVsXuq4/jr
6AI1QfopcE3UQYiIiBSKuExr+3nsBvKbWDfAYeRurlefvEtxikVERAB3ffJBew4oz3H+WuA72GQ7
KXH540NERKTTCjPJf6aF8+OAkcAbyeNhwGzgcODD7DdXVVVRUVEBQL9+/ZgwYcLHfUKpZzY73XHy
3xZ5PEA1MCUu8RTwcebzxXGIpxCP77jjjsL4fojxcXV1NVOmTIlNPIVy7HkeM2bMAPg43+UrjnfM
aq6PSkmJDbyLQywFztOAJedUx+6pjsMR1lKzBwPfAsZij80tAG4D3sznwq1YBkxEST58cYpFRESA
cKa1PRVrQh8G/B/wN2AEMJfgJ8LZBz0jLyIi0mF+k/wPgRuB44HrgO9iXck/Am5wEplEwos6gCKR
6n8Td1TH7qmO489vkh8D/CHH+fuB/YMLR0RERILit41/JXA18HDW+bOAW4DhQQbVCvXJuxSnWERE
BAjnOfl7gLuBUcAryXNHYwPxbs3nwiIiIuKW3+b6G4FpwCXA88nydWyp2RudRCaR8KIOoEioL9M9
1bF7quP483sn3wjcnix9k+fqnEQkIiIigfDbxv9P4HRgQ9b53YE/A58KMqhWqE/epTjFIiIiQDiT
4TRi885nTzM7CHif8KbHVZJ3KU6xiIgI4HYynEOxKWbBZrw7NKNMAi7CkrwUCC/qAIqE+jLdUx27
pzqOv7buwF/P2P97jte3ApcHF46IiIgEpa3b/4rkdhm2Kty6jNd2YM33O4MPq0VqrncpTrGIiAgQ
3gI1caAk71KcYhERESCcBWqkSHhRB1Ak1JfpnurYPdVx/CnJi4iIFCg110ctTk3kcYpFREQANdeL
iIhIDu1J8iXYs/FfAsqS58qAbkEHJdHxog6gSKgv0z3VsXuq4/jzO1PdIOAv2GN0CWA0sBn4CbAN
uMJJdCIiIpI3v238D2J37ecBNdjsd8uATwN3Afs7ia459cm7FKdYREQECGc9+ROSZX3W+WXA8Hwu
LCIiIm757ZPvBTTkOD8Aa66XAuFFHUCRUF+me6pj91TH8ec3yc8EqrLOdQWmAs8HGZCIiIgEw28b
/1jgJaAaOBZ4ChiHrSd/FLDESXTNqU/epTjFIiIiQHhz1w8GLsGWni0B5gA/B1blc+E8Kcm7FKdY
REQECGcynFIsmX8P+C/gs8B3CTfBSwi8qAMoEurLdE917J7qOP78JvnV2KNyn3AYi8TFggVRRyAi
IgHwe/t/EXAOcDT22NwDwP2E1xefouZ6FxIJuOceuPhiOz7nHLj//ujiERGRj4W5nvxw4Gws4Y8D
XsOS/V35XDwPSvJBq6+HSy6B3//eji+9FH76U+jRI5p4RESkiTAXqKkBbgYOwuax7wncmc+FJQYW
L4Yjj7QE36sX/OEPeGeeqQQfAvVluqc6dk91HH/5rEJ3DPAr4FlgH+xOXjqbJ56AiRNh3jwYMwZe
ew2+8pWooxIRkQD5vf0fhzXRnw0MAZ7DkvsTwFY3oeWk5vqO2rkTrr0WbrnFjr/4RbjvPujbN5zr
i4hIu4TRJ98IzMIS+x+BD/O5WACU5Dti9Wo46yx48UUoLbVE/81vpmMQEZHYCaNPfn/gCGA60SV4
6YiXX4ZDD7UEX14OL7wAV17ZLMGrjy0cqmf3VMfuqY7jz2+SX+Q0CnEnkbDR8pWVsGoVHHsszJ0L
xxwTdWQiIuJYa7f/m4CRwLrkfksSQFgdumqub4+6OrjgAnjsMTu+5hq48Ubo6neFYRERiZqr9eQv
AzZn7EtnMn++DapbtMgG1c2YAaedFnVUIiISos424kp38n488ABcdJFNdDN+vN3Jjx7t60c9z6Oy
sjK4WCQn1bN7qmP3VMfhCGPg3TKgf47zeyRfkzjYvh2+8Q173r2+Hs49F1591XeCFxGRwtKeR+jK
aT6yvhybBa97ALFcBlwK7AKeBqbmeI/u5FtSUwNnnmmT2nTvDtOnw4UX6vE4EZFOzlWfPMDpGR98
CrAh47VS4NPA8nwunOV44FRsutwGYK8APrN4PPssfPnLUFsLI0bAo4/abHYiIlLU2mqufxR4JLn/
6+RxqtwPVAJXBhDHJcCPsQQPsDaAzyx8jY1w/fUwebIl+MmTYfbsDiV4PfcaDtWze6pj91TH8ddW
ku+SLDXAwIzjLkAPYD/gqQDiGA0cC7wKeIBuQ9tSWwunnALf/74d/+AH8PTT0D/X0AkRESlGfh+Y
rgjgWs9hffjZrk3GsQfwCWx1uz9hi980U1VVRUWFhdOvXz8mTJjw8ejO1F+Vne44+W/z/f6yMjjj
DLwVK2C33ah85BE46aTA4kmJTf0U4HFlZWWs4inE49S5uMRTqMcpcYmnEI49z2PGjBkAH+e7fLWn
I39P4GRgb5oPtLu+Q1HAM8BNwIvJ4yXYNLq1We8r7oF3iQTcey9cdhns2AGTJsEjj1g/vIiIFKQw
HqH7BJZ4bwV+CFyA3YFfDZyZz4WzPAF8Krk/BvsjIjvBF7f6ejj/fPj61y3BX3opzJwZeILP/utc
3FA9u6c6dk91HH9+m+tvBR4ALgfqgBOw2fAexgbkddR9yfImsAM4N4DPLByLF8MZZ9ja7716wT33
aO13ERFpk9/b/41YX/ki7DG6I4GFyXMPYgPnwlB8zfVPPAHnnWfz0I8ebbPXjR8fXnwiIhKpMJrr
d2RcYA3pgXibgaH5XFjasHMnTJ1q883X1cHpp8PrryvBi4iIb36T/FzSj7V5wA3Aedj68vOCD6vI
rV4Nn/kM3HILlJbCbbfZBDd93S/2pz62cKie3VMdu6c6jj+/Sf5a4IPk/nXYZDXTgX7ARQ7iKl4v
vwyHHgqeB+Xl8MILcNVVmp5WRETarbNljsLtk29shDvugKuvhl274Nhj4Y9/tEQvIiJFK4w+eXHt
v/8brrzSEvzVV8PzzyvBi4hIh7SW5N/0WdQnH4RUn/vjj1tffFe/TzcGS31s4VA9u6c6dk91HH+t
ZZLHfH5GgbWfh+iZZ9L748fb43Fa+11ERAKiPvko1dSkZ6zbsgV69442HhERiZ2w+uRLsMfovgSU
Jc+VAd3yubAAw4fDypU26E4JXkREAuY3yQ8C/g28hs1wNzB5/ifAbQ7iKh7DhsXq8Tj1sYVD9eye
6tg91XH8+U3ytwMfAv2B+ozzjwAnBR2UiIiIdJzfW8g12KI084FNwMHAMmzN9/lAWG3NhdUnLyIi
0oYw+uR7AQ05zg8AtuVzYREREXHLb5KfCVRlnesKTAWeDzIgiZb62MKhenZPdeye6jj+/M64cjXw
Era0bA9ssN04YHfgKDehiYiISEe0p41/MHAJcFjy5+YAPwdWOYirJeqTFxGRotKRPnk/P9Qda64/
F3gnn4sESEleRESKiuuBdzuAkWj62qKgPrZwqJ7dUx27pzqOP78D734PXOgyEBEREQmW39v/XwBf
wZ6Nnw1syfj5BHB58KHlpOZ6EREpKh1prvc7un4sNtAObAKcj6+NmvFFRERiyW9zfWVGOT6jpI6l
QKiPLRyqZ/dUx+6pjuOvPavQiYiISCcSn+XP/FGfvIiIFJWw1pMXERGRTkRJXppQH1s4VM/uqY7d
Ux3Hn5K8iIhIgVKfvIiISIypT15ERESaUZKXJtTHFg7Vs3uqY/dUx/GnJC8iIlKg1CcvIiISY+qT
FxERkWaU5KUJ9bGFQ/XsnurYPdVx/CnJi4iIFCj1yYuIiMSY+uRFRESkmbgk+cOB14C5wCxgUrTh
FC/1sYVD9eye6tg91XH8xSXJ3wJcBxwCfC95LBGorq6OOoSioHp2T3Xsnuo4/uKS5FcBuyf3+wHv
RxhLUduwYUPUIRQF1bN7qmP3VMfx1zXqAJK+DbwM3Ib94XFktOGIiIh0fmEm+eeA8hznrwUuT5Y/
A2cC9wGfCS80SVm+fHnUIRQF1bN7qmP3VMfxF5dH6OqAvsn9EmAD6eb7TEuAfcMKSkREJAaWAqOi
DqIj5gDHJfdPwEbYi4iISAGYCPwHqAb+jY2yFxEREREREZHOahrwHjZZzlzg5IzXvgMsBt4GTgw9
ssIyGavHxcDUiGMpJMuBedjv7mvJc3tig1EXAc9ij46Kf/cBa4A3M861Vqf6nshPrnqehr6Pg7Q3
8AKwAJiPDUKHIvt9/j5wZY7zY7Em/m5ABTYwLy7P/nc2pVj9VWD1WQ0cEGVABeRd7H/YTLcA1yT3
pwI3hRpR53cM1q2XmXxaqlN9T+QvVz3r+zhY5cCE5H4Z8A723RvI73Nn+g+Q60mAzwMPAQ3Y3dIS
bIpcab/DsfpbjtXnw1j9SjCyf39PBX6X3P8d8IVww+n0ZgLrs861VKf6nshfrnoGfR8HaTWWtAE2
AwuBoQT0+9yZkvxlwBvAb0g3WwzBmo1S3sMqR9pvKLAy41h1GZwE8A/gdeDC5LlBWDMoye2gCOIq
NC3Vqb4ngqfvYzcqsJaT/xDQ73OckvxzWJNQdjkV+CUwEmvSWAX8pJXP0Vq0+VG9uXMU9j/uycA3
sCbQTAlU/0Frq05V3/nT97EbZcBjwBXApqzX8v59jsu0tuB/hrtfA08m99/HBi2kDEPz3ucruy73
pulfi5K/VcntWmxWx8Oxv8zLsaa6wcCH0YRWUFqqU31PBCvzd1Xfx8HohiX4PwBPJM8F8vscpzv5
1gzO2D+N9CCQvwJnAd2xvyxHkx69LO3zOlZ/FVh9fgmrX+mY3sBuyf0+2EjYN7G6PS95/jzS/2NL
/lqqU31PBEvfx8Eqwbo93gLuyDhfVL/Pv8ceQXoD+4dm9l/+Lzbw4G3gpPBDKygnYyM7l2CPaEjH
jcQG1VRjj8ek6nVPrJ9ej9Dl5yHgA2AHNpbkfFqvU31P5Ce7ni9A38dBOxpoxL4jUo8lTka/zyIi
IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIifhyDLV/pepKsHtgz1xPaeqOIiIgE42XgayFd60rg
6ZCuJSIiUtQmAPXYIhlhKMdmURsZ0vVEilJnmbteRPw5F1iHzWud6QHgL6383JeBF7D1rFOmYfOS
nwUsBeqwBXb6Z7xnBrZAyVRsIZ4NwI+x75YbsEU1VgFXZV1vNTAr+dkiIiLiQ0/gI+DMjHO7A1uA
z7Xyc69iST3TNGzJy8eAccAngOXArzLeMwPYCPwCGIMl7V3YXNs3AqOAr2Nzc2f3wd8O/K3tf5KI
iIikTAeeyTi+BFtkpLWWu3XY4iOZpgFbSa+iB7YwxuKM4xnACmwlrZRZ2CIbmd6l+d38lcCyVmIS
kQ6K03ryIhKMe4E5wBAsuV8A/A67m25JX5o21aeswO7mU1YBA7Pe8xaQyDheA6zPes8aYK+sc3VY
K4OIOKI+eZHCMw9L8udjzeyHAfe18TMbyT3oriHrOEHz742dOd7j5+f6Yn34IuKI7uRFCtO9wDXA
AOzRuMWtv50lwIg8r5Vo+y05jcDWyhYRR3QnL1KYHsIeU7sE+I2P988EJuV5rZIcx37OHQ68lOc1
RcQHJXmRwrQZeATYBvzJx/sfAiqBPhnnEuS+S0+08R4/5wZh3QgP+4hNREREsjwD3N2O978MXOgo
lmxXoRnvRERE2m0P4FRsQNzYdvzc0VgfueauFxERianl2Kj1qyOOQ0RERERERERERERERERERERE
RERERERERERERETEhf8PVLmB5mM0bUMAAAAASUVORK5CYII=
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="5.0-Related:-Plotting-$\rho(y)$">5.0 Related: Plotting $\rho(y)$<a class="anchor-link" href="#5.0-Related:-Plotting-$\rho(y)$">¶</a></h2><p>The charge density, $\rho$, is a function of depth and can now be plotted using the $\psi$ vs $y$ relationship computed above. Complete dopant ionization is assumed.</p>
$$\begin{aligned}
\rho(y) &= q \left(p(y) - n(y) + N_d - N_a\right) \\
&= q \left(p_o e^{\psi(y)/\phi_t} - n_o e^{\psi(y)/\phi_t} + N_d - N_a\right)
\end{aligned}$$<p>In the below plot, one can observe that the majority carrier concentration approaches the background doping level as $y$ becomes large. $\rho$ may not approach near-zero since $y$ was not computed when $\psi$ is extremely close to zero (see construction of $\psi$ in <code>compute_y_vs_psi(psis)</code>).</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [4]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># define the components of rho</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">n_o</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">psi</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">p_o</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="n">psi</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="n">rho_by_q</span> <span class="o">=</span> <span class="n">p</span> <span class="o">-</span> <span class="n">n</span> <span class="o">+</span> <span class="n">Nd</span> <span class="o">-</span> <span class="n">Na</span>
<span class="c1"># plot the components of rho</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'y (nm)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">14</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'(# / cm$^3$)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">14</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">semilogy</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'n'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">semilogy</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'p'</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="k">if</span> <span class="n">device_type</span> <span class="o">==</span> <span class="s1">'nMOS'</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">semilogy</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">Na</span> <span class="o">+</span> <span class="mi">0</span> <span class="o">*</span> <span class="n">y</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'$N_a$'</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">semilogy</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">Nd</span> <span class="o">+</span> <span class="mi">0</span> <span class="o">*</span> <span class="n">y</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'$N_a$'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s1">'best'</span><span class="p">,</span> <span class="n">prop</span><span class="o">=</span><span class="p">{</span><span class="s1">'size'</span><span class="p">:</span> <span class="mi">16</span><span class="p">})</span>
<span class="c1"># show magnitude of rho on a log scale</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'y (nm)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">14</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$|</span><span class="se">\\</span><span class="s1">rho/q|$ (# / cm$^3$)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">16</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">semilogy</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">rho_by_q</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="s1">'$</span><span class="se">\\</span><span class="s1">rho/q$'</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
fwAAAABJRU5ErkJggg==
"
>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="6.0-References--">6.0 References <a class="anchor-link" href="#6.0-References--">¶</a></h2><ol>
<li>J. Robertson, P W Peacock, Chapter 4.3 (Electronic structure and band offsets of high-dielectric-constant gate oxides) of High k Gate Dielectrics, Taylor and Francis, 2003. <a href="http://www.academia.edu/5393337/Electronic_structure_and_band_offsets_of_high-dielectric-constant_gate_oxides">link here</a></li>
</ol>
</div>
</div>
</div>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML';
mathjaxscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: 'center'," +
" displayIndent: '0em'," +
" showMathMenu: true," +
" tex2jax: { " +
" inlineMath: [ ['$','$'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" linebreaks: { automatic: true, width: '95% container' }, " +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'black ! important'} }" +
" } " +
"}); ";
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>
<p>Download this post's IPython notebook <a href="https://github.com/h-gens/h-gens.github.io-pelican/tree/master/content/notebooks/">here</a>. </p>MOS surface potential equation2015-02-27T18:10:00-05:002015-02-27T18:10:00-05:00H.G.tag:h-gens.github.io,2015-02-27:/mos-surface-potential-equation.html<p>A derivation of the surface potential equation of the idealized MOS capacitor. The resulting equation is used by the <a href="https://h-gens.github.io/electrical-characteristics-of-the-mos-capacitor.html">MOS capacitor derivation</a> post in order to relate applied voltages to semiconductor band-bending.</p><p>This post is part of a 4-part series on physics-based modeling of the MOS capacitor. </p>
<ul>
<li><a href="https://h-gens.github.io/electrical-characteristics-of-the-mos-capacitor.html">MOS capacitor derivation</a> </li>
<li><a href="https://h-gens.github.io/gausss-law-as-used-in-mos-derivations.html">Gauss's Law as used in MOS derivations</a> </li>
<li><a href="https://h-gens.github.io/mos-surface-potential-equation.html">MOS surface potential equation</a> </li>
<li><a href="https://h-gens.github.io/automated-drawing-of-the-mos-band-diagram.html">Automated drawing of the MOS band diagram</a> </li>
</ul>
<style type="text/css">/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI colors. */
.ansibold {
font-weight: bold;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
color: black;
}
.ansired {
color: darkred;
}
.ansigreen {
color: darkgreen;
}
.ansiyellow {
color: #c4a000;
}
.ansiblue {
color: darkblue;
}
.ansipurple {
color: darkviolet;
}
.ansicyan {
color: steelblue;
}
.ansigray {
color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
background-color: black;
}
.ansibgred {
background-color: red;
}
.ansibggreen {
background-color: green;
}
.ansibgyellow {
background-color: yellow;
}
.ansibgblue {
background-color: blue;
}
.ansibgpurple {
background-color: magenta;
}
.ansibgcyan {
background-color: cyan;
}
.ansibggray {
background-color: gray;
}
div.cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
border-radius: 2px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: transparent;
width: 100%;
padding: 5px;
/* This acts as a spacer between cells, that is outside the border */
margin: 0px;
outline: none;
border-left-width: 1px;
padding-left: 5px;
background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
}
div.cell.jupyter-soft-selected {
border-left-color: #90CAF9;
border-left-color: #E3F2FD;
border-left-width: 1px;
padding-left: 5px;
border-right-color: #E3F2FD;
border-right-width: 1px;
background: #E3F2FD;
}
@media print {
div.cell.jupyter-soft-selected {
border-color: transparent;
}
}
div.cell.selected {
border-color: #ababab;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
}
@media print {
div.cell.selected {
border-color: transparent;
}
}
div.cell.selected.jupyter-soft-selected {
border-left-width: 0;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
}
.edit_mode div.cell.selected {
border-color: #66BB6A;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
}
@media print {
.edit_mode div.cell.selected {
border-color: transparent;
}
}
.prompt {
/* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
min-width: 14ex;
/* This padding is tuned to match the padding on the CodeMirror editor. */
padding: 0.4em;
margin: 0px;
font-family: monospace;
text-align: right;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
/* Don't highlight prompt number selection */
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
/* Use default cursor */
cursor: default;
}
@media (max-width: 540px) {
.prompt {
text-align: left;
}
}
div.inner_cell {
min-width: 0;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
border: 1px solid #cfcfcf;
border-radius: 2px;
background: #f7f7f7;
line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
is no content in the output_subarea and the prompt. The main purpose of this is
to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
padding-top: 0;
padding-bottom: 0;
}
div.unrecognized_cell {
padding: 5px 5px 5px 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.unrecognized_cell .inner_cell {
border-radius: 2px;
padding: 5px;
font-weight: bold;
color: red;
border: 1px solid #cfcfcf;
background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
color: inherit;
text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
color: inherit;
text-decoration: none;
}
@media (max-width: 540px) {
div.unrecognized_cell > div.prompt {
display: none;
}
}
div.code_cell {
/* avoid page breaking on code cells when printing */
}
@media print {
div.code_cell {
page-break-inside: avoid;
}
}
/* any special styling for code cells that are currently running goes here */
div.input {
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.input {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
color: #303F9F;
border-top: 1px solid transparent;
}
div.input_area > div.highlight {
margin: 0.4em;
border: none;
padding: 0px;
background-color: transparent;
}
div.input_area > div.highlight > pre {
margin: 0px;
border: none;
padding: 0px;
background-color: transparent;
}
/* The following gets added to the <head> if it is detected that the user has a
* monospace font with inconsistent normal/bold/italic height. See
* notebookmain.js. Such fonts will have keywords vertically offset with
* respect to the rest of the text. The user should select a better font.
* See: https://github.com/ipython/ipython/issues/1503
*
* .CodeMirror span {
* vertical-align: bottom;
* }
*/
.CodeMirror {
line-height: 1.21429em;
/* Changed from 1em to our global default */
font-size: 14px;
height: auto;
/* Changed to auto to autogrow */
background: none;
/* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
/* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
/* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
overflow-y: hidden;
overflow-x: auto;
}
.CodeMirror-lines {
/* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
/* we have set a different line-height and want this to scale with that. */
padding: 0.4em;
}
.CodeMirror-linenumber {
padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
border-bottom-left-radius: 2px;
border-top-left-radius: 2px;
}
.CodeMirror pre {
/* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
/* .CodeMirror-lines */
padding: 0;
border: 0;
border-radius: 0;
}
/*
Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
Adapted from GitHub theme
*/
.highlight-base {
color: #000;
}
.highlight-variable {
color: #000;
}
.highlight-variable-2 {
color: #1a1a1a;
}
.highlight-variable-3 {
color: #333333;
}
.highlight-string {
color: #BA2121;
}
.highlight-comment {
color: #408080;
font-style: italic;
}
.highlight-number {
color: #080;
}
.highlight-atom {
color: #88F;
}
.highlight-keyword {
color: #008000;
font-weight: bold;
}
.highlight-builtin {
color: #008000;
}
.highlight-error {
color: #f00;
}
.highlight-operator {
color: #AA22FF;
font-weight: bold;
}
.highlight-meta {
color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
color: #00f;
}
.highlight-string-2 {
color: #f50;
}
.highlight-qualifier {
color: #555;
}
.highlight-bracket {
color: #997;
}
.highlight-tag {
color: #170;
}
.highlight-attribute {
color: #00c;
}
.highlight-header {
color: blue;
}
.highlight-quote {
color: #090;
}
.highlight-link {
color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
color: #008000;
font-weight: bold;
}
.cm-s-ipython span.cm-atom {
color: #88F;
}
.cm-s-ipython span.cm-number {
color: #080;
}
.cm-s-ipython span.cm-def {
color: #00f;
}
.cm-s-ipython span.cm-variable {
color: #000;
}
.cm-s-ipython span.cm-operator {
color: #AA22FF;
font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
color: #333333;
}
.cm-s-ipython span.cm-comment {
color: #408080;
font-style: italic;
}
.cm-s-ipython span.cm-string {
color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
color: #f50;
}
.cm-s-ipython span.cm-meta {
color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
color: #555;
}
.cm-s-ipython span.cm-builtin {
color: #008000;
}
.cm-s-ipython span.cm-bracket {
color: #997;
}
.cm-s-ipython span.cm-tag {
color: #170;
}
.cm-s-ipython span.cm-attribute {
color: #00c;
}
.cm-s-ipython span.cm-header {
color: blue;
}
.cm-s-ipython span.cm-quote {
color: #090;
}
.cm-s-ipython span.cm-link {
color: #00c;
}
.cm-s-ipython span.cm-error {
color: #f00;
}
.cm-s-ipython span.cm-tab {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
background-position: right;
background-repeat: no-repeat;
}
div.output_wrapper {
/* this position must be relative to enable descendents to be absolute within it */
position: relative;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
/* ideally, this would be max-height, but FF barfs all over that */
height: 24em;
/* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
width: 100%;
overflow: auto;
border-radius: 2px;
-webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
margin: 0px;
padding: 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
div.out_prompt_overlay {
height: 100%;
padding: 0px 0.4em;
position: absolute;
border-radius: 2px;
}
div.out_prompt_overlay:hover {
/* use inner shadow to get border that is computed the same on WebKit/FF */
-webkit-box-shadow: inset 0 0 1px #000;
box-shadow: inset 0 0 1px #000;
background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
padding: 0px;
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.output_area .MathJax_Display {
text-align: left !important;
}
div.output_area
div.output_area
div.output_area img,
div.output_area svg {
max-width: 100%;
height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
max-width: none;
}
/* This is needed to protect the pre formating from global settings such
as that of bootstrap */
.output {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
@media (max-width: 540px) {
div.output_area {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
div.output_area pre {
margin: 0;
padding: 0;
border: 0;
vertical-align: baseline;
color: black;
background-color: transparent;
border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
the prompt div. */
div.output_subarea {
overflow-x: auto;
padding: 0.4em;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
output types */
/* all text output has this class: */
div.output_text {
text-align: left;
color: #000;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
background: #fdd;
/* very light red background for stderr */
}
div.output_latex {
text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
padding: 0;
}
.js-error {
color: darkred;
}
/* raw_input styles */
div.raw_input_container {
line-height: 1.21429em;
padding-top: 5px;
}
pre.raw_input_prompt {
/* nothing needed here. */
}
input.raw_input {
font-family: monospace;
font-size: inherit;
color: inherit;
width: auto;
/* make sure input baseline aligns with prompt */
vertical-align: baseline;
/* padding + margin = 0.5em between prompt and cursor */
padding: 0em 0.25em;
margin: 0em 0.25em;
}
input.raw_input:focus {
box-shadow: none;
}
p.p-space {
margin-bottom: 10px;
}
div.output_unrecognized {
padding: 5px;
font-weight: bold;
color: red;
}
div.output_unrecognized a {
color: inherit;
text-decoration: none;
}
div.output_unrecognized a:hover {
color: inherit;
text-decoration: none;
}
.rendered_html {
color: #000;
/* any extras will just be numbers: */
}
.rendered_html :link {
text-decoration: underline;
}
.rendered_html :visited {
text-decoration: underline;
}
.rendered_html h1:first-child {
margin-top: 0.538em;
}
.rendered_html h2:first-child {
margin-top: 0.636em;
}
.rendered_html h3:first-child {
margin-top: 0.777em;
}
.rendered_html h4:first-child {
margin-top: 1em;
}
.rendered_html h5:first-child {
margin-top: 1em;
}
.rendered_html h6:first-child {
margin-top: 1em;
}
.rendered_html * + ul {
margin-top: 1em;
}
.rendered_html * + ol {
margin-top: 1em;
}
.rendered_html pre,
.rendered_html tr,
.rendered_html th,
.rendered_html td,
.rendered_html * + table {
margin-top: 1em;
}
.rendered_html * + p {
margin-top: 1em;
}
.rendered_html * + img {
margin-top: 1em;
}
.rendered_html img,
.rendered_html img.unconfined,
div.text_cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.text_cell > div.prompt {
display: none;
}
}
div.text_cell_render {
/*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
outline: none;
resize: none;
width: inherit;
border-style: none;
padding: 0.5em 0.5em 0.5em 0.4em;
color: #000;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
a.anchor-link:link {
text-decoration: none;
padding: 0px 20px;
visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
visibility: visible;
}
.text_cell.rendered .input_area {
display: none;
}
.text_cell.rendered
.text_cell.unrendered .text_cell_render {
display: none;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
font-weight: bold;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
font-size: 185.7%;
}
.cm-header-2 {
font-size: 157.1%;
}
.cm-header-3 {
font-size: 128.6%;
}
.cm-header-4 {
font-size: 110%;
}
.cm-header-5 {
font-size: 100%;
font-style: italic;
}
.cm-header-6 {
font-size: 100%;
font-style: italic;
}
</style>
<style type="text/css">.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>
<style type="text/css">
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }
.ansi-bold { font-weight: bold; }
</style>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="1.0-Introduction--">1.0 Introduction <a class="anchor-link" href="#1.0-Introduction--">¶</a></h2><p>The band-bending that occurs in the semiconductor of an MOS device is quantified as the surface potential, $\psi_s$. It is related to the applied gate-body bias by the "surface potential equation" (SPE), which is derived by combining the following items. (For a brief discussion of band-bending see <a href="/mos-capacitor-derivation.html">Section 3.0</a> of the MOSCAP derivation notebook.)</p>
<ol>
<li>Two applications of Gauss's Law (<a href="/gausss-law-as-used-in-mos-derivations.html">discussed here</a>). </li>
<li>The assumption that the oxide is charge free. </li>
<li>The potential balance equation. </li>
</ol>
<p>Each of the above three items are explained in further detail below. Afterward, they are combined to produce the SPE.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="2.0-Components-of-the-SPE">2.0 Components of the SPE<a class="anchor-link" href="#2.0-Components-of-the-SPE">¶</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="2.1-Result-#1:-Gauss's-Law">2.1 Result #1: Gauss's Law<a class="anchor-link" href="#2.1-Result-#1:-Gauss's-Law">¶</a></h3><p>The results of the <a href="/gausss-law-as-used-in-mos-derivations.html">two applications of Gauss's Law</a> are:</p>
$$\begin{aligned}
\epsilon_s \cdot E_s - \epsilon_{ox} \cdot E_{ox} &= Q_o' + Q_{it}' \\
-\epsilon_s \cdot E_s &= Q_s'
\end{aligned}$$<p>Substituting the second equation into the first equation gives an expression in terms of two charges per unit area and the oxide field.</p>
$$\begin{aligned}
-(Q_o' + Q_{it}' + Q_s') &= \epsilon_{ox} \cdot E_{ox}
\end{aligned}$$
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="2.2-Result-#2:-oxide-without-bulk-charge">2.2 Result #2: oxide without bulk charge<a class="anchor-link" href="#2.2-Result-#2:-oxide-without-bulk-charge">¶</a></h3><p>If there is no charge within the oxide, the electric field must be constant. This can be proven by considering Gauss's Law in a one-dimensional charge free region (e.g., $dE/dy = 0$ so $E$ must be a constant). Therefore, the electric field, $E_{ox}$, is simply the oxide potential drop divided by the oxide thickness.</p>
$$\begin{aligned}
E_{ox} &= \frac{\psi_{ox}}{t_{ox}}
\end{aligned}$$
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="2.3-Result-#3:-potential-balance-equation">2.3 Result #3: potential balance equation<a class="anchor-link" href="#2.3-Result-#3:-potential-balance-equation">¶</a></h3><p>The potential balance equation comes from performing a KVL around the MOS band diagram with the local vacuum level ($E_{VAC}$) included. While manuevering clockwise starting at the metal's Fermi level, a rise is taken to be positive and a drop is considered negative.</p>
<center><img src="../images/2015-02-27-MOS-SPE/figure_1.png"></center>$$\begin{aligned}
+\phi_m + \psi_{ox} + \psi_s - \phi_s - V_{gb} &= 0
\end{aligned}$$<p>$\phi_{ms} = \phi_m - \phi_s$ is the difference between the metal and semiconductor workfunctions, which leads to a more recognizable form of the above.</p>
$$\begin{aligned}
V_{gb} &= \psi_{ox} + \psi_s + \phi_{ms}
\end{aligned}$$
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="3.0-The-SPE--">3.0 The SPE <a class="anchor-link" href="#3.0-The-SPE--">¶</a></h2><p>Substituting <strong>Result #2</strong> into <strong>Result #1</strong> gives:</p>
$$\begin{aligned}
-(Q_o' + Q_{it}' + Q_s') &= \epsilon_{ox} \cdot \frac{\psi_{ox}}{t_{ox}} \\
&= C_{ox}' \cdot \psi_{ox}
\end{aligned}$$<p>The quantity $\epsilon_{ox} / t_{ox}$ is hereafter replaced with $C_{ox}'$, which is the oxide capacitance per unit area. Often, it is referred to as the oxide capacitance density. After making this simplification, $\psi_{ox}$ can be found.</p>
$$\begin{aligned}
\psi_{ox} &= \frac{-(Q_o' + Q_{it}' + Q_s')}{C_{ox}'} \\
\end{aligned}$$<p>Inserting the above expression for $\psi_{ox}$ into the <strong>Result #3</strong> and simplifying gives the SPE.</p>
$$\begin{aligned}
V_{gb} &= \psi_s + \phi_{ms} + \frac{-(Q_o' + Q_{it}' + Q_s')}{C_{ox}'}
\end{aligned}$$<p>A more commonly seen version is in terms of the flatband voltage, $V_{fb}$. This is simply the value of $V_{gb}$ when $\psi_s=0$. When $\psi_s$ is zero, $Q_s'$ is also zero (see <a href="/mos-capacitor-derivation.html">MOS derivation</a>), so two of the terms in the SPE drop out. The quantity $Q_{it}'(\psi_s=0)$ is denoted $Q_{it0}$.</p>
$$\begin{aligned}
V_{fb} &= \phi_{ms} - \frac{Q_o' + Q_{it0}'}{C_{ox}'}
\end{aligned}$$<p>The above can be substituted back into the SPE so that it incorporates a flatband voltage term.</p>
$$\begin{aligned}
V_{gb} &= \psi_s + V_{fb} - \frac{Q_{it}' - Q_{it0}' + Q_s'}{C_{ox}'}
\end{aligned}$$<p>A more recognizable form of the SPE that is often found in textbooks occurs when $Q_{it}$ is zero.</p>
$$\begin{aligned}
V_{gb} &= \psi_s + V_{fb} - \frac{Q_s'}{C_{ox}'}
\end{aligned}$$
</div>
</div>
</div>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML';
mathjaxscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: 'center'," +
" displayIndent: '0em'," +
" showMathMenu: true," +
" tex2jax: { " +
" inlineMath: [ ['$','$'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" linebreaks: { automatic: true, width: '95% container' }, " +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'black ! important'} }" +
" } " +
"}); ";
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>Gauss's law as used in MOS derivations2015-02-26T19:10:00-05:002015-02-26T19:10:00-05:00H.G.tag:h-gens.github.io,2015-02-26:/gausss-law-as-used-in-mos-derivations.html<p>There are two applications of Gauss's Law used in MOS derivations for computing the surface potential equation (SPE). One of the applications is also used in the formulation of semiconductor charge per unit area from the surface field that is found during the solution of Poisson's equation. This post presents both applications of Gauss's law, which are required to complete the <a href="https://h-gens.github.io/electrical-characteristics-of-the-mos-capacitor.html">MOS capacitor analysis</a>.</p><p>This post is part of a 4-part series on physics-based modeling of the MOS capacitor. </p>
<ul>
<li><a href="https://h-gens.github.io/electrical-characteristics-of-the-mos-capacitor.html">MOS capacitor derivation</a> </li>
<li><a href="https://h-gens.github.io/gausss-law-as-used-in-mos-derivations.html">Gauss's Law as used in MOS derivations</a> </li>
<li><a href="https://h-gens.github.io/mos-surface-potential-equation.html">MOS surface potential equation</a> </li>
<li><a href="https://h-gens.github.io/automated-drawing-of-the-mos-band-diagram.html">Automated drawing of the MOS band diagram</a> </li>
</ul>
<style type="text/css">/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI colors. */
.ansibold {
font-weight: bold;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
color: black;
}
.ansired {
color: darkred;
}
.ansigreen {
color: darkgreen;
}
.ansiyellow {
color: #c4a000;
}
.ansiblue {
color: darkblue;
}
.ansipurple {
color: darkviolet;
}
.ansicyan {
color: steelblue;
}
.ansigray {
color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
background-color: black;
}
.ansibgred {
background-color: red;
}
.ansibggreen {
background-color: green;
}
.ansibgyellow {
background-color: yellow;
}
.ansibgblue {
background-color: blue;
}
.ansibgpurple {
background-color: magenta;
}
.ansibgcyan {
background-color: cyan;
}
.ansibggray {
background-color: gray;
}
div.cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
border-radius: 2px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: transparent;
width: 100%;
padding: 5px;
/* This acts as a spacer between cells, that is outside the border */
margin: 0px;
outline: none;
border-left-width: 1px;
padding-left: 5px;
background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
}
div.cell.jupyter-soft-selected {
border-left-color: #90CAF9;
border-left-color: #E3F2FD;
border-left-width: 1px;
padding-left: 5px;
border-right-color: #E3F2FD;
border-right-width: 1px;
background: #E3F2FD;
}
@media print {
div.cell.jupyter-soft-selected {
border-color: transparent;
}
}
div.cell.selected {
border-color: #ababab;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
}
@media print {
div.cell.selected {
border-color: transparent;
}
}
div.cell.selected.jupyter-soft-selected {
border-left-width: 0;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
}
.edit_mode div.cell.selected {
border-color: #66BB6A;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
}
@media print {
.edit_mode div.cell.selected {
border-color: transparent;
}
}
.prompt {
/* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
min-width: 14ex;
/* This padding is tuned to match the padding on the CodeMirror editor. */
padding: 0.4em;
margin: 0px;
font-family: monospace;
text-align: right;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
/* Don't highlight prompt number selection */
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
/* Use default cursor */
cursor: default;
}
@media (max-width: 540px) {
.prompt {
text-align: left;
}
}
div.inner_cell {
min-width: 0;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
border: 1px solid #cfcfcf;
border-radius: 2px;
background: #f7f7f7;
line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
is no content in the output_subarea and the prompt. The main purpose of this is
to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
padding-top: 0;
padding-bottom: 0;
}
div.unrecognized_cell {
padding: 5px 5px 5px 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.unrecognized_cell .inner_cell {
border-radius: 2px;
padding: 5px;
font-weight: bold;
color: red;
border: 1px solid #cfcfcf;
background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
color: inherit;
text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
color: inherit;
text-decoration: none;
}
@media (max-width: 540px) {
div.unrecognized_cell > div.prompt {
display: none;
}
}
div.code_cell {
/* avoid page breaking on code cells when printing */
}
@media print {
div.code_cell {
page-break-inside: avoid;
}
}
/* any special styling for code cells that are currently running goes here */
div.input {
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.input {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
color: #303F9F;
border-top: 1px solid transparent;
}
div.input_area > div.highlight {
margin: 0.4em;
border: none;
padding: 0px;
background-color: transparent;
}
div.input_area > div.highlight > pre {
margin: 0px;
border: none;
padding: 0px;
background-color: transparent;
}
/* The following gets added to the <head> if it is detected that the user has a
* monospace font with inconsistent normal/bold/italic height. See
* notebookmain.js. Such fonts will have keywords vertically offset with
* respect to the rest of the text. The user should select a better font.
* See: https://github.com/ipython/ipython/issues/1503
*
* .CodeMirror span {
* vertical-align: bottom;
* }
*/
.CodeMirror {
line-height: 1.21429em;
/* Changed from 1em to our global default */
font-size: 14px;
height: auto;
/* Changed to auto to autogrow */
background: none;
/* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
/* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
/* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
overflow-y: hidden;
overflow-x: auto;
}
.CodeMirror-lines {
/* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
/* we have set a different line-height and want this to scale with that. */
padding: 0.4em;
}
.CodeMirror-linenumber {
padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
border-bottom-left-radius: 2px;
border-top-left-radius: 2px;
}
.CodeMirror pre {
/* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
/* .CodeMirror-lines */
padding: 0;
border: 0;
border-radius: 0;
}
/*
Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
Adapted from GitHub theme
*/
.highlight-base {
color: #000;
}
.highlight-variable {
color: #000;
}
.highlight-variable-2 {
color: #1a1a1a;
}
.highlight-variable-3 {
color: #333333;
}
.highlight-string {
color: #BA2121;
}
.highlight-comment {
color: #408080;
font-style: italic;
}
.highlight-number {
color: #080;
}
.highlight-atom {
color: #88F;
}
.highlight-keyword {
color: #008000;
font-weight: bold;
}
.highlight-builtin {
color: #008000;
}
.highlight-error {
color: #f00;
}
.highlight-operator {
color: #AA22FF;
font-weight: bold;
}
.highlight-meta {
color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
color: #00f;
}
.highlight-string-2 {
color: #f50;
}
.highlight-qualifier {
color: #555;
}
.highlight-bracket {
color: #997;
}
.highlight-tag {
color: #170;
}
.highlight-attribute {
color: #00c;
}
.highlight-header {
color: blue;
}
.highlight-quote {
color: #090;
}
.highlight-link {
color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
color: #008000;
font-weight: bold;
}
.cm-s-ipython span.cm-atom {
color: #88F;
}
.cm-s-ipython span.cm-number {
color: #080;
}
.cm-s-ipython span.cm-def {
color: #00f;
}
.cm-s-ipython span.cm-variable {
color: #000;
}
.cm-s-ipython span.cm-operator {
color: #AA22FF;
font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
color: #333333;
}
.cm-s-ipython span.cm-comment {
color: #408080;
font-style: italic;
}
.cm-s-ipython span.cm-string {
color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
color: #f50;
}
.cm-s-ipython span.cm-meta {
color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
color: #555;
}
.cm-s-ipython span.cm-builtin {
color: #008000;
}
.cm-s-ipython span.cm-bracket {
color: #997;
}
.cm-s-ipython span.cm-tag {
color: #170;
}
.cm-s-ipython span.cm-attribute {
color: #00c;
}
.cm-s-ipython span.cm-header {
color: blue;
}
.cm-s-ipython span.cm-quote {
color: #090;
}
.cm-s-ipython span.cm-link {
color: #00c;
}
.cm-s-ipython span.cm-error {
color: #f00;
}
.cm-s-ipython span.cm-tab {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
background-position: right;
background-repeat: no-repeat;
}
div.output_wrapper {
/* this position must be relative to enable descendents to be absolute within it */
position: relative;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
/* ideally, this would be max-height, but FF barfs all over that */
height: 24em;
/* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
width: 100%;
overflow: auto;
border-radius: 2px;
-webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
margin: 0px;
padding: 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
div.out_prompt_overlay {
height: 100%;
padding: 0px 0.4em;
position: absolute;
border-radius: 2px;
}
div.out_prompt_overlay:hover {
/* use inner shadow to get border that is computed the same on WebKit/FF */
-webkit-box-shadow: inset 0 0 1px #000;
box-shadow: inset 0 0 1px #000;
background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
padding: 0px;
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.output_area .MathJax_Display {
text-align: left !important;
}
div.output_area
div.output_area
div.output_area img,
div.output_area svg {
max-width: 100%;
height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
max-width: none;
}
/* This is needed to protect the pre formating from global settings such
as that of bootstrap */
.output {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
@media (max-width: 540px) {
div.output_area {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
div.output_area pre {
margin: 0;
padding: 0;
border: 0;
vertical-align: baseline;
color: black;
background-color: transparent;
border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
the prompt div. */
div.output_subarea {
overflow-x: auto;
padding: 0.4em;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
output types */
/* all text output has this class: */
div.output_text {
text-align: left;
color: #000;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
background: #fdd;
/* very light red background for stderr */
}
div.output_latex {
text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
padding: 0;
}
.js-error {
color: darkred;
}
/* raw_input styles */
div.raw_input_container {
line-height: 1.21429em;
padding-top: 5px;
}
pre.raw_input_prompt {
/* nothing needed here. */
}
input.raw_input {
font-family: monospace;
font-size: inherit;
color: inherit;
width: auto;
/* make sure input baseline aligns with prompt */
vertical-align: baseline;
/* padding + margin = 0.5em between prompt and cursor */
padding: 0em 0.25em;
margin: 0em 0.25em;
}
input.raw_input:focus {
box-shadow: none;
}
p.p-space {
margin-bottom: 10px;
}
div.output_unrecognized {
padding: 5px;
font-weight: bold;
color: red;
}
div.output_unrecognized a {
color: inherit;
text-decoration: none;
}
div.output_unrecognized a:hover {
color: inherit;
text-decoration: none;
}
.rendered_html {
color: #000;
/* any extras will just be numbers: */
}
.rendered_html :link {
text-decoration: underline;
}
.rendered_html :visited {
text-decoration: underline;
}
.rendered_html h1:first-child {
margin-top: 0.538em;
}
.rendered_html h2:first-child {
margin-top: 0.636em;
}
.rendered_html h3:first-child {
margin-top: 0.777em;
}
.rendered_html h4:first-child {
margin-top: 1em;
}
.rendered_html h5:first-child {
margin-top: 1em;
}
.rendered_html h6:first-child {
margin-top: 1em;
}
.rendered_html * + ul {
margin-top: 1em;
}
.rendered_html * + ol {
margin-top: 1em;
}
.rendered_html pre,
.rendered_html tr,
.rendered_html th,
.rendered_html td,
.rendered_html * + table {
margin-top: 1em;
}
.rendered_html * + p {
margin-top: 1em;
}
.rendered_html * + img {
margin-top: 1em;
}
.rendered_html img,
.rendered_html img.unconfined,
div.text_cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.text_cell > div.prompt {
display: none;
}
}
div.text_cell_render {
/*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
outline: none;
resize: none;
width: inherit;
border-style: none;
padding: 0.5em 0.5em 0.5em 0.4em;
color: #000;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
a.anchor-link:link {
text-decoration: none;
padding: 0px 20px;
visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
visibility: visible;
}
.text_cell.rendered .input_area {
display: none;
}
.text_cell.rendered
.text_cell.unrendered .text_cell_render {
display: none;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
font-weight: bold;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
font-size: 185.7%;
}
.cm-header-2 {
font-size: 157.1%;
}
.cm-header-3 {
font-size: 128.6%;
}
.cm-header-4 {
font-size: 110%;
}
.cm-header-5 {
font-size: 100%;
font-style: italic;
}
.cm-header-6 {
font-size: 100%;
font-style: italic;
}
</style>
<style type="text/css">.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>
<style type="text/css">
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }
.ansi-bold { font-weight: bold; }
</style>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="1.0-Introduction--">1.0 Introduction <a class="anchor-link" href="#1.0-Introduction--">¶</a></h2><p>There are two applications of <a href="https://en.wikipedia.org/wiki/Gauss%27s_law">Gauss's Law</a> used in MOS derivations for computing the <a href="/mos-surface-potential-equation.html">surface potential equation</a> (SPE). One of the applications is also used in the formulation of semiconductor charge per unit area from the surface field that is found during the solution of Poisson's equation. Some background is given before they are discussed.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="2.0-Simplified-one-dimensional-MOS-system--">2.0 Simplified one-dimensional MOS system <a class="anchor-link" href="#2.0-Simplified-one-dimensional-MOS-system--">¶</a></h2><p>The primary assumption is that of an oxide whose oxide-related defects are assumed to only exist at the oxide/semiconductor interface. These defects are identified with the $Q_o'$ and $Q_{it}'$ variables. The former is fixed charge that does not change in magnitude with band-bending. The latter is from interface states, whose occupation does change with band-bending.</p>
<p>The secondary assumption is that the metal, oxide, and semiconductor layers each exist as uniform planes that stretch to infinity in the x and z directions. The latter assumption permits one to apply Gauss's Law at some arbitrary location and have its result be valid at any location.</p>
<center><img src="../images/2015-02-25-MOSCAP-derivations/mos_cross_section.png"></center><h2 id="3.0-Gauss's-Law--">3.0 Gauss's Law <a class="anchor-link" href="#3.0-Gauss's-Law--">¶</a></h2><p>In differential form, Gauss's Law relates the divergence of electric field to charge density.</p>
$$\begin{aligned}
\nabla \cdot \overrightarrow{E} &= \frac{\rho}{\epsilon}
\end{aligned}$$<p>When a potential is applied between the metal and semiconductor layers, the electric field is one dimensional because of the uniform planarity mentioned above. $\overrightarrow{E}$ is now only composed of the y-direction component, $E_y$, where the subscript is dropped going forward.</p>
$$\begin{aligned}
\frac{dE}{dy} &= \frac{\rho}{\epsilon} \\
\end{aligned}$$<p>A one-dimensional application of Gauss's Law from point A to point B gives the following result. $Q_{\mbox{enclosed}}$ is the total charge contained in the region between A and B. The subscripts A and B mean the quantity is to be evaluated at either A or B.</p>
$$\begin{aligned}
\int_A^B \epsilon dE &= \int_A^B \rho dy \\
\epsilon_B \cdot E_B - \epsilon_A \cdot E_A &= Q_{\mbox{enclosed}}
\end{aligned}$$<p>In the below applications of Gauss's Law it is always chosen that location A is above location B in the cross-section displayed above (stated mathematically, $y_A < y_B$).</p>
<!--
A Gaussian surface simply encloses some region where Gauss's Law is to be applied. In this discussion, the Gaussian surfaces are carefully chosen cuboids that facilitate simplified application of Gauss's Law in an MOS device.
-->
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="4.0-Gauss's-Law-as-applied-to-create-the-SPE">4.0 Gauss's Law as applied to create the SPE<a class="anchor-link" href="#4.0-Gauss's-Law-as-applied-to-create-the-SPE">¶</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="4.1-Result-#1">4.1 Result #1<a class="anchor-link" href="#4.1-Result-#1">¶</a></h3><p>Consider the region between the red dashed lines below. Let the top/bottom lines be just above/below the oxide/semiconductor interface. That is, let the top be at $y_A=0^-$ and the bottom at $y_B=0^+$. With these constraints, the region between these lines contains no semiconductor charge and only includes fixed/interface charge.</p>
<center><img src="../images/2015-02-26-MOS-Gauss-law/gaussian_surface_result1.png"></center><p>Going forward, subscripts A and B are replaced with 'ox' (oxide) and 's' (semiconductor surface). Applying Gauss's Law in the $y$-direction at any $(x, z)$ location gives:</p>
$$\begin{aligned}
\epsilon_s \cdot E_s - \epsilon_{ox} \cdot E_{ox} &= Q_o' + Q_{it}'
\end{aligned}$$<p>$Q_o'$ and $Q_{it}'$ are charges per unit area. The "prime" superscript is what indicates that this quantity is a charge per unit area. The units come out this way because $\rho$ is charge per unit volume and is integrated with respect to distance.</p>
<blockquote><p><strong>Note:</strong> in the absence of oxide charge, $\epsilon_s \cdot E_s = \epsilon_{ox} \cdot E_{ox}$.</p>
</blockquote>
<p>Both $Q_o'$ and $Q_{it}'$ are the same regardless of where Gauss's Law is applied due to the planar homogeneity assumed above.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="4.2-Result-#2">4.2 Result #2<a class="anchor-link" href="#4.2-Result-#2">¶</a></h3><p>The following figure shows a dashed line drawn just below the interface, and another dashed line drawn at the bottom of the semiconductor. Let the top be at $y_A=0^+$ (the semiconductor surface, denoted with subscript 's') and the bottom at the end of the semiconductor bulk where electric field has decayed to zero. With these constraints the region between the two lines only contains semiconductor charge.</p>
<center><img src="../images/2015-02-26-MOS-Gauss-law/gaussian_surface_result2.png"></center><p>Therefore, Gauss's Law gives:</p>
$$\begin{aligned}
-\epsilon_s \cdot E_s &= Q_s'
\end{aligned}$$<p>$Q_s'$ is the total semiconductor charge per unit area. As with $Q_o'$ and $Q_{it}'$, it is the same regardless of the location chosen to apply Gauss's Law.</p>
</div>
</div>
</div>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML';
mathjaxscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: 'center'," +
" displayIndent: '0em'," +
" showMathMenu: true," +
" tex2jax: { " +
" inlineMath: [ ['$','$'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" linebreaks: { automatic: true, width: '95% container' }, " +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'black ! important'} }" +
" } " +
"}); ";
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>Electrical characteristics of the MOS capacitor2015-02-25T20:10:00-05:002015-02-25T20:10:00-05:00H.G.tag:h-gens.github.io,2015-02-25:/electrical-characteristics-of-the-mos-capacitor.html<p>An IPython notebook showing the derivation of the electrical characteristics of the idealized MOS capacitor by using the one-dimensional solution of Poisson's equation. The results of the derivation are entirely physics-based and are coded in Python. The code is used to generate plots showing the derived quantities.</p><p>This post is part of a 4-part series on physics-based modeling of the MOS capacitor. </p>
<ul>
<li><a href="https://h-gens.github.io/electrical-characteristics-of-the-mos-capacitor.html">MOS capacitor derivation</a> </li>
<li><a href="https://h-gens.github.io/gausss-law-as-used-in-mos-derivations.html">Gauss's Law as used in MOS derivations</a> </li>
<li><a href="https://h-gens.github.io/mos-surface-potential-equation.html">MOS surface potential equation</a> </li>
<li><a href="https://h-gens.github.io/automated-drawing-of-the-mos-band-diagram.html">Automated drawing of the MOS band diagram</a> </li>
</ul>
<style type="text/css">/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI colors. */
.ansibold {
font-weight: bold;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
color: black;
}
.ansired {
color: darkred;
}
.ansigreen {
color: darkgreen;
}
.ansiyellow {
color: #c4a000;
}
.ansiblue {
color: darkblue;
}
.ansipurple {
color: darkviolet;
}
.ansicyan {
color: steelblue;
}
.ansigray {
color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
background-color: black;
}
.ansibgred {
background-color: red;
}
.ansibggreen {
background-color: green;
}
.ansibgyellow {
background-color: yellow;
}
.ansibgblue {
background-color: blue;
}
.ansibgpurple {
background-color: magenta;
}
.ansibgcyan {
background-color: cyan;
}
.ansibggray {
background-color: gray;
}
div.cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
border-radius: 2px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: transparent;
width: 100%;
padding: 5px;
/* This acts as a spacer between cells, that is outside the border */
margin: 0px;
outline: none;
border-left-width: 1px;
padding-left: 5px;
background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
}
div.cell.jupyter-soft-selected {
border-left-color: #90CAF9;
border-left-color: #E3F2FD;
border-left-width: 1px;
padding-left: 5px;
border-right-color: #E3F2FD;
border-right-width: 1px;
background: #E3F2FD;
}
@media print {
div.cell.jupyter-soft-selected {
border-color: transparent;
}
}
div.cell.selected {
border-color: #ababab;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
}
@media print {
div.cell.selected {
border-color: transparent;
}
}
div.cell.selected.jupyter-soft-selected {
border-left-width: 0;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
}
.edit_mode div.cell.selected {
border-color: #66BB6A;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
}
@media print {
.edit_mode div.cell.selected {
border-color: transparent;
}
}
.prompt {
/* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
min-width: 14ex;
/* This padding is tuned to match the padding on the CodeMirror editor. */
padding: 0.4em;
margin: 0px;
font-family: monospace;
text-align: right;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
/* Don't highlight prompt number selection */
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
/* Use default cursor */
cursor: default;
}
@media (max-width: 540px) {
.prompt {
text-align: left;
}
}
div.inner_cell {
min-width: 0;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
border: 1px solid #cfcfcf;
border-radius: 2px;
background: #f7f7f7;
line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
is no content in the output_subarea and the prompt. The main purpose of this is
to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
padding-top: 0;
padding-bottom: 0;
}
div.unrecognized_cell {
padding: 5px 5px 5px 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.unrecognized_cell .inner_cell {
border-radius: 2px;
padding: 5px;
font-weight: bold;
color: red;
border: 1px solid #cfcfcf;
background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
color: inherit;
text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
color: inherit;
text-decoration: none;
}
@media (max-width: 540px) {
div.unrecognized_cell > div.prompt {
display: none;
}
}
div.code_cell {
/* avoid page breaking on code cells when printing */
}
@media print {
div.code_cell {
page-break-inside: avoid;
}
}
/* any special styling for code cells that are currently running goes here */
div.input {
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.input {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
color: #303F9F;
border-top: 1px solid transparent;
}
div.input_area > div.highlight {
margin: 0.4em;
border: none;
padding: 0px;
background-color: transparent;
}
div.input_area > div.highlight > pre {
margin: 0px;
border: none;
padding: 0px;
background-color: transparent;
}
/* The following gets added to the <head> if it is detected that the user has a
* monospace font with inconsistent normal/bold/italic height. See
* notebookmain.js. Such fonts will have keywords vertically offset with
* respect to the rest of the text. The user should select a better font.
* See: https://github.com/ipython/ipython/issues/1503
*
* .CodeMirror span {
* vertical-align: bottom;
* }
*/
.CodeMirror {
line-height: 1.21429em;
/* Changed from 1em to our global default */
font-size: 14px;
height: auto;
/* Changed to auto to autogrow */
background: none;
/* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
/* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
/* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
overflow-y: hidden;
overflow-x: auto;
}
.CodeMirror-lines {
/* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
/* we have set a different line-height and want this to scale with that. */
padding: 0.4em;
}
.CodeMirror-linenumber {
padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
border-bottom-left-radius: 2px;
border-top-left-radius: 2px;
}
.CodeMirror pre {
/* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
/* .CodeMirror-lines */
padding: 0;
border: 0;
border-radius: 0;
}
/*
Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
Adapted from GitHub theme
*/
.highlight-base {
color: #000;
}
.highlight-variable {
color: #000;
}
.highlight-variable-2 {
color: #1a1a1a;
}
.highlight-variable-3 {
color: #333333;
}
.highlight-string {
color: #BA2121;
}
.highlight-comment {
color: #408080;
font-style: italic;
}
.highlight-number {
color: #080;
}
.highlight-atom {
color: #88F;
}
.highlight-keyword {
color: #008000;
font-weight: bold;
}
.highlight-builtin {
color: #008000;
}
.highlight-error {
color: #f00;
}
.highlight-operator {
color: #AA22FF;
font-weight: bold;
}
.highlight-meta {
color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
color: #00f;
}
.highlight-string-2 {
color: #f50;
}
.highlight-qualifier {
color: #555;
}
.highlight-bracket {
color: #997;
}
.highlight-tag {
color: #170;
}
.highlight-attribute {
color: #00c;
}
.highlight-header {
color: blue;
}
.highlight-quote {
color: #090;
}
.highlight-link {
color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
color: #008000;
font-weight: bold;
}
.cm-s-ipython span.cm-atom {
color: #88F;
}
.cm-s-ipython span.cm-number {
color: #080;
}
.cm-s-ipython span.cm-def {
color: #00f;
}
.cm-s-ipython span.cm-variable {
color: #000;
}
.cm-s-ipython span.cm-operator {
color: #AA22FF;
font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
color: #333333;
}
.cm-s-ipython span.cm-comment {
color: #408080;
font-style: italic;
}
.cm-s-ipython span.cm-string {
color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
color: #f50;
}
.cm-s-ipython span.cm-meta {
color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
color: #555;
}
.cm-s-ipython span.cm-builtin {
color: #008000;
}
.cm-s-ipython span.cm-bracket {
color: #997;
}
.cm-s-ipython span.cm-tag {
color: #170;
}
.cm-s-ipython span.cm-attribute {
color: #00c;
}
.cm-s-ipython span.cm-header {
color: blue;
}
.cm-s-ipython span.cm-quote {
color: #090;
}
.cm-s-ipython span.cm-link {
color: #00c;
}
.cm-s-ipython span.cm-error {
color: #f00;
}
.cm-s-ipython span.cm-tab {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
background-position: right;
background-repeat: no-repeat;
}
div.output_wrapper {
/* this position must be relative to enable descendents to be absolute within it */
position: relative;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
/* ideally, this would be max-height, but FF barfs all over that */
height: 24em;
/* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
width: 100%;
overflow: auto;
border-radius: 2px;
-webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
margin: 0px;
padding: 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
div.out_prompt_overlay {
height: 100%;
padding: 0px 0.4em;
position: absolute;
border-radius: 2px;
}
div.out_prompt_overlay:hover {
/* use inner shadow to get border that is computed the same on WebKit/FF */
-webkit-box-shadow: inset 0 0 1px #000;
box-shadow: inset 0 0 1px #000;
background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
padding: 0px;
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.output_area .MathJax_Display {
text-align: left !important;
}
div.output_area
div.output_area
div.output_area img,
div.output_area svg {
max-width: 100%;
height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
max-width: none;
}
/* This is needed to protect the pre formating from global settings such
as that of bootstrap */
.output {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
@media (max-width: 540px) {
div.output_area {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
div.output_area pre {
margin: 0;
padding: 0;
border: 0;
vertical-align: baseline;
color: black;
background-color: transparent;
border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
the prompt div. */
div.output_subarea {
overflow-x: auto;
padding: 0.4em;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
output types */
/* all text output has this class: */
div.output_text {
text-align: left;
color: #000;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
background: #fdd;
/* very light red background for stderr */
}
div.output_latex {
text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
padding: 0;
}
.js-error {
color: darkred;
}
/* raw_input styles */
div.raw_input_container {
line-height: 1.21429em;
padding-top: 5px;
}
pre.raw_input_prompt {
/* nothing needed here. */
}
input.raw_input {
font-family: monospace;
font-size: inherit;
color: inherit;
width: auto;
/* make sure input baseline aligns with prompt */
vertical-align: baseline;
/* padding + margin = 0.5em between prompt and cursor */
padding: 0em 0.25em;
margin: 0em 0.25em;
}
input.raw_input:focus {
box-shadow: none;
}
p.p-space {
margin-bottom: 10px;
}
div.output_unrecognized {
padding: 5px;
font-weight: bold;
color: red;
}
div.output_unrecognized a {
color: inherit;
text-decoration: none;
}
div.output_unrecognized a:hover {
color: inherit;
text-decoration: none;
}
.rendered_html {
color: #000;
/* any extras will just be numbers: */
}
.rendered_html :link {
text-decoration: underline;
}
.rendered_html :visited {
text-decoration: underline;
}
.rendered_html h1:first-child {
margin-top: 0.538em;
}
.rendered_html h2:first-child {
margin-top: 0.636em;
}
.rendered_html h3:first-child {
margin-top: 0.777em;
}
.rendered_html h4:first-child {
margin-top: 1em;
}
.rendered_html h5:first-child {
margin-top: 1em;
}
.rendered_html h6:first-child {
margin-top: 1em;
}
.rendered_html * + ul {
margin-top: 1em;
}
.rendered_html * + ol {
margin-top: 1em;
}
.rendered_html pre,
.rendered_html tr,
.rendered_html th,
.rendered_html td,
.rendered_html * + table {
margin-top: 1em;
}
.rendered_html * + p {
margin-top: 1em;
}
.rendered_html * + img {
margin-top: 1em;
}
.rendered_html img,
.rendered_html img.unconfined,
div.text_cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.text_cell > div.prompt {
display: none;
}
}
div.text_cell_render {
/*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
outline: none;
resize: none;
width: inherit;
border-style: none;
padding: 0.5em 0.5em 0.5em 0.4em;
color: #000;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
a.anchor-link:link {
text-decoration: none;
padding: 0px 20px;
visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
visibility: visible;
}
.text_cell.rendered .input_area {
display: none;
}
.text_cell.rendered
.text_cell.unrendered .text_cell_render {
display: none;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
font-weight: bold;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
font-size: 185.7%;
}
.cm-header-2 {
font-size: 157.1%;
}
.cm-header-3 {
font-size: 128.6%;
}
.cm-header-4 {
font-size: 110%;
}
.cm-header-5 {
font-size: 100%;
font-style: italic;
}
.cm-header-6 {
font-size: 100%;
font-style: italic;
}
</style>
<style type="text/css">.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>
<style type="text/css">
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }
.ansi-bold { font-weight: bold; }
</style>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="1.0-Introduction">1.0 Introduction<a class="anchor-link" href="#1.0-Introduction">¶</a></h2><p>This notebook presents the mathematical derivation of the electrical characteristics belonging to the MOS capacitor. Although this topic is well-covered in numerous books and technical papers, the mathematics must be implemented in code by the reader. While this is a useful and highly recommended exercise, I thought it might be nice to leverage the IPython notebook's capability to simultaneously display discussion, typset math, and code.</p>
<p>This notebook assumes the reader is familiar with basic sold-state physics concepts such as band diagrams, carrier statistics, and Poisson's equation.</p>
<h3 id="1.1-Model-assumptions">1.1 Model assumptions<a class="anchor-link" href="#1.1-Model-assumptions">¶</a></h3><ul>
<li>MOS material system is nickel - SiO2 - silicon</li>
<li>perfect insulator (zero bulk/interface state density)</li>
<li>thick insulator so that quantum confinement can be ignored</li>
<li>thick substrate such that the electric field deep in the bulk approaches zero</li>
<li>non-degenerate substrate doping</li>
<li>non-freezeout temperature range such that Maxwell-Boltzmann statistics apply</li>
</ul>
<h3 id="1.2-Coordinate-system-and-cross-section">1.2 Coordinate system and cross section<a class="anchor-link" href="#1.2-Coordinate-system-and-cross-section">¶</a></h3><p>The MOS capacitor's electrical characteristics are derived by analyzing a fictionalized geometrical representation. It is assumed that the metal, oxide, and semiconductor layers each exist as planes with uniform characteristics that stretch to infinity in the x and z directions. This assumption permits one to solve Poisson's equation in one-dimension (the y-direction) at an arbitrary x, z location and obtain the same result as solving it in another location.</p>
<center><img src="../images/2015-02-25-MOSCAP-derivations/mos_cross_section.png"></center><p>Due to the one-dimensional analysis, all derived quantities' units have area in the denominator (each quantity is in "per unit area"). A typical MOS capacitor with gate area $A$ will have electrodes on the top of the gate and at the bottom of the substrate. If one is measuring capacitance, then to compare the measured result to the calculated value one would have to either divide the measured capacitance by $A$ or multiply the calculated value by $A$.</p>
<p>Furthermore, it is assumed that the semiconductor layer is infinitely thick. This provides a convenient boundary condition where potential and field decay to zero. More on this topic is discussed in Section 6.0 when Poisson's equation is solved.</p>
<h3 id="1.3-Doping-limitations">1.3 Doping limitations<a class="anchor-link" href="#1.3-Doping-limitations">¶</a></h3><p>Some of the expressions in this notebook are exact, while some of the expressions are derived using the charge sheet approximation. The code containing the latter group of expressions will fail if the doping is set to zero or if acceptor doping density is equal to donor doping density. This is because the charge sheet approximation assumes there is a net doping density above the intrinsic level. Therefore, some plots will not appear or will contain curves that do not cover the entire independent range, both usually caused by NaN values.</p>
<p>Also, the degenerate doping case is not handled. To handle that case one must resort to Fermi-Dirac carrier statistics and include a bandgap-narrowing term, or just reformulate the analysis to consider quantum-mechanical effects.</p>
<h3 id="1.4-Code">1.4 Code<a class="anchor-link" href="#1.4-Code">¶</a></h3><p>The code contained in this notebook was tested successfully in Python v2.7.5 and v3.4.2. Numpy, scipy, and matplotlib modules are required. For Windows users, it is suggested to use <a href="https://winpython.github.io/">WinPython</a> or <a href="https://code.google.com/p/pythonxy/">Pythonxy</a>. At the time of this writing, only the former has Python3 versions available.</p>
<p>All code can be copied into a single Python script provided each cell is included sequentially. All plots shown in this notebook will appear.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="2.0-Constants-and-utility-functions">2.0 Constants and utility functions<a class="anchor-link" href="#2.0-Constants-and-utility-functions">¶</a></h2><p>The following code blocks contain functions and variables that are commonly used. Constants are defined here so that they are available in the Python namespace later on. Most, if not all, of the material constants come from the <a href="http://www.ioffe.ru/SVA/NSM/Semicond/Si/index.html">Ioffe semicondudctor properties archive</a> [1].</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [16]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="kn">from</span> <span class="nn">scipy.integrate</span> <span class="k">import</span> <span class="n">quad</span>
<span class="c1"># The 'inline' statement keeps the plot windows from showing up as</span>
<span class="c1"># independent windows. Instead, they show up in the notebook.</span>
<span class="o">%</span><span class="k">matplotlib</span> inline
<span class="c1"># set a default figure size</span>
<span class="n">mpl</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">'figure.figsize'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
<span class="c1"># -----------------------</span>
<span class="c1"># user-defined settings</span>
<span class="c1"># -----------------------</span>
<span class="n">T</span> <span class="o">=</span> <span class="mi">300</span> <span class="c1"># lattice temperature, Kelvin</span>
<span class="n">tox</span> <span class="o">=</span> <span class="mf">50e-9</span> <span class="o">*</span> <span class="mi">100</span> <span class="c1"># 50 nm oxide converted to cm</span>
<span class="n">Nd</span> <span class="o">=</span> <span class="mf">1e16</span> <span class="c1"># donor doping concentration, # / cm^3</span>
<span class="n">Na</span> <span class="o">=</span> <span class="mf">1e17</span> <span class="c1"># acceptor doping concentration, # / cm^3</span>
<span class="c1"># -----------------------</span>
<span class="c1"># physical constants</span>
<span class="c1"># -----------------------</span>
<span class="n">e0</span> <span class="o">=</span> <span class="mf">8.854e-14</span> <span class="c1"># permittivity of free space, F / cm</span>
<span class="n">q</span> <span class="o">=</span> <span class="mf">1.602e-19</span> <span class="c1"># elementary charge, Coulombs</span>
<span class="n">k</span> <span class="o">=</span> <span class="mf">8.617e-5</span> <span class="c1"># Boltzmann constant, eV / K</span>
<span class="c1"># -----------------------</span>
<span class="c1"># material parameters </span>
<span class="c1"># -----------------------</span>
<span class="n">es</span> <span class="o">=</span> <span class="mf">11.7</span> <span class="c1"># relative permittivity, silicon</span>
<span class="n">eox</span> <span class="o">=</span> <span class="mf">3.9</span> <span class="c1"># relative permittivity, SiO2</span>
<span class="n">chi_s</span> <span class="o">=</span> <span class="mf">4.17</span> <span class="c1"># electron affinity, silicon, eV</span>
<span class="n">phi_m</span> <span class="o">=</span> <span class="mf">5.01</span> <span class="c1"># work function, nickel, eV</span>
<span class="c1"># bandgap, silicon, eV</span>
<span class="n">Eg</span> <span class="o">=</span> <span class="mf">1.17</span> <span class="o">-</span> <span class="mf">4.73e-4</span> <span class="o">*</span> <span class="n">T</span> <span class="o">**</span> <span class="mi">2</span> <span class="o">/</span> <span class="p">(</span><span class="n">T</span> <span class="o">+</span> <span class="mf">636.0</span><span class="p">)</span>
<span class="c1"># effective valence band DOS, silicon, # / cm^3</span>
<span class="n">Nv</span> <span class="o">=</span> <span class="mf">3.5e15</span> <span class="o">*</span> <span class="n">T</span> <span class="o">**</span> <span class="mf">1.5</span>
<span class="c1"># effective conduction band DOS, silicon, # / cm^3</span>
<span class="n">Nc</span> <span class="o">=</span> <span class="mf">6.2e15</span> <span class="o">*</span> <span class="n">T</span> <span class="o">**</span> <span class="mf">1.5</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>An indicator function proves to be useful when implementing expressions prone to 0/0 conditions. The below is formulated to "indicate" that x is zero by returning unity. Otherwise, it returns zero.</p>
$$\begin{aligned}
I(x) &= 1 - |\mbox{sign}(x)|
\end{aligned}$$<p>The $\mbox{sign}$ function returns $1/0/-1$ if $x$ is positive/zero/negative. It is available in the Python module numpy and is often referred to as $\mbox{signum}$ in other computational tools.</p>
<p>A smoothing function is needed when it is desired that a function smoothly transitions to near-zero [2]. This can be useful to prevent a function from changing sign. In the following functions, the parameter $\varepsilon$ controls how quickly the function $f$ transitions toward zero. Two versions are written: $S_p$ ensures $f$ stays positive, and $S_n$ ensures $f$ stays negative.</p>
$$\begin{aligned}
S_p(f) &= \frac{f + \sqrt{f^2 + 4\varepsilon^2}}{2} \\
S_n(f) &= \frac{f - \sqrt{f^2 + 4\varepsilon^2}}{2}
\end{aligned}$$<p>Note that when $f^2 \ll 4\varepsilon^2$, then $S_p \approx \varepsilon$ and $S_n \approx -\varepsilon$. This means that the minimum value of $|f|$ is clamped to $\varepsilon$, which must be carefully chosen.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [2]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># create an indicator function</span>
<span class="c1"># - this function is unity only when x is zero; else, it returns zero</span>
<span class="n">I</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="mi">1</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
<span class="c1"># create smoothing functions</span>
<span class="c1"># - smoothly transitions to near-zero as f approaches zero</span>
<span class="c1"># - eps is the minimum value |f| reaches</span>
<span class="k">def</span> <span class="nf">Sp</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">eps</span><span class="o">=</span><span class="mf">1e-3</span><span class="p">):</span>
<span class="k">return</span> <span class="p">(</span><span class="n">f</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">f</span> <span class="o">**</span> <span class="mi">2</span> <span class="o">+</span> <span class="mi">4</span> <span class="o">*</span> <span class="n">eps</span> <span class="o">**</span> <span class="mi">2</span><span class="p">))</span> <span class="o">/</span> <span class="mf">2.0</span>
<span class="k">def</span> <span class="nf">Sn</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">eps</span><span class="o">=</span><span class="mf">1e-3</span><span class="p">):</span>
<span class="k">return</span> <span class="p">(</span><span class="n">f</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">f</span> <span class="o">**</span> <span class="mi">2</span> <span class="o">+</span> <span class="mi">4</span> <span class="o">*</span> <span class="n">eps</span> <span class="o">**</span> <span class="mi">2</span><span class="p">))</span> <span class="o">/</span> <span class="mf">2.0</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>In this notebook, comments involving the phrase "numerical solution" appear. This refers to solving a transcendental function using an iterative approach, which is stated more mathematically as finding the value, $x_0$, that satisfies $f(x_0) = 0$. The most flexible iterative approach is the <a href="https://en.wikipedia.org/wiki/Bisection_method">midpoint method</a>, which continually bisects a range of independent values that is assumed to contain $x_0$. <a href="https://en.wikipedia.org/wiki/Newton%27s_method">Newton's method</a> is an alternative (and faster) approach, but is not employed since it requires the user to compute the derivative of $f(x)$.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [3]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">solve_bisection</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">xmin</span><span class="p">,</span> <span class="n">xmax</span><span class="p">):</span>
<span class="sd">"""</span>
<span class="sd"> Returns the independent value x satisfying func(x)=value.</span>
<span class="sd"> - uses the bisection search method</span>
<span class="sd"> https://en.wikipedia.org/wiki/Bisection_method</span>
<span class="sd"> Arguments:</span>
<span class="sd"> func - callable function of a single independent variable</span>
<span class="sd"> target - the value func(x) should equal</span>
<span class="sd"> [xmin, xmax] - the range over which x can exist</span>
<span class="sd"> """</span>
<span class="n">tol</span> <span class="o">=</span> <span class="mf">1e-10</span> <span class="c1"># when |a - b| <= tol, quit searching</span>
<span class="n">max_iters</span> <span class="o">=</span> <span class="mf">1e2</span> <span class="c1"># maximum number of iterations</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">xmin</span>
<span class="n">b</span> <span class="o">=</span> <span class="n">xmax</span>
<span class="n">cnt</span> <span class="o">=</span> <span class="mi">1</span>
<span class="c1"># before entering while(), calculate Fa</span>
<span class="n">Fa</span> <span class="o">=</span> <span class="n">target</span> <span class="o">-</span> <span class="n">func</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">a</span>
<span class="c1"># bisection search loop</span>
<span class="k">while</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">a</span> <span class="o">-</span> <span class="n">b</span><span class="p">)</span> <span class="o">></span> <span class="n">tol</span> <span class="ow">and</span> <span class="n">cnt</span> <span class="o"><</span> <span class="n">max_iters</span><span class="p">:</span>
<span class="n">cnt</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="c1"># make 'c' be the midpoint between 'a' and 'b'</span>
<span class="n">c</span> <span class="o">=</span> <span class="p">(</span><span class="n">a</span> <span class="o">+</span> <span class="n">b</span><span class="p">)</span> <span class="o">/</span> <span class="mf">2.0</span>
<span class="c1"># calculate at the new 'c'</span>
<span class="n">Fc</span> <span class="o">=</span> <span class="n">target</span> <span class="o">-</span> <span class="n">func</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="k">if</span> <span class="n">Fc</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="c1"># 'c' was the sought-after solution, so quit</span>
<span class="k">break</span>
<span class="k">elif</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">Fa</span><span class="p">)</span> <span class="o">==</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">Fc</span><span class="p">):</span>
<span class="c1"># the signs were the same, so modify 'a'</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">c</span>
<span class="n">Fa</span> <span class="o">=</span> <span class="n">Fc</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># the signs were different, so modify 'b'</span>
<span class="n">b</span> <span class="o">=</span> <span class="n">c</span>
<span class="k">if</span> <span class="n">cnt</span> <span class="o">==</span> <span class="n">max_iters</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'WARNING: max iterations reached'</span><span class="p">)</span>
<span class="k">return</span> <span class="n">c</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>With all the material constants assigned only some dependent calculations are required to complete the set up.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [4]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># -----------------------</span>
<span class="c1"># dependent calculations</span>
<span class="c1"># -----------------------</span>
<span class="c1"># intrinsic carrier concentration, silicon, # / cm^3</span>
<span class="n">ni</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">Nc</span> <span class="o">*</span> <span class="n">Nv</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="n">Eg</span> <span class="o">/</span> <span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">k</span> <span class="o">*</span> <span class="n">T</span><span class="p">))</span>
<span class="c1"># Energy levels are relative to one-another in charge expressions.</span>
<span class="c1"># - Therefore, it is OK to set Ev to a reference value of 0 eV.</span>
<span class="c1"># Usually, energy levels are given in Joules and one converts to eV.</span>
<span class="c1"># - I have just written each in eV to save time.</span>
<span class="n">Ev</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># valence band energy level</span>
<span class="n">Ec</span> <span class="o">=</span> <span class="n">Eg</span> <span class="c1"># conduction band energy level</span>
<span class="n">Ei</span> <span class="o">=</span> <span class="n">k</span> <span class="o">*</span> <span class="n">T</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">ni</span> <span class="o">/</span> <span class="n">Nc</span><span class="p">)</span> <span class="o">+</span> <span class="n">Ec</span> <span class="c1"># intrinsic energy level</span>
<span class="n">phit</span> <span class="o">=</span> <span class="n">k</span> <span class="o">*</span> <span class="n">T</span> <span class="c1"># thermal voltage, eV</span>
<span class="c1"># get the Fermi level in the bulk where there is no band-bending</span>
<span class="n">n</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">Ef</span><span class="p">:</span> <span class="n">Nc</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">((</span><span class="o">-</span><span class="n">Ec</span> <span class="o">+</span> <span class="n">Ef</span><span class="p">)</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="n">p</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">Ef</span><span class="p">:</span> <span class="n">Nv</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">((</span><span class="n">Ev</span> <span class="o">-</span> <span class="n">Ef</span><span class="p">)</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="n">func</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">Ef</span><span class="p">:</span> <span class="n">p</span><span class="p">(</span><span class="n">Ef</span><span class="p">)</span> <span class="o">-</span> <span class="n">n</span><span class="p">(</span><span class="n">Ef</span><span class="p">)</span> <span class="o">+</span> <span class="n">Nd</span> <span class="o">-</span> <span class="n">Na</span>
<span class="n">Ef</span> <span class="o">=</span> <span class="n">solve_bisection</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">Ev</span><span class="p">,</span> <span class="n">Ec</span><span class="p">)</span>
<span class="c1"># compute semiconductor work function (energy from vacuum to Ef)</span>
<span class="n">phi_s</span> <span class="o">=</span> <span class="n">chi_s</span> <span class="o">+</span> <span class="n">Ec</span> <span class="o">-</span> <span class="n">Ef</span>
<span class="c1"># flatband voltage and its constituent(s)</span>
<span class="c1"># - no defect-related charges considered</span>
<span class="n">phi_ms</span> <span class="o">=</span> <span class="n">phi_m</span> <span class="o">-</span> <span class="n">phi_s</span> <span class="c1"># metal-semiconductor workfunction, eV</span>
<span class="n">Vfb</span> <span class="o">=</span> <span class="n">phi_ms</span> <span class="c1"># flatband voltage, V</span>
<span class="c1"># oxide capacitance per unit area, F / cm^2</span>
<span class="n">Coxp</span> <span class="o">=</span> <span class="n">eox</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">/</span> <span class="n">tox</span>
<span class="c1"># calculate effective compensated doping densities</span>
<span class="c1"># - assume complete ionization</span>
<span class="k">if</span> <span class="n">Na</span> <span class="o">></span> <span class="n">Nd</span><span class="p">:</span>
<span class="n">Na</span> <span class="o">=</span> <span class="n">Na</span> <span class="o">-</span> <span class="n">Nd</span>
<span class="n">Nd</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">device_type</span> <span class="o">=</span> <span class="s1">'nMOS'</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">Nd</span> <span class="o">=</span> <span class="n">Nd</span> <span class="o">-</span> <span class="n">Na</span>
<span class="n">Na</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">device_type</span> <span class="o">=</span> <span class="s1">'pMOS'</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="3.0-Band-bending-and-surface-potential">3.0 Band-bending and surface potential<a class="anchor-link" href="#3.0-Band-bending-and-surface-potential">¶</a></h2><p>All bias-dependent expressions in this work make use of the concept of band-bending, which is denoted by the variable $\psi$. Furthermore, the band-bending from the neutral semiconductor bulk to the semiconductor-insulator surface is termed surface potential ($\psi_s$).</p>
<ul>
<li>Band-bending is positive when a band is bent downward (excess electrons are induced). </li>
<li>Band-bending is negative when a band is bent upward (excess holes are induced). </li>
</ul>
<p>Below is an image showing band-bending in an MOS device when $V_{gb}$, $\psi_{ox}$, and $\psi_s$ are all positive.</p>
<center><img src="../images/2015-02-28-MOS-band-diagram/band_bending.png"></center><blockquote><p><strong>Note</strong>: The above surface potential definition follows the style of Y. Tsividis [3], which is in contrast to works that define surface potential to be the difference between the Fermi level in the neutral bulk with the intrinsic level at the surface (e.g., [4]). The two definitions only differ by a constant (the fermi potential, $\phi_f$).</p>
</blockquote>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="4.0-Charge-density">4.0 Charge density<a class="anchor-link" href="#4.0-Charge-density">¶</a></h2><p>The four charges present in the semiconductor bulk are:</p>
<ol>
<li>free holes ($p$, positive charge)</li>
<li>free electrons ($n$, negative charge)</li>
<li>ionized donors ($N_d^+$, positive charge)</li>
<li>ionized acceptors ($N_a^-$, negative charge)</li>
</ol>
<p>All have units #/cm$^3$. These sum to form the charge density, $\rho$.</p>
$$\begin{aligned}
\rho &= q\left(p - n + N_d^+ - N_a^-\right)
\end{aligned}$$<p></p>
<p>All are bias- and temperature-dependent. The temperature dependence is provided by a quantity called the "thermal voltage," $\phi_t = \frac{kT}{q}$.</p>
<h3 id="4.1-Carrier-densities">4.1 Carrier densities<a class="anchor-link" href="#4.1-Carrier-densities">¶</a></h3><p>All four terms in $\rho$ are a function of band-bending ($\psi$). In the "classical" case (Maxwell-Boltzmann statistics), $p$ and $n$ are in terms of the effective valence/conduction band density of states ($N_v$, $N_c$), band bending ($\psi$), and the difference between the valence/conduction band energy ($E_v$, $E_c$) with respect to the fermi level ($E_f$) [5].</p>
$$\begin{aligned}
n(\psi) &= N_c e^{(q\psi - E_c + E_f)/kT} \\
p(\psi) &= N_v e^{(-q\psi + E_v - E_f)/kT}
\end{aligned}$$<p>Both carrier concentrations can be rewritten in terms of the intrinsic carrier concentration ($n_i$) and the intrinsic energy level ($E_i$). This is accomplished by substituting the result found by writing $n_i = n(\psi=0, E_f=E_i)$ and $n_i = p(\psi=0, E_f=E_i)$.</p>
$$\begin{aligned}
n(\psi) &= n_i e^{(q\psi - E_i + E_f)/kT} \\
p(\psi) &= n_i e^{(-q\psi + E_i - E_f)/kT}
\end{aligned}$$<p>It is convenient to assign $n_o=n(0)$ and $p_o=p(0)$, which are referred to as the equilibrium electron/hole concentrations. In this case, both forms of $n$ and $p$ shown above can be written as:</p>
$$\begin{aligned}
n(\psi) &= n_o e^{\psi/\phi_t} \\
p(\psi) &= p_o e^{-\psi/\phi_t}
\end{aligned}$$<p>Where,</p>
$$\begin{aligned}
n_o &= N_c e^{(- E_c + E_f)/kT} \\
&= n_i e^{(-E_i + E_f) / kT} \\
p_o &= N_v e^{(E_v - E_f)/kT} \\
&= n_i e^{(E_i - E_f) / kT}
\end{aligned}$$<p>In texts devoted to MOS modeling it is common to find the carrier concentrations written in terms of the substrate dopant density. For example, in a p-type substrate the hole density deep in the bulk (where $\psi$ is zero) is approximately equal to $N_a$. Combining this fact with the equilibrium relationship $n_o p_o = n_i^2$ and additional algebra yields doping density-based expressions for $n_o$ and $p_o$.</p>
$$\begin{aligned}
p_o &\approx N_a \\
n_o &= \frac{n_i^2}{p_o} \approx \frac{n_i^2}{N_a} \mbox{ where } n_i = n_o e^{(E_i - E_f) / kT} \\
\rightarrow n_o &\approx N_a e^{-2(E_i - E_f) / kT}
\end{aligned}$$<p>Before inserting these results into $n$ and $p$ it is convenient to define the "fermi potential," which is $q\phi_f=E_i-E_f$ (discussed in Section 5.0).</p>
$$\begin{aligned}
n(\psi) &= N_a e^{(\psi-2\phi_f)/\phi_t} \\
p(\psi) &= N_a e^{-\psi/\phi_t}
\end{aligned}$$<p>The above $N_a$-based results are applicable when substrate doping is p-type and are not used in the more generalized approach of this notebook.</p>
<h3 id="4.2-Ionized-dopant-densities">4.2 Ionized dopant densities<a class="anchor-link" href="#4.2-Ionized-dopant-densities">¶</a></h3><p>The ionized donor/acceptor densities are written in terms of the doping density (written $N_d$ or $N_a$ without the +/- superscript) and each dopant's ionization energy and degeneracy ($E_d$, $E_a$, $g_d$, $g_a$) [5].</p>
$$\begin{aligned}
N_d^+ &= N_d\left[1+g_d e^{(q\psi+E_f-E_d)/kT}\right]^{-1} \\
N_a^- &= N_a\left[1+g_a e^{(-q\psi+E_a-E_f)/kT}\right]^{-1}
\end{aligned}$$<p>Typically, a substrate is doped in a manner such that one dopant type dominates (e.g., $N_d \gg N_a$). In this work, no assumption will be made on the substrate's doping type in order to avoid having two sets of equations: one for p-type substrates and one for n-type substrates. Instead, complete ionization will be assumed in order to simplify the results. This is a good approximation for typical silicon dopants which have very shallow ionization energies.</p>
$$\begin{aligned}
N_d^+ &\approx N_d \\
N_a^- &\approx N_a
\end{aligned}$$
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="5.0-Fermi-level">5.0 Fermi level<a class="anchor-link" href="#5.0-Fermi-level">¶</a></h2><p>The Fermi level ($E_f$) appears in every bias-dependent expression of semiconductor charge. It describes the state of the substrate deep in the neutral bulk (where band-bending is zero) and is an equilibrium value. $E_f$ can be found by setting $\rho(\psi_s=0)$ to zero and inputting all known parameters. Due to the exponential functions there is no explicit solution for $E_f$, which means a numerical search can be employed.</p>
$$\begin{aligned}
0 &= \rho \\
&= p - n + N_d - N_a
\end{aligned}$$<blockquote><p><strong>Note:</strong> Obtaining a value for $E_f$ is somewhat misleading because $E_v$ has been set to an arbitrary reference level in the code. The value found for $E_f$ should just be thought of as some energy relative to $E_v$. Its absolute energy is not important since the energy levels in the charge density functions always appear relative to one another (e.g., $E_f - E_c$ in the exponential of $n(\psi)$).</p>
</blockquote>
<p>If there is a dominant dopant then $E_f$ can be found explicitly by assuming one of the carriers' contribution to $\rho$ is negligible. For example, when $N_a \gg N_d$ then $p \approx N_a$ and $n = n_i^2 / p \ll p$.</p>
$$\begin{aligned}
0 &= \rho \\
&\approx p - N_a \\
\rightarrow N_a &\approx p \\
&= N_v e^{(E_v - E_f)/kT} \\
\rightarrow E_f &= kT \ln\left(\frac{N_v}{N_a}\right) + E_v
\end{aligned}$$<blockquote><p><strong>Note:</strong> The Fermi level is often written in terms of the Fermi potential, $q \phi_f = E_i - E_f$. The Fermi potential is found using the intrinsic carrier based $n$, $p$ expressions with $\psi=0$. For a p-type body $\phi_f = kT \ln\left(N_a / n_i\right)$, while for an n-type body $\phi_f = kT \ln\left(n_i / N_d\right)$. This approach can be shown to be equivalent to the preceding approximation for $E_f$.</p>
</blockquote>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [5]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># (1) find Ef using a numerical search</span>
<span class="c1"># charge density expressions at zero band-bending</span>
<span class="n">n</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">Ef</span><span class="p">:</span> <span class="n">Nc</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">((</span><span class="o">-</span><span class="n">Ec</span> <span class="o">+</span> <span class="n">Ef</span><span class="p">)</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="n">p</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">Ef</span><span class="p">:</span> <span class="n">Nv</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">((</span><span class="n">Ev</span> <span class="o">-</span> <span class="n">Ef</span><span class="p">)</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="n">func</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">Ef</span><span class="p">:</span> <span class="n">p</span><span class="p">(</span><span class="n">Ef</span><span class="p">)</span> <span class="o">-</span> <span class="n">n</span><span class="p">(</span><span class="n">Ef</span><span class="p">)</span> <span class="o">+</span> <span class="n">Nd</span> <span class="o">-</span> <span class="n">Na</span>
<span class="n">Ef</span> <span class="o">=</span> <span class="n">solve_bisection</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">Ev</span><span class="p">,</span> <span class="n">Ec</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Ef = </span><span class="si">%0.3g</span><span class="s1"> eV by numerical search'</span> <span class="o">%</span> <span class="n">Ef</span><span class="p">)</span>
<span class="c1"># use the previous Ef to compute equilibrium carrier concentrations</span>
<span class="n">n_o</span> <span class="o">=</span> <span class="n">Nc</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">((</span><span class="o">-</span><span class="n">Ec</span> <span class="o">+</span> <span class="n">Ef</span><span class="p">)</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="n">p_o</span> <span class="o">=</span> <span class="n">Nv</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">((</span><span class="n">Ev</span> <span class="o">-</span> <span class="n">Ef</span><span class="p">)</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="k">if</span> <span class="n">Nd</span> <span class="o"><</span> <span class="n">ni</span> <span class="ow">and</span> <span class="n">Na</span> <span class="o"><</span> <span class="n">ni</span><span class="p">:</span>
<span class="c1"># sorry, no approximations can be performed</span>
<span class="k">pass</span>
<span class="k">elif</span> <span class="n">device_type</span> <span class="o">==</span> <span class="s1">'nMOS'</span><span class="p">:</span>
<span class="c1"># (2) find Ef using the majority dopant approxmation</span>
<span class="n">Ef</span> <span class="o">=</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">Nv</span> <span class="o">/</span> <span class="n">Na</span><span class="p">)</span> <span class="o">+</span> <span class="n">Ev</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Ef = </span><span class="si">%0.3g</span><span class="s1"> eV by majority dopant approximation'</span> <span class="o">%</span> <span class="n">Ef</span><span class="p">)</span>
<span class="c1"># (3) find phif using the majority dopant approxmation and convert to Ef</span>
<span class="n">phif</span> <span class="o">=</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">Na</span> <span class="o">/</span> <span class="n">ni</span><span class="p">)</span>
<span class="n">Ef</span> <span class="o">=</span> <span class="n">Ei</span> <span class="o">-</span> <span class="n">phif</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Ef = </span><span class="si">%0.3g</span><span class="s1"> eV by majority dopant approximation via phif'</span> <span class="o">%</span> <span class="n">Ef</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># (2) find Ef using the majority dopant approxmation</span>
<span class="n">Ef</span> <span class="o">=</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">Nd</span> <span class="o">/</span> <span class="n">Nc</span><span class="p">)</span> <span class="o">+</span> <span class="n">Ec</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Ef = </span><span class="si">%0.3g</span><span class="s1"> eV by majority dopant approximation'</span> <span class="o">%</span> <span class="n">Ef</span><span class="p">)</span>
<span class="c1"># (3) find phif using the majority dopant approxmation and convert to Ef</span>
<span class="n">phif</span> <span class="o">=</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">ni</span> <span class="o">/</span> <span class="n">Nd</span><span class="p">)</span>
<span class="n">Ef</span> <span class="o">=</span> <span class="n">Ei</span> <span class="o">-</span> <span class="n">phif</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Ef = </span><span class="si">%0.3g</span><span class="s1"> eV by majority dopant approximation via phif'</span> <span class="o">%</span> <span class="n">Ef</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>Ef = 0.137 eV by numerical search
Ef = 0.137 eV by majority dopant approximation
Ef = 0.137 eV by majority dopant approximation via phif
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="6.0-Poisson's-equation">6.0 Poisson's equation<a class="anchor-link" href="#6.0-Poisson's-equation">¶</a></h2><p><a href="https://en.wikipedia.org/wiki/Poisson%27s_equation">Poisson's equation</a> relates divergence of the gradient of potential to charge density. It is related to <a href="https://en.wikipedia.org/wiki/Gauss%27s_law">Gauss's Law</a> (because $\overrightarrow{E} = -\nabla\psi$), which relates the divergence of electric field to charge density. It can be solved explicity for a 1-dimensional MOS capacitor with infinitely thick substrate [3], which is an oft-employed approximation for the case of a thick substrate. $\epsilon_s$ is the permittivity of the semiconductor, which is assumed to be linear, isotropic, and homogeneous so that $\epsilon_s$ is a scalar constant.</p>
$$\begin{aligned}
\nabla^2\psi &= -\frac{\rho}{\epsilon_s} \\
\end{aligned}$$<p>In 1D, $\nabla^2\psi$ reduces to $d^2\psi/dy^2$.</p>
$$\begin{aligned}
\frac{d^2\psi}{dy^2} &= -\frac{\rho}{\epsilon_s}
\end{aligned}$$<p>This simplified version of Poisson's equation is solved in terms of $\psi$ instead of $y$ by substituting the following result into the left hand side. The observation that $E = -d\psi/dy$ in one dimension is used.</p>
$$\begin{aligned}
\frac{d}{dy}\left(\frac{d\psi}{dy}\right)^2 &= 2 \frac{d\psi}{dy} \frac{d^2\psi}{dy^2} \\
\mbox{giving ...} \\
\frac{d^2\psi}{dy^2} &= \frac{1}{2} \left(\frac{d\psi}{dy}\right)^{-1} \frac{d}{dy} \left(\frac{d\psi}{dy}\right)^2 \\
&= \frac{1}{2} \frac{d}{d\psi} \left(\frac{d\psi}{dy}\right)^2 \\
&= \frac{1}{2} \frac{dE^2}{d\psi}
\end{aligned}$$<p>The above is substituted into Poisson's equation, which is then integrated from $y=0$ to $y=\infty$.</p>
$$\begin{aligned}
\frac{1}{2} \frac{dE^2}{d\psi} &= -\frac{\rho}{\epsilon} \\
\int_{E(y=0)}^{E(y\rightarrow\infty)} dE^2 &= -\frac{2}{\epsilon} \int_{\psi(y=0)}^{\psi(y\rightarrow\infty)} \rho d\psi
\end{aligned}$$<p>In order to solve the above, boundary conditions must be defined.</p>
$$\begin{aligned}
\lim_{y\rightarrow\infty} \psi(y) &= 0 \\
\lim_{y\rightarrow\infty} E(y) &= 0 \\
\psi(y=0) &= \psi_s \\
E(y=0) &= E_s
\end{aligned}$$<p>With these conditions, the solution proceeds as follows.</p>
$$\begin{aligned}
E_s^2 &= \frac{2}{\epsilon_s} \int_{\psi_s}^0 \rho d\psi \\
&= \frac{2q}{\epsilon_s} \int_{\psi_s}^0 \left[ p_o e^{-q\psi/\phi_t} - n_o e^{q\psi/\phi_t} + N_d - N_a \right] d\psi \\
&= \frac{2q}{\epsilon_s} \left[ -\phi_t p_o e^{-q\psi/\phi_t} - \phi_t n_o e^{q\psi/\phi_t} + N_d \psi - N_a \psi \right]_{\psi_s}^0 \\
&= \frac{2q}{\epsilon_s} f(\psi_s)
\end{aligned}$$<p>Where, for convenience, $f(\psi_s)$ has been defined.</p>
$$\begin{aligned}
f(\psi_s) &= \phi_t p_o \left(e^{-\psi_s/\phi_t} - 1 \right) + \phi_t n_o \left(e^{\psi_s/\phi_t} - 1 \right) \\
& + \psi_s \left(N_a - N_d\right)
\end{aligned}$$<p>Taking the square root of both sides yields the surface field, $E_s$. The direction of this field is deduced from either (1) observing the band-bending diagram or (2) knowing that electric field is $-d\psi/dy$. When $\psi_s > 0$ then $E_s > 0$ and when $\psi_s < 0$ then $E_s < 0$. This is so because the potential monotonically increases or decreases to zero at $y\rightarrow\infty$. The $\mbox{sign(x)}$ function is useful in order to handle the sign change of $E_s$ since $f$ is always positive.</p>
$$\begin{aligned}
E_s &= \mbox{sign}(\psi_s) \sqrt{\frac{2q}{\epsilon_s} f(\psi_s)}
\end{aligned}$$<p>Finally, an expression for the electric field at the surface has been found. This result is related to semiconductor charge per unit area ($Q_s'$) by Gauss's Law, a process which is <a href="/gausss-law-as-used-in-mos-derivations.html">explained elsewhere</a>.</p>
$$\begin{aligned}
Q_s' &= -\epsilon_s \cdot E_s \\
&= -\mbox{sign}(\psi_s) \sqrt{2q\epsilon_s f(\psi_s)}
\end{aligned}$$
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [17]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># make surface potential vary from accumulation to strong inversion</span>
<span class="n">psis</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">Ev</span> <span class="o">-</span> <span class="n">Ef</span><span class="p">,</span> <span class="n">Ec</span> <span class="o">-</span> <span class="n">Ef</span><span class="p">,</span> <span class="mi">101</span><span class="p">)</span>
<span class="c1"># define the charge function so it can be reused later</span>
<span class="n">f</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="n">psis</span> <span class="o">*</span> <span class="p">(</span><span class="n">Na</span> <span class="o">-</span> <span class="n">Nd</span><span class="p">)</span> \
<span class="o">+</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">p_o</span> <span class="o">*</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="n">psis</span> <span class="o">/</span> <span class="n">phit</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">phit</span> <span class="o">*</span> <span class="n">n_o</span> <span class="o">*</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">psis</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">Qs</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">q</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">*</span> <span class="n">es</span> <span class="o">*</span> <span class="n">f</span><span class="p">(</span><span class="n">psis</span><span class="p">))</span>
<span class="c1"># create a plot of Qs vs psis</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">psis</span><span class="p">,</span> <span class="n">Qs</span><span class="p">(</span><span class="n">psis</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'$\psi_s$ (eV)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span> <span class="c1"># such small latex subscripts ...</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$Q_s$ (C / cm$^2$)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="7.0-Surface-potential-equation">7.0 Surface potential equation<a class="anchor-link" href="#7.0-Surface-potential-equation">¶</a></h2><p>The surface potential equation (SPE) gives the mathematical relationship between gate-bulk bias and band-bending. The former is applied to a MOS capacitor's terminals during measurement, while the latter is induced in the semiconductor and is therefore a dependent variable. <a href="/mos-surface-potential-equation.html">The SPE is derived elsewhere</a> and is written below for the case of zero oxide-related defects.</p>
$$\begin{aligned}
V_{gb} &= V_{fb} + \psi_s - \frac{Q_s'}{C_{ox}'}
\end{aligned}$$<p>Given a particular $V_{gb}$, then $\psi_s$ is solved-for by analysis of the SPE (a transcendental equation). For the case of a trap-free oxide, $\psi_s$ can be approximated from the SPE with a high degree of accuracy [6].</p>
<p>The flatband voltage has been emphasized in the below plots. Note that when $V_{gb} < V_{fb}$ then $\psi_s < 0$. Conversely, when $V_{gb} > V_{fb}$ then $\psi_s > 0$. This is an important demarcation that separates the accumulation/depletion regions discussed in the next section.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [18]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># this is the right-hand side of the SPE written above</span>
<span class="n">SPE</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="n">Vfb</span> <span class="o">+</span> <span class="n">psis</span> <span class="o">-</span> <span class="n">Qs</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">/</span> <span class="n">Coxp</span>
<span class="c1"># I've used the SPE to find the stop/start values so that the voltage </span>
<span class="c1"># range adapts to the choice of doping and oxide thickness.</span>
<span class="n">Vgb</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">SPE</span><span class="p">(</span><span class="n">Ev</span> <span class="o">-</span> <span class="n">Ef</span><span class="p">),</span> <span class="n">SPE</span><span class="p">(</span><span class="n">Ec</span> <span class="o">-</span> <span class="n">Ef</span><span class="p">),</span> <span class="mi">101</span><span class="p">)</span>
<span class="n">psis</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="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">Vgb</span><span class="p">:</span>
<span class="n">psis</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">hstack</span><span class="p">((</span>
<span class="n">psis</span><span class="p">,</span>
<span class="n">solve_bisection</span><span class="p">(</span><span class="n">SPE</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">Ev</span> <span class="o">-</span> <span class="n">Ef</span> <span class="o">-</span> <span class="mf">0.2</span><span class="p">,</span> <span class="n">Ec</span> <span class="o">-</span> <span class="n">Ef</span> <span class="o">+</span> <span class="mf">0.2</span><span class="p">)</span>
<span class="p">))</span>
<span class="c1"># create a plot of Qs vs Vgb</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">,</span> <span class="n">psis</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'$V_</span><span class="si">{gb}</span><span class="s1">$ (V)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$\psi_s$ (eV)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="n">Vfb</span><span class="p">,</span> <span class="n">Vfb</span><span class="p">],</span> <span class="p">[</span><span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">ax</span><span class="p">[</span><span class="mi">3</span><span class="p">]],</span> <span class="s1">'k--'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="p">(</span><span class="n">ax</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">-</span> <span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">*</span> <span class="mf">0.5</span><span class="p">,</span> <span class="s1">'$V_</span><span class="si">{fb}</span><span class="s1">$'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">18</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="n">ax</span><span class="p">)</span>
<span class="c1"># create a plot of Qs vs Vgb</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">,</span> <span class="n">Qs</span><span class="p">(</span><span class="n">psis</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'$V_</span><span class="si">{gb}</span><span class="s1">$ (V)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$Q_s$ (C / cm$^2$)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="n">Vfb</span><span class="p">,</span> <span class="n">Vfb</span><span class="p">],</span> <span class="p">[</span><span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">ax</span><span class="p">[</span><span class="mi">3</span><span class="p">]],</span> <span class="s1">'k--'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="p">(</span><span class="n">ax</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">-</span> <span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">*</span> <span class="mf">0.8</span><span class="p">,</span> <span class="s1">'$V_</span><span class="si">{fb}</span><span class="s1">$'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">18</span><span class="p">)</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="n">ax</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
RERERERERERERERERERERERERERERERERERERERERERERERERERERCSH/T/8WgBKGN0IeAAAAABJ
RU5ErkJggg==
"
>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="8.0-Components-of-semiconductor-charge">8.0 Components of semiconductor charge<a class="anchor-link" href="#8.0-Components-of-semiconductor-charge">¶</a></h2><p>For a MOS capacitor with <strong>p-type substrate</strong> (aka nMOS device) the majority carriers are holes and the minority carriers are electrons. As the surface potential changes, the nMOS device experiences three operating regions.</p>
<ul>
<li><strong>Accumulation</strong>: an excess of holes under the gate brought about by negative surface potentials </li>
<li><strong>Depletion</strong>: a defecit of holes under the gate due to a positive surface potential that results in a depletion region composed of ionized acceptors </li>
<li><strong>Inversion</strong>: an excess of electrons under the gate due to a sufficiently positive surface potential </li>
</ul>
<p>The carrier type that is dominant in the accumulation region is the majority carrier, while the minority carrier is dominant in the inversion region.</p>
<p>The semiconductor charges present in the accumulation/depletion regions are folded together into a term labeled $Q_b'$, the bulk (or body) charge per unit area. The inversion charge per unit area, $Q_i'$, corresponds to the minority carrier. It is useful to have expressions for both quantities since they facilitate capacitance calculations. They are also the central components in establishing the drain current of MOSFETs. Obtaining results for $Q_b'$ and $Q_i'$ can be accomplished in two ways:</p>
<ol>
<li>by numerical calculation </li>
<li>by the charge sheet approximation </li>
</ol>
<p>The following subsections develop equations for body/inversion charge per unit area for an nMOS device (meaning p-type substrate). [3] is a good reference for the contents of this section.</p>
<h3 id="8.1-Numerical-calculation-(nMOS)">8.1 Numerical calculation (nMOS)<a class="anchor-link" href="#8.1-Numerical-calculation-(nMOS)">¶</a></h3><p>The inversion charge per unit area, $Q_i'$, is found by integrating the excess minority carrier charge per unit volume, $-q\cdot (n(y) - n_o)$, with respect to distance from the semiconductor surface ($y=0$) to deep in the bulk. The equilibrium substrate electron concentration ($n_o$) and is usually omitted from the integrand since it is so small.</p>
$$\begin{aligned}
Q_i' &= -q \int_{0}^{\infty} (n(y) - n_o) dy
\end{aligned}$$<blockquote><p><strong>NOTE:</strong> $Q_i'$ only has meaning above flatband when an excess of electrons has been induced at the surface. In accumulation, there are no excess minority carriers so $Q_i'=0$ and the above equation will flip sign. This provides motivation to clamp $Q_i'$ to a convenient, near-zero value when $\psi_s < 0$ (for an nMOS device). Admittedly, doing so is optional because the magnitude of $Q_i'$ predicted by the above equation is negligible near and below flatband.</p>
</blockquote>
<p>In order to compute $Q_i'$, a change of variables can be made from $y$ to $\psi$, where the latter is the potential that varies with distance from the surface. This change of variables is enabled by using $E = -d\psi/dy$.</p>
$$\begin{aligned}
Q_i' &= q \int_{\psi_s}^{0} \frac{n(\psi) - n_o}{E(\psi)} d\psi
\end{aligned}$$<p>From Section 4.0, $n(\psi)$ is known. The quantity $E(\psi)$ can be determined from the process of obtaining $E_s$ that is described in Section 6.0. To accomplish this, one changes the limits of integration from $[\psi_s, 0]$ to $[\psi, 0]$ so that the solution is identical to $E_s$ but $\psi_s$ replaced with $\psi$. The below must be numerically integrated.</p>
$$\begin{aligned}
Q_i' &= q n_o \int_{\psi_s}^{0} \frac{e^{q\psi/kT} - 1}{\mbox{sign}(\psi) \sqrt{\frac{2q}{\epsilon_s} f(\psi)}} d\psi
\end{aligned}$$<p>The final step, intended for numerical computation, is to ensure that $Q_i'$ smoothly transitions toward zero below flatband while not changing sign. To accomplish this, one sends $Q_i'$ through the smoothing function $S_n(f)$ written in Section 2.0. Such an effort is usually not done because the magnitude of $n$ is negligible in this region</p>
<p>An expression for bulk charge per unit area is found in a similar manner. However, the integrand is $q \cdot (p(y) - p_o)$. If $p_o$ were left out of the integrand then the resulting integral would not be the bulk charge -- it would be the total number of holes times $q$ in an infinitely thick substrate (because of the assumptions stated in Section 6.0). Clearly, that would be a non-sensical result.</p>
<p>The bulk charge is unique relative to the inversion charge in that it undergoes a sign change at flatband. Below flatband, $Q_b' > 0$ as it represents hole accumulation. Above flatband, $Q_b' < 0$ as it represents hole depletion and the resulting depletion region made up of negatively charged, ionized acceptors.</p>
$$\begin{aligned}
Q_b' &= q \int_{\psi_s}^{0} \frac{p(\psi) - p_o}{E(\psi)} d\psi \\
&= -q p_o \int_{\psi_s}^{0} \frac{e^{-q\psi/kT} - 1}{\mbox{sign}(\psi) \sqrt{\frac{2q}{\epsilon_s} f(\psi)}} d\psi
\end{aligned}$$<p>Both $Q_i'$ and $Q_b'$ are zero at $\psi_s=0$, so the indicator function is used in code to avoid a zero/zero condition.</p>
<h4 id="8.1.1-Reasons-for-including-$n_o$-in-$Q_i'$">8.1.1 Reasons for including $n_o$ in $Q_i'$<a class="anchor-link" href="#8.1.1-Reasons-for-including-$n_o$-in-$Q_i'$">¶</a></h4><p>Without the $n_o$ in the integrand, $Q_i'$ will never change sign, which is desirable. However, excluding $n_o$ causes a singularity to appear at $\psi_s=0$ because $E(\psi=0)=0$ is in the denominator of the $Q_i'$ function. One could avoid this programmatically by returning a zero instead of the default behavior, which is to return a NaN. However, the resulting function would not be smooth when $\psi_s = 0$. Admittedly, smoothness is not an important concern since $Q_i'$ is so small at this point. Therefore, the reasons for including $n_o$ are weak and were created to justify the author's annoyance with an extremely minor problem.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [19]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">n</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psi</span><span class="p">:</span> <span class="n">n_o</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">psi</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="n">p</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psi</span><span class="p">:</span> <span class="n">p_o</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="n">psi</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="n">E</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psi</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">psi</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">q</span> <span class="o">/</span> <span class="p">(</span><span class="n">e0</span> <span class="o">*</span> <span class="n">es</span><span class="p">)</span> <span class="o">*</span> <span class="n">f</span><span class="p">(</span><span class="n">psi</span><span class="p">))</span>
<span class="n">Qi</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">Qb</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="c1"># the psis values earlier solved from the SPE are reused</span>
<span class="k">for</span> <span class="n">psis_current</span> <span class="ow">in</span> <span class="n">psis</span><span class="p">:</span>
<span class="c1"># One can either manually code a numerical integration routine</span>
<span class="c1"># or call 'quad' from the scipy module. </span>
<span class="c1"># The indicator function is used to avoid a 0/0 condition.</span>
<span class="c1"># - by including it, the result is 0/1</span>
<span class="c1"># - when psi != 0, then the indicator function is zero</span>
<span class="k">if</span> <span class="n">device_type</span> <span class="o">==</span> <span class="s1">'nMOS'</span><span class="p">:</span>
<span class="c1"># Qi</span>
<span class="n">integrand</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psi</span><span class="p">:</span> <span class="n">q</span> <span class="o">*</span> <span class="p">(</span><span class="n">n</span><span class="p">(</span><span class="n">psi</span><span class="p">)</span> <span class="o">-</span> <span class="n">n_o</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">E</span><span class="p">(</span><span class="n">psi</span><span class="p">)</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psi</span><span class="p">))</span>
<span class="n">result_i</span><span class="p">,</span> <span class="n">error</span> <span class="o">=</span> <span class="n">quad</span><span class="p">(</span><span class="n">integrand</span><span class="p">,</span> <span class="n">psis_current</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">result_i</span> <span class="o">=</span> <span class="n">Sn</span><span class="p">(</span><span class="n">result_i</span><span class="p">,</span> <span class="mf">1e-19</span><span class="p">)</span>
<span class="c1"># Qb</span>
<span class="n">integrand</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psi</span><span class="p">:</span> <span class="o">-</span><span class="n">q</span> <span class="o">*</span> <span class="p">(</span><span class="n">p</span><span class="p">(</span><span class="n">psi</span><span class="p">)</span> <span class="o">-</span> <span class="n">p_o</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">E</span><span class="p">(</span><span class="n">psi</span><span class="p">)</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psi</span><span class="p">))</span>
<span class="n">result_b</span><span class="p">,</span> <span class="n">error</span> <span class="o">=</span> <span class="n">quad</span><span class="p">(</span><span class="n">integrand</span><span class="p">,</span> <span class="n">psis_current</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># Qi</span>
<span class="n">integrand</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psi</span><span class="p">:</span> <span class="o">-</span><span class="n">q</span> <span class="o">*</span> <span class="p">(</span><span class="n">p</span><span class="p">(</span><span class="n">psi</span><span class="p">)</span> <span class="o">-</span> <span class="n">p_o</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">E</span><span class="p">(</span><span class="n">psi</span><span class="p">)</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psi</span><span class="p">))</span>
<span class="n">result_i</span><span class="p">,</span> <span class="n">error</span> <span class="o">=</span> <span class="n">quad</span><span class="p">(</span><span class="n">integrand</span><span class="p">,</span> <span class="n">psis_current</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">result_i</span> <span class="o">=</span> <span class="n">Sp</span><span class="p">(</span><span class="n">result_i</span><span class="p">,</span> <span class="mf">1e-19</span><span class="p">)</span>
<span class="c1"># Qb</span>
<span class="n">integrand</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psi</span><span class="p">:</span> <span class="n">q</span> <span class="o">*</span> <span class="p">(</span><span class="n">n</span><span class="p">(</span><span class="n">psi</span><span class="p">)</span> <span class="o">-</span> <span class="n">n_o</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">E</span><span class="p">(</span><span class="n">psi</span><span class="p">)</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psi</span><span class="p">))</span>
<span class="n">result_b</span><span class="p">,</span> <span class="n">error</span> <span class="o">=</span> <span class="n">quad</span><span class="p">(</span><span class="n">integrand</span><span class="p">,</span> <span class="n">psis_current</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">Qi</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">hstack</span><span class="p">((</span><span class="n">Qi</span><span class="p">,</span> <span class="n">result_i</span><span class="p">))</span>
<span class="n">Qb</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">hstack</span><span class="p">((</span><span class="n">Qb</span><span class="p">,</span> <span class="n">result_b</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">semilogy</span><span class="p">(</span><span class="n">Vgb</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">Qi</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'$V_</span><span class="si">{gb}</span><span class="s1">$ (V)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$|Q_i|$ (C / cm$^2$)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">,</span> <span class="n">Qb</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'$V_</span><span class="si">{gb}</span><span class="s1">$ (V)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$Q_b$ (C / cm$^2$)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="c1"># compare the sum of Qb, Qi to Qs</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">6</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">[::</span><span class="mi">4</span><span class="p">],</span> <span class="n">Qs</span><span class="p">(</span><span class="n">psis</span><span class="p">)[::</span><span class="mi">4</span><span class="p">],</span> <span class="s1">'.'</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Qs'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">,</span> <span class="n">Qb</span> <span class="o">+</span> <span class="n">Qi</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'Qb + Qi'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s1">'best'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'$V_</span><span class="si">{gb}</span><span class="s1">$ (V)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$Q_s$ (C / cm$^2$)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhMAAAFcCAYAAAByRTwAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmcFNW5//EPDkIUlxHFBRhpoqigSGsUXC8dNQmoCYlK
jAoqKtH8rpiYexM0et1u4nZzg0mMWxDGEAUlJkaucY02orgNcRQVFBJQGBxQFkVgRGB+fzzVTtP2
zHT1VHd1nfq+X69+zZya6qrz0Mg8nvPUOSAiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi
IiIiIiLSjqqwOxCyTsAvgG8DPYDXwu2OiIhI9GwTdgdC9m2gF7ARWBpyX0RERCREk4DlwNyc48OA
+cACYHye940HxnrfTy9Z70RERBzmysjEZCxxyFYF3OodHwCcAfQHRgMTgJ7YaMQa7/wtZempiIiI
VKwEW49MHAk8ltW+zHtl2w6YCPwG+EEpOyciIuKqzmF3oIR6AUuy2kuBITnnbAAuaOsiu+66a/PK
lSsD7pqIiEhFW4b9Hi2IK9Mc+TQHcZGVK1fS3Nzs7Ovqq68OvQ+KT/HFMT6XY1N80X9hpQAFczmZ
aABqsto16ImNL1i8eHHYXSgpxRdtLsfncmyg+OLG5WSiDuiH1VJ0AU4HHg6zQyIiIi5yJZmYCswG
9sPqJMYAm4CLgceBt4D7gXlhdbBSnXvuuWF3oaQUX7S5HJ/LsYHii5tOYXcgApq9+SMREZFY6NSp
E/jIEVwZmZAipdPpsLtQUoov2lyOz+XYQPHFjcuPhoqIiFS0TZvg44/ho4/s68cfw+bNkEqF3TN/
NM3RPk1ziIjIF2zZAmvXwpo1+V8ffbT1K3MsO3n49FPYcUfYeWd77bQTJBIwZUq4sfmd5lAy0T4l
EyIijmputl/qq1Zt/Vq9uvXXmjX2de1a2H572GUXqK621847b/018332a6edWr7ffnvoVIG/iZVM
BM/pZCKdTpOK2niaD4ov2lyOz+XYIJz4Nm+GlSvhww+3fmWOrVxpr1WrWr5fvdp+oXfvbq9ddvni
1+xXdbV9ffPNNCeemKKzo8UCfpMJR/8YREQk6rZssV/4K1bA8uX2dcUK+OCDrb//8EP7+tFH9su+
Rw/YbTd77bqrfd1zTzjwQGtnXplkoUsX/31bsgRnE4liaGSifU6PTIiIlNsnn8CyZfD++/ZqbGz5
2thoicPy5ZYk7LQT7LEH7L77F189emz92mUXqKoKOzo3aJojeEomREQKsHmzJQFLl7a8GhpaXsuW
2WvzZujZE/bay1577tnydc89LXnIJBDbbht2VPGkZCJ4TicTmreNNsUXXVGMbd06ePddWLzYXu+9
Z8P9771nr/fft6mDmhro2jVNMpmiVy8+f/Xsaa+ddqrMokM/ovj5+aGaCX+OAc7C/hwGAEeH2x0R
kfBs3myjCf/8JyxcCIsWwb/+ZV8XLbLpiT597NHFPn1g771h+HBLHvbe2xKGTP1BOh29tRKkeBHP
DQMzAtgd+H2enzk9MiEi8dLcbFMR8+fDO+9s/Xr3XStM3Gcfe335y/bq29dee+wR/REFKUxcpzkm
AScBK4CBWceHAbcAVcBE4KZW3n8/cB6wLs/PlEyISOQ0N1t9whtvtLzmz7dXVRUccADsvz/st5+9
+vWzBGK77cLuuVSCuO7NMRlLHLJVAbd6xwcAZwD9gdHABKCnd97ewEfkTySc5/r68oov2lyOL8jY
Pv0U5syBSZPgkktg6FCrXTj0ULj5ZqtnOPJI+37BAntK4rnn4O67Yfx4+M534KCDgk0kXP7swP34
/HKlZmIWkMg5NhhYCCz22tOw6YwbgeyFSs/DRjZERCre5s3w5pvw8stQVwevvALz5tmoQjJpr299
Cw4+2J6GECkHV6Y5wJKJGbRMc5wGfAMY67VHAUOAcT6v2zxo0CCSySSJRILq6mqSyeTnVbyZ7FRt
tdVWuxTtDRtgm21SPP88PPJImvnzoaYmxeDBUF2dZv/9YcyYFNtvXxn9VTua7XQ6TW1tLY2NjTQ1
NTFz5kyIYc0EfDGZOBWb4uhwMqGaCREplw0bYNYseOYZeyJi7lz4ylfgmGPgqKPgiCOsSFKklOJa
M5FPA1CT1a4BlobUl4qVyUxdpfiizeX4smN75x349a/tMcvdd4drr7VHLK+/3paJnjkTfvELOOmk
6CQSLn924H58frlSM5FPHdAPG7FYBpyOFWGKiISqudnWcXj6aXjwQdt46qST4Pzz4b77bFlokShx
ZZpjKjAU2BV7PPQq7AmP4bQ8Gno3cEMR19Y0h4gEYtEi+MMfYMoU28TqlFPg1FNhyBDYxuVxYomc
uK4zUUpKJkSkaE1NcP/9UFtr9Q9nnAHnnGN1EFoASiqVaibEF9fn/RRftEU5vg8+gOuus6Wnp02D
iy+2za5++1s47DCYOTMddhdLKsqfXSFcj88vJRMiIgF67z246CJbVXLJEquLePRRm87o2jXs3omU
hgbZ2qdpDhFp10cfwY03wl13WTJxySW2l4VIFGmaQ0SkjDZtgttus30uli+H11+3xziVSEicKJmI
Odfn/RRftFV6fIsWwbHHwvTp8PjjtjdGr16FvbfSY+soxRcvSiZERIowdao90jlyJPz97zBoUNg9
EgmPaibap5oJEfncJ5/AuHEwe7YlFIceGnaPRILnt2bC5RUwRUQCtXYtDBsGffvalt877BB2j0Qq
g6Y5Ys71eT/FF22VFN8nn8CJJ8KBB9oqlh1NJCoptlJQfPES95GJ3sBvgNXAO8BN4XZHRCrRunW2
d8b++8Mdd2jpa5Fcca+ZGA50B+4FpgHfy3OOaiZEYmz9ejj5ZOjTB+6+W4mExENc15mYBCwH5uYc
HwbMBxYA4/O8bzbwfeDvwGOl7KCIRNOFF8Jee8HEiUokRFrjyn8ak7HEIVsVcKt3fAC2/Xh/YDQw
AegJjAGuBI4HTipXZyuJ6/N+ii/awo7viSfguedsVcuqqmCvHXZspab44sWVmolZQCLn2GBgIbDY
a08DRgA3AlO8Y09j25WfCSwqdSdFJDrWr4cf/MBWt+zWLezeiFQ2V5KJfHoBS7LaS4EhOee8DpzW
3oWSySTJZJJEIkF1dTXJZJJUKgW0ZKdRbWeOVUp/FJ/iq5T4rrsO+vRJs912AMFfP5VKhf7nW8q2
4otWO51OU1tbS2NjI01NTfjlUgFmApgBDPTap2JTHGO99igsmRjn87oqwBSJmddfhxNOgLlztceG
xFNcCzDzaQBqsto12OiEZMlkpq5SfNEWRnybN8P3vw/XX1/aREKfXbS5Hp9fLicTdUA/bMSiC3A6
8HCYHRKRynfnndClC5x3Xtg9EYkOV6Y5pgJDgV2BFVhR5WRsHYlbsCc77gZuKOLamuYQiYnmZujX
D+691zbxEokrv9McriQTpaRkQiQmZs+2EYl586CT/nWUGFPNhPji+ryf4ou2csf3xz/C6NHlSST0
2UWb6/H55fKjoSIiBdu4ER54AOrqwu6JSPRoIK99muYQiYGHHoIJE2DmzLB7IhI+TXOIiBThj3+E
UaPC7oVINCmZiDnX5/0UX7SVK77Vq+HJJ2HkyLLcDtBnF3Wux+eXkgkRib3p0+HrX4fq6rB7IhJN
qplon2omRBx37LHwk5/At74Vdk9EKoPWmQiekgkRhy1aBIMHQ0ODrXwpIirAFJ9cn/dTfNFWjvju
vRe++93yJxL67KLN9fj8insyMQC4H7gN22VURGLmwQfhjDPC7oVItMV9muPHwMvAc8BfgRF5ztE0
h4ij1qyBmhpYuVJTHCLZ4jrNMQlYDszNOT4MmA8sAMbned8U4HvAzdgmYSISI7NnW72EEgmRjnEl
mZiMJQ7ZqoBbveMDgDOA/sBoYALQE/gAuBi4HPiwXJ2tJK7P+ym+aCt1fLNm2ZMcYdBnF22ux+eX
K8nELGB1zrHBwEJgMfAZMA2bxpgCXAosA/oAdwL3YKMTIhIjzz4bXjIh4hKXN/rqBSzJai8FhuSc
8y5wYXsXSiaTJJNJEokE1dXVJJNJUqkU0JKdRrWdOVYp/VF8iq9c8W3YAHPmpNm4EaD88aVSqdD/
fBWf4su00+k0tbW1NDY20tTUhF8uFWAmgBnAQK99KjbFMdZrj8KSiXE+r6sCTBEHzZwJ48fDiy+G
3RORyhPXAsx8GoCarHYNNjohWTKZqasUX7SVMr4w6yVAn13UuR6fXy4nE3VAP2zEogtwOvBwmB0S
kcqhegmR4LgyzTEVGIo93rkCuAp7wmM4cAv2ZMfdwA1FXFvTHCKO2bQJune3pbR31UPhIl+gvTmC
p2RCxDF1dTBmDMzNXZlGRADVTIhPrs/7Kb5oK1V8YddLgD67qHM9Pr+UTIhI7KheQiRYmuZon6Y5
RBzS3Ay77w6vvgq9e4fdG5HK5HeaI6hFq3bDVn05BNgDqAbWYPtl/ANIAysDupeISNHmz4cdd1Qi
IRKkjkxzbAucie242Qg8gO1xcR5wivf1cmA6llTMwvbHcHnVzchxfd5P8UVbKeKrhHoJ0GcXda7H
51exv9jPBq7HNssCexzzBWAeNgLxMbAT9qjmAOBI4GjvdTPwM2yPDBGRsnr2WcharVtEAlBMzcTL
wGHYaMQfsU2y3izgfQOBc4CzsKmQV/jiXhmVSDUTIg5JJODxx2H//cPuiUjlKsc6E+8DPwfuwnbj
9KsL8H1sdKJnO+dWAiUTIo5obIQBA2DlSuik8nORVpVjnYl9gN9RXCIBsBG4Fdi3yPdLgFyf91N8
0RZ0fC+9BIMHV0Yioc8u2lyPz69ikon1Ad07qOv40ReYiBWFAnTDpmnuwopJRcRhL78MQ6IwuSoS
MRWQn4diOjASGA2sAh4BpgHfy3OupjlEHHHCCfDjH8OJJ4bdE5HKFpfltCdhj5vmrqw/DJgPLADG
F3CdXsAS7/vNgfVORCrOli3wyis2zSEiwYpqMjEZSxyyVWG1GMOwx1HPAPpjow8TyF/suRSo8b6P
6p9Fh7g+76f4oi3I+ObPhx49YLfdArtkh+izizbX4/Mrqr9AZwGrc44NBhYCi7Hi0GnACGw9i0uB
ZUB34A5spc7xwJ+BU4HbgIfL0G8RCclLL6leQqRUXFqNMnvKAmzUIfefjlXARTnHzmvvwslkkmQy
SSKRoLq6mmQyScpb9SaTnUa1nTlWKf1RfIqvVPG99BJ0754mna6M+FKpVOh/vopP8WXa6XSa2tpa
GhsbaWpqwq8oF2AmgBnYYlhgIwzDgLFeexSWTIzr4H1UgCnigEMOgTvu0OiESCHiUoCZTwMt9Q94
3y8NqS+RkclMXaX4oi2o+Navh3fegWQykMsFQp9dtLken18uJRN1QD9sxKILcDqqgxARYM4cOOgg
6No17J6IuKmQIYyzgAuxTbtmAVcCH3o/Ox/YH9gAXF2KDrZiKjDU69MK4CrsCY/hwC3Ykx13AzcE
cC9Nc4hE3C9/Ce+9B7/5Tdg9EYmGoPfmuAD4Lba514dAEtgBOBnbqAvsF/gjuDXKkU3JhEjEjRwJ
3/42nHVW2D0RiYagayZGYWs2DMUKHPfFRikmA4d65+g3bYS5Pu+n+KItqPgq8bFQfXbR5np8frWX
TLwELMpqNwMPASls189BpemWiEgw3n/fCjD32Sfsnoi4q70hjOu81+7YOg6vZP1sW+BaoAm4Bk1z
iEgFeughuOsu+Nvfwu6JSHQEPc1xO/C/2GjEjJyffYaNTqwENhXeRRGR8qnEKQ4R17SXTLwP/Ah7
ouMrrZzzOzTdEVmuz/spvmgLIr5KTSb02UWb6/H5Vchy2s3YLpxtmRdAX0REArV5M9TVaadQkVIL
cjntvbGnPvYCvtTGedcFeM9yUM2ESES98QaccoqtfikihfNbMxHERl+dsamOCwq4cTPRSyZEJKJe
fBGOOCLsXoi4L4gnMK7BNtfajC1f/StangLJ95IK4vq8n+KLto7GV6n1EqDPLupcj8+vIEYmRgPr
gaOB1wK4Xin1Ba4AdgZG5mmLiENefBEuuijsXoi4L4iaiSbgKWyJ7aiYztbJQ247m2omRCJo7VrY
ay9YvRq23Tbs3ohESxhbkC8BPg3gOn5MApYDc3OODwPmY0+fjC9zn0Skgrzyim05rkRCpPSCSCbu
x57i2DGAaxVqMpY4ZKsCbvWODwDOAPpj0zATgJ5l7F9kuD7vp/iirSPxVXK9BOizizrX4/MriGTi
F8C/gP/DtiMvh1nA6pxjg4GFwGJsdc5pwAhgCnApsAzoDtyB7X46Pk9bRBzx4ouVnUyIuCSodSZ2
xvbt6Au8CywFtrRy7nEB3TOBLfE90GufBnwDe7IEbMfTIcC4Dt6nedCgQSSTSRKJBNXV1SSTSVKp
FNCSnaqtttqV0x46NMVee8Gvf51mjz3C74/aald6O51OU1tbS2NjI01NTcycORN85AhBJBM9gKeB
Aws8P6gNwRJsnUycik1xBJ5MqABTJFoWL4Yjj4Rly6BTkEvzicREGAWYN2OJxNvYdMK3sNGHfK+v
BnC/1jQANVntGmyERNqQyUxdpfiirdj4XnrJFquq5ERCn120uR6fX0GsM3Ei0AgcCawJ4HrFqgP6
YSMWy4DTsSJMEYkZ1UuIlFcQefs64G+Ud9GnqdgTJLsCK4CrsCc8hgO3YE923A3cEMC9NM0hEjFH
HQXXXw/e1LCI+OR3miOIZKIO+JAvPqrpCiUTIhGycSPssgssXw477BB2b0SiKYyaiVuBFOV7LFQC
5Pq8n+KLtmLie+012Hffyk8k9NlFm+vx+RVEMlEL/Bp4Bts5tHcA1xQRKYrqJUTKL4hpji3Y1uKZ
a7U3J1AVwD3LSdMcIhEyahQcdxycd17YPRGJrjCmOXJv2Kmdl4hIyWhkQqT8gkgmtvH5kgri+ryf
4os2v/F9+CF88AEccEBp+hMkfXbR5np8fumXu4g448UXYfBgqIraZKpIxGnaoX2qmRCJiCuusETi
uuvC7olItIVRMzEc25ujraWyj/PO+VoA9xMRyWv2bNuTQ0TKK4hkYgxwOLZraGtewbYIHxPA/SRA
rs/7Kb5o8xPfpk1QV2d7ckSBPrtocz0+v4JIJr4CvAZ80sY5a4F6LKEIU19gIjDda48A7gKmoVET
kUibOxd697bVL0WkvIKomVgPPASc2c55U4FvApWwLt10tt5LpBr4JbboVi7VTIhEwG23wZw5cPfd
YfdEJPrCqJnYCOxcwHk7YwtcBWESsByYm3N8GDAfWACM93G9K7FlwUUkol54QfUSImEJIpmYBxxD
2wnFTsDRwDsB3A9sh9DcjcWqsIRgGDAA2368PzAamAD0zHOdTsBNwKPYNEzsuD7vp/iizU98UUsm
9NlFm+vx+RVEMvEgsCP2C75rnp93xUYSdvTODcIsYHXOscHAQmAx8BlWBzECmAJcCiwDugN3AEng
MuBi4HjgNODCgPomImW2YoUtWNW/f9g9EYmnIGomugFzgP2ARcC92FQDwAHAKCCB/aI/lLYLNf1I
ADOAgV77NOAbwFivPQoYAozr4H2aBw0aRDKZJJFIUF1dTTKZJJVKAS3Zqdpqqx1e++OPU/zud3D5
5ZXRH7XVjlo7nU5TW1tLY2MjTU1NzJw5E3zkCEEtWtUH+Av2f/z51AOnYKMGQUmwdTJxKjbFEXgy
oQJMkcp2+eXQtStcc03YPRFxQ1gbfb0LHIYlDHcBjwOPAXd6x75CsIlEPg1ATVa7Blha4ntGXiYz
dZXii7ZC44tavQTos4s61+Pzq3OA19qCPSL6UIDX9KMO6IeNWCwDTseKMEXEYZs22SOh2ilUJDxR
3ZtjKjAU2BVYAVyFFYAOB27Bnuy4G7ghgHtpmkOkgv3jHzB6NLz5Ztg9EXGH32mOIEcmyqm1EYdH
vZeIxEQUpzhEXKMtyGPO9Xk/xRdthcQ3e3Y0kwl9dtHmenx+KZkQkUjTyIRI+KJaM1FOqpkQqVDL
l8MBB8DKlbCN/tdIJDBhPRoqIlJ2s2fbluNKJETCVcx/gscG3gsJjevzfoov2tqLb/ZsOPro8vQl
aHH/7KLO9fj8KiaZmAk0YgtSDSO6T4SISMQ9/3x0kwkRlxRTM/Fr4DtAb6/9EfA34M/YY5nrg+la
xVDNhEgFamqC3Xazuolu3cLujYhbylEz8UNgb2zfi5uA5di6D9OBD7AVMM8Gdini2iIiBamrs11C
lUiIhK8jZUuvAJdjO4MehK1C+TbwLaAWmwp5EvgBsFeHeikl4/q8n+KLtrbie/55OOqo8vUlaHH+
7Fzgenx+BVUD/Rbwc2yL8S8D/4klG8cBvwOWALOBnwD7BHTPYvQFJmKjKGCJ0O3AA8D5YXVKRPxT
vYRI5Sj1OhN7AN/Gdg79Klas2YwlFb8q8b3bMh0YmdXeBpgGfDfPuaqZEKkwzc3Qowe89hr06hV2
b0TcU2nrTCzHnvr4BrA7cA7wMLYRV0dM8q49N+f4MGA+sAAYX+C1vgk8giUTIhIBb78NO+ygREKk
UpRzqZc1wBTsSZD/6eC1JmOJQ7Yq4Fbv+ACsKLQ/MBqYAPRs5VozsN1Gz+lgnyLJ9Xk/xRdtrcXn
whRHXD87V7gen19RXSNiFpDIOTYYWAgs9trTgBHAjVgSA9AduB5IApcBL2BTMF8CnmntZslkkmQy
SSKRoLq6mmQySSqVAlr+QkW1XV9fX1H9UXyKr5D4nn8+xdFHh98/tdV2pZ1Op6mtraWxsZGmpib8
ivLeHAlsVGGg1z4Nm04Z67VHYY+vjuvgfVQzIVJh9t8fHngABg0Kuycibqq0moly0m98kRj48ENo
bISDDgq7JyKS4VIy0QDUZLVrgKUh9SUyMsNcrlJ80ZYvvtmzbXOvqo6WcYcsjp+dS1yPzy+Xkok6
oB82/dEFOB17ckREHOJC8aWIa6JaMzEVGArsCqzAVt+cjD2VcQv2ZMfdwA0B3Es1EyIV5Jhj4Npr
4fjjw+6JiLv81kxENZkoJyUTIhXi009h112tZmKHHcLujYi7ylWAuTdwMLBnAefu6Z3bu70Tpfxc
n/dTfNGWG9+cOfYkhwuJRNw+O9e4Hp9fxawzsQNWn9AZOKzA85/FtibfB9hQxD1FRHjuOdVLiFSi
YqY5LsQ2x/op8MsC3/MTbLvysVgtQ5RomkOkQnzzm3D22TByZPvnikjxylEz8QhwPLAb8EmB79kR
+BB4HNuiPEqUTIhUgC1bYLfd4K23YM9CJlhFpGjlqJk4GNtevNBEAmAt8DK2jLVUENfn/RRftGXH
98Yblky4kkjE6bNzkevx+VVMMtEDWFLE+xq894qI+DZrFhx7bNi9EJF8ipnm+AR4DNsLw48Hsb0z
olaHrWkOkQrwve/BsGFw7rlh90TEfeWY5mgEDijiffsDy4t4n4jEXHOzRiZEKlkxycQLwADAzzY7
B3nveaGI+wWpLzARmJ51rBtWA3JSKD0Kmevzfoov2jLxLVpkCcWXvxxuf4IUl8/OVa7H51cxycRU
7+sd2B4Y7eninZv93rAsAi7IOfZT4P4Q+iIiBcqMSnTSmr0iFanY/zTTwL8BLwEXAa+1cl4SW5Ni
CPCc954gTMJGElYAA7OOD6Nlb46J2NoW+UwHRgJfA7oDX8IeXX0kz7mqmRAJ2QUXQDIJF18cdk9E
4qFce3PsDjyPrWjZDMzFpgpWZP18MDa90Qn4F3AMVm8RhGOxQtA/0JJMVAFvAydgT468ApyBrdJ5
KPA/wDLv3Ewy8XNsmmMAtjLnd7x4simZEAnZfvvB9OkwaFDYPRGJh3LtzbECOBy4z2sfDJwPXO69
zqfll/xU79ygEgmAWcDqnGODgYXAYuAzYBowApgCXIolEt2xKZckMB640vvZfcBdfDGRcJ7r836K
L9rS6TSNjfDBB3CQnyqtCIjDZ+cy1+Pzq5i9OTLWAKOAq4GTga/Qso7EB9j+HY8A/+xIB33oxdbr
XyzFpleyrcKmZXLd09aFk8kkyWSSRCJBdXU1yWSSVCoFtPyFimq7vr6+ovqj+BRfbnwzZ8LRR6eo
qgq/P2qr7Wo7nU5TW1tLY2MjTU1N+BXlcqYEMIOWEZBTsZqJsV57FJZMjOvgfTTNIRKiH/4QevaE
8ePD7olIfJRrmqMSNQA1We0abHRCRCJM60uIVL5ikonrgZ07eN9q7zpBqgP6YSMWXYDTgYcDvodz
MsNcrlJ80fbII2neeQcOOyzsngTP9c9O8cVLMcnEZdjTGdcAe/t8bx/gWu/9HRm0nArMBvbD6iTG
AJuAi7GdSd/C1o6Y14F7iEjI3nzTEokuXcLuiYi0pZiaiSOA32CPXG4BZgJPYatbzgNWYr/YO2Pb
lA8AjsQe2fw3754vA5d4XyudaiZEQvKzn0FVFfz3f4fdE5F4Kdc6E52wNRx+hCUVGZnfup8CXfPc
40Xg10RrxUklEyIhOeooSySOPz7snojES7kKMJuxtRkGY09MXI9NO2zwbv4l7+sGbOXL67CFo44i
WomE81yf91N80bVuHbz6apojjwy7J6Xh8mcHii9uOrLORMYr3iujG1ZguQZYF8D1RSSGZs+GffeF
7bcPuyci0p4orzNRLprmEAnBlVfa15//PNx+iMRRnNeZEBGHpNMwdGjYvRCRQiiZiDnX5/0UXzSt
Xw/19bBpUzrsrpSMq59dhuKLFyUTIlJxXnjBdgjdbruweyIihVDNRPtUMyFSZv/1X7B5M1wf9Dq5
IlIQ1UyISOTNnAnexoYiEgFxSyb6AhOB6V47BcwCbgdiWerl+ryf4oueDRvgH/+wBatcjC/D5dhA
8cVN3JKJRcAFWe0twFpstU7tMCpSAV58EQYOhB12CLsnIlKoqNZMTAJOAlYAA7OODwNuAaqwEYib
Wnn/dGAkFn8zsDvwK2BUnnNVMyFSRldfDRs3wg03hN0TkfiKS83EZCxxyFYF3OodH4DtHdIfGA1M
AHrmuU4mS1hDy14iIhKimTO1voRI1PhdTvtSYKeA+/ARNprgxywgkXNsMLAQWOy1pwEjgBuBKd6x
7tg+Ikk/oCIaAAAYOUlEQVRsK/W3gW9gy3//1mcfnJBOp0k5XOmm+KKlqQnq6uDoo63tWnzZXI4N
FF/c+E0m3gOCnslcG9B1egFLstpLsU3Isq0CLso59pf2LpxMJkkmkyQSCaqrq0kmk5//JcoU4US1
XV9fX1H9UXzxju+OO9LU1MCOO7oZn9pqV2o7nU5TW1tLY2MjTU1N+BXVmgmwkYkZtNRMnIpNcYz1
2qOwZGJcB++jmgmRMrn2Wlv98qbWqp1EpCziUjORTwNQk9WuQU9oiETK009rfQmRKHIpmagD+mEj
Fl2A04GHw+xQFGSGuVyl+KJj/XqYMweOPbblmEvx5XI5NlB8cRPVZGIqMBvYD6uTGANsAi4GHgfe
Au4H5oXVQRHx57nn4JBDtL6ESBRFuWaiXFQzIVIGl10GXbta3YSIhKuSaibOwR7FbM1RwNdKeH8R
iZC//x2OPz7sXohIMUqZTIwDhme1/xt4FbgWq2uYjRVNXljCPkg7XJ/3U3zRsHo1zJ8PQ3Ie5nYl
vnxcjg0UX9z4XWfCj8Ny2puB/wS+B9QDrwAPAAeUsA8iEgHPPmsbe3XVOrQikVTOmonzgeXAI8D2
2NMWJ3vtu8vYD79UMyFSYpdcAr16wfjxYfdERMB/zUS5CzAPxfbAeKHM9+0IJRMiJXbQQVBbC4fl
jmeKSCjCKMDsjG2sdQS2zkNb1/wH0UoknOf6vJ/iq3yNjbBsmT0WmsuF+Frjcmyg+OKmI8nErsDt
2H4Xb2AFlfOB1dgW31/tcO9ExHnPPGO7hFZVhd0TESlWsdMcfbCdO3sD7wLvYxuA9cZ24ATb3vtR
4PvAMu9YN+/nDUXeNwya5hApoQsugEGDYFxHd9ERkcCUa5pjCjAX6A/0xdaMOBhbV+JA4CfY9t4n
Ystcf8V73ybgx8BD3vtEJOaeflrrS4hEXTHJxCFYUvBNLGHINQ/4X6yO4ixgC/AYsD/wKfAf3vvn
AIOKuH9H9AUmYtMwYPH/AvgNcHaZ+1IRXJ/3U3yVbdEi2LAB+vfP//Oox9cWl2MDxRc3xSQTRwIT
sCShPVOxEYvMXhnbescfxKY7Jhdx/45YBFyQ1R4B9AI2oh1GRcru6afhuOOgkxb2F4m0Yv4Tvgyr
hXjNx3u6As9hycWvsNUwrwDWATsW0YdJwEnACmBg1vFhwC1AFTYCcVMr758OjATGYwWkv886lks1
EyIlcuaZNsVx/vlh90REspWjZmI5UOPzPftjj4VeiSUhV3jH7yvi/mAjGsNyjlUBt3rHBwBnYDUd
o7GRlJ55rrMUWON9X8hIi4gEZMsWeOopOOGEsHsiIh1VTDLxAnCmj/PHYktr34RNb/yKljUpit2X
Yxb2CGq2wcBCYDHwGTANm8aYAlyKPVHSHbgDq/sYD/wZ+AZWM5Eusi+R5vq8n+KrXK+9Bt27Q58+
rZ8T5fja43JsoPjippi9OeZjj4Yeha0t0Z4DgR953z+KPT76chH3bU8vYElWeymQs20Qq4CLco5d
QDuSySTJZJJEIkF1dTXJZJJUKgW0/IWKaru+vr6i+qP44hPfE0/AgAFp0mk341Nb7Si10+k0tbW1
NDY20tTUhF/Flj19FbgXSygWt3PuhdhTHLXY1EMNcHOR982WAGbQUjNxKjbFMdZrj8KSiY4+va6a
CZESOP54uPRSOPnksHsiIrnKtc7EM1gR5ItAe0+I3wmsB+4BrmPr0YMgNbB1LUcNekJDpCKtWwcv
v2wrX4pI9HVkOe3/wpKKJ7HHPvOsrP+5B4AbsFUyH+/APdtSh9VhJIAu2K6kD5foXs7IDHO5SvFV
pmefhUMPhR3beZYrqvEVwuXYQPHFTTE1ExnN2FTCQuBnwGnA69jUw0vYMttNWI3EcODfseLLVR24
Z8ZUYCi2P8gS4CrsCY+LsWSlCtvWfF4A9xKRgD3xBHz962H3QkSCEtRSMSngt1ixZUZzzvVvBX7o
HY8S1UyIBOzAA23L8cMPD7snIpKP35qJINed64TVT3wH24ujOzYK8SpWfPlSgPcqJyUTIgFqaICD
D4YVK7RTqEilKlcBZj7NwFPYdMYRwH7e1x8Q3UTCea7P+ym+yvPkk7ZQVSGJRBTjK5TLsYHii5sg
kwkRkXapXkLEPdpep32a5hAJyJYtsMceMGcO7L132L0Rkdb4nebw+zTHpcBOPt/Tno+wzblExHH1
9bDbbkokRFzjd5rjPWzFyyBf7/nsgwTI9Xk/xVdZnngCvva1ws+PWnx+uBwbKL648Tsy8WBJeiEi
sfD44/DjH4fdCxEJmmom2qeaCZEAfPwx9OoFjY3QrVvYvRGRtoT5aKiISKueegqOOkqJhIiL4pZM
9AUmAtO99jHA7cDvgefD6lSYXJ/3U3yV429/gxNP9PeeKMXnl8uxgeKLm7glE4uAC7Laz2GLav0f
tkqniJRAc3NxyYSIRENUayYmAScBK4CBWceHYY+ZVmEjEDe18v7pwMis9v3AecC6POeqZkKkg+rr
YeRIWLAg7J6ISCHiUjMxGUscslVhm4kNAwYAZwD9gdHABKBnK9faG1vrIl8iISIB0KiEiNuimkzM
AlbnHBuMbYe+GPgMmAaMAKZgi20twzYfuwM4BBjvve88bKQjllyf91N8laHYZCIq8RXD5dhA8cWN
33UmKlkvYElWeykwJOecVcBFOceuae/CyWSSZDJJIpGgurqaZDJJKpUCWv5CRbVdX19fUf1RfO7F
9/HH8PrrKYYOdTM+tdV2oZ1Op6mtraWxsZGmpib8imrNBEACmEFLzcSp2BTHWK89CksmxnXwPqqZ
EOmAadPg3nthxoyweyIihYpLzUQ+DUBNVrsGG50QkRCpXkLEfS4lE3VAP2zEogtwOvBwmB2Kgsww
l6sUX7i2bIHHHis+maj0+DrC5dhA8cVNVJOJqcBsYD+sTmIMsAm4GHgceAt73HNeWB0UEairg913
hz59wu6JiJRSlGsmykU1EyJFuuYaWL8ebr457J6IiB9xrpkQkQqjegmReFAyEXOuz/spvvAsWwYL
F8LRRxd/jUqOr6Ncjg0UX9womRCRknj4YRg+HLbdNuyeiEipqWaifaqZECnC8OFw3nm2J4eIRIvf
mgklE+1TMiHi08cfQ+/e0NAAO+4Ydm9ExC8VYIovrs/7Kb5wPPYYHHNMxxOJSo0vCC7HBoovbpRM
iEjgHnoIvv3tsHshIuWiaY72aZpDxIeNG2GPPeCtt2CvvcLujYgUQ9McIhKqmTPhgAOUSIjESdyS
ib7ARGC61+4N/Bm4GxgfVqfC5Pq8n+IrvyCnOCoxvqC4HBsovriJWzKxCLggqz0QeBA4HzgklB6J
OKS5Gf76VxgxIuyeiEg5RbVmYhJwErACSwgyhgG3AFXYCMRNrbx/OjAS2BnbWXQTMAWozXOuaiZE
ClRXB6NGwfz5YfdERDoiLjUTk7HEIVsVcKt3fABwBtAfGA1MAHrmuc4Y4ErgeCw5EZEO0FMcIvEU
1WRiFrA659hgYCGwGPgMmAaMwEYcLgWWAd2BO4AkViPxNPBD4HZsCiR2XJ/3U3zlFfQUR6XFFySX
YwPFFzedw+5AgHoBS7LaS4EhOeesAi7KOXZaexdOJpMkk0kSiQTV1dUkk0lSqRTQ8hcqqu36+vqK
6o/ii2588+bB+++n2bABwL341Fbb5XY6naa2tpbGxkaamprwK6o1EwAJYAYtNROnYlMcY732KCyZ
GNfB+6hmQqQAl18OmzfDzTeH3RMR6Si/NRMujUw0ADVZ7RpsdEJESmzzZpgyxZbRFpH4iWrNRD51
QD9sxKILcDr2pIa0ITPM5SrFVx7PPGOrXh50ULDXrZT4SsHl2EDxxU1Uk4mpwGxgP6xOYgz2eOfF
wOPAW8D9wLywOigSJ/fcA+ecE3YvRCQsUa6ZKBfVTIi0Ye1aqKmBBQugR4+weyMiQYjLOhMiUiEe
fBCGDlUiIRJnSiZizvV5P8VXevfcA2efXZprV0J8peJybKD44kbJhIgU7d13Ye5cOPnksHsiImFS
zUT7VDMh0oqf/xyWLYPbbgu7JyISpDivMyEiZdTcDH/4g60vISLxpmmOmHN93k/xlc6f/gRdusDg
waW7h8ufn8uxgeKLG41MiIhvy5bBxRfDww9DJ02WisSe/hlon2omRLI0N8Pw4TBkCFx7bdi9EZFS
0DoTIlJSt98Oq1bBlVeG3RMRqRRxSyb6AhOB6V57ALbs9m3YrqOx4/q8n+IL1ttvw1VXWdHlttuW
/n4uf34uxwaKL27ilkwsAi7Iag8Dfgv8P6BEy+6IuGHjRhg9Gq67DvbfP+zeiEgliWrNxCTgJGAF
MDDr+DDgFqAKG4G4qZX3TwdGAj2Aq4H1wFHAMXnOVc2ExNratTBxItxyCxx5JEydqqJLEdfFpWZi
MpY4ZKsCbvWODwDOAPoDo4EJQM881/kA22n0cuDDUnVWJEqam+H99+G552D8eOjbF156yR4FnTZN
iYSIfFFUHw2dBSRyjg0GFgKLvfY0YARwI5BZVqc7cD2QBMZ75/wM6Abc3NYNH3oI3nuv4x2vNAsW
pOnXLxV2N0qmVPGVYrAq95qFtBcuTLPPPqnP2/leW7bYq7kZNm2y12ef2dcNG+CTT2DdOvva2AiL
FkG3brDPPjYSUVcHiUTw8RYinU6TSqXCuXmJuRwbKL64iWoykU8vYElWeykwJOecVcBFOccubO/C
yWSSrl2TQIIuXarp0SNJ794pu8nSNEBk2/X19TQ0VE5/ohRfp07B97ehIf/Pa2ryt+fNq2flSth7
b2svWZKmUyfo08f6l2n37WvthoY0VVWw334pOne2n++2Gxx+eIpu3eDdd9P07AknnmjXS6fTLF4M
iURLG/j8H9FSt+vr68t6P7XVjms7nU5TW1tLY2MjTU1N+BXlAcsEMIOWmolTsSmOsV57FJZMjOvg
fVQzISIisRKXmol8GoCarHYNNjohIiIiJeRSMlEH9MNGLLoApwMPh9mhKMgMc7lK8UWby/G5HBso
vriJajIxFZgN7IfVSYwBNmFPZjwOvIUtRjUvrA6KiIjERZRrJspFNRMiIhIrca6ZEBERkRAomYg5
1+f9FF+0uRyfy7GB4osbJRMiIiLSIaqZaJ9qJkREJFZUMyEiIiJlpWQi5lyf91N80eZyfC7HBoov
bpRMiIiISIeoZqJ9qpkQEZFYUc2EiIiIlFXckokRwF3ANOBrwPbAPd6xM0PsV2hcn/dTfNHmcnwu
xwaKL27ilkz8Ffg+cBG2EdgpwAPesW+F2K/Q1NfXh92FklJ80eZyfC7HBoovbqKaTEwClgNzc44P
A+YDC4Dxbbz/SuBWoDct25RvDriPkbBmzZqwu1BSii/aXI7P5dhA8cVNVJOJyVjikK0KSxCGAQOA
M4D+wGhgAtATKya5CXgUqMcSid7e+6P6ZyEiIhKqzmF3oEizgETOscHAQmCx156G1UjcCEzxjl0C
HA/sBOzrHb8VOAl4uJQdrlSLFy8OuwslpfiizeX4XI4NFF/cRPnR0AQwAxjotU8DvgGM9dqjgCHA
uA7epwEb1RAREYmLZUCvQk+O6shEPqVaDKLgP0wREZE4cqlOoAGoyWrX0FJcKSIiIvIFCbZ+mqMz
8E/veBeswLJ/2XslIiIikTAVm8/5FFgCjPGODwfexgoxLw+nayIiIiL5jQPmAW9gj5e66D+ALUD3
sDsSsP/BPrvXgD8DO4fbnUAUuqZKFNUAzwBvYv+9XRJud0qmCngVKyR3TTXwJ+y/u7eAI8LtTqAu
x/5uzgXuA7qG250Oy7duU3fgSeAd4Ans85QAfBX7g93Wa/cIsS+lUgM8BizCvWTia7TUB93ovaKs
Cht9S2B/J12b0tsTSHrf74CNNroUX8aPgXtx87H0e4DzvO8740YCD/bf3L9oSSDuB84JrTfBOBY4
hK2TiZuBn3rfjyf6/2ZWjAeA48LuRIlNBw7GzWQi23eAP4bdiQ46Ekv8Mi7zXq56CFsfxiW9gaew
/1FxbWRiZ+wXrou6Y8ntLliSNAM4IdQeBSPB1snEfGAP7/s9vXabXHqao5T6Af8GvAikgcNC7U3w
RmBPvrwedkfK4Dzgb2F3ooN6YbVCGUtx9xHmBPZ/TS+F3I+gTQB+gk0ruqYv8AG2UvE/gN9jmyq6
YBXwv8B7WN3eGiwpdM0e2NQH3tc92jgXcGudiY56EsvAcl2B/Tntgs37HY6NVHy5fF0LRFvxXQ58
PetYFBczay2+n9Hyf35XABuxec4oK9WaKpVmB2ze/YfAJyH3JUgnAyuweolUuF0pic7AocDFwCvA
LdjI2VVhdiog+wA/wpLcj7AR3bOw6SpXNROff3NK7lFgaFZ7IbBrSH0J2kFY5rnIe32GLUm+e4h9
KoVzgeeBL4XcjyAcwdbTHJfjXhHmtsDj2D/crrkeG1laBLwPrAP+EGqPgrUnFlvGMcD/hdSXoJ0O
TMxqjwZ+F1JfgpTgi9Mcmf8524sCpjmkMBcC13rf74cNcbnKxZqJYVj19W5hdyQgrq+p0gn75Toh
7I6UwVDcq5kAeBb7txLgGtx5Am4Q9oTRdtjf03uAfw+1R8FI8MUCzMz/oFyGCjADsy22KdhcYA5u
Dk1m/Av3kokFwLvYsPKrwG3hdicQLq+pcgxWS1BPy2eWu0uwK4bi5tMcg7ApDpcex874KS2Pht5D
y1N+UZVZt2kjLes2dcdqQfRoqIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIhE2hHY
olbXZx2b4h2bXOA1bvXO/7PX3h5b2vrlgPooIiIiWSYAjdgv3y3AWmw3yHwrpc4ANnnnrQf+EnBf
OmG/8Fey9aqKKe+eHwPd2rlGV2z3x83ASVnH/927xtkB9VVERESyVGH/576Z9nfMvRNLInYqQT/O
xH7hX5PnZwu9n53bzjW+653XAGyTdXxbbFnhpUR/iWQREZGK9Dz2S/jQNs7ZBVvLv2uJ+vAyNvKx
d56fXYn1L93ONR71zrshz89u9n52ZvFdFBERkdbci/2iPaWNc+4EBpfo/od79/97Kz/vjY2cbAL6
tnJOL++czUC/PD8/0LvHcx3qqUjMbNP+KSIigG1PD7ZdcT7HYjsPlqqIcYT39alWfr4UeBL7d+3c
Vs45G6u7mI3tJpvrTWAFVuTpypb1IiIiFeMC7P/af5vnZ12wX/I7lvD+z3n3T7VxTqYeYnErP5/v
/XxMG9f4i3fOab57KCIiIm06HvslOyPPz66i9L98P8GmJ/Zo45wuwIdYP4/L+dlRtDzxsX0b17je
O+8XRfdUJGY0zSEihVrsfU3kHN8POBj4Uwnv3Y2WBGBlG+dtBO7zvs8dfci0p2OPrbYmc/22khYR
EREpwrbYyMDanOMPAzUlvncvWtauaE+SlvUwMtMu2wMfYf0/up33j/XeX8rkSMQpGpkQkUJ9hq3N
sD0txYnnAjOBJT6ucxbwDvCgj/es8b52BTq3c2699+oGnO4dOxVLLBZgj7i2JbM+xpo2zxKRzymZ
EBE/FmNPQ/TFEopR2AqZftwLzAFm+XjPOlpGJQp5ymKS9/XcnK+FLLe9q/d1eSEdExEREX/+gE0B
fBf7hX14kddZChzm8z3Pkr+wMp9dgCZsWuPr3vs2AnsW8N6HvPNP9dk/kdjSyISI+JFZa+I8rCbh
lSKusS+2r8arPt/3tPf1yALOXY0lBZ2wTcAAHsf2GGnPkRS2kqaIiIgUYQz2i3YJsEMb53XDpj9+
gu2jcSctm2qdD7wBXAL8CPhdgffOFFY+U+D5mRGJzOs7BbxnoHeunykYERER8eGrtL+kNsBjwPe9
77tjUwz7eO17aBk1APvFPbzA+8/Gpi76FHBuJ+Bd7/zl2GZl7fklFt8ZBfZHREREfNqZliShNaex
9QqUNdhTIBn/Av4tq/0s8J8F3v907Jf9tQWe70cXbGfUJbT/xIiIiIiU0JNsPXUxipaFpPbCCiO7
eO3O2IqU3/Vx/ReBVUB1x7r5BRdjicrogK8rIiIiPr3N1qtPTgQu8r4/gq0LL4/Hnuz4ko/rD8am
Lq7vQB9zbQ8sA14K8JoiIiJSpOnY0x5g24KvAAZ47d1p2VW0Cium/F5ZeycigevU/ikiIr70Am7C
Hq3cC3tqo0fWz3+ITXPsiS1edR8iIiIirRiN9rgQERERH8YBV3jfd8Ye+yxkxUoRiTA9/iQiQdoR
m+YYi21NfhMtK1eKiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIFOH/
A2/EP3TNSKiLAAAAAElFTkSuQmCC
"
>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
iIiIJOn/AR69tIB+Ewe/AAAAAElFTkSuQmCC
"
>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="8.2-Charge-sheet-approximation-(nMOS)">8.2 Charge sheet approximation (nMOS)<a class="anchor-link" href="#8.2-Charge-sheet-approximation-(nMOS)">¶</a></h3><p>The charge sheet approximation (CSA) is a well-known and heavily utilized approach to deriving MOS characteristics. It has enabled successful compact models for circuit simulation and leads to the linear and square-law representations of MOSFET drain current that every student of electrical engineering is forced to learn. With it, one can avoid the numerical integrations shown above.</p>
<p>The CSA means that the inversion layer is an infinitesimally thin sheet of charge. Due to this imagined zero-thickness constraint on the inversion layer there can be no change in potential from one side of the charge sheet to the other. Therefore, the region directly below the charge sheet has the same potential as the charge sheet but is devoid of minority carriers. This means that the body charge ($Q_b'$) can be found by solving Poisson's equation just below the charge sheet and removing the minority carrier term from $\rho$.</p>
<p>The result is obtained by the same process already discussed in Section 6.0. The $A$ subscript is used to imply that the CSA was used.</p>
$$\begin{aligned}
\frac{d^2\psi}{dy^2} &= -\frac{q(p - N_a + N_d)}{\epsilon_s} \\
\rightarrow f_A(\psi_s) &= \phi_t p_o \left(e^{-q\psi_s/kT} - 1 \right) + \psi_s \left(N_a - N_d\right) \\
Q_{bA}' &= -\mbox{sign}(\psi_s) \sqrt{2q\epsilon_s f_A(\psi_s)}
\end{aligned}$$<p>Above flatband for an nMOS device when $\psi_s \gg \frac{kT}{q}$, $f_A \approx \psi_s \left(N_a - N_d\right)$. This is the reason that nMOS bulk charge is often written as $Q_{bA}' \approx - \sqrt{2q\epsilon_s N_a \psi_s}$.</p>
<p>With $Q_b'$ known, it can be used to find $Q_i'$ from the fact that the total semiconductor charge is the sum of inversion plus depletion charges.</p>
$$\begin{aligned}
Q_{iA}' &= Q_s' - Q_{bA}'
\end{aligned}$$<p>The above result is not particularly useful for calculation of inversion charge below strong inversion because of the numerical precision problem in subtracting two almost-identical quantities. A better approach involves convenient mathematical manipulation.</p>
$$\begin{aligned}
Q_{iA}' &= \left( Q_s' - Q_{bA}' \right) \cdot \frac{Q_s' + Q_{bA}'}{Q_s' + Q_{bA}'} \\
&= \frac{Q_s'^2 - Q_{bA}'^2}{Q_s' + Q_{bA}'} \\
&= 2q\epsilon_s \frac{f^2 - f_A^2}{Q_s' + Q_{bA}'} \\
&= 2q\epsilon_s \phi_t n_o \frac{e^{q\psi_s/kT} - 1 }{Q_s' + Q_{bA}'}
\end{aligned}$$<p>The above result is subject to a zero/zero condition when $\psi_s=0$. From $Q_{iA}'(0) = Q_s'(0) - Q_{bA}'(0)$ we find that the correct value is zero, and so the indicator function is used in the denominator so that $Q_{iA}'(\psi_s=0)=0$. This makes $Q_{iA}'$ discontinuous at a surface potential where the magnitude is a don't-care, but accomplishes the goal of avoiding a NaN.</p>
<p>Throughout all regions of operation, $Q_{iA}'$ maintains sign and would be monotonic without the $\psi_s=0$ point. Although this behavior is welcome, $Q_{iA}'$ is in error in accumulation where there is no inversion charge (see discussion of $Q_i'$ above). It is tolerated because it is well-behaved (i.e., no singularities and negligible magnitude when invalid). For this reason there is disagreement in the $Q_i'$ plot between the 'CSA' and 'integrated' curves below flatband.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [20]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># the indicator function in the denominator avoids a 0/0</span>
<span class="k">if</span> <span class="n">device_type</span> <span class="o">==</span> <span class="s1">'nMOS'</span><span class="p">:</span>
<span class="n">fA</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="n">psis</span> <span class="o">*</span> <span class="p">(</span><span class="n">Na</span> <span class="o">-</span> <span class="n">Nd</span><span class="p">)</span> \
<span class="o">+</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">p_o</span> <span class="o">*</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="n">psis</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">QbA</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">q</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">*</span> <span class="n">es</span> <span class="o">*</span> <span class="n">fA</span><span class="p">(</span><span class="n">psis</span><span class="p">))</span>
<span class="n">QiA</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">q</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">*</span> <span class="n">es</span> \
<span class="o">*</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">n_o</span> <span class="o">*</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">psis</span> <span class="o">/</span> <span class="n">phit</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">Qs</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">+</span> <span class="n">QbA</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psis</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">fA</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="n">psis</span> <span class="o">*</span> <span class="p">(</span><span class="n">Na</span> <span class="o">-</span> <span class="n">Nd</span><span class="p">)</span> \
<span class="o">+</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">n_o</span> <span class="o">*</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">psis</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">QbA</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">q</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">*</span> <span class="n">es</span> <span class="o">*</span> <span class="n">fA</span><span class="p">(</span><span class="n">psis</span><span class="p">))</span>
<span class="n">QiA</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">q</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">*</span> <span class="n">es</span> \
<span class="o">*</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">p_o</span> <span class="o">*</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="n">psis</span> <span class="o">/</span> <span class="n">phit</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">Qs</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">+</span> <span class="n">QbA</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psis</span><span class="p">))</span>
<span class="c1"># again, reuse the pre-existing psis values</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">7</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">semilogy</span><span class="p">(</span><span class="n">Vgb</span><span class="p">[::</span><span class="mi">4</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">Qi</span><span class="p">)[::</span><span class="mi">4</span><span class="p">],</span> <span class="s1">'.'</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'integrated'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">semilogy</span><span class="p">(</span><span class="n">Vgb</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">QiA</span><span class="p">(</span><span class="n">psis</span><span class="p">)),</span> <span class="n">label</span><span class="o">=</span><span class="s1">'CSA'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s1">'best'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'$V_</span><span class="si">{gb}</span><span class="s1">$ (V)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$|Q_i|$ (C / cm$^2$)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">[::</span><span class="mi">4</span><span class="p">],</span> <span class="n">Qb</span><span class="p">[::</span><span class="mi">4</span><span class="p">],</span> <span class="s1">'.'</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'integrated'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">,</span> <span class="n">QbA</span><span class="p">(</span><span class="n">psis</span><span class="p">),</span> <span class="n">label</span><span class="o">=</span><span class="s1">'CSA'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s1">'best'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'$V_</span><span class="si">{gb}</span><span class="s1">$ (V)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$Q_b$ (C / cm$^2$)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
3H4OERGrqTDwbRrHwIcEBQXxVvxbhIeEc8fCOyz7wbF7O6Dy8292zs/OuYH985NzqTBwk9DgUD7u
/TE//P0Dz33xnNXhiIgEnOTkZJo2bUpUVBQ1atQgPj6eL7/8kvT0dG655RaqV69OdHQ09evX56WX
Xrpg/8TERMLCwvjzz8CeF0dNCW7217G/aDGxBU+1eorhjYd79FwiIt7ky00JY8eO5aWXXmL8+PF0
7NiR8PBwFi9ezMqVK/n777/JyMhg/PjxVKhQgV9++YXNmzfTu3fv0/sfP36catWqUa9ePRISEnjo
oYcszMY16mPgGo8XBgC/7P+F1pNaM6XnFDpc3MHj5xMR8QZfLQwOHz5MrVq1mDRp0jlf9nmuuOIK
nn/+ebp3717gMaZMmcKrr77Ko48+ypgxY/jhhx88GbJHqI+BD6t/UX0+6fcJQ2YPYdOfm7x2Xru3
Ayo//2bn/OycG/h+fmvXriUzM5OePXvmu75Zs2Y8+eSTTJo0id9++y3fbSZPnkz//v3p1q0bW7du
5ZtvvvFkyD5NhYGHXF/7et6Of5suyV3YdXiX1eGIiNjWgQMHuOiiiwgOzv8r7c0332Tw4MG89dZb
NGzYkEsvvZTFixefXr9r1y5SU1Pp27cvUVFRdOzYkSlTpngrfJ+jpgQPG7t2LBO/ncjqW1bjiHR4
9dwiIu5UVFNC0LPu+UoxninZ7+nFixfTtWtXTp48WWBxkOfo0aOMGTOGN954g927d+NwOHjhhReY
MWMG3333HQBJSUk88MADpKWlERrqPzMHqI+Ba7xeGBiGwT8X/5PNf28mZXAKEaERXj2/iIi7+HIf
g5o1azJ58uR8+xic79ixY0RHR/P111/TuHFj6tevz+7du6lQoQIA2dnZHDhwgLlz59KtWzdPh+82
6mPgJ4KCgni94+s4Ih3cOv9Wj/5Q+Xo7YGkpP/9m5/zsnBv4fn4VKlTgueee45577mHevHmcOHGC
rKwsUlJSePTRR3n++efZuHEjp06dIjMzk//+979UrFiR+vXrs3btWn7//Xc2bNjAd999x3fffcfm
zZsZNGhQwDYnqDDwgpDgEJJ6JbHt0Dae/PxJq8MREbGdBx98kLFjx/L8889TpUoVateuzTvvvEPP
nj0JCgpi+PDhVK5cmZo1a7J8+XIWLVpE2bJlmTJlCj169KBhw4ZUqVKFKlWqULVqVf75z3+yaNEi
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
RU5ErkJggg==
"
>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="8.3-Quantified-CSA-error">8.3 Quantified CSA error<a class="anchor-link" href="#8.3-Quantified-CSA-error">¶</a></h3><p>The difference between the CSA and the integrated (exact) charges is a function of substrate doping. It can be shown that lower substrates give a larger error in $Q_i'$ by rerunning this notebook and comparing the results for doping density at $10^{15}$ and $10^{18}$ #/cm$^3$.</p>
<p>The CSA breaks down more significantly approaching the accumulation region. In the above plot of $Q_i'$, the CSA curve diverges from the exact result in accumulation. Since inversion charge is not important here, the error is unimportant.</p>
<p>The percent error is quantified in the below plots.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [21]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># compare CSA to exact (integrated) result</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">9</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">,</span> <span class="mi">100</span> <span class="o">*</span> <span class="p">(</span><span class="n">QiA</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">-</span> <span class="n">Qi</span><span class="p">)</span> <span class="o">/</span> <span class="n">Qi</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s1">'inversion charge'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'$V_</span><span class="si">{gb}</span><span class="s1">$ (V)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'percent error (%)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">,</span> <span class="mi">100</span> <span class="o">*</span> <span class="p">(</span><span class="n">QbA</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">-</span> <span class="n">Qb</span><span class="p">)</span> <span class="o">/</span> <span class="n">Qb</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s1">'body charge'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'$V_</span><span class="si">{gb}</span><span class="s1">$ (V)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'percent error (%)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
eFaAOAAAAABJRU5ErkJggg==
"
>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgUAAAFkCAYAAACw3EhvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALEgAACxIB0t1+/AAAIABJREFUeJzt3XeYFFXWx/HvCIgEFRAXFFnHrKyrw5oAA2NETKhrwlUc
ZDHnNaGs6xoBXQOKCgZUFCMK4mtWxoyBoIiiIgxBFBXBACph+v3j1DjN2N3T1VPV1XX793mefqZr
qqb6nG3WPl331L0gIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiUq9GUQcgIqGoAqYBswM4VyX2
34opAZyrRhXBxSciAVkj6gBEJBQJ71Fo5wrznCLSQCoKRCTOSryHiARARYGIu3YGpgPfA/cATZP2
9Qc+BxYB44ANkvbtC8wAlgC3UPuhu6Z3rm2Tjv0TsBRYL00M/YGPgR+9WMqS9nUGPvBe5+Gk+FoB
TwPfeK83HuiQ9HeVwFXAm95rbwLsB3zqnWsY8CrQL+lvTvTi+B54DvhzmnhFREScUwV8iH2Ytgbe
AK709u0FfIt9QK8JDMU+RAHaYh/gh2N9BOcAK7APVbAP3EFJr3M2VlSkciQwH9jB296M2g/jKmAi
0N6L72PgZG9fG+AwYC2gJfAo8GTSeSu9v98G+2KzPvADcKi3fRawPCnmXlgBtJW3/1KsoBARESkK
s4GTkrZ7AjO953ez+gd7C+xDdGOgD/BWnXPNo/YDdhdgTtK+94Ej0sTwPHBmhviOTdoeDNye5tgy
7Bt+jQnA5Unbffjjh/zcpJifTXoOVhgsBTqmeT2RoqXhAxF3zUt6PhfY0Hu+Aat/sC/FhhE6ePvm
ZzjPO8AvQDmwNfbt/6k0r78R8EWG+L5Oev4LdlUAoDkwHLsa8AN2FWNdVu8dSI5pwxQxJ29vDNwM
LPYei7zfd0BEVqOiQMRdf67z/Evv+QKgNGlfC6wnYD7wFat/gy7hj9+o7wOOA44HHsOuMqQyD9g8
h7j/BWyJ9USsC3Tnjw2FyXcuLMAKkOSYk7fnYldNWic9WmDDFyIiIs6roranoA3WU3CVt29vrIlv
e6y572bgNW9fTU/BYUBjrGcguacArEj43nuN3TLEcAT2gfw37IN6c2oLldlYb0ONy4FR3vPBwDNe
bG2wfoJqar/ETGD1JsL1vJh7eTGfweo9BYdicyJ08rbXxfodRKQOXSkQcVMCeBB4AbuE/zm1RcHL
wL+BMdi37E2AY7x932EfmIO855tjBUWyecBk7IO67r5kjwNXA6OxD+0nsG/p6eKt+fZ/E9DMe/23
sJ6AunMaJG8v8mIe4v3NNlivw2/e/rFYofEwNhwxDeiRIW4RKWAdsW8G04GPsM7iusqx/7NP8R4D
8xWcSJG6G7gi6iDSWAMbKukedSAiErz21N7b3BK7F3mbOseUk77ZSUSCVYo17G0ccRzJ9sPmN2iK
fSn4ktXnZRCRLMRh+OBrYKr3/GfgE2q7qJNpVjOR8F2JXX4fwup3MEStK3bL5bfAgVgfwW8Z/0JE
Yq8U+w9Ryzq/746NK36ANSh1QkRERJzVEmseOjTFvrWxe5vBJmn5LF9BiYiIuCIul9ybYHOhP4t1
JtdnNja1avIsaGy44YaJBQsWBB+diIhIYfoCH/OFxKGnoATrdP6Y9AVBO2oLnJ2959/XPWjBggUk
EgknH//5z38ij0H5KT/l597D5dyKIT9s1tGsNfZzcER2xWZP+xC73RDgEmonQRmOTZJyKrASWEbt
PddFo6qqKuoQQqX84k35xZfLuYH7+fkVh6LgDeq/ojHMe4iIiEiO4jB8IFmoqKiIOoRQKb94U37x
5XJu4H5+fsWl0TAoCW+MRURExHklJSXg47NeVwocUVlZGXUIoVJ+8ab84svl3MD9/PxSUSAiIiKA
hg9EREScpeEDERERyYmKAke4Pi6m/OJN+cWXy7mB+/n5paJAREREAPUUiIiIOEs9BSIiIpITFQWO
cH1cTPnFm/KLL5dzA/fz80tFgYiIiADqKRAREXGWegpEREQkJyoKHOH6uJjyizflF18u5wbu5+eX
igIREREB1FMgIiLiLPUUiIiISE5UFDjC9XEx5Rdvyi++XM4N3M/PLxUFIiIiAqinQERExFnqKRAR
EZGcqChwhOvjYsov3pRffLmcG7ifn18qCkRERARQT4GIiEjgEgkYNQp694YmTaKLQz0FIiIiEVq+
HE44AYYNg59+ijoaf1QUOML1cTHlF2/KL75czg2Cz2/xYujRA37+GSZMgDZtAj196FQUiIiIBGD2
bOjWDTp3hsceg+bNo47IP/UUiIiINNB770GvXnDJJXDGGVFHU8tvT0Hj8EIRERFx3/jx0K8f3HUX
HHJI1NE0jIYPHKFxv3hTfvHmcn4u5wYNz+/22+Gkk+Dpp+NfEICuFIiIiPhWXW1DBU88AW+8AZtt
FnVEwVBPgYiIiA/Ll8OJJ8KsWfDUU9C2bdQRpaeeAhERkZD8+CMcfji0bAkvvwzNmkUdUbDUU+AI
jfvFm/KLN5fzczk38JffV1/BHnvAFlvAmDHuFQSgokBERKRen35qcxAceSTcdhs0ahR1ROFQT4GI
iEgG77xjcxBcey307Rt1NP6op0BERCQgzz4LffrAyJFw0EFRRxO+OAwfdAQmANOBj4Cz0hw3FPgc
+ADonJ/QCofG/eJN+cWby/m5nBtkzu/++6Giwu4wKIaCAOJxpWAFcC4wFWgJTAJeBD5JOuYAYHNg
C2AX4HagS37DFBERV/zvfzB0qC1q1KlT1NHkTxx7CsYCtwAvJ/3uDuxqwiPe9gygO7Cwzt+qp0BE
RNJKJGDAABg3Dl54ATp2jDqihnG9p6AUGxp4p87vOwDzkrbnAxvxx6JAREQkpZUr4ZRTYNo0eP31
wp6UKCwNLQpaAj8HEUiWr/U4cHaa16xbCaW8JFBRUUFpaSkArVq1oqysjPLycqB2bCmO28njYoUQ
j/JTfsqvcOJryHbdHKOOJ6z8XnihkiuvhGbNynn5ZXj//cKIL5d8KisrqaqqIhd+hg+2AA4B9sS+
ra8PNAJWAd8Ck7FL+E8BM3OKJr0mwNPAs8BNKfbfAVQCD3vbRTd8UFlZ+fs/Dhcpv3hTfvHlcm5g
+e2wQzm9etmVgVGjoGnTqKMKjt/hg2wOPBD7dr53lsdXY+P9NwPPZBtIBiXAfcAirOEwlQOAM7yf
XbDCIVWjobNFgYiI+LdoEfTsCWVltuKha5MSBVkUbId9uJZ725OAl4C3sW/ii4AfgXWA9YBOQFdg
H2pvCZwAnANMyzagFHYDXgM+pHZI4BLgz97z4d7PW4H9gaVAX+zKRV0qCkREBIAvv4T99rPbDQcN
gpI4tt7XI8iiYCXwC/ahew/wsY84tgVOBE4G1sQu/xcCZ4uCYrjEp/ziS/nFl6u5ffEF7Lsv7LNP
JSNGlEcdTmiCvPtgGHA18E0OcXwEnAcMxr7Vi4iIFITp06FHDxg4ELbeOupoCouDF0sycvZKgYiI
1G/SJDjwQLj+ejjuuKijCZ/r8xSIiIjk5I034PDDYfhwOOywqKMpTEGtfdAWazaUiCTfo+oi5Rdv
yi++XMntpZesIHjggdULAlfyC0pDi4KzgC+xvoNvgTnASQ0NSkREJCjjx8Oxx8KYMXa3gaTXkJ6C
c4H/YYXA+0AL7PbFpkB/7I6FQqOeAhGRIvL443D66VYY7Lxz1NHkXxiTF6WzAHgD6I3Nagi2NsH7
2JWDQlxXSkWBiEiReOABuOACePZZm5yoGPktCjINH/TPsK8Z0B64n9qCAKAKeBXYNNsAJBiuj4sp
v3hTfvEV19zuugsuvhhefjlzQRDX/MKSqSgYjs0kuE2Kfb9iMwfuUuf3TYG/YrMdioiI5N1tt8EV
V8CECdCpEK9ZF7BMlxQOBW7BFj4aAlwFLE/aPxzoB4zGpj5ugQ0ldAZuAM4PId6G0vCBiIjDhg6F
G2+EV16BTTaJOproBd1TsDZWDJwGzAJOwdYzACsCRgMHJx2fwBYvOhX4Ldsg8khFgYiIo/73P7tK
8MorsPHGUUdTGILsKQD4CVshsQvwM7b64UigDTZ80AtrKOyNLau8KbbmQSEWBE5zfVxM+cWb8ouv
uOQ2aJBNSvTqq/4Kgrjkly/ZzlMwCdgZGxI4Alsl8Xhv3wzgEeBp7PZEERGRvLn6arj3XqishI02
ijqaeMvllsSO2DLFB2NXDk4BvggyqBBp+EBExCFXXQUPPmhDBhtsEHU0hSfo4YNU5mHDBkdgdyZ8
iK2EqHUUREQkb6680gqCCRNUEASlvqKgKzYs8B3WUzANW055beAJrJ/gHuAKYArQLbRIJSPXx8WU
X7wpv/gq1NyuvBIeesgKgvbtcz9PoeYXlUxFwb7YREQHAN8DH2ETFg0A3gWaAz8CZ2LFw0rgdeB2
YJ3wQhYRkWJ29dVWELzySsMKAvmjTOMM7wFbAwdikxiBDRFcBVyIFQPDko5vDJwDXI4VCxsGHGsQ
1FMgIhJjgwbVNhWqIKhfkD0F2wIvUlsQgF0NuDZpP3X2XQ/8BbtbQUREJDDXXQcjR+oKQZgyFQWL
sZ6BpnV+3zlpfypzWH1CI8kD18fFlF+8Kb/4KpTcbrgBRoywgmDDAK9DF0p+hSLTHQP3Y8ME72Iz
Fy7G7jboiy2C9FDo0YmISNG75RYYNsyGDDp0iDoat2UaZ2iCrXlwmve8xlxslsNxIcYVFvUUiIjE
yPDhcO21/mcqFBP02gcA7bD+gfWA2cAHrL4wUpyoKBARiYn77oOBA+0KwWabRR1NPIUxedFCbObC
R7E7EuJaEDjN9XEx5Rdvyi++osrtoYfgkkvgpZfCLQhcfu9yoVkIRUSkoDz5JJx3Hrz4Imy1VdTR
FJdMlxROAu7Gmgpz1RhbNXFEA84RJA0fiIgUsOeegxNOsJ+dO9d/vGQW5PDBHcAnQAXQzGcczbG7
FD7BZjgUERHJ6NVXoU8fGDtWBUFUMhUFvYG1sLUNvsauGvQGStMcvynwD2Bk0vFNgGMCilUycH1c
TPnFm/KLr3zlNnEiHHkkPPIIdO2al5cE3H7vcpGpp+ARYDw2dfHp2Df/vkACazZchE1nvA52Z8Ka
1F6imI8tnHQz8GsYgYuIiBs++AB69bLpi/fcM+poilu24wxNgEOxJZO7A6mmj5gPvAKMBZ4CqoMI
MGDqKRARKSCffQbl5XDzzXalQIIVxjwFqbTF5i9oBSzBblv8Lsdz5ZOKAhGRAjF3LuyxB1x2GZx4
YtTRuCmMeQpS+Q6YDrzp/YxDQeA018fFlF+8Kb/4Ciu3b76BffeFs8+OtiBw+b3LRa5FgYiISE6W
LIEePeCYY+Dcc6OORpLlOnwQVxo+EBGJ0LJlVhB07mx9BCXF9imUZ/nqKYgrFQUiIhFZsQIOOwxa
t7Z1DdbQterQ5aunQAqM6+Niyi/elF98BZVbdXVt78A99xROQeDye5cLrX0gIiKhSiRsLYPZs+GF
F6BJk6gjknTiMnxwD3Ag8A3w1xT7y4FxwCxvewxwVYrjNHwgIpJn11wDDz9s0xi3bh11NMXF7/BB
XK4UjARuAe7PcMyrwCH5CUdERLJx991w113w5psqCOLAz6jOFOwbeBReBxbXc0xcrnqEwvVxMeUX
b8ovvhqS2/jxMHCgrXi4wQbBxRQkl9+7XPgpCrbG1jwoRAmgG/AB8AzQKdpwRESK21tvQb9+8NRT
sOWWUUcj2fLz7XoG8DlwcEix1KcUW6ApVU/B2sAqYBnQE1uIKdU/Q/UUiIiE7OOPYa+97LbDHj2i
jqa4hdlT8DhwFrA+8K2/sEL3U9LzZ4HbgDbA93UPrKiooLS0FIBWrVpRVlZGeXk5UHsZSdva1ra2
tZ3b9hZblNOzJ/TrV0nTpmB94IUTn+vbNc+rqqoIWzPgXWAS0CX0V/ujUmBamn3tqK2Edgaq0hyX
cNWECROiDiFUyi/elF98+cltyZJE4q9/TSQGDw4vnqC5/N4lEokENryeNT9XCp7BLtHviC2EtBCY
A/yS5vi9/ARSj4ewJZvbAvOA/2DLOQMMB44ATgVWYkMIxwT42iIiUo/ly+Hww6F7d7jggqijkVz5
6Smo9nnuApmvajVe4SQiIkGprobjj4dffoHHHoNGjaKOSGqE2VPg55u/PnlFRIrEgAEwZw68+KIK
grjz822+0sfj1QBiEx+Sm0xcpPziTfnFV3253X47jB0L48ZBs2b5iSlILr93uYjLjIYiIlJgnn4a
rrjCZitcb72oo5Eg5DoL4EbAHsCG3vaXwGvez0KmngIRkQBMmgT772+FwS67RB2NpBP22getgWHA
kUDdkaNVwKPA6cASn+cVEZGYmDMHDjkERoxQQeAaPz0FzYBXsNv9SoCJwGjvMdE7V2/vmBiOLMWb
6+Niyi/elF981c3thx/gwAPttsPDDosmpiC5/N7lws+VgnOA7YG3gP7AJ3X2b4PNGbAbcDYwKIgA
RUSkMKxYAUceCeXlcPbZUUcjYfDTUzAF2BjYlPTDA62AWdikRp0bFloo1FMgIpKDRAJOPRXmzrVF
jhqrTT0Wwuwp2AJ4jsz9AkuACYCWwBARccgNN9jKh2++qYLAZX56CvxcVcj1rgbJkevjYsov3pRf
fFVWVjJ2rBUFTz8Na68ddUTBcvm9y4WfomAmttzVOhmOWQdbo2BmA2ISEZEC8dln0L+/TU705z9H
HY2Ezc83+kuBK7H5CPoDn9fZvwXWaFgO/Bu4OoD4gqaeAhGRLC1YYLcc3nQT/P3vUUcjufDbU+Cn
KGgBvA1si81JMBGYja1zsBm2nPIawEdAV2Cpj3Pni4oCEZEsLFtmKx4eeihcemnU0Uiu/BYFfoYP
lmKLIj2OTVy0K3AccDzQzTvX48CeFGZB4DTXx8WUX7wpv3hJJKBvX9hqK+jWrTLqcELl2nvXUH57
SL8DjsJuTdwd6OD9fj7wOjA3uNBERCQK//2v3Xo4YQJMnBh1NJJPfoYPngS+Ak4LKZZ80PCBiEgG
jz5qsxW++y60axd1NNJQYQ4fHABoHSwREUdNngynn253GqggKE5+ioIFQJOwApGGcX1cTPnFm/Ir
fAsX2loGd9wBZWW1v3cht0xcz88vP0XBeKyPoEVIsYiISAR++w0OP9yaC3XrYXHz01OwHvAe8Clw
MvFsKlRPgYhIkkQC+vWz1Q8fewzW8PNVUQpemGsfXA9MBw4EPgMmYwsf/ZLm+BN9nFtERCJwyy0w
aZKtaaCCQPz8EzgBKwgA1sQmKzoaqEjzkDxyfVxM+cWb8itMEybANdfA2LHQsmXqY+KaW7Zcz88v
P1cK/Hzz1zV6EZECVlUFvXvDgw/CJptEHY0UimJbzVA9BSJS9JYtg113hT594Nxzo45GwhTm2geL
sXUNdvcZUyFRUSAiRS2RgOOOg5ISGDXKfoq7wpy8aE3iecdBUXB9XEz5xZvyKxw33ggzZsCdd2ZX
EMQpt1y4np9ffnoKZgJtwwpERETCNWECDBkC77wDzZpFHY0UIj8Xjs4HrgI6AbPCCSd0Gj4QkaI0
bx7svLMNGeyzT9TRSL6E2VPQCHgC2A4YgC2Q9Juf4AqAigIRKTq//QZ77GGzFl50UdTRSD6F2VMw
E9geWzZ5NLAMWzVxVpqH5JHr42LKL96UX7TOOgs6doQLL/T/t4WeW0O5np9ffnoKNq6zXQJoHS0R
kQJ2zz3w2mu2FLLuNJD6+PknUurz3FU+j88HDR+ISNGYMgX228+Kgm22iToaiUKYax9U+Q1GRESi
sXixrXg4bJgKAsmelr9whOvjYsov3pRfflVX22yFBx8MRx3VsHMVWm5Bcz0/v/xcKajRCjgOWxBp
feBlYIi3byus9+ANrBFRRETybPBgWLQIxoyJOhKJG79tJz2BB7HCoMa91C6WdAgwFjgWeLihwYVA
PQUi4rRXXoF//APeew822ijqaCRqYd6SuC0wBmgJDMOWTa7rOewKwSE+zisiIgH46itb12DUKBUE
khs/RcElwFrAkcCZwGMpjlkOTMHmM5A8cn1cTPnFm/IL38qVthTyyScHO2NhIeQWJtfz88tPUVCO
feCPq+e4L4ENcg0ohXuAhcC0DMcMBT4HPgA6B/jaIiKxcPnl0KQJDBwYdSQSZ356CpZj0xwfk/S7
albvKcA7picQ1HIbuwM/A/cDf02x/wDgDO/nLsDNWBNkKuopEBHnPP889OsHkyZBO00pJ0nC7ClY
DGQzSrUZ8I2P89bnde+10zkEuM97/g7WBKn/W4hIUZg/H044AR58UAWBNJyfouAdYCdgywzH7IR9
m3+zIUH51AGYl7Q9n+yKF6e4Pi6m/OJN+YWjpo/grLOge/dwXkPvXXHxM0/BMOAg4HHgKGBGnf2b
YeP/ALc3PDRf6l4aSTtGUFFRQWlpKQCtWrWirKyM8vJyoPYfh7a1rW1tx2H77ruhefNyLr44vNer
UQj5Kr/s8qmsrKSqqopc+J2n4GbszoMEMB27TfFLYAHwN2x55RuBf+UUTXqlwHhS9xTcAVRSOy/C
DKA71pxYl3oKRMQJL71kwwaTJ2vYQNILs6cA4GzgNOwDd1vvdx2wYYMlwDkEXxDU5ymgj/e8ixdH
qoJARMQJCxdaQXD//SoIJFi5rH1wB9ARKwSOxmYv3A27DXFocKH97iHgLWwK5XnYnQ4new+AZ4BZ
wExgOFa0FJ26l8Jco/ziTfkFp2Zdg759Ye+9w389vXfFJZe1DwBWAZO8R9h6Z3HMGaFHISJSAIYM
gWXLbF4CkaD57SmIO/UUiEhsTZwIvXrB++9Dx45RRyNxEHZPgYiIROCHH+DYY+GOO1QQSHhUFDjC
9XEx5Rdvyq9hEgk47TTYbz847LBQX+oP9N4Vl1x7CkREJE9GjYKpU205ZJEwqadARKSAzZwJXbvC
yy/DdttFHY3EjXoKREQcsXy5TWN82WUqCCQ/VBQ4wvVxMeUXb8ovN5dfbpMTnRHhTdd674qLn6Jg
NjAki+OuxSYTEhGRHL32GowcCXffDSXFNtArkfHzT60auBebUTCTu7xjCvEqhHoKRKTgLVkCZWVw
661w0EFRRyNxVgg9Bc2AlSGcV0SkKJx+OhxwgAoCyb+gi4JWQDfgq4DPK/VwfVxM+cWb8sve6NG2
8uH11wd2ygbRe1dc6punYDa2THKNI4HyDOdqBzQB7m5wZCIiRWbuXDjnHHjuOWjePOpopBjVN85Q
7fN8K4Cngf7A9zlFFC71FIhIQaquhn32gX33hQEDoo5GXOG3p6C+KwWbYlcKSrA7CsYA56d5geXA
t1hhICIiPgwdCr/9BhdeGHUkUszq6ymoAuZ4P+8HnkvarvtYgAqCyLg+Lqb84k35Zfbxx3DVVXD/
/dCoUTAxBUXvXXHxs/ZBRVhBiIgUqxUroE8fuPpq2GyzqKORYldsU2Kop0BECspll8GkSfD005qk
SIIXdE9BXesCpwN7ARsCa2U4dlOf5xYRKSrvvgsjRsCUKSoIpDD4maegI/AhcBVWFGwNlGZ4SB65
Pi6m/OJN+f3RL7/YsMHQobDBBsHHFBS9d8XFz5WCa7DCYDIwGPgU+DGMoEREXDdwIGy/PRx1VNSR
iNTyc8HqG2AVsBXxLQbUUyAikXv9dTj6aPjwQ2jbNupoxGVhrn2wDvAW8S0IREQit3Qp9O0Lt9+u
gkAKj5+ioAqbwlgKkOvjYsov3pRfrYsugm7doFev8OIJkt674uKnp2AUcBHQFvgunHBERNz1yisw
bpwNG4gUIj89BY2xGQ3XBk4EpocSUbjUUyAikfj5Z9huO7j1VlsWWSQf/PYU+CkKJmDDB92whZLm
eo90iybt5ePc+aKiQEQiceaZ8OOPcN99UUcixSTMRsPuWEFQ83elwB7YUsqpHpJHro+LKb94K/b8
XnsNnngCbrwxP/EEqdjfu2Ljp6fAzzd/fR0XEQGWLYN+/eC226BNm6ijEcms2CbW1PCBiOTVeefB
11/D6NFRRyLFKOy1D0REJEtvvw0PPQTTpkUdiUh2/PQU1GgEHIStgTAcuxOhxp+ALVGxkXeuj4sp
v3grxvx++82GDYYOjfckRcX43hUzvx/eOwAPA8mrfjcB7vGe74PNZ3AY8FSDoxMRiamrr4attoIj
jog6EpHs+ekp2BhbDKk18H/Aa9jCSPdSe7WgBbAIeBDoF1iUwVFPgYiE7sMPYZ99YOpU2HDDqKOR
YhbmLYmXYgXBmcDBwHUpjlkKfADs5OO8IiLOWLUK/vlPuOYaFQQSP36Kgh7ADGBYPcdVAQW8Orib
XB8XU37xVkz53XwztGxp/QQuKKb3Tvz1FLQDxmVxXAk2FbKISFGZNcuuEEycCCXFdsO3OMHPP9vv
gI9YfbbCalbvKQB4H7tS0KGBsYVBPQUiEopEAvbbD3r0gPPPjzoaERNmT8FkYEcg0yjZVsD2wLs+
zpuN/bGhi8+xlRrrKgd+AKZ4j4EBv76ISEYPPACLFsE550QdiUju/BQF9wDNsTsLUt11uy4wApvH
4O6Gh/a7RsCtWGHQCegNbJPiuFeBzt7jqgBfPxZcHxdTfvHmen7jxlVywQVw553Q2LFZWlx/71zP
zy8/RcEjwJPYwkhfUDsPQRdv32xgd+BR4OkAY9wZmIk1MK7A5knoleI4jeCJSCRuuw2OPRZ22CHq
SEQaxu8HaRPgSuAsYK06+1ZgdyZcCKxseGi/OwK786G/t30csAt2a2SN7sATwHzgS+B84OMU51JP
gYgE6qWX7BbEjz6yuw5ECknYax+sAC4GhgB7Aptil/fnAi8B3/g8Xzay+RSfDHQElgE9gbHYdMsi
IqH55Rc45RS7UqCCQFyQ6+jX98CYIAPJ4EvsA79GR+yKQLKfkp4/C9wGtMHiXE1FRQWlpaUAtGrV
irKyMsrLy4HasaU4biePixVCPMpP+RVDfnfeCTvuWE7z5pXUpFhI8QWxXfO7QolH+dWfT2VlJVVV
VeQiDuPwjYFPgb2BBdidDb2BT5KOaYddpUhgPQiPAqUpzuXs8EFlZeXv/zhcpPzizcX8PvoI9tzT
VkCcMcMqzw+rAAAS0UlEQVS9/Gq4+N4lcz0/v8MHfoqCY7Gu/lOB59Mc0xPrK7gY+2AOSk/gJmrv
bLgWONnbNxw43YtrJTaEcB4wMcV5nC0KRCR/qquhe3drLjz11KijEUkvzKJgPLArNjHRb2mOWQv4
Crs98FAf584XFQUi0mB33223H771Fqzh5x4ukTwLc/Ki7bDFjtIVBAC/esds7+O8EoDk8SQXKb94
cym/b7+FSy6BO+6oLQhcyq8ul3MD9/Pzy09R0A4b06/PAu9YERHnXHABHHcclJVFHYlI8PwMH3wP
TAL2ree4F7Glk1vlGlSINHwgIjmrrIQ+fWD6dFhby75JDIQ5fPAB1lPQPsMx7b1jPvJxXhGRgrd8
uTUV3nyzCgJxl5+i4CGskfBxYL0U+9fD7jhYyztW8sj1cTHlF28u5HfDDbD55nBoihZqF/JLx+Xc
wP38/PIzedFIoALoRu3aBzO8fVtj6xGsDbwH3BlciCIi0ZozB66/Ht57D0riMLuLSI78/vNujRUH
h6TZPx4rHBY3IKYwqadARHw79FDYcUcYqEXZJWbCnKcgWRm2lPHG2CyCc7AJjabmeL58UVEgIr6M
Hw//+pfNXNi0adTRiPgTZqPhjcBl3vOpwCBsFsHTgMEUfkHgNNfHxZRfvMU1v2XL4KyzYNiwzAVB
XPPLhsu5gfv5+eWnKDgDTUokIkXkmmtgl11g3/puxBZxhJ/hg/nAm8DRIcWSDxo+EJGsfPYZdOsG
H3wAHTpEHY1IbsIcPngRm4Mg1+WWRURiIZGAM8+06YxVEEgx8VMUXA40x1YlbBFKNJIz18fFlF+8
xS2/J56AL7+0wiAbccvPD5dzA/fz88vPt/4K4BmgL3Aw8BJ218EvaY6/okGRiYhEYOlSOPdcGDUK
mjSJOhqR/PLTU1Dt49gE0MhnLPmgngIRyWjAAJg3Dx54IOpIRBrOb0+BnysFfr7565NXRGJnxgy4
6y6bk0CkGBXbhJ3OXimorKykvLw86jBCo/ziLQ75JRKw335w0EFw9tn+/jYO+eXK5dzA/fzCvPtA
RMRZjz0GCxfC6adHHYlIdHK9UtAK2AloizUbvhVYROFy9kqBiOTup5+gUycYPRp23z3qaESCE/aV
glbYgkjfYGsdPAj8M2l/f2AB0MXneUVEInPllbDXXioIRPwUBS2ASuAE4Hvg2RTHjAfaA4c1ODLx
xfV7bZVfvBVyfh9/DCNHwpAhuZ+jkPNrKJdzA/fz88tPUXA+sB3wALApcGCKY74GPgb2bHhoIiLh
SiTgjDPgssugXbuooxGJnp+ego+A1sBmwK/e76qBe4ETk457AtgFKMTJQdVTICK/e/hhGDwY3nsP
GmsCd3FQmPMUbIr1Efxaz3G/Auv5OK+ISN799BOcfz48+qgKApEafoYPVgJrZXFcR2BpbuFIrlwf
F1N+8VaI+V12mc1L0K1bw89ViPkFxeXcwP38/PJTH38KdAaaAr+lOaY11ncwpYFxiYiEZvJku/1w
+vSoIxEpLH56Ci4EBgG3ADXzfdXtKbgdOBk4A7gtmBADpZ4CkSK3ahV07Qqnngp9+0YdjUi4/PYU
+CkKWgDvAtsAb2MNhddhtyk+BhwFdAemATuT/mpClFQUiBS5YcOsj6CyEkqKbaJ3KTphTl60FOgB
TAS6YgUBQDkwDCsIJgEHUJgFgdNcHxdTfvFWKPktWACXXw633x5sQVAo+YXB5dzA/fz88ttzOx/Y
Fdgf+/DfFFsieR7wDDAWrZAoIgXqvPPgpJNsSmMR+aNiu3im4QORIvXMMzZR0fTp0KxZ1NGI5EeY
8xSIiMTSokXQvz888IAKApFMclk6uSlwLDAC+D/vMcL7XdPgQhM/XB8XU37xFmV+iQScdhocfTTs
GdIE7C6/fy7nBu7n55ffKwW7AqOxCYrq+id2y+I/gNcbGJeISCAefhimTYN77406EpHC56en4C/A
O0BzYBbwEDDH21cKHIM1Hi7D1j4oxGlB1FMgUkTmz4e//Q2efRZ22CHqaETyL8x5CsZgSyIPAgZi
ExclawT8F7gEeBL4u49z54uKApEikUhAjx6w++7w739HHY1INMKcp6Ac+Az70K9bEACsAv7tHdPd
x3klAK6Piym/eIsiv2uvhR9+gAEDwn8tl98/l3MD9/Pzy09R0AybnCiTBDDZO1ZEJBLXXQcjR8KY
MVoBUcQPP8MHU4DFwF71HPcK0AYoyzWoFPYHbsKGKO4CBqc4ZijQE+tpqCD1okwaPhBx3HXXwYgR
MGECbLRR1NGIRCvM4YPbgT2A3TIcs6t3zHAf561PI+BWrDDoBPTG1l9IdgCwObAFcJIXq4gUGRUE
Ig3jpygYga2Q+BwwBFsieW3vsR327f054GaC/VDeGZgJVAErgIeBXnWOOQS4z3v+DtAKaBdgDAXP
9XEx5RdvYeaXSMDbb9v0xVEVBC6/fy7nBu7n55ef0bZqrGegBDgf+Fed/TWXJ84Fzknx9418R2c6
YGsr1JiP3fJY3zEbAQvrnqy62v4j4ppVq+zhKuUXb9nkV/f/l4mEPaqrax9Ll8KPP8JPP8HixfDi
izYPQbNm0Ls3vPEGtCuqrwMiwfLbglOS5nmm4xoq24/wuq+Z8u/KyiqYNq3U22pFSUkZJSXl9geJ
SjtRLLfLCywe5af8/OdXUvLH7caNyykpse211oK2bctZZx2orq6kUycYN66c7baDV1+t5JNPoF07
+/uab4Dl5eFvl5eX5/X1tK3tdNs1z6uqqshFHBZE6gJcjvUUAAzArlokNxveAVRiQwsAM7DbIute
KVCjoYiIFI0wGw2j8j7WQFgKrAkcDTxV55ingD7e8y7AElIMHbjM9XEx5Rdvyi++XM4N3M/Przjc
wbsSOAN4HutLuBv4BDjZ2z8ceAa7A2EmsBTom/8wRURE4i0OwwdB0vCBiIgUDReHD0RERCQPVBQ4
wvVxMeUXb8ovvlzODdzPzy8VBSIiIgKop0BERMRZ6ikQERGRnKgocITr42LKL96UX3y5nBu4n59f
KgpEREQEUE+BiIiIs9RTICIiIjlRUeAI18fFlF+8Kb/4cjk3cD8/v1QUiIiICKCeAhEREWepp0BE
RERyoqLAEa6Piym/eFN+8eVybuB+fn6pKBARERFAPQUiIiLOUk+BiIiI5ERFgSNcHxdTfvGm/OLL
5dzA/fz8UlEgIiIigHoKREREnKWeAhEREcmJigJHuD4upvziTfnFl8u5gfv5+aWiQERERAD1FIiI
iDhLPQUiIiKSExUFjnB9XEz5xZvyiy+XcwP38/NLRYGIiIgA6ikQERFxlnoKREREJCcqChzh+riY
8os35RdfLucG7ufnl4oCERERAdRTICIi4iz1FIiIiEhOVBQ4wvVxMeUXb8ovvlzODdzPzy8VBSIi
IgKop0BERMRZ6ikQERGRnBR6UdAGeBH4DHgBaJXmuCrgQ2AK8G5eIiswro+LKb94U37x5XJu4H5+
fhV6UXAxVhRsCbzsbaeSAMqBzsDOeYmswEydOjXqEEKl/OJN+cWXy7mB+/n5VehFwSHAfd7z+4BD
MxxbbP0Rq1myZEnUIYRK+cWb8osvl3MD9/Pzq9CLgnbAQu/5Qm87lQTwEvA+0D8PcYmIiDincdQB
YMMD7VP8/tI62wnvkcquwFfA+t75ZgCvBxVgHFRVVUUdQqiUX7wpv/hyOTdwPz+/Cv2S+wysV+Br
YANgArB1PX/zH+Bn4H8p9s0ENgswPhERkUL2BbB51EEEZQhwkff8YmBQimOaA2t7z1sAbwL7hR+a
iIiI5FMbrFeg7i2JGwL/5z3fFJjqPT4CBuQ5RhERERERERGJszOBT7CrCoMjjiUs/wKqsSstLrkO
e+8+AJ4A1o02nEDsj/XOfE7tUJkrOmJ9QNOx/7+dFW04oWmETZw2PupAQtAKeBz7/93HQJdowwnc
AOzf5zRgNNA02nAa7B7sTr1pSb/LdhLAorQn9j9OE297/QhjCUtH4DlgNu4VBftSexvtIFL3mMRJ
I6z5tRT7NzkV2CbKgALWHijznrcEPsWt/GqcBzwIPBV1ICG4DzjRe94YNwrxGqXALGoLgUeAEyKL
Jhi7Y5P4JRcFQ4ALvecXEf//bgbqUWCvqIMI2WPAdrhZFCQ7DHgg6iAaqCtWwNW4mPSzdrpgLLB3
1EEEbCOs72lP3LtSsC72oemqNlih2horeMYD+0QaUTBKWb0omEHtHD/tve20Cn3yoqBtAewBTAQq
gR0jjSZ4vYD52DoQrjsReCbqIBqoAzAvaXu+9zsXlWLfYN6JOI6g3QhcgA3XuWYT4FtgJDAZuBO7
28sV32O3rs8FFgBLsALPNdlOAggUxuRFQcs0GVJjrCrsAuyEXTnYNH+hBSJTfgNY/XbMQp+HIpV0
+V1C7TexS4Hl2BhgnBXLOt4tsXHps7E5RFxxEPAN1k9QHm0ooWgM/A04A3gPuAm7knVZlEEFaDPg
HKxg/QG7yvoPbCjIVZkmASxKzwLdk7ZnAutFFEvQtsWqwNneYwW2euSfIowpDBXYXBRrRRxHELqw
+vDBANxrNmwCPI/9x9c112BXemZjM6ouBe6PNKJgtcdyq7Eb8HREsYThaOCupO3jgWERxRKkUv44
fFDzRWsD6hk+KDYnA//1nm+JXTZylYs9BftjncJtow4kII2x2cZKgTVxr9GwBPuQvDHqQPKgO+71
FAC8hv23EuBy3Lpja3vsrphm2L/V+4DTI40oGKX8sdGwvkkAi1YTYBT2P9gk3LzkV2MW7hUFnwNz
sMu1U4Dbog0nED2xZqeZuDfx1m7YWPtUat+z/SONKDzdcfPug+2xoQOXbgNOdiG1tyTeR+2daXH1
ENYfsRy7itWX9JMAioiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIjEVxdsxsNr
kn43yvvdyCzPcat3/BPednNsHYJ3A4pRRETESTcCX2MfotXAT9iSuKmmwx4PrPSOWwY8GXAsJdgH
9yJWnzq33HvNH4EW9ZyjKbb87SrgwKTfn+6do09AsYqIiDipEfZNehX1Lxs+HCsG1gkhjmOxD+7L
U+yb6e2rqOccR3nHfQmskfT7Jtj87/OJ/1z2IiIioXoT+zD9W4ZjWmOLpzQNKYZ3sSsRf06xbyAW
X2U953jWO+7aFPuGePuOzT1EERER9z2IfWAenuGY4cDOIb3+Tt7rv5xm/0bYlYyVwCZpjungHbMK
2CLF/r94r/FGgyIVKTJr1H+IiDhmtvezNM3+3bGlV8Nq1uvl/Xwpzf75wIvYf58q0hzTB+tLeAtb
Uruu6cA3WDNj21wDFRERcd0/sW/Rt6TYtyb2Yb12iK//hvf65RmOqekXqEqzf4a3v2+GczzpHXOE
7whFRESKxN7Yh+X4FPsuI/wP0Z+xy/7tMhyzJvAdFudedfZ1o/YOheYZznGNd9zVOUcqUmQ0fCBS
fKq8n6V1fr8lsB3weIiv3YLaD/JFGY5bDoz2nte9GlCz/Rh2u2Q6NefPVHyIiIgUtSbYN/Wf6vz+
KaBjyK/dgdq5D+pTRu18CjXDGc2BH7D4d63n7/t7fx9mkSPiFF0pECk+K7B7+5tT24RXAbwKzPNx
nn8AnwFjfPzNEu9nU6BxPcdO9R4tgKO93/0dKxA+x26tzKRmfoUlGY8Skd+pKBApTlVY9/4mWGFw
HDbjoR8PApOA1338zVJqrxJkc1fAPd7Pijo/s5kGeT3v58JsAhMRESlW92OX1o/CPnh3yvE884Ed
ff7Na6RuIEylNfArNlywn/d3y4H2WfztWO/4v/uMT6Ro6UqBSHGqmavgRGzM/r0czrE5tm7BFJ9/
94r3s2sWxy7GPtxLsMWSAJ7H1nCoT1eymxlRRESkqPXFPjDnAS0zHNcCG1a4AFunYDi1iw/1Az4C
zgLOAYZl+do1DYQTsjy+5gpBzeOwLP7mr96xfoY2REREitKe1D/VMcBzwEne8zbYpfvNvO37qP0W
D/YB3DPL138LGxLYOItjS4A53vELsUWd6nM9ll/vLOMREREpWutS+2GfzhGsPqNgR+yuhRqzgD2S
tl8Dzs/y9Y/GPrT/m+XxfqyJrQQ5j/rvcBAREZEsvMjqQwLHUTuh0AZYA+Ca3nZjbIbBo3ycfyLw
PdCqYWH+wRlYwXF8wOcVEREpWp+y+myCdwGneM+7sHqD4d7YnQhr+Tj/ztiQwDUNiLGu5sAC4J0A
zykiIlL0HsPuTgBbzvgboJO3/SdqV1FshDUNHpPX6EQkcCX1HyIiRaoDMBi7pW8D7C6D9ZP2n40N
H7THJjEajYiIiDjveLSGgIiISFE6E7jUe94Yu90wmxkIRSTGdLuOiKSyNjZ80B9bUnkwtTMRioiI
iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIeP4fYoVAEJ3H+n0AAAAASUVO
RK5CYII=
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h4 id="8.3.1-Improved-quantified-CSA-error-for-$Q_i'$">8.3.1 Improved quantified CSA error for $Q_i'$<a class="anchor-link" href="#8.3.1-Improved-quantified-CSA-error-for-$Q_i'$">¶</a></h4><p>The above clearly shows that $Q_{bA}'$ is an excellent approximation to $Q_b'$. However, the percent error of $Q_{iA}'$ is misleading because the 'exact' result was clamped to 1e-21 in accumulation. Since inversion charge is so small in accumulation/depletion, the inaccuracy of $Q_{iA}'$ is unimportant anyway. A better evaluation strategy is to consider the error only in inversion. To do this intelligently requires some background.</p>
<p>The semiconductor is said to become weakly inverted when the electron surface density equals the intrinsic carrier concentration. The surface potential that achieves this condition is referred to as $\psi_{WI}$.</p>
$$\begin{aligned}
n_i &= n(\psi_{WI}) \\
&= n_o e^{q\psi_{WI} / \phi_t} \\
\rightarrow \psi_{WI} &= \phi_t \ln \left(\frac{n_i}{n_o}\right)
\end{aligned}$$<p>The semiconductor is often considered "strongly inverted" when the electron surface density equals the substrate doping. The surface potential at strong inversion, $\psi_{SI}$, is derived below.</p>
$$\begin{aligned}
N_a &= n(\psi_{SI}) \\
&= n_o e^{q\psi_{SI} / \phi_t} \\
\rightarrow \psi_{SI} &= \phi_t \ln \left(\frac{N_a}{n_o}\right)
\end{aligned}$$<p>Alternatively, one can use the $n_i$-based or $\phi_f$-based $n(\psi)$ expressions and find that the above are equivalent to:</p>
$$\begin{aligned}
\psi_{WI} &= \phi_f \\
\psi_{SI} &= 2 \phi_f
\end{aligned}$$<p>The percent error for the inversion charge is reconsidered below by only plotting when $\psi_s > \psi_{WI}$. As can be seen, the error is less than 5% in strong inversion.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [22]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># create a list of indicies above weak inversion</span>
<span class="k">if</span> <span class="n">device_type</span> <span class="o">==</span> <span class="s1">'nMOS'</span><span class="p">:</span>
<span class="n">selector</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">psis</span> <span class="o">>=</span> <span class="n">phif</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">selector</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">psis</span> <span class="o"><=</span> <span class="n">phif</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="c1"># the first index of 'selector' is where psi_WI is</span>
<span class="n">Vgb_WI</span> <span class="o">=</span> <span class="n">Vgb</span><span class="p">[</span><span class="n">selector</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
<span class="n">psi_SI</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">phif</span>
<span class="n">Vgb_SI</span> <span class="o">=</span> <span class="n">Vfb</span> <span class="o">+</span> <span class="n">psi_SI</span> <span class="o">-</span> <span class="n">Qs</span><span class="p">(</span><span class="n">psi_SI</span><span class="p">)</span> <span class="o">/</span> <span class="n">Coxp</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">11</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">[</span><span class="n">selector</span><span class="p">],</span> <span class="mi">100</span> <span class="o">*</span> <span class="p">((</span><span class="n">QiA</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">-</span> <span class="n">Qi</span><span class="p">)</span> <span class="o">/</span> <span class="n">Qi</span><span class="p">)[</span><span class="n">selector</span><span class="p">])</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">()</span>
<span class="c1"># plot the weak inversion point</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="n">Vgb_WI</span><span class="p">,</span> <span class="n">Vgb_WI</span><span class="p">],</span> <span class="p">[</span><span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">ax</span><span class="p">[</span><span class="mi">3</span><span class="p">]],</span> <span class="s1">'r--'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">Vgb_WI</span><span class="p">,</span> <span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="p">(</span><span class="n">ax</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">-</span> <span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">*</span> <span class="mf">0.8</span><span class="p">,</span> <span class="s1">'$V_{gb, WI}$'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">18</span><span class="p">)</span>
<span class="c1"># plot the strong inversion point</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="n">Vgb_SI</span><span class="p">,</span> <span class="n">Vgb_SI</span><span class="p">],</span> <span class="p">[</span><span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="n">ax</span><span class="p">[</span><span class="mi">3</span><span class="p">]],</span> <span class="s1">'k--'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">Vgb_SI</span><span class="p">,</span> <span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="p">(</span><span class="n">ax</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">-</span> <span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">*</span> <span class="mf">0.5</span><span class="p">,</span> <span class="s1">'$V_{gb, SI}$'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">18</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="n">ax</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s1">'inversion charge'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'$V_</span><span class="si">{gb}</span><span class="s1">$ (V)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'percent error (%)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
hDkuYXQKAAAAAElFTkSuQmCC
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="9.0-Capacitance">9.0 Capacitance<a class="anchor-link" href="#9.0-Capacitance">¶</a></h2><p>The capacitance of an MOS capacitor is an incredibly useful measured quantity, because with appropriate measurements one can deduce an MOS device's physical parameters. By "appropriate," it is meant that measurement parameters such as temperature, frequency, DC bias, DC bias ramp rate, small-signal stimulus level, and integration time are carefully chosen. Of foremost importance is the frequency since the minority carriers have a limited response rate and their response may not be detected if the frequency is too high. The frequency must also be selected after consideration of oxide thickness and gate area. For example, too large a gate area for a particular frequency and the equivalent circuit of the MOS capacitor becomes distributed.</p>
<p>The above concerns are very important in real device analysis but their effect on derivations is ignored in this notebook. Instead, the equivalent circuits and equations developed are valid only for low-frequency analysis of the MOS capacitor where a lumped element equivalent circuit is sufficient.</p>
<p>A prerequisite is knowing that capacitance subscript notation is defined as follows [3].</p>
$$\begin{aligned}
C_{xy} &= -\frac{dQ_x}{dV_y}
\end{aligned}$$<p>The per unit area version of capacitance is derived, which can be multiplied by total gate area, $A$, to compute the total capacitance.</p>
<h3 id="9.1-Gate-body-capacitance">9.1 Gate-body capacitance<a class="anchor-link" href="#9.1-Gate-body-capacitance">¶</a></h3><p>For a two-terminal MOS capacitor there is only one measureable capacitance, which is the gate-body capacitance $C_{gb}$. The derivative is in terms of gate charge and body bias based on the subscript notation introduced above.</p>
$$\begin{aligned}
C_{gb}' &= -\frac{dQ_g'}{dV_b}
\end{aligned}$$<p>Since this is a two-terminal device, an incremental change in body voltage causes an effect that can be identically reproduced by an opposite incremental change in gate voltage. Due to this observation, the terminal subjected to a time-varying stimulus is unimportant, and $dV_b$ in the denominator can be replaced with $-dV_g$ due to the opposite behavior mentioned previously.</p>
<p>Unfortunately for the already-confused reader, it is for mathematical clarity that $dV_g$ is replaced with $dV_{gb}$. This is valid because an incremental change in either terminal is equivalent to an incremental change in $V_{gb}$. For example, assume that the gate terminal experiences an incremental increase $\Delta V$. Since by standard voltage subscript notation $V_{gb}=V_g-V_b$, then increasing $V_g$ by $\Delta V$ increases $V_{gb}$ by the same amount (assuming $V_b$ is fixed). This thought process only works for the two-terminal MOS capacitor and would be invalid for a four-terminal MOSFET unless the source/drain/body contacts were tied together.</p>
<p>After all the wordiness on display above, the derivation of $C_{gb}'$ is allowed to continue. By a charge neutrality argument, $Q_g' + Q_s' = 0$ (the <a href="/mos-surface-potential-equation.html">SPE derivation</a> discusses this).</p>
$$\begin{aligned}
C_{gb}' &= -\frac{dQ_g'}{dV_b} = \frac{dQ_g'}{dV_g} = \frac{dQ_g'}{dV_{gb}} \\
&= \frac{dQ_g'}{d\psi_s} \cdot \frac{d\psi_s}{dV_{gb}} \\
&= -\frac{dQ_s'}{d\psi_s} \cdot \frac{d\psi_s}{dV_{gb}}
\end{aligned}$$<p>The quantity $-dQ_s'/d\psi_s$ is termed the semiconductor capacitance, $C_s'$. It is always positive, which can be understood by looking at $Q_s'$ versus $\psi_s$ plotted above.</p>
$$\begin{aligned}
C_s' & =-\frac{dQ_s'}{d\psi_s} \\
&= \mbox{sign}(\psi_s) \sqrt{\frac{q\epsilon_s}{2 f(\psi_s)}} \frac{df(\psi_s)}{d\psi_s} \\
\frac{df(\psi_s)}{d\psi_s} &= -p_o e^{-q\psi_s/kT} + n_o e^{q\psi_s/kT} + N_a - N_d
\end{aligned}$$<p>The SPE gives the remaining derivative by differentiating the left- and right-hand sides by $\psi_s$.</p>
$$\begin{aligned}
\frac{d}{d\psi_s} V_{gb} &= \frac{d}{d\psi_s} \left(V_{fb} + \psi_s - \frac{Q_s'}{C_{ox}'}\right) \\
\rightarrow \left(\frac{d\psi_s}{dV_{gb}}\right)^{-1} &= 1 + \frac{C_s'}{C_{ox}'}
\end{aligned}$$<p>Inserting the above into the expression for $C_{gb}'$ and performing some algebra yields:</p>
$$\begin{aligned}
C_{gb}' &= \frac{C_s' C_{ox}'}{C_s' + C_{ox}'}
\end{aligned}$$<h4 id="9.1.1-Semiconductor-capacitance-at-flatband">9.1.1 Semiconductor capacitance at flatband<a class="anchor-link" href="#9.1.1-Semiconductor-capacitance-at-flatband">¶</a></h4><p>The surface potential is zero at $V_{gb}=V_{fb}$. This presents an issue for $C_s'(\psi_s=0)$ because both the numerator and denominator equal zero. This is an instance in which one uses <a href="https://en.wikipedia.org/wiki/L%27H%C3%B4pital%27s_rule">L'Hôpital's rule</a>. The offending portions of $C_s'$ that cause the zero/zero condition are grouped into the $H$ term.</p>
$$\begin{aligned}
C_s' &= \sqrt{\frac{q\epsilon_s}{2}} H \\
H &= \frac{\frac{df}{d\psi_s}}{\sqrt{f}}
\end{aligned}$$<p>One applies L'Hôpital's rule to $H^2$ in order to eliminate the square root. During the course of applying this procedure one finds that the denominator's derivative, $\frac{df}{d\psi_s}$, is already known from the expression for $C_s'$. The remaining unknown is the numerator's derivative.</p>
$$\begin{aligned}
H^2(\psi_s=0) &= \frac{\left. \frac{d}{d\psi_s} \left(\frac{df}{d\psi_s}\right)^2 \right|_0}{\left. \frac{df}{d\psi_s} \right|_0} \\
\frac{d}{d\psi_s} \left(\frac{df}{d\psi_s}\right)^2 &= 2 \frac{df}{d\psi_s} \frac{d^2f}{d\psi_s^2} \\
\frac{d^2f}{d\psi_s^2} &= \frac{p_o}{\phi_t} e^{-q\psi_s/kT} + \frac{n_o}{\phi_t} e^{q\psi_s/kT}
\end{aligned}$$<p>Evaluating the above intermediary expression gives,</p>
$$\begin{aligned}
\left. \frac{d}{d\psi_s} \left(\frac{df}{d\psi_s}\right)^2 \right|_0 &= 2 \left. \frac{df}{d\psi_s} \right|_0 \left( \frac{p_o}{\phi_t} + \frac{n_o}{\phi_t} \right)
\end{aligned}$$<p>The $\left. \frac{df}{d\psi_s} \right|_0$ term in the above cancels with the denominator in $H^2(\psi_s=0)$. One then takes the square root of both sides to obtain $H(\psi_s=0)$.</p>
$$\begin{aligned}
H(\psi_s=0) &= \sqrt{\frac{2}{\phi_t} (p_o + n_o)}
\end{aligned}$$<p>$H(\psi_s=0)$ is now folded back into $C_s'$, which is assigned an additional subscript to indicate that it is valid only at flatband.</p>
$$\begin{aligned}
C_{s0}' &= \sqrt{\frac{q\epsilon_s}{\phi_t} (p_o + n_o)} \\
&\approx \sqrt{\frac{q\epsilon_s}{\phi_t} N_a} \mbox{ , for nMOS } (N_a \gg N_d) \\
&\approx \sqrt{\frac{q\epsilon_s}{\phi_t} N_d} \mbox{ , for pMOS } (N_d \gg N_a)
\end{aligned}$$
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [26]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># the semiconductor capacitance at flatband</span>
<span class="n">Cs0</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">q</span> <span class="o">*</span> <span class="n">es</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">/</span> <span class="n">phit</span> <span class="o">*</span> <span class="p">(</span><span class="n">p_o</span> <span class="o">+</span> <span class="n">n_o</span><span class="p">))</span>
<span class="c1"># the first derivative of f w.r.t. psis</span>
<span class="n">df</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="n">Na</span> <span class="o">-</span> <span class="n">Nd</span> \
<span class="o">-</span> <span class="n">p_o</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="n">psis</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span> \
<span class="o">+</span> <span class="n">n_o</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">psis</span> <span class="o">/</span> <span class="n">phit</span><span class="p">)</span>
<span class="c1"># use the indicator function to make Cs transition gracefully to Cs0</span>
<span class="c1"># - the Cs0 term gets used when psis=0 without an 'if' statement</span>
<span class="n">Cs</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">psis</span><span class="p">:</span> <span class="n">np</span><span class="o">.</span><span class="n">sign</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">*</span> <span class="n">df</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span>
<span class="n">q</span> <span class="o">*</span> <span class="n">es</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">/</span> <span class="mi">2</span> <span class="o">/</span> <span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psis</span><span class="p">))</span>
<span class="p">)</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">*</span> <span class="n">Cs0</span>
<span class="c1"># compute the gate-body capacitance and the flatband value</span>
<span class="n">Cgb</span> <span class="o">=</span> <span class="n">Cs</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">*</span> <span class="n">Coxp</span> <span class="o">/</span> <span class="p">(</span><span class="n">Cs</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">+</span> <span class="n">Coxp</span><span class="p">)</span>
<span class="n">Cgb0</span> <span class="o">=</span> <span class="n">Cs</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="o">*</span> <span class="n">Coxp</span> <span class="o">/</span> <span class="p">(</span><span class="n">Cs</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="n">Coxp</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">12</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">,</span> <span class="n">Cgb</span> <span class="o">/</span> <span class="n">Coxp</span><span class="p">)</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">()</span>
<span class="n">ax</span> <span class="o">=</span> <span class="p">(</span><span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="mi">0</span><span class="p">,</span> <span class="n">ax</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="n">Vfb</span><span class="p">,</span> <span class="n">Vfb</span><span class="p">],</span> <span class="n">ax</span><span class="p">[</span><span class="mi">2</span><span class="p">:],</span> <span class="s1">'k--'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">Vfb</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">,</span> <span class="s1">'$V_</span><span class="si">{fb}</span><span class="s1">$'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">18</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="n">ax</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">ax</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span> <span class="p">[</span><span class="n">Cgb0</span> <span class="o">/</span> <span class="n">Coxp</span><span class="p">,</span> <span class="n">Cgb0</span> <span class="o">/</span> <span class="n">Coxp</span><span class="p">],</span> <span class="s1">'r--'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">Vgb</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="mf">0.8</span><span class="p">,</span> <span class="s1">'$C_</span><span class="si">{gb0}</span><span class="s1"> / C_</span><span class="si">{ox}</span><span class="s1">$'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">18</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'$V_</span><span class="si">{gb}</span><span class="s1">$ (V)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="n">ax</span><span class="p">)</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'$C_</span><span class="si">{gb}</span><span class="s1"> / C_</span><span class="si">{ox}</span><span class="s1">$'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
YGRDERERERERERERERERERERERERERERERERERERERERERERERERERERERERl/w/Ia6Kh8DpdOgA
AAAASUVORK5CYII=
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="9.2-Components-of-capacitance-(nMOS)">9.2 Components of capacitance (nMOS)<a class="anchor-link" href="#9.2-Components-of-capacitance-(nMOS)">¶</a></h3><p>Just as semiconductor charge can be broken into inversion and bulk terms, so can semiconductor capacitance. Although this is of limited usefulness for the low-frequency MOS capacitor, the derivation is done anyway since the results are not much changed in the study of a MOSFET.</p>
$$\begin{aligned}
Q_s' &= Q_i' + Q_b' \\
-\frac{dQ_s'}{d\psi_s} &= -\frac{dQ_i'}{d\psi_s} -\frac{dQ_b'}{d\psi_s} \\
C_s' &= C_i' + C_b'
\end{aligned}$$<p>The exact, integral forms of $Q_i'$ and $Q_b'$ are used to find the capacitances. One makes use of the fact that $f(x) = \frac{d}{dx} \int_c^x f(y) dy$. In the below results, $E_s$ is from Section 6.0.</p>
<p><u>Inversion capacitance per unit area</u></p>
$$\begin{aligned}
C_i' &= -\frac{dQ_i'}{d\psi_s} \\
&= -q \frac{d}{d\psi_s} \int_{\psi_s}^{0} \frac{n(\psi) - n_o}{E(\psi)} d\psi \\
&= q \frac{n(\psi_s) - n_o}{E_s}
\end{aligned}$$<p><u>Bulk capacitance per unit area</u></p>
$$\begin{aligned}
C_b' &= -\frac{dQ_b'}{d\psi_s} \\
&= q \frac{d}{d\psi_s} \int_{\psi_s}^{0} \frac{p(\psi) - p_o}{E(\psi)} d\psi \\
&= -q \frac{p(\psi_s) - p_o}{E_s}
\end{aligned}$$<p>Both of the above expressions have zero/zero conditions at flatband ($\psi_s=0$). Fortunately, $C_i'$ is so small (immeasurably small, even) at $\psi_s=0$ that one can "cheat" and use the indicator function to produce zero/one instead of zero/zero. Such a shortcut is not allowed for the bulk capacitance term because its flatband value is not negligible. Since the methodology to arrive at $C_{b0}'$ is the same as $C_{i0}'$, the aforementioned shortcut is not employed.</p>
<h4 id="9.2.1-Bulk/inversion-capacitance-at-flatband">9.2.1 Bulk/inversion capacitance at flatband<a class="anchor-link" href="#9.2.1-Bulk/inversion-capacitance-at-flatband">¶</a></h4><p>The procedure to obtain the flatband bulk/inversion capacitances relies on rewriting each in a form similar to the expression for $C_s'$. If instead this process is skipped and L'Hôpital's rule is applied to the as-is expressions, then one finds a zero/zero condition again. The derivation of $C_{b0}'$ will be performed. $C_{i0}'$ is obtained in a very similar manner so only its result is written.</p>
<p>First, note that the semiconductor capacitance per unit area can be rewritten as so.</p>
$$\begin{aligned}
C_s' &= \mbox{sign}(\psi_s) \sqrt{\frac{q\epsilon_s}{2 f(\psi_s)}} \frac{df(\psi_s)}{d\psi_s} \\
&= -q \frac{p(\psi_s) - p_o - n(\psi_s) + n_o}{E_s}
\end{aligned}$$<p>As proven in Section 9.2, the first version of $C_s'$ is conducive to applying L'Hôpital's rule. Therefore, one recasts $C_b'$ into a similar form.</p>
$$\begin{aligned}
C_b' &= -q \frac{p(\psi_s) - p_o}{E_s} \\
&= \mbox{sign}(\psi_s) \sqrt{\frac{q\epsilon_s}{2 f(\psi_s)}} \left[\frac{df(\psi_s)}{d\psi_s} - (n(\psi_s) - n_o)\right] \\
&= \mbox{sign}(\psi_s) H \sqrt{\frac{q\epsilon_s}{2}}
\end{aligned}$$<p>The portion of $C_b'$ that causes the zero/zero condition has been grouped into a variable named $H$ (different from the $H$ in section 9.1.1). This quantity is squared to remove the square-root in the denominator (this allows L'Hôpital's rule to be successfully applied).</p>
$$\begin{aligned}
H &= \frac{\left[\frac{df(\psi_s)}{d\psi_s} - (n(\psi_s) - n_o)\right]}{\sqrt{f(\psi_s)}} \\
H^2 &= \frac{\left(\frac{df}{d\psi_s}\right)^2 - 2 \frac{df}{d\psi_s} (n - n_o) + (n - n_o)^2}{f}
\end{aligned}$$<p>Next, one applies L'Hôpital's rule to $H^2$.</p>
$$\begin{aligned}
H^2(0) &= \frac{ \left\{ \frac{d}{d\psi_s} \left[ \left(\frac{df}{d\psi_s}\right)^2 - 2 \frac{df}{d\psi_s} (n - n_o) + (n - n_o)^2 \right] \right\}_0 }{\left. \frac{df}{d\psi_s} \right|_0} \\
&= \frac{ 2 \left. \frac{df}{d\psi_s} \right|_0 \left. \frac{d^2f}{d\psi_s^2} \right|_0 - 2 \left. \frac{d^2f}{d\psi_s^2} \right|_0 (n - n_o)_0 - 2 \left. \frac{df}{d\psi_s} \right|_0 \left. \frac{dn}{d\psi_s} \right|_0 + 2 (n - n_o)_0 \left. \frac{dn}{d\psi_s} \right|_0 }{ \left.\frac{df}{d\psi_s}\right|_0 }
\end{aligned}$$<p>The terms $(n-n_o)_0$ (outer subscript is shorthand for evaluated at zero) are all zero at $\psi_s=0$, so they can be removed from the numerator. The $\left.\frac{df}{d\psi_s}\right|_0$ terms in the numerator are cancelled by the denominator. This leaves a result that can be evaluated using the $\frac{d^2f}{d\psi_s^2}$ result already derived in Section 9.2.</p>
$$\begin{aligned}
H^2(0) &= 2 \left. \frac{d^2f}{d\psi_s^2} \right|_0 - 2 \left. \frac{dn}{d\psi_s} \right|_0 \\
&= 2\frac{p_o}{\phi_t}
\end{aligned}$$<p>Therefore,</p>
$$\begin{aligned}
C_{b0}' &= \mbox{sign}(\psi_s) \sqrt{\frac{q\epsilon_s}{\phi_t} p_o}
\end{aligned}$$<p>By a similar procedure,</p>
$$\begin{aligned}
C_{i0}' &= \mbox{sign}(\psi_s) \sqrt{\frac{q\epsilon_s}{\phi_t} n_o}
\end{aligned}$$
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [27]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># calculate the surface field via its relationship with semiconductor charge</span>
<span class="n">Es</span> <span class="o">=</span> <span class="n">Qs</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="o">-</span><span class="n">es</span> <span class="o">*</span> <span class="n">e0</span><span class="p">)</span>
<span class="c1"># Ci0 and Cb0 are the flatband values of Ci and Cb</span>
<span class="c1"># - the indicator function is used to switch over to the flatband values</span>
<span class="k">if</span> <span class="n">device_type</span> <span class="o">==</span> <span class="s1">'nMOS'</span><span class="p">:</span>
<span class="n">Cb0</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">q</span> <span class="o">*</span> <span class="n">es</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">/</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">p_o</span><span class="p">)</span>
<span class="n">Ci0</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">q</span> <span class="o">*</span> <span class="n">es</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">/</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">n_o</span><span class="p">)</span>
<span class="n">Ci</span> <span class="o">=</span> <span class="n">q</span> <span class="o">*</span> <span class="p">(</span><span class="n">n</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">-</span> <span class="n">n_o</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">Es</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psis</span><span class="p">))</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">*</span> <span class="n">Ci0</span>
<span class="n">Cb</span> <span class="o">=</span> <span class="o">-</span><span class="n">q</span> <span class="o">*</span> <span class="p">(</span><span class="n">p</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">-</span> <span class="n">p_o</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">Es</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psis</span><span class="p">))</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">*</span> <span class="n">Cb0</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">Ci0</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">q</span> <span class="o">*</span> <span class="n">es</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">/</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">p_o</span><span class="p">)</span>
<span class="n">Cb0</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">q</span> <span class="o">*</span> <span class="n">es</span> <span class="o">*</span> <span class="n">e0</span> <span class="o">/</span> <span class="n">phit</span> <span class="o">*</span> <span class="n">n_o</span><span class="p">)</span>
<span class="n">Ci</span> <span class="o">=</span> <span class="o">-</span><span class="n">q</span> <span class="o">*</span> <span class="p">(</span><span class="n">p</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">-</span> <span class="n">p_o</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">Es</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psis</span><span class="p">))</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">*</span> <span class="n">Ci0</span>
<span class="n">Cb</span> <span class="o">=</span> <span class="n">q</span> <span class="o">*</span> <span class="p">(</span><span class="n">n</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">-</span> <span class="n">n_o</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">Es</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psis</span><span class="p">))</span> <span class="o">+</span> <span class="n">I</span><span class="p">(</span><span class="n">psis</span><span class="p">)</span> <span class="o">*</span> <span class="n">Cb0</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">13</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">[::</span><span class="mi">4</span><span class="p">],</span> <span class="n">Cs</span><span class="p">(</span><span class="n">psis</span><span class="p">[::</span><span class="mi">4</span><span class="p">]),</span> <span class="s1">'.'</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'C_s</span><span class="se">\'</span><span class="s1">'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">,</span> <span class="n">Ci</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'C_i</span><span class="se">\'</span><span class="s1">'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">Vgb</span><span class="p">,</span> <span class="n">Cb</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s1">'C_b</span><span class="se">\'</span><span class="s1">'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">(</span><span class="n">loc</span><span class="o">=</span><span class="s1">'best'</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s1">'$V_</span><span class="si">{gb}</span><span class="s1">$ (V)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
<span class="n">tmp</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s1">'(F / cm$^2$)'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">22</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="9.3-Equivalent-circuit-of-the-MOS-capacitor">9.3 Equivalent circuit of the MOS capacitor<a class="anchor-link" href="#9.3-Equivalent-circuit-of-the-MOS-capacitor">¶</a></h3><p>The expression for $C_{gb}'$ is of exactly the form one would expect given two capacitors are in series, which is one of those electronics circuit rules people memorize. (This rule can be proven by knowing that the impedance of a capacitor is $1/j\omega C$ and computing the total impedance of two capacitors in series.)</p>
$$\begin{aligned}
C_{gb}' &= \frac{C_s' C_{ox}'}{C_s' + C_{ox}'} \\
&= \left(\frac{1}{C_s'} + \frac{1}{C_{ox}'}\right)^{-1}
\end{aligned}$$<p>Therefore, the equivalent circuit of the MOS capacitor is one with $C_{ox}'$ and $C_s'$ in series.</p>
<center><img src="../images/2015-02-25-MOSCAP-derivations/equivalent_circuit_1.png"></center><p>Since $C_s'$ is the summation of $C_i'$ and $C_b'$, it can be broken into the parallel combination of its two components.</p>
<center><img src="../images/2015-02-25-MOSCAP-derivations/equivalent_circuit_2.png"></center><p>Real devices have added parasitics such as the resistance between the surface and the body terminal.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="10.0-References--">10.0 References <a class="anchor-link" href="#10.0-References--">¶</a></h2><ol>
<li>Physical Properties of Semiconductors archive hosted by the Ioffe Physico-Technical Institute, <a href="http://www.ioffe.ru/SVA/NSM/Semicond/">http://www.ioffe.ru/SVA/NSM/Semicond/</a>. </li>
<li>R. van Langevelde, A. Scholten, and D. Klaassen, “Physical Background of MOS Model 11,” Philips Electrons, N.V., Tech. Rep. 2003/00239, 2003. </li>
<li>Y. Tsividis, Operation and Modeling of the MOS Transistor. McGraw-Hill, 1987. </li>
<li>E. Nicollian and J. Brews, MOS (Metal Oxide Semiconductor) Physics and Technology. Wiley-Interscience, 2003. </li>
<li>R. F. Pierret, Advanced Semiconductor Fundamentals. Prentice Hall, 2003. </li>
<li>T. Chen and G. Gildenblat, “Analytical approximation for the MOSFET surface potential,” Solid-State Electronics, vol. 45, no. 2, pp. 335 – 339, 2001. </li>
</ol>
</div>
</div>
</div>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = '//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML';
mathjaxscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: 'center'," +
" displayIndent: '0em'," +
" showMathMenu: true," +
" tex2jax: { " +
" inlineMath: [ ['$','$'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" linebreaks: { automatic: true, width: '95% container' }, " +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'black ! important'} }" +
" } " +
"}); ";
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
</script>
<p>Download this post's IPython notebook <a href="https://github.com/h-gens/h-gens.github.io-pelican/tree/master/content/notebooks/">here</a>. </p>Converting IPython notebooks to PDFs2015-01-04T09:35:00-05:002015-01-04T09:35:00-05:00H.G.tag:h-gens.github.io,2015-01-04:/converting-ipython-notebooks-to-pdfs.html<p>A few weeks ago I wanted to share an <a href="http://ipython.org/">IPython notebook</a> with a friend who did not have IPython installed. The natural choice was to convert it to a PDF, which turned out to be more painful than expected. The following instructions are written for Windows users and IPython v2 …</p><p>A few weeks ago I wanted to share an <a href="http://ipython.org/">IPython notebook</a> with a friend who did not have IPython installed. The natural choice was to convert it to a PDF, which turned out to be more painful than expected. The following instructions are written for Windows users and IPython v2.3. The only dependency is <a href="http://wkhtmltopdf.org/">wkhtmltopdf</a> (webkit HTML to PDF). </p>
<ol>
<li>In the notebook editor, export to HTML.<br>
a. File -> Download as -> HTML (.html)<br>
b. You will need to manually collect required images and place them in the correct relative path to the exported file or change src="..." paths in the HTML. </li>
<li>If you use a custom.css file then either edit the exported HTML file to point to it or copy the file to the expected path.<br>
a. custom.css lives in <em>~/.ipython/profile_default/static/custom/</em> </li>
<li>Open the exported HTML file in your browser and save it (<em>File -> Save As</em>).<br>
a. While this step seems unnecessary, without it my MathJax markup was the wrong font size in the resulting PDF. </li>
<li>Run wkhtmltopdf on the saved copy from the previous step.<br>
a. <strong>wkhtmltopdf.exe -s Letter -L 40mm -R 40mm -T 20mm -B 20mm --javascript-delay 5000 infile.html outfile.pdf</strong> </li>
</ol>
<p>The <strong>-s</strong> argument sets the page size. The <strong>-L, -R, -T, -B</strong> arguments set the left/right/top/bottom margins. The <strong>--javascript-delay</strong> argument gives the MathJax javascript time to run (the time required probably depends on document size). There are many options available in wkhtmltopdf, which can be viewed by calling the executable from the command line without any arguments. </p>Getting started with Pelican and IPython notebooks2015-01-03T09:19:00-05:002015-01-03T09:19:00-05:00H.G.tag:h-gens.github.io,2015-01-03:/getting-started-with-pelican-and-ipython-notebooks.html<p>This site was created with the static site generator, <a href="http://docs.getpelican.com/en/3.5.0/">Pelican</a>. I chose Pelican in order to use <a href="https://jakevdp.github.io">jakevdp's</a> liquid_tags notebook <a href="https://github.com/getpelican/pelican-plugins/blob/master/liquid_tags/notebook.py">plugin</a> that allows for posting a subset of <a href="http://ipython.org/">IPython</a> notebook cells. The comments below are for Pelican v3.5.0, IPython v1.2, and a December 30, 2014 clone of …</p><p>This site was created with the static site generator, <a href="http://docs.getpelican.com/en/3.5.0/">Pelican</a>. I chose Pelican in order to use <a href="https://jakevdp.github.io">jakevdp's</a> liquid_tags notebook <a href="https://github.com/getpelican/pelican-plugins/blob/master/liquid_tags/notebook.py">plugin</a> that allows for posting a subset of <a href="http://ipython.org/">IPython</a> notebook cells. The comments below are for Pelican v3.5.0, IPython v1.2, and a December 30, 2014 clone of pelican-plugins. </p>
<p>Below are steps used to install Pelican. <a href="https://www.python.org/downloads/">Python</a> and <a href="http://nodejs.org/download/">node.js</a> must be installed (I was unable to generate posts containing IPython notebook files without node.js). Console/terminal commands are contained in brackets. </p>
<p>An older version of IPython is needed because the CSS class names used for python syntax highlighting changed in IPython v2.3. The liquid_tags notebook plugin appears to only know about the v1.2 CSS class names. For example, in an IPython notebook, a function named <code>foo</code> gets wrapped in a class by way of a <code><span></code> element. In IPython v1.2 this becomes <code><span class="nf">foo</span></code>, but in v2.3 this is <code><span class="cm-def">foo</span></code> (I used Chrome to inspect the elements). I'm not smart enough to fix it, but I assume the problem begins in the plugin's notebook.custom_highlighter() function. Inside this function a call is made to <code>HtmlFormatter(cssclass='highlight-ipynb')</code> where <code>HtmlFormatter</code> comes from the <a href="http://pygments.org/">Pygments</a> library. </p>
<h2>Quick pelican setup</h2>
<ol>
<li>Make a dedicated directory to house the site's contents and change into it. </li>
<li>Set up a virtual environment<br>
a. <strong>[virtualenv env]</strong><br>
b. <strong>[env\scripts\activate]</strong> <br>
c. <strong>[pip install pelican markdown ipython==1.2]</strong> </li>
<li>Install plugins/themes<br>
a. <strong>[git clone https://github.com/getpelican/pelican-plugins.git]</strong><br>
b. <strong>[git clone https://github.com/getpelican/pelican-themes.git]</strong><br>
c. Find other themes by looking at other users' github repositories (e.g. <a href="https://github.com/jakevdp/pelican-octopress-theme">octopress</a>, <a href="https://github.com/danielfrg/middle-theme">middle-theme</a>) </li>
<li><strong>[pelican-quickstart]</strong> // see <a href="http://mathamy.com/migrating-to-github-pages-using-pelican.html">here</a> for a list of questions that are asked </li>
<li>Configure Pelican via pelicanconf.py<br>
a. <em>DELETE_OUTPUT_DIRECTORY = False</em><br>
b. <em>PLUGIN_PATHS = ['path/to/pelican-plugins']</em><br>
c. <em>PLUGINS = ['liquid_tags.notebook', 'liquid_tags.literal']</em><br>
d. <em>EXTRA_HEADER = open('_nb_header.html').read().decode('utf-8') if os.path.exists('_nb_header.html') else None</em><br>
e. <em>NOTEBOOK_DIR = 'notebooks'</em><br>
f. <em>THEME = 'path/to/theme'</em><br>
g. <em>LOAD_CONTENT_CACHE = False</em> </li>
<li>Edit the chosen theme's 'base.html' and add <code>{% if EXTRA_HEADER %}{{ EXTRA_HEADER }}{% endif %}</code> to the <code><head></code> block </li>
<li>Configure 'content' directory<br>
a. <strong>[mkdir content/images]</strong><br>
b. <strong>[mkdir content/notebooks]</strong> </li>
<li>Run the site generator with <strong>[make html]</strong> or <strong>[make regenerate]</strong></li>
<li>Serve the site locally with <strong>[make serve]</strong> or regenerate files + serve with <strong>[make devserver]</strong> if not on Windows. </li>
</ol>
<p>Posts are written in markdown by the user and stored in content/, where each post's filename should have extension 'md'. Notebooks are incorporated in a markdown post with:</p>
<div class="highlight"><pre><span></span>{% notebook file.ipynb cells[i:j] %}
</pre></div>
<p>The 'cells' argument is optional and can be omitted; the slices are standard python syntax. The <em>LOAD_CONTENT_CACHE</em> setting should be False if notebooks are edited after they're added to content/notebooks/. Otherwise, the cached version is used by Pelican. </p>
<p>Initially, <strong>[make html]</strong> must be run twice because '_nb_header.html' is only generated after the first run. This file contains all the CSS/JS present in an IPython notebook. </p>
<p>Math blocks were left-aligned in IPython v1.2 but are centered in IPython v2.3, which is the preferred behavior. To force centering of math blocks while using v1.2, I made copy of _nb_header.html, edited it to include the addition below, and pointed to it in pelicanconf.py's <em>EXTRA_HEADER</em> setting. </p>
<div class="highlight"><pre><span></span><span class="nt"><style</span> <span class="na">type=</span><span class="s">"text/css"</span><span class="nt">></span>
.MathJax_Display{text-align: center !important;}
<span class="nt"></style></span>
</pre></div>
<h2>Repositories</h2>
<p>My choice was to have two repositories. </p>
<ul>
<li>Inside the master directory where <strong>[pelican-quickstart]</strong> is run. </li>
<li>A subdirectory of the above that holds the content pushed to the web server. </li>
</ul>
<p>The former has a .gitignore file that contains: </p>
<div class="highlight"><pre><span></span>*.pyc
cache/
env/
output/
username.github.io/
</pre></div>
<p>The latter repository is a <a href="https://pages.github.com/">GitHub Pages</a> repository. The 'output/' directory generated by Pelican is copied to this repository. </p>
<p>This site's repository containing the raw Pelican content can be found <a href="https://github.com/h-gens/h-gens.github.io-pelican">here</a>. The generated site can be found <a href="https://github.com/h-gens/h-gens.github.io">here</a>. </p>
<h2>Helpful references</h2>
<ul>
<li><a href="https://jakevdp.github.io/blog/2013/05/07/migrating-from-octopress-to-pelican/">Migrating from Octopress to Pelican</a> </li>
<li><a href="http://ntanjerome.org/blog/how-to-setup-github-user-page-with-pelican/">How to setup Github User Page with Pelican</a> </li>
<li><a href="http://mathamy.com/migrating-to-github-pages-using-pelican.html">Migrating to GitHub Pages using Pelican</a> </li>
<li><a href="http://docs.getpelican.com/en/3.1.1/getting_started.html">Getting started</a> (Pelican docs)</li>
<li><a href="http://pirsquared.org/blog/pelican-tags-vs-categories.html">tags-vs-categories in Pelican</a></li>
</ul>
<h2>Script to summarize available Pelican themes</h2>
<div class="highlight"><pre><span></span><span class="sd">"""</span>
<span class="sd">Ugly script used to summarize all pelican-themes.</span>
<span class="sd">https://github.com/getpelican/pelican-themes.</span>
<span class="sd">Place this script one level below THEMES_DIR.</span>
<span class="sd">It will generate summary.html containing the themes. </span>
<span class="sd">"""</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">OrderedDict</span> <span class="k">as</span> <span class="n">od</span>
<span class="n">THEMES_DIR</span> <span class="o">=</span> <span class="s1">'pelican-themes'</span>
<span class="c1"># first, discover all themes that have screenshots</span>
<span class="c1"># each screenshot's filename is stored</span>
<span class="n">contents</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">THEMES_DIR</span><span class="p">)</span>
<span class="n">accumulated_screenshots</span> <span class="o">=</span> <span class="n">od</span><span class="p">()</span>
<span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">contents</span><span class="p">:</span>
<span class="n">theme_directory</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">THEMES_DIR</span><span class="p">,</span> <span class="n">entry</span><span class="p">)</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">theme_directory</span><span class="p">)</span> <span class="ow">and</span> <span class="n">entry</span> <span class="o">!=</span> <span class="s1">'.git'</span><span class="p">:</span>
<span class="n">theme_contents</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">theme_directory</span><span class="p">)</span>
<span class="n">accumulated_screenshots</span><span class="p">[</span><span class="n">entry</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">theme_file</span> <span class="ow">in</span> <span class="n">theme_contents</span><span class="p">:</span>
<span class="k">if</span> <span class="n">theme_file</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">:]</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'jpg'</span><span class="p">,</span> <span class="s1">'png'</span><span class="p">,</span> <span class="s1">'gif'</span><span class="p">):</span>
<span class="n">accumulated_screenshots</span><span class="p">[</span><span class="n">entry</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">theme_file</span><span class="p">)</span>
<span class="c1"># second, create an HTML file</span>
<span class="c1"># the IMG elements point to the accumulated screenshots</span>
<span class="n">to_write</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'<html><body></span><span class="se">\n</span><span class="s1">'</span><span class="p">]</span>
<span class="k">for</span> <span class="n">theme</span><span class="p">,</span> <span class="n">screenshots</span> <span class="ow">in</span> <span class="n">accumulated_screenshots</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">THEMES_DIR</span><span class="p">,</span> <span class="n">theme</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">screenshot</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">screenshots</span><span class="p">):</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="c1"># print the theme's name only once</span>
<span class="n">to_write</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'<h1></span><span class="si">%s</span><span class="s1"></h1><br /></span><span class="se">\n</span><span class="s1">'</span> <span class="o">%</span> <span class="n">theme</span><span class="p">)</span>
<span class="n">screenshot_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">screenshot</span><span class="p">)</span>
<span class="n">to_write</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'<center></span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="n">to_write</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="s1">'<img src="</span><span class="si">%s</span><span class="s1">" height=500></span><span class="se">\n</span><span class="s1">'</span> <span class="o">%</span> <span class="n">screenshot_path</span>
<span class="p">)</span>
<span class="n">to_write</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</center><br /></span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="n">to_write</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'<br /></span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="n">to_write</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</body></html></span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'summary.html'</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">f</span><span class="o">.</span><span class="n">writelines</span><span class="p">(</span><span class="n">to_write</span><span class="p">)</span>
</pre></div>