Skip to content

Instantly share code, notes, and snippets.

@guyer
Created June 11, 2020 22:16
Show Gist options
  • Save guyer/cefe482f409f3e31664f7e9e4e5acc78 to your computer and use it in GitHub Desktop.
Save guyer/cefe482f409f3e31664f7e9e4e5acc78 to your computer and use it in GitHub Desktop.
Attempt to solve MOSCAP problem posed in https://github.com/usnistgov/fipy/issues/731
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# MOSCAP simulation using FiPy\n",
"\n",
"## Original problem statement\n",
"\n",
"Attempt answer [issue #731](https://github.com/usnistgov/fipy/issues/731), which poses:\n",
"\\begin{align}\n",
"q D_n \\nabla^2 n - q u_n \\nabla\\cdot\\left(n\\nabla\\psi\\right) &= q\\frac{n - n_0}{10^{-6}}\n",
"\\qquad\\text{in Domain 1}\n",
"\\\\\n",
"q D_p \\nabla^2 p + q u_p \\nabla\\cdot\\left(p\\nabla\\psi\\right) &= -q\\frac{p - p_0}{10^{-6}}\n",
"\\qquad\\text{in Domain 1}\n",
"\\\\\n",
"\\varepsilon\\nabla^2\\psi &= -\\left(p - n - N\\right)\n",
"\\qquad\\text{in Domain 1}\n",
"\\\\\n",
"\\varepsilon\\nabla^2\\psi &= 0\n",
"\\qquad\\text{in Domain 2}\n",
"\\end{align}\n",
"where Domain 1 is the region defined by $y <= h$ and Domain 2 is the region defined by $h < y <= h + t_{ox}$ subjected to the boundary conditions\n",
"\\begin{align}\n",
"p(x, 0) &= p_0 & p(x, h) &= p_0 \\exp(-\\psi/V_{th})\n",
"\\\\\n",
"n(x, 0) &= n_0 & n(x, h) &= n_0 \\exp(\\psi/V_{th})\n",
"\\\\\n",
"\\psi(x, 0) &= 0 & \\psi(x, h+t_{ox}) &= 5\n",
"\\end{align}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Relaxation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Add time derivatives to allow for relaxation to steady-state solution\n",
"\\begin{align}\n",
"\\frac{\\partial n}{\\partial t} + q D_n \\nabla^2 n - q u_n \\nabla\\cdot\\left(n\\nabla\\psi\\right) &= q\\frac{n - n_0}{10^{-6}}\n",
"\\qquad\\text{in Domain 1}\n",
"\\\\\n",
"\\frac{\\partial p}{\\partial t} + q D_p \\nabla^2 p + q u_p \\nabla\\cdot\\left(p\\nabla\\psi\\right) &= -q\\frac{p - p_0}{10^{-6}}\n",
"\\qquad\\text{in Domain 1}\n",
"\\\\\n",
"\\frac{\\partial \\psi}{\\partial t} + \\varepsilon\\nabla^2\\psi &= -\\left(p - n - N\\right)\n",
"\\qquad\\text{in Domain 1}\n",
"\\\\\n",
"\\frac{\\partial \\psi}{\\partial t} + \\varepsilon\\nabla^2\\psi &= 0\n",
"\\qquad\\text{in Domain 2}\n",
"\\end{align}"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2020-06-09T17:32:03.401082Z",
"start_time": "2020-06-09T17:32:01.935476Z"
}
},
"outputs": [],
"source": [
"from matplotlib import pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {
"ExecuteTime": {
"end_time": "2020-06-11T21:52:42.404187Z",
"start_time": "2020-06-11T21:47:41.338870Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<fipy.viewers.matplotlibViewer.matplotlib2DViewer.Matplotlib2DViewer at 0x7fa5f0841f10>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 6 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from fipy import *\n",
"L= 5e-6\n",
"h= 10e-6\n",
"tox= 0.1*1e-6\n",
"q=1.6*1e-19\n",
"un=0.14\n",
"up=0.045\n",
"Vth=0.026\n",
"Dp= up*Vth\n",
"Dn=un*Vth\n",
"p0= 1e21\n",
"n0= 1e11\n",
"e0=8.854*1e-12\n",
"\n",
"mesh1= Grid2D(dx= L/100,nx=100,dy=h/100,ny=100) # mesh for domain 1 for solving for p and n\n",
"mesh2= Grid2D(dx= L/100,nx=100,dy=tox/10,ny=10)\n",
"mesh3= mesh1+(mesh2+[[0],[h]]) # mesh for Domain 1 and Domain 2 for solving for psi\n",
"\n",
"x = mesh3.cellCenters[0]\n",
"y = mesh3.cellCenters[1]\n",
"\n",
"\n",
"N= 1e21*(y<=h) # N changes from Domain 1 to Domain 2\n",
"e= 11.9*e0*(y<=h)+ 3.9*e0*(y>h) # e changes from Domain 1 to Domain 2\n",
"\n",
"\n",
"p=CellVariable(name='hole',mesh=mesh3,hasOld=True,value=p0)\n",
"n=CellVariable(name='electron',mesh=mesh3,hasOld=True,value=n0)\n",
"psi=CellVariable(name='potential',mesh=mesh3,hasOld=True,value=2.)\n",
"\n",
"p.constrain(p0, where=mesh3.facesBottom)\n",
"n.constrain(n0, where=mesh3.facesBottom)\n",
"psi.constrain(0., where=mesh3.facesBottom)\n",
"psi.constrain(5., where=mesh3.facesTop)\n",
"\n",
"mask1=((y==0)) # Boundary 1\n",
"mask2=((y>h - L/1000) * (y < h)) # Boundary2\n",
"mask3=(y==(h+tox)) # Boundary 3\n",
"largevalue= 1e45\n",
"\n",
"eq1=(TransientTerm(var=n)+DiffusionTerm(coeff=q*Dn,var=n)-ConvectionTerm(coeff=q*un*psi.faceGrad,var=n)\n",
" == ImplicitSourceTerm(coeff=q/1e-6,var=n)-q*n0/1e-6\n",
" - ImplicitSourceTerm(coeff=mask2 * largevalue, var=n) + mask2 * largevalue * n0*numerix.exp(psi/Vth))\n",
"eq2=(TransientTerm(var=p)+DiffusionTerm(coeff=q*Dp,var=p)+ConvectionTerm(coeff=q*up*psi.faceGrad,var=p)\n",
" ==ImplicitSourceTerm(coeff=-q/1e-6,var=p)+q*p0/1e-6\n",
" - ImplicitSourceTerm(coeff=mask2 * largevalue, var=p) + mask2 * largevalue * p0*numerix.exp(-psi/Vth))\n",
"eq3=(TransientTerm(var=psi)+DiffusionTerm(coeff=e,var=psi)==-q*(p-n-N)*(y <= h)+0*(y>h))\n",
"\n",
"eq= eq1 & eq2 & eq3\n",
"\n",
"viewer1=Matplotlib2DViewer(vars=p, axes=plt.subplot(1, 3, 1))\n",
"viewer2=Matplotlib2DViewer(vars=n, axes=plt.subplot(1, 3, 2))\n",
"viewer3=Matplotlib2DViewer(vars=psi, axes=plt.subplot(1, 3, 3))\n",
"plt.tight_layout()\n",
"\n",
"for i in range(100):\n",
" p.updateOld()\n",
" n.updateOld()\n",
" psi.updateOld()\n",
" res=1e10\n",
" while res>1e-6:\n",
" res=eq.sweep(dt=5) # a large time step dt=5 has been chosen because there is no transient term actually present in my pde.\n",
"\n",
" viewer1.plot()\n",
" viewer2.plot()\n",
" viewer3.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> The above code runs without any error. But the results obtained are nowhere near the expected solution. Also, it is seen that the values of p,n and psi at the boundaries do not comply with the specified boundary conditions. Any help regarding this would be highly appreciated."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1D"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To see more clearly what's going on, we reduce to 1D:"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {
"ExecuteTime": {
"end_time": "2020-06-11T21:55:29.274883Z",
"start_time": "2020-06-11T21:54:07.949692Z"
}
},
"outputs": [
{
"data": {
"image/png": "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2GV7W1tbSkkHYPLYCF1F/uKrexVl7Vt5+h8PynVVRCTPlRjURyspLdn5+TrroL35/T+fSHtnF6fc9Axt7Z1Zq086Ek8TwSRY3WoZ4BwiqSQdgOHD9DAeQFmp8bE0PoMvIsXDzKiPVobL4Z2ULEnHJ/gLwH5mNsXMhhPMEPp4GsoVEZEsKDGjK4s3kQadeMKpeL9EMNrzmwRTVL8+2HLzRSwWY926df0+btGiRfzpT3/KQI1ERNKrxMhq90VaRi5w9ycJZgaV0KJFixg5ciTHHnvsLts6OjoYNiwng0aIiOzCstziyctPv2888TpvrNmU1jKnTRzF18+avsd97r//fm655RZ27NjBMcccw+23397n9tLSUn71q1/x1a9+lc7OTmpqarjrrru44447KC0t5f777+fWW2/lrrvuorq6mpdeeokjjjiCa665hs9//vOsWLGCSCTCvHnzOOSQQ5g7dy6rVq1ixYoVrFq1iiuvvJIvf/nLaY2FiEi8kiz38eRl4smFN998k4ceeohnn32WsrIyvvjFL/KTn/ykz+2nn346l1xyCc888wxTpkyhpaWF6upq5syZw8iRI7nqqqsAuOuuu/jLX/7C008/TWlpKVdccQWHH344v/jFL/jd737HZz/7WV5++WUA3nrrLRYuXMjmzZvZf//9ueyyyygry87z9SJSfII+niJPPH21TDJhwYIFLFu2jKOOOgqAbdu2MX78+D63L1myhOOPP54pU6YAUF1dvdtznHfeeZSWBi98/vGPf+TRRx8F4OMf/zjNzc1s3LgRgDPPPJPy8nLKy8sZP348H374IbW1tem/aBERsv9wQV4mnlxwdy6++GK+9a1vJay/55579rj98ccfT/kx8MrKyoTzJesup7y8vGddaWkpHR3F+7KsiGSeZfnhAr0QEzr55JN55JFH+OijjwBoaWlh5cqVfW6fOXMmv//973nvvfd61gNUVVWxefPm3Z7v+OOP77mVt2jRImpqahg1alRGrk1EZE9KzMjmO/lq8YSmTZvG9ddfz6mnnkpXVxdlZWXcdtttfW6fMWMG8+bN45xzzqGrq4vx48fz29/+lrPOOotzzz2Xxx57jFtvvXWX882dO5fPfe5zHHLIIUQiEebPn5/NyxUR6VFi0JnFe22WzScZujU0NHjyRHBvvvkmBx54YNbrUsgUMxFJh4brf8tp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g5kL7k5zczNNTU1MmTIl19URKXruztrN23tuha1qCZNLeHts47b2hP33HlVBXTTCCVPHEaupDBJLdSV10QijRwzNfybTlnjMrBRYCrzv7p/s7/FtbW1KOgNgZkSjUdauXZvrqogUjY7OLj7Y2JbQgd+4bmtP5/629p2d+aUlxqQxI6iPRjjr0AnEopXUVQetlrrqCCOGl+bwSnIjnS2e/wu8CYwaaAFKOgOjuImk3/aOTprWbws68tft7Mhf2dxK0/qkzvxhJT23wY7dt4ZYTZBY6qsjTBo7grJSvasfLy2Jx8xqgTMJpg7+x3SUKSKSaVu3x3XmJz2KvGbjNuJHFBtZPoz6aIRpE0Yx66C9iUUj1FVXEquJsFdVBSV53Jmfb9LV4rkZ+BeCSat6ZWaXApcC1NXVpem0uXXzzTdz6aWXEolEBnT8okWLGD58OMceeywAd9xxB5FIhM9+9rO7PWbu3LmMHDmSq666akDnFCkm7s6G1vae22HJnfrrtiR25ldXDqc+GuGo2FjqorXEwo78+miEaGXhdubnm0EnHjP7JPCRuy8zsxN3t5+7zwPmATQ0NAyJkUlvvvlmLrrookElnpEjR/Yknjlz5qSzeiJFwd35aPN2Gtd1t1q29ryl39i8lc1tHQn7TxhdQV11hJMPGE9dNLg9FosGnfmjKoZmZ36+SUeL5zjgU2Z2BlABjDKz+939ojSUnVWNjY3MmjWLY445hpdeeompU6dy7733snjxYq666io6Ojo46qij+MEPfsCdd97JmjVrOOmkk6ipqWHhwoX85je/4etf/zrbt29n33335cc//jEjR44kFotx8cUX88QTT9De3s7DDz9MRUUFd9xxB6Wlpdx///3ceuutLFiwoKc188Mf/pB58+axY8cOPvaxj3HfffcNOMGJFLqOzi7WbGijMbwl1v2E2KrmVla2bKWtvatn39ISY/LYEdRFKzls8piex49j0QiTqyNUlBVfZ36+GXTicfevAF8BCFs8Vw026Xzjidd5Y82mwVYtwbSJo/j6WdP73G/58uXcddddHHfccXz+85/npptu4s4772TBggVMnTqVz372s/zgBz/gyiuv5KabbmLhwoXU1NSwbt06rr/+ep5++mkqKyv59re/zU033cTXvvY1AGpqanjxxRe5/fbb+c53vsOPfvQj5syZk3DbbMGCBT31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\n",
"text/plain": [
"<fipy.viewers.matplotlibViewer.matplotlib1DViewer.Matplotlib1DViewer at 0x7fa5f0eb2590>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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2GV7W1tbSkkHYPLYCF1F/uKrexVl7Vt5+h8PynVVRCTPlRjURyspLdn5+TrroL35/T+fSHtnF6fc9Axt7Z1Zq086Ek8TwSRY3WoZ4BwiqSQdgOHD9DAeQFmp8bE0PoMvIsXDzKiPVobL4Z2ULEnHJ/gLwH5mNsXMhhPMEPp4GsoVEZEsKDGjK4s3kQadeMKpeL9EMNrzmwRTVL8+2HLzRSwWY926df0+btGiRfzpT3/KQI1ERNKrxMhq90VaRi5w9ycJZgaV0KJFixg5ciTHHnvsLts6OjoYNiwng0aIiOzCstziyctPv2888TpvrNmU1jKnTRzF18+avsd97r//fm655RZ27NjBMcccw+23397n9tLSUn71q1/x1a9+lc7OTmpqarjrrru44447KC0t5f777+fWW2/lrrvuorq6mpdeeokjjjiCa665hs9//vOsWLGCSCTCvHnzOOSQQ5g7dy6rVq1ixYoVrFq1iiuvvJIvf/nLaY2FiEi8kiz38eRl4smFN998k4ceeohnn32WsrIyvvjFL/KTn/ykz+2nn346l1xyCc888wxTpkyhpaWF6upq5syZw8iRI7nqqqsAuOuuu/jLX/7C008/TWlpKVdccQWHH344v/jFL/jd737HZz/7WV5++WUA3nrrLRYuXMjmzZvZf//9ueyyyygry87z9SJSfII+niJPPH21TDJhwYIFLFu2jKOOOgqAbdu2MX78+D63L1myhOOPP54pU6YAUF1dvdtznHfeeZSWBi98/vGPf+TRRx8F4OMf/zjNzc1s3LgRgDPPPJPy8nLKy8sZP348H374IbW1tem/aBERsv9wQV4mnlxwdy6++GK+9a1vJay/55579rj98ccfT/kx8MrKyoTzJesup7y8vGddaWkpHR3F+7KsiGSeZfnhAr0QEzr55JN55JFH+OijjwBoaWlh5cqVfW6fOXMmv//973nvvfd61gNUVVWxefPm3Z7v+OOP77mVt2jRImpqahg1alRGrk1EZE9KzMjmO/lq8YSmTZvG9ddfz6mnnkpXVxdlZWXcdtttfW6fMWMG8+bN45xzzqGrq4vx48fz29/+lrPOOotzzz2Xxx57jFtvvXWX882dO5fPfe5zHHLIIUQiEebPn5/NyxUR6VFi0JnFe22WzScZujU0NHjyRHBvvvkmBx54YNbrUsgUMxFJh4brf8tp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g5kL7k5zczNNTU1MmTIl19URKXruztrN23tuha1qCZNLeHts47b2hP33HlVBXTTCCVPHEaupDBJLdSV10QijRwzNfybTlnjMrBRYCrzv7p/s7/FtbW1KOgNgZkSjUdauXZvrqogUjY7OLj7Y2JbQgd+4bmtP5/629p2d+aUlxqQxI6iPRjjr0AnEopXUVQetlrrqCCOGl+bwSnIjnS2e/wu8CYwaaAFKOgOjuImk3/aOTprWbws68tft7Mhf2dxK0/qkzvxhJT23wY7dt4ZYTZBY6qsjTBo7grJSvasfLy2Jx8xqgTMJpg7+x3SUKSKSaVu3x3XmJz2KvGbjNuJHFBtZPoz6aIRpE0Yx66C9iUUj1FVXEquJsFdVBSV53Jmfb9LV4rkZ+BeCSat6ZWaXApcC1NXVpem0uXXzzTdz6aWXEolEBnT8okWLGD58OMceeywAd9xxB5FIhM9+9rO7PWbu3LmMHDmSq666akDnFCkm7s6G1vae22HJnfrrtiR25ldXDqc+GuGo2FjqorXEwo78+miEaGXhdubnm0EnHjP7JPCRuy8zsxN3t5+7zwPmATQ0NAyJkUlvvvlmLrrookElnpEjR/Yknjlz5qSzeiJFwd35aPN2Gtd1t1q29ryl39i8lc1tHQn7TxhdQV11hJMPGE9dNLg9FosGnfmjKoZmZ36+SUeL5zjgU2Z2BlABjDKz+939ojSUnVWNjY3MmjWLY445hpdeeompU6dy7733snjxYq666io6Ojo46qij+MEPfsCdd97JmjVrOOmkk6ipqWHhwoX85je/4etf/zrbt29n33335cc//jEjR44kFotx8cUX88QTT9De3s7DDz9MRUUFd9xxB6Wlpdx///3ceuutLFiwoKc188Mf/pB58+axY8cOPvaxj3HfffcNOMGJFLqOzi7WbGijMbwl1v2E2KrmVla2bKWtvatn39ISY/LYEdRFKzls8piex49j0QiTqyNUlBVfZ36+GXTicfevAF8BCFs8Vw026Xzjidd5Y82mwVYtwbSJo/j6WdP73G/58uXcddddHHfccXz+85/npptu4s4772TBggVMnTqVz372s/zgBz/gyiuv5KabbmLhwoXU1NSwbt06rr/+ep5++mkqKyv59re/zU033cTXvvY1AGpqanjxxRe5/fbb+c53vsOPfvQj5syZk3DbbMGCBT31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\n",
"text/plain": [
"<Figure size 432x288 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from fipy import *\n",
"L= 5e-6\n",
"h= 10e-6\n",
"tox= 0.1*1e-6\n",
"q=1.6*1e-19\n",
"un=0.14\n",
"up=0.045\n",
"Vth=0.026\n",
"Dp= up*Vth\n",
"Dn=un*Vth\n",
"p0= 1e21\n",
"n0= 1e11\n",
"e0=8.854*1e-12\n",
"\n",
"mesh1= Grid1D(dx=h/100,nx=100) # mesh for domain 1 for solving for p and n\n",
"mesh2= Grid1D(dx=tox/10,nx=10)\n",
"mesh3= mesh1+(mesh2+[[h]]) # mesh for Domain 1 and Domain 2 for solving for psi\n",
"\n",
"y = mesh3.cellCenters[0]\n",
"\n",
"\n",
"N= 1e21*(y<=h) # N changes from Domain 1 to Domain 2\n",
"e= 11.9*e0*(y<=h)+ 3.9*e0*(y>h) # e changes from Domain 1 to Domain 2\n",
"\n",
"\n",
"p=CellVariable(name='hole',mesh=mesh3,hasOld=True,value=p0)\n",
"n=CellVariable(name='electron',mesh=mesh3,hasOld=True,value=n0)\n",
"psi=CellVariable(name='potential',mesh=mesh3,hasOld=True,value=2.)\n",
"\n",
"p.constrain(p0, where=mesh3.facesLeft)\n",
"n.constrain(n0, where=mesh3.facesLeft)\n",
"psi.constrain(0., where=mesh3.facesLeft)\n",
"psi.constrain(5., where=mesh3.facesRight)\n",
"\n",
"mask1=((y==0)) # Boundary 1\n",
"mask2=((y>h - L/1000) * (y < h)) # Boundary2\n",
"mask3=(y==(h+tox)) # Boundary 3\n",
"largevalue= 1e45\n",
"\n",
"eq1=(TransientTerm(var=n)+DiffusionTerm(coeff=q*Dn,var=n)-ConvectionTerm(coeff=q*un*psi.faceGrad,var=n)\n",
" == ImplicitSourceTerm(coeff=q/1e-6,var=n)-q*n0/1e-6\n",
" - ImplicitSourceTerm(coeff=mask2 * largevalue, var=n) + mask2 * largevalue * n0*numerix.exp(psi/Vth))\n",
"eq2=(TransientTerm(var=p)+DiffusionTerm(coeff=q*Dp,var=p)+ConvectionTerm(coeff=q*up*psi.faceGrad,var=p)\n",
" ==ImplicitSourceTerm(coeff=-q/1e-6,var=p)+q*p0/1e-6\n",
" - ImplicitSourceTerm(coeff=mask2 * largevalue, var=p) + mask2 * largevalue * p0*numerix.exp(-psi/Vth))\n",
"eq3=(TransientTerm(var=psi)+DiffusionTerm(coeff=e,var=psi)==-q*(p-n-N)*(y <= h)+0*(y>h))\n",
"\n",
"eq= eq1 & eq2 & eq3\n",
"\n",
"viewer1=Matplotlib1DViewer(vars=p, axes=plt.subplot(3, 1, 1))\n",
"viewer2=Matplotlib1DViewer(vars=n, axes=plt.subplot(3, 1, 2))\n",
"viewer3=Matplotlib1DViewer(vars=psi, axes=plt.subplot(3, 1, 3))\n",
"plt.tight_layout()\n",
"\n",
"for i in range(100):\n",
" p.updateOld()\n",
" n.updateOld()\n",
" psi.updateOld()\n",
" res=1e10\n",
" while res>1e-1:\n",
" res=eq.sweep(dt=5) # a large time step dt=5 has been chosen because there is no transient term actually present in my pde.\n",
"\n",
" viewer1.plot()\n",
" viewer2.plot()\n",
" viewer3.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Fix transient terms"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We're not interested in transient behavior, but we should at least get the units right (and Poisson's equation is instantaneous)\n",
"\\begin{align}\n",
"q\\frac{\\partial n}{\\partial t} + q D_n \\nabla^2 n - q u_n \\nabla\\cdot\\left(n\\nabla\\psi\\right) &= q\\frac{n - n_0}{10^{-6}}\n",
"\\qquad\\text{in Domain 1}\n",
"\\\\\n",
"q\\frac{\\partial p}{\\partial t} + q D_p \\nabla^2 p + q u_p \\nabla\\cdot\\left(p\\nabla\\psi\\right) &= -q\\frac{p - p_0}{10^{-6}}\n",
"\\qquad\\text{in Domain 1}\n",
"\\\\\n",
"\\varepsilon\\nabla^2\\psi &= -\\left(p - n - N\\right)\n",
"\\qquad\\text{in Domain 1}\n",
"\\\\\n",
"\\varepsilon\\nabla^2\\psi &= 0\n",
"\\qquad\\text{in Domain 2}\n",
"\\end{align}\n",
"which calls for a correspondingly smaller time step."
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {
"ExecuteTime": {
"end_time": "2020-06-11T21:58:38.504696Z",
"start_time": "2020-06-11T21:57:19.412222Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<fipy.viewers.matplotlibViewer.matplotlib1DViewer.Matplotlib1DViewer at 0x7fa610754e50>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from fipy import *\n",
"L= 5e-6\n",
"h= 10e-6\n",
"tox= 0.1*1e-6\n",
"q=1.6*1e-19\n",
"un=0.14\n",
"up=0.045\n",
"Vth=0.026\n",
"Dp= up*Vth\n",
"Dn=un*Vth\n",
"p0= 1e21\n",
"n0= 1e11\n",
"e0=8.854*1e-12\n",
"\n",
"mesh1= Grid1D(dx=h/100,nx=100) # mesh for domain 1 for solving for p and n\n",
"mesh2= Grid1D(dx=tox/10,nx=10)\n",
"mesh3= mesh1+(mesh2+[[h]]) # mesh for Domain 1 and Domain 2 for solving for psi\n",
"\n",
"y = mesh3.cellCenters[0]\n",
"\n",
"\n",
"N= 1e21*(y<=h) # N changes from Domain 1 to Domain 2\n",
"e= 11.9*e0*(y<=h)+ 3.9*e0*(y>h) # e changes from Domain 1 to Domain 2\n",
"\n",
"\n",
"p=CellVariable(name='hole',mesh=mesh3,hasOld=True,value=p0)\n",
"n=CellVariable(name='electron',mesh=mesh3,hasOld=True,value=n0)\n",
"psi=CellVariable(name='potential',mesh=mesh3,hasOld=True,value=2.)\n",
"\n",
"p.constrain(p0, where=mesh3.facesLeft)\n",
"n.constrain(n0, where=mesh3.facesLeft)\n",
"psi.constrain(0., where=mesh3.facesLeft)\n",
"psi.constrain(5., where=mesh3.facesRight)\n",
"\n",
"mask1=((y==0)) # Boundary 1\n",
"mask2=((y>h - L/1000) * (y < h)) # Boundary2\n",
"mask3=(y==(h+tox)) # Boundary 3\n",
"largevalue= 1e45\n",
"\n",
"eq1=(TransientTerm(coeff=q, var=n)+DiffusionTerm(coeff=q*Dn,var=n)-ConvectionTerm(coeff=q*un*psi.faceGrad,var=n)\n",
" == ImplicitSourceTerm(coeff=q/1e-6,var=n)-q*n0/1e-6\n",
" - ImplicitSourceTerm(coeff=mask2 * largevalue, var=n) + mask2 * largevalue * n0*numerix.exp(psi/Vth))\n",
"eq2=(TransientTerm(coeff=q, var=p)+DiffusionTerm(coeff=q*Dp,var=p)+ConvectionTerm(coeff=q*up*psi.faceGrad,var=p)\n",
" ==ImplicitSourceTerm(coeff=-q/1e-6,var=p)+q*p0/1e-6\n",
" - ImplicitSourceTerm(coeff=mask2 * largevalue, var=p) + mask2 * largevalue * p0*numerix.exp(-psi/Vth))\n",
"eq3=(DiffusionTerm(coeff=e,var=psi)==-q*(p-n-N)*(y <= h)+0*(y>h))\n",
"\n",
"eq= eq1 & eq2 & eq3\n",
"\n",
"viewer1=Matplotlib1DViewer(vars=p, axes=plt.subplot(3, 1, 1))\n",
"viewer2=Matplotlib1DViewer(vars=n, axes=plt.subplot(3, 1, 2))\n",
"viewer3=Matplotlib1DViewer(vars=psi, axes=plt.subplot(3, 1, 3))\n",
"plt.tight_layout()\n",
"\n",
"for i in range(100):\n",
" p.updateOld()\n",
" n.updateOld()\n",
" psi.updateOld()\n",
" res=1e10\n",
" while res>5:\n",
" res=eq.sweep(dt=1e-20) # a large time step dt=5 has been chosen because there is no transient term actually present in my pde.\n",
" print res\n",
"\n",
" viewer1.plot()\n",
" viewer2.plot()\n",
" viewer3.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Close examination of `mask2` shows that the internal boundary condition is not applied at all:\n",
"```python\n",
"mask2=((y>h - L/1000) * (y < h))\n",
"```\n",
"is `False` everywhere. The lower bound should be `(y>h - h/100)` to encompass the cell(s) immediately below `h`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Fix internal boundary mask\n",
"\n",
"Making this correction, however, results in a singular matrix error"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {
"ExecuteTime": {
"end_time": "2020-06-11T22:01:38.437431Z",
"start_time": "2020-06-11T22:01:37.547837Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/guyer/anaconda/envs/fipy/lib/python2.7/site-packages/ipykernel_launcher.py:50: UserWarning: Matplotlib1DViewer efficiency is improved by setting the 'datamax' and 'datamin' keys\n",
"/Users/guyer/anaconda/envs/fipy/lib/python2.7/site-packages/ipykernel_launcher.py:51: UserWarning: Matplotlib1DViewer efficiency is improved by setting the 'datamax' and 'datamin' keys\n",
"/Users/guyer/anaconda/envs/fipy/lib/python2.7/site-packages/ipykernel_launcher.py:52: UserWarning: Matplotlib1DViewer efficiency is improved by setting the 'datamax' and 'datamin' keys\n"
]
},
{
"ename": "RuntimeError",
"evalue": "Factor is exactly singular",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-123-f299b1e21e30>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1e10\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 60\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0;36m1e-1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 61\u001b[0;31m \u001b[0mres\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0meq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msweep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdt\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1e-20\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# a large time step dt=5 has been chosen because there is no transient term actually present in my pde.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 62\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0mviewer1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/term.pyc\u001b[0m in \u001b[0;36msweep\u001b[0;34m(self, var, solver, boundaryConditions, dt, underRelaxation, residualFn, cacheResidual, cacheError)\u001b[0m\n\u001b[1;32m 230\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresidualVector\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 231\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 232\u001b[0;31m \u001b[0msolver\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_solve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 233\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 234\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresidual\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/solvers/pysparse/pysparseSolver.pyc\u001b[0m in \u001b[0;36m_solve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 72\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mSolutionVariableNumberError\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 73\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 74\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_solve_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mRHSvector\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 75\u001b[0m \u001b[0mfactor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munit\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 76\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mfactor\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/solvers/pysparse/linearLUSolver.pyc\u001b[0m in \u001b[0;36m_solve_\u001b[0;34m(self, L, x, b)\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mmaxdiag\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 60\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 61\u001b[0;31m \u001b[0mLU\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msuperlu\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactorize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mL\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_csr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 62\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mDEBUG\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mRuntimeError\u001b[0m: Factor is exactly singular"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaYAAAEYCAYAAAAXsVIGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi40LCBodHRwOi8vbWF0cGxvdGxpYi5vcmcv7US4rQAAIABJREFUeJzt3XuYVNWd7//3R0Q4KipXD9po4wxGQFGxo3j8jZd4hcQwcdSjM8Zr5GCMOc6Mv+cYzYkkMZPEZEx+Gg3BaADviR4jyVETJTIYFRWUeAExiKgdjNy84BAMyPf3x14N1W13V3V3FbWr+/N6nnp6115r7bX29+mub+9Lra2IwMzMLC+2q/YAzMzMCjkxmZlZrjgxmZlZrjgxmZlZrjgxmZlZrjgxmZlZrjgxmZWRpOWSjutEu5D0t5UYk1mtcWIyM7NccWIyM7NccWIyK7+DJD0v6T1Jd0vqCyDpQklLJa2VNEvSHq01ltRH0vclvSHpbUlTJf2XbbsLZtXjxGRWfqcDJwHDgTHAuZI+BXw7lQ0FXgfuaqP9d4F9gYOAvwX2BL5W4TGb5UZuE5OkWyStlPRiCXX/RdKi9F/qbEl7F5Q9JOldSb+u7IjNtrguIlZExFrgV2QJ5p+AWyLi2Yj4EPgKcLik+sKGkgRcCPxzRKyNiHXAvwFnbMsdMKum3CYmYDrZf52leA5oiIgxwD3ANQVl3wM+X96hmbXrzwXL64GdgT3IjpIAiIgPgDVkR0OFBgM7AgvSP1TvAg+l9WY9Qm4TU0TMBdYWrpP0N+kIaIGkxyTtl+o+GhHrU7V5QF3BdmYD67bVuM3asAIoPJLfCRgI/KlFvdXAX4DREbFbeu0aETtvu6GaVVduE1MbpgGXRMQhwGXAja3UuQB4cJuOyqy4O4DzJB0kqQ/Z6bmnImJ5YaWI2AzcBPxA0hAASXtKOnFbD9isWrav9gBKJWln4L8Bv8hOwwPQp0Wds4AG4KhtOzqz9kXEbEn/G7gX6A88QdvXjf4X2c0O8yQNIjuq+jHwm20xVrNqU54fFJguDP86IvaXtAuwJCKGtlH3OOB64KiIWNmi7Gjgsoj4TGVHbGZmXVUzp/Ii4n3gNUmnQXb3kqQD0/LBwE+Az7ZMSmZmVltye8Qk6U7gaGAQ8DZwFfA7slMaQ4HewF0R8Q1JjwAHAG+l5m9ExGfTdh4D9iO7M2oNcEFE+JSImVlO5TYxmZlZz1T0VF6xL7qmU2rXpalWnpc0tqBsuaQXJC2UNL+cAzczs+6plLvypgM/Ama2UT4eGJFeh5GdajusoPyYiFjdkUENGjQo6uvrO9LEzMxybsGCBasjouiXxYsmpoiY23LalBYmAjMjOyc4T9JukoZGxFvttGlXfX098+f7AMvMrDuR9HrxWuW5K29P4M2C941snWYlgN+mmRomlaEvMzPr5srxBVu1sq7pjoojImJF+gb7w5JeTlMNfXwjWeKaBLDXXnuVYVhmZlaLynHE1AgMK3hfRzYvGBHR9HMlcB9waFsbiYhpEdEQEQ2DB3u+SjOznqocR0yzgC9Juovspof3IuKtNEnldhGxLi2fAHyjs51s3LiRxsZGNmzYUIYh50/fvn2pq6ujd+/e1R6KmVlVFU1MhV90ldRI9kXX3gARMRV4AJgALCWb4v+81HR34L40r932wB0R8VBnB9rY2Ei/fv2or6+nYK68biEiWLNmDY2NjQwfPrzawzEzq6pS7so7s0h5ABe3sn4ZcGDnh9bchg0bumVSApDEwIEDWbVqVbWHYmZWdTUzVx7QLZNSk+68b2ZmHVFTicnMzLo/J6YSLV++nP3337/k+ueeey733HNPBUdkZtY9OTGZmVmuODF1wEcffcSFF17I6NGjOeGEE/jLX/7CwoULGTduHGPGjOFzn/sc77zzzsfaLViwgKOOOopDDjmEE088kbfe6vRsTWZm3V7NPFq90Nd/9RKLVrxf1m2O2mMXrjp5dLt1/vjHP3LnnXdy0003cfrpp3PvvfdyzTXXcP3113PUUUfxta99ja9//ev88Ic/3NJm48aNXHLJJdx///0MHjyYu+++myuvvJJbbrmlrOM3M+suajIxVcvw4cM56KCDADjkkEN49dVXeffddznqqKMAOOecczjttNOatVmyZAkvvvgixx9/PJAddQ0d2urT4c3MjBpNTMWObCqlT58+W5Z79erFu+++W7RNRDB69GiefPLJSg7NzKzb8DWmLth1113p378/jz32GAC33nrrlqOnJp/4xCdYtWrVlsS0ceNGXnrppW0+VjOzWlGTR0x5MmPGDCZPnsz69evZZ599+NnPftasfIcdduCee+7hy1/+Mu+99x6bNm3i0ksvZfTo6hz1mZnlnbIZ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\n",
"text/plain": [
"<Figure size 432x288 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from fipy import *\n",
"L= 5e-6\n",
"h= 10e-6\n",
"tox= 0.1*1e-6\n",
"q=1.6*1e-19\n",
"un=0.14\n",
"up=0.045\n",
"Vth=0.026\n",
"Dp= up*Vth\n",
"Dn=un*Vth\n",
"p0= 1e21\n",
"n0= 1e11\n",
"e0=8.854*1e-12\n",
"\n",
"mesh1= Grid1D(dx=h/100,nx=100) # mesh for domain 1 for solving for p and n\n",
"mesh2= Grid1D(dx=tox/10,nx=10)\n",
"mesh3= mesh1+(mesh2+[[h]]) # mesh for Domain 1 and Domain 2 for solving for psi\n",
"\n",
"y = mesh3.cellCenters[0]\n",
"\n",
"\n",
"N= 1e21*(y<=h) # N changes from Domain 1 to Domain 2\n",
"e= 11.9*e0*(y<=h)+ 3.9*e0*(y>h) # e changes from Domain 1 to Domain 2\n",
"\n",
"\n",
"p=CellVariable(name='hole',mesh=mesh3,hasOld=True,value=p0)\n",
"n=CellVariable(name='electron',mesh=mesh3,hasOld=True,value=n0)\n",
"psi=CellVariable(name='potential',mesh=mesh3,hasOld=True,value=2.)\n",
"\n",
"p.constrain(p0, where=mesh3.facesLeft)\n",
"n.constrain(n0, where=mesh3.facesLeft)\n",
"psi.constrain(0., where=mesh3.facesLeft)\n",
"psi.constrain(5., where=mesh3.facesRight)\n",
"\n",
"mask1=((y==0)) # Boundary 1\n",
"mask2=((y>h - h/100) * (y < h)) # Boundary2\n",
"mask3=(y==(h+tox)) # Boundary 3\n",
"largevalue= 1e45\n",
"\n",
"eq1=(TransientTerm(coeff=q, var=n)+DiffusionTerm(coeff=q*Dn,var=n)-ConvectionTerm(coeff=q*un*psi.faceGrad,var=n)\n",
" == ImplicitSourceTerm(coeff=q/1e-6,var=n)-q*n0/1e-6\n",
" - ImplicitSourceTerm(coeff=mask2 * largevalue, var=n) + mask2 * largevalue * n0*numerix.exp(psi/Vth))\n",
"eq2=(TransientTerm(coeff=q, var=p)+DiffusionTerm(coeff=q*Dp,var=p)+ConvectionTerm(coeff=q*up*psi.faceGrad,var=p)\n",
" ==ImplicitSourceTerm(coeff=-q/1e-6,var=p)+q*p0/1e-6\n",
" - ImplicitSourceTerm(coeff=mask2 * largevalue, var=p) + mask2 * largevalue * p0*numerix.exp(-psi/Vth))\n",
"eq3=(DiffusionTerm(coeff=e,var=psi)==-q*(p-n-N)*(y <= h)+0*(y>h))\n",
"\n",
"eq= eq1 & eq2 & eq3\n",
"\n",
"viewer1=Matplotlib1DViewer(vars=p, axes=plt.subplot(3, 1, 1))\n",
"viewer2=Matplotlib1DViewer(vars=n, axes=plt.subplot(3, 1, 2))\n",
"viewer3=Matplotlib1DViewer(vars=psi, axes=plt.subplot(3, 1, 3))\n",
"plt.tight_layout()\n",
"\n",
"for i in range(100):\n",
" p.updateOld()\n",
" n.updateOld()\n",
" psi.updateOld()\n",
" res=1e10\n",
" while res>1e-1:\n",
" res=eq.sweep(dt=1e-20) # a large time step dt=5 has been chosen because there is no transient term actually present in my pde.\n",
"\n",
" viewer1.plot()\n",
" viewer2.plot()\n",
" viewer3.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Remove internal boundary"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We simplify by discarding the oxide layer, such that\n",
"\\begin{align}\n",
"q\\frac{\\partial n}{\\partial t} + q D_n \\nabla^2 n - q u_n \\nabla\\cdot\\left(n\\nabla\\psi\\right) &= q\\frac{n - n_0}{10^{-6}}\n",
"\\\\\n",
"q\\frac{\\partial p}{\\partial t} + q D_p \\nabla^2 p + q u_p \\nabla\\cdot\\left(p\\nabla\\psi\\right) &= -q\\frac{p - p_0}{10^{-6}}\n",
"\\\\\n",
"\\varepsilon\\nabla^2\\psi &= -\\left(p - n - N\\right)\n",
"\\end{align}\n",
"subjected to the boundary conditions\n",
"\\begin{align}\n",
"p(x, 0) &= p_0 & p(x, h) &= p_0 \\exp(-\\psi/V_{th})\n",
"\\\\\n",
"n(x, 0) &= n_0 & n(x, h) &= n_0 \\exp(\\psi/V_{th})\n",
"\\\\\n",
"\\psi(x, 0) &= 0 & \\psi(x, h) &= 5\n",
"\\end{align}"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {
"ExecuteTime": {
"end_time": "2020-06-11T22:02:13.128103Z",
"start_time": "2020-06-11T22:01:48.146512Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/guyer/anaconda/envs/fipy/lib/python2.7/site-packages/ipykernel_launcher.py:45: UserWarning: Matplotlib1DViewer efficiency is improved by setting the 'datamax' and 'datamin' keys\n",
"/Users/guyer/anaconda/envs/fipy/lib/python2.7/site-packages/ipykernel_launcher.py:46: UserWarning: Matplotlib1DViewer efficiency is improved by setting the 'datamax' and 'datamin' keys\n",
"/Users/guyer/anaconda/envs/fipy/lib/python2.7/site-packages/ipykernel_launcher.py:47: UserWarning: Matplotlib1DViewer efficiency is improved by setting the 'datamax' and 'datamin' keys\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.4244701192787148e+82\n",
"1.4003570002138142e+82\n",
"3.1660061049496584e+146\n",
"6.931674235302037e+128\n",
"7.213899827064777e+87\n",
"2.3817051317718447e+139\n",
"2.766090011983104e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.669398465323973e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3644283542872515e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.4345284983872804e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.753630772236768e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.501202042614919e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.670470240171486e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"1.5419213665243502e+68\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"1.5335898074890342e+68\n",
"4.7634102635436893e+139\n",
"1.5419311333689097e+68\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"1.5504255642673444e+68\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.669839579043067e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.670085459279605e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.670605344236497e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.141999000343407e+66\n",
"2.3817051317718447e+139\n",
"2.7449388791681946e+66\n",
"4.7634102635436893e+139\n",
"3.1947529352372692e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.839816127825459e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.671607451655152e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3796651582508957e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.5086514608936105e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3897264837644693e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.669588678002817e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.4603466388079277e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.753776756805238e+67\n",
"2.3817051317718447e+139\n",
"7.670117633668047e+67\n",
"4.7634102635436893e+139\n",
"7.923172279164621e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.753546510079185e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.756004632316464e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.669460510634683e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.18878646781284e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.340831847810373e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"1.5504440904642056e+68\n",
"7.92405687796628e+67\n",
"4.7634102635436893e+139\n",
"1.984170433121129e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.501537557350531e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.37211892325123e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.836905915370423e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.409064060904591e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.0663423280213125e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"1.5334846235816e+68\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.47175399156531e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.233040668044892e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.552532278178294e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.1539298161342964e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"1.923652461972976e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.753883790783084e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.837696077287154e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.4341675841040038e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.271271094314162e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"1.5418768119509938e+68\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.9770429159742092e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.838570920973277e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"1.871364386319019e+66\n",
"2.3817051317718447e+139\n",
"7.83901915204793e+67\n",
"2.3817051317718447e+139\n",
"7.669151767789887e+67\n",
"2.3817051317718447e+139\n",
"2.2363340292478236e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.1514567220809355e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.671574924892924e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"1.694757909871992e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.120800453690055e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.670855635083185e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"4.7634102635436893e+139\n",
"2.165443010358068e+66\n",
"2.3817051317718447e+139\n",
"7.75388658465295e+67\n",
"4.7634102635436893e+139\n",
"2.3749893185065932e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.502271750475214e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.838690136043707e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"1.6036977935081171e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.5764037423621078e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.8562875113252778e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.278754021189682e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.837770185064991e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.839749428222794e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.669939154159169e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.223938217950737e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.584567598833294e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.754152145560655e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.671170821985639e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.0263638842129617e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.584786369788448e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"1.5418940930965339e+68\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.587080770402337e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.585403840192867e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.5344025442316006e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.1847876952325613e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.2878437215698608e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.838579529472935e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.669392104135019e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.668963710284953e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.837965412074507e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.670035839933561e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.585736556875867e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.3817051317718447e+139\n",
"1.525108992542584e+68\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.754145735485265e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.265744470316608e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.83732311173739e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.668507686634996e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.671128779667718e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.668995174068144e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"1.5419763539512437e+68\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.671399458479257e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.50201145747021e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.502801134854846e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.755838787668823e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.2338365285011336e+66\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"7.755556934159097e+67\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.3817051317718447e+139\n",
"2.8125634836142318e+66\n"
]
},
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-124-420429843d85>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1e10\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0;36m1e-1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 56\u001b[0;31m \u001b[0mres\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0meq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msweep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdt\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1e-20\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# a large time step dt=5 has been chosen because there is no transient term actually present in my pde.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 57\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/term.pyc\u001b[0m in \u001b[0;36msweep\u001b[0;34m(self, var, solver, boundaryConditions, dt, underRelaxation, residualFn, cacheResidual, cacheError)\u001b[0m\n\u001b[1;32m 212\u001b[0m \u001b[0;34m`\u001b[0m\u001b[0mTerm\u001b[0m\u001b[0;34m`\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 213\u001b[0m \"\"\"\n\u001b[0;32m--> 214\u001b[0;31m \u001b[0msolver\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_prepareLinearSystem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msolver\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msolver\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mboundaryConditions\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mboundaryConditions\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdt\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 215\u001b[0m \u001b[0msolver\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_applyUnderRelaxation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0munderRelaxation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0munderRelaxation\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 216\u001b[0m \u001b[0mresidual\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msolver\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_calcResidual\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresidualFn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mresidualFn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/term.pyc\u001b[0m in \u001b[0;36m_prepareLinearSystem\u001b[0;34m(self, var, solver, boundaryConditions, dt)\u001b[0m\n\u001b[1;32m 128\u001b[0m \u001b[0mtransientGeomCoeff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getTransientGeomCoeff\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 129\u001b[0m \u001b[0mdiffusionGeomCoeff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getDiffusionGeomCoeff\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 130\u001b[0;31m buildExplicitIfOther=self._buildExplcitIfOther)\n\u001b[0m\u001b[1;32m 131\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 132\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_buildCache\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mRHSvector\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/coupledBinaryTerm.pyc\u001b[0m in \u001b[0;36m_buildAndAddMatrices\u001b[0;34m(self, var, SparseMatrix, boundaryConditions, dt, transientGeomCoeff, diffusionGeomCoeff, buildExplicitIfOther)\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[0mtransientGeomCoeff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0muncoupledTerm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getTransientGeomCoeff\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtmpVar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 87\u001b[0m \u001b[0mdiffusionGeomCoeff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0muncoupledTerm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getDiffusionGeomCoeff\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtmpVar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 88\u001b[0;31m buildExplicitIfOther=buildExplicitIfOther)\n\u001b[0m\u001b[1;32m 89\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[0mtermMatrix\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0mtmpMatrix\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/binaryTerm.pyc\u001b[0m in \u001b[0;36m_buildAndAddMatrices\u001b[0;34m(self, var, SparseMatrix, boundaryConditions, dt, transientGeomCoeff, diffusionGeomCoeff, buildExplicitIfOther)\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[0mtransientGeomCoeff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtransientGeomCoeff\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[0mdiffusionGeomCoeff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdiffusionGeomCoeff\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 34\u001b[0;31m buildExplicitIfOther=buildExplicitIfOther)\n\u001b[0m\u001b[1;32m 35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[0mmatrix\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0mtmpMatrix\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/binaryTerm.pyc\u001b[0m in \u001b[0;36m_buildAndAddMatrices\u001b[0;34m(self, var, SparseMatrix, boundaryConditions, dt, transientGeomCoeff, diffusionGeomCoeff, buildExplicitIfOther)\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[0mtransientGeomCoeff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtransientGeomCoeff\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[0mdiffusionGeomCoeff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdiffusionGeomCoeff\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 34\u001b[0;31m buildExplicitIfOther=buildExplicitIfOther)\n\u001b[0m\u001b[1;32m 35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[0mmatrix\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0mtmpMatrix\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/binaryTerm.pyc\u001b[0m in \u001b[0;36m_buildAndAddMatrices\u001b[0;34m(self, var, SparseMatrix, boundaryConditions, dt, transientGeomCoeff, diffusionGeomCoeff, buildExplicitIfOther)\u001b[0m\n\u001b[1;32m 32\u001b[0m \u001b[0mtransientGeomCoeff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtransientGeomCoeff\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[0mdiffusionGeomCoeff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdiffusionGeomCoeff\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 34\u001b[0;31m buildExplicitIfOther=buildExplicitIfOther)\n\u001b[0m\u001b[1;32m 35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 36\u001b[0m \u001b[0mmatrix\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0mtmpMatrix\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/unaryTerm.pyc\u001b[0m in \u001b[0;36m_buildAndAddMatrices\u001b[0;34m(self, var, SparseMatrix, boundaryConditions, dt, transientGeomCoeff, diffusionGeomCoeff, buildExplicitIfOther)\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0mdt\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdt\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0mtransientGeomCoeff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtransientGeomCoeff\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 67\u001b[0;31m diffusionGeomCoeff=diffusionGeomCoeff)\n\u001b[0m\u001b[1;32m 68\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mbuildExplicitIfOther\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 69\u001b[0m _, matrix, RHSvector = self._buildMatrix(self.var,\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/abstractDiffusionTerm.pyc\u001b[0m in \u001b[0;36m_buildMatrix\u001b[0;34m(self, var, SparseMatrix, boundaryConditions, dt, transientGeomCoeff, diffusionGeomCoeff)\u001b[0m\n\u001b[1;32m 285\u001b[0m \"\"\"\n\u001b[1;32m 286\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 287\u001b[0;31m \u001b[0mvar\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mL\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__higherOrderbuildMatrix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSparseMatrix\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mboundaryConditions\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mboundaryConditions\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdt\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtransientGeomCoeff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtransientGeomCoeff\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdiffusionGeomCoeff\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdiffusionGeomCoeff\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 288\u001b[0m \u001b[0mmesh\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvar\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmesh\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 289\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/abstractDiffusionTerm.pyc\u001b[0m in \u001b[0;36m__higherOrderbuildMatrix\u001b[0;34m(self, var, SparseMatrix, boundaryConditions, dt, transientGeomCoeff, diffusionGeomCoeff)\u001b[0m\n\u001b[1;32m 407\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 408\u001b[0m L, b = self.__doBCs(SparseMatrix, higherOrderBCs, N, M, self.coeffDict,\n\u001b[0;32m--> 409\u001b[0;31m self.__getCoefficientMatrix(SparseMatrix, var, self.coeffDict['cell 1 diag']), numerix.zeros(len(var.ravel()), 'd'))\n\u001b[0m\u001b[1;32m 410\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 411\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'anisotropySource'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/abstractDiffusionTerm.pyc\u001b[0m in \u001b[0;36m__getCoefficientMatrix\u001b[0;34m(self, SparseMatrix, var, coeff)\u001b[0m\n\u001b[1;32m 191\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 192\u001b[0m \u001b[0mcoefficientMatrix\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mSparseMatrix\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmesh\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmesh\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbandwidth\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmesh\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_maxFacesPerCell\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 193\u001b[0;31m \u001b[0minteriorCoeff\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnumerix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtake\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcoeff\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minteriorFaces\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mravel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 194\u001b[0m \u001b[0mcoefficientMatrix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maddAt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minteriorCoeff\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mid1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mravel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mid1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mswapaxes\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mravel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 195\u001b[0m \u001b[0mcoefficientMatrix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maddAt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0minteriorCoeff\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mid1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mravel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mid2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mswapaxes\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mravel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/tools/numerix.pyc\u001b[0m in \u001b[0;36mtake\u001b[0;34m(a, indices, axis, fill_value)\u001b[0m\n\u001b[1;32m 600\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 601\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0m_isPhysical\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 602\u001b[0;31m \u001b[0mtaken\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtake\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindices\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 603\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mindices\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mMA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 604\u001b[0m \u001b[0;31m## Replaces `MA.take`. `MA.take` does not always work when\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/variables/variable.pyc\u001b[0m in \u001b[0;36mtake\u001b[0;34m(self, ids, axis)\u001b[0m\n\u001b[1;32m 1463\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1464\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mtake\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mids\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1465\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mnumerix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtake\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mids\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1466\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1467\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mallclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrtol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1.e-5\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0matol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1.e-8\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/variables/variable.pyc\u001b[0m in \u001b[0;36m_getValue\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 495\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_setValueInternal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 496\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 497\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_setValueInternal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 498\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_markFresh\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 499\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/variables/variable.pyc\u001b[0m in \u001b[0;36m_setValueInternal\u001b[0;34m(self, value, unit, array)\u001b[0m\n\u001b[1;32m 622\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 623\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_setValueInternal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0munit\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marray\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 624\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_value\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_makeValue\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0munit\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0munit\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marray\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 625\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 626\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_makeValue\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0munit\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marray\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/variables/variable.pyc\u001b[0m in \u001b[0;36m_makeValue\u001b[0;34m(self, value, unit, array)\u001b[0m\n\u001b[1;32m 659\u001b[0m \u001b[0marray\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 660\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0marray\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 661\u001b[0;31m \u001b[0;32melif\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnumerix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnumerix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mMA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 662\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnumerix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 663\u001b[0m \u001b[0;31m## # numerix does strange things with really large integers.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/anaconda/envs/fipy/lib/python2.7/site-packages/numpy/ma/core.pyc\u001b[0m in \u001b[0;36marray\u001b[0;34m(data, dtype, copy, order, mask, fill_value, keep_mask, hard_mask, shrink, subok, ndmin)\u001b[0m\n\u001b[1;32m 6375\u001b[0m \u001b[0msubok\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msubok\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkeep_mask\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkeep_mask\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6376\u001b[0m \u001b[0mhard_mask\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhard_mask\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfill_value\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6377\u001b[0;31m ndmin=ndmin, shrink=shrink, order=order)\n\u001b[0m\u001b[1;32m 6378\u001b[0m \u001b[0marray\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__doc__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmasked_array\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__doc__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6379\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/anaconda/envs/fipy/lib/python2.7/site-packages/numpy/ma/core.pyc\u001b[0m in \u001b[0;36m__new__\u001b[0;34m(cls, data, mask, dtype, copy, subok, ndmin, fill_value, keep_mask, hard_mask, shrink, order, **options)\u001b[0m\n\u001b[1;32m 2786\u001b[0m \u001b[0;31m# Process data.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2787\u001b[0m _data = np.array(data, dtype=dtype, copy=copy,\n\u001b[0;32m-> 2788\u001b[0;31m order=order, subok=True, ndmin=ndmin)\n\u001b[0m\u001b[1;32m 2789\u001b[0m \u001b[0m_baseclass\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'_baseclass'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_data\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2790\u001b[0m \u001b[0;31m# Check that we're not erasing the mask.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from fipy import *\n",
"L= 5e-6\n",
"h= 10e-6\n",
"tox= 0.1*1e-6\n",
"q=1.6*1e-19\n",
"un=0.14\n",
"up=0.045\n",
"Vth=0.026\n",
"Dp= up*Vth\n",
"Dn=un*Vth\n",
"p0= 1e21\n",
"n0= 1e11\n",
"e0=8.854*1e-12\n",
"\n",
"mesh1= Grid1D(dx=h/100,nx=100) # mesh for domain 1 for solving for p and n\n",
"mesh2= Grid1D(dx=tox/10,nx=10)\n",
"mesh3= mesh1\n",
"\n",
"y = mesh3.cellCenters[0]\n",
"\n",
"\n",
"N= 1e21*(y<=h) # N changes from Domain 1 to Domain 2\n",
"e= 11.9*e0*(y<=h)+ 3.9*e0*(y>h) # e changes from Domain 1 to Domain 2\n",
"\n",
"\n",
"p=CellVariable(name='hole',mesh=mesh3,hasOld=True,value=p0)\n",
"n=CellVariable(name='electron',mesh=mesh3,hasOld=True,value=n0)\n",
"psi=CellVariable(name='potential',mesh=mesh3,hasOld=True,value=2.)\n",
"\n",
"p.constrain(p0, where=mesh3.facesLeft)\n",
"p.constrain(p0*numerix.exp(-psi.faceValue/Vth), where=mesh3.facesRight)\n",
"n.constrain(n0, where=mesh3.facesLeft)\n",
"p.constrain(n0*numerix.exp(psi.faceValue/Vth), where=mesh3.facesRight)\n",
"psi.constrain(0., where=mesh3.facesLeft)\n",
"psi.constrain(5., where=mesh3.facesRight)\n",
"\n",
"eq1=(TransientTerm(coeff=q, var=n)+DiffusionTerm(coeff=q*Dn,var=n)-ConvectionTerm(coeff=q*un*psi.faceGrad,var=n)\n",
" == ImplicitSourceTerm(coeff=q/1e-6,var=n)-q*n0/1e-6)\n",
"eq2=(TransientTerm(coeff=q, var=p)+DiffusionTerm(coeff=q*Dp,var=p)+ConvectionTerm(coeff=q*up*psi.faceGrad,var=p)\n",
" ==ImplicitSourceTerm(coeff=-q/1e-6,var=p)+q*p0/1e-6)\n",
"eq3=(DiffusionTerm(coeff=e,var=psi)==-q*(p-n-N)*(y <= h)+0*(y>h))\n",
"\n",
"eq= eq1 & eq2 & eq3\n",
"\n",
"viewer1=Matplotlib1DViewer(vars=p, axes=plt.subplot(3, 1, 1))\n",
"viewer2=Matplotlib1DViewer(vars=n, axes=plt.subplot(3, 1, 2))\n",
"viewer3=Matplotlib1DViewer(vars=psi, axes=plt.subplot(3, 1, 3))\n",
"plt.tight_layout()\n",
"\n",
"for i in range(100):\n",
" p.updateOld()\n",
" n.updateOld()\n",
" psi.updateOld()\n",
" res=1e10\n",
" while res>1e-1:\n",
" res=eq.sweep(dt=1e-20) # a large time step dt=5 has been chosen because there is no transient term actually present in my pde.\n",
" print res\n",
"\n",
"viewer1.plot()\n",
"viewer2.plot()\n",
"viewer3.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This formulation diverges badly"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Newton-Raphson"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2020-06-09T02:31:01.242296Z",
"start_time": "2020-06-09T02:31:01.232042Z"
}
},
"source": [
"The Jacobian for these equations is (loosely)\n",
"\\begin{align}\n",
"q\\frac{\\partial \\delta n}{\\partial t} + q D_n \\nabla^2 \\delta n - q u_n \\nabla\\cdot\\left(\\delta n\\nabla\\psi\\right) - q u_n \\nabla\\cdot\\left(n\\nabla\\delta\\psi\\right) &= q\\frac{\\delta n}{10^{-6}}\n",
"\\\\\n",
"q\\frac{\\partial \\delta p}{\\partial t} + q D_p \\nabla^2 \\delta p + q u_p \\nabla\\cdot\\left(\\delta p\\nabla\\psi\\right) + q u_p \\nabla\\cdot\\left(p\\nabla\\delta\\psi\\right) &= -q\\frac{\\delta p}{10^{-6}}\n",
"\\\\\n",
"\\varepsilon\\nabla^2\\delta \\psi &= -\\left(\\delta p - \\delta n\\right)\n",
"\\end{align}\n",
"subjected to the boundary conditions\n",
"\\begin{align}\n",
"\\delta p(x, 0) &= \\delta p(x, h) = 0\n",
"\\\\\n",
"\\delta n(x, 0) &= \\delta n(x, h) = 0\n",
"\\\\\n",
"\\delta \\psi(x, 0) &= \\delta \\psi(x, h) = 0\n",
"\\end{align}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is not possible to solve the biased problem from an arbitrary solution, so we start at zero bias and step up.\n",
"\n",
"Time step, sweeping conditions, and damping are chosen by trial and error."
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {
"ExecuteTime": {
"end_time": "2020-06-11T22:06:35.352894Z",
"start_time": "2020-06-11T22:03:54.983630Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<fipy.viewers.matplotlibViewer.matplotlib1DViewer.Matplotlib1DViewer at 0x7fa5f07e5190>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.6000000000000001\n",
"n: -1.303430e+21 =?= 1.052399e+21\n",
"p: -1.936522e+15 =?= 9.502101e+10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/powerLawConvectionTerm.py:75: RuntimeWarning: overflow encountered in multiply\n",
" tmpSqr = tmp * tmp\n",
"/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/powerLawConvectionTerm.py:79: RuntimeWarning: overflow encountered in multiply\n",
" tmpSqr = tmp * tmp\n"
]
},
{
"ename": "RuntimeError",
"evalue": "Factor is exactly singular",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-126-1a0d52621ef6>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 99\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1e10\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 100\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0msweep\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 101\u001b[0;31m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdeq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msweep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdt\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1.e-12\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 102\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mdamp_concentration\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 103\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mdamp_concentration\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/term.pyc\u001b[0m in \u001b[0;36msweep\u001b[0;34m(self, var, solver, boundaryConditions, dt, underRelaxation, residualFn, cacheResidual, cacheError)\u001b[0m\n\u001b[1;32m 230\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresidualVector\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 231\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 232\u001b[0;31m \u001b[0msolver\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_solve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 233\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 234\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresidual\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/solvers/pysparse/pysparseSolver.pyc\u001b[0m in \u001b[0;36m_solve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 72\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mSolutionVariableNumberError\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 73\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 74\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_solve_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mRHSvector\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 75\u001b[0m \u001b[0mfactor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munit\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 76\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mfactor\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/solvers/pysparse/linearLUSolver.pyc\u001b[0m in \u001b[0;36m_solve_\u001b[0;34m(self, L, x, b)\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mmaxdiag\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 60\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 61\u001b[0;31m \u001b[0mLU\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msuperlu\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactorize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mL\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_csr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 62\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mDEBUG\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mRuntimeError\u001b[0m: Factor is exactly singular"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import fipy as fp\n",
"L= 5e-6\n",
"h= 10e-6\n",
"tox= 0.1*1e-6\n",
"q=1.6*1e-19\n",
"un=0.14\n",
"up=0.045\n",
"Vth=0.026\n",
"Dp= up*Vth\n",
"Dn=un*Vth\n",
"p0= 1e21\n",
"n0= 1e11\n",
"e0=8.854*1e-12\n",
"\n",
"mesh1= fp.Grid1D(dx=h/100,nx=100) # mesh for domain 1 for solving for p and n\n",
"mesh2= fp.Grid1D(dx=tox/10,nx=10)\n",
"mesh3= mesh1\n",
"\n",
"y = mesh3.cellCenters[0]\n",
"\n",
"\n",
"N= 1e21*(y<=h) # N changes from Domain 1 to Domain 2\n",
"e= 11.9*e0*(y<=h)+ 3.9*e0*(y>h) # e changes from Domain 1 to Domain 2\n",
"\n",
"\n",
"p=fp.CellVariable(name='hole',mesh=mesh3,hasOld=True,value=p0)\n",
"n=fp.CellVariable(name='electron',mesh=mesh3,hasOld=True,value=n0)\n",
"psi=fp.CellVariable(name='potential',mesh=mesh3,hasOld=True,value=0.)\n",
"\n",
"bias = fp.Variable(0.)\n",
"\n",
"psi.constrain(0., where=mesh3.facesLeft)\n",
"psi.constrain(bias, where=mesh3.facesRight)\n",
"p.constrain(p0, where=mesh3.facesLeft)\n",
"p.constrain(p0*fp.numerix.exp(-psi.faceValue/Vth), where=mesh3.facesRight)\n",
"n.constrain(n0, where=mesh3.facesLeft)\n",
"n.constrain(n0*fp.numerix.exp(psi.faceValue/Vth), where=mesh3.facesRight)\n",
"\n",
"eq1=(-fp.TransientTerm(coeff=q, var=n)+fp.DiffusionTerm(coeff=q*Dn,var=n)-fp.DiffusionTerm(coeff=q*un*n.harmonicFaceValue, var=psi)\n",
" == fp.ImplicitSourceTerm(coeff=q/1e-6,var=n)-q*n0/1e-6)\n",
"eq2=(-fp.TransientTerm(coeff=q, var=p)+fp.DiffusionTerm(coeff=q*Dp,var=p)+fp.DiffusionTerm(coeff=q*up*p.harmonicFaceValue, var=psi)\n",
" ==fp.ImplicitSourceTerm(coeff=-q/1e-6,var=p)+q*p0/1e-6)\n",
"eq3=(fp.DiffusionTerm(coeff=e,var=psi)==-q*(p-n-N)*(y <= h)+0*(y>h))\n",
"\n",
"eq= eq1 & eq2 & eq3\n",
"\n",
"dp=fp.CellVariable(name='d_hole',mesh=mesh3,hasOld=True,value=0.)\n",
"dn=fp.CellVariable(name='d_electron',mesh=mesh3,hasOld=True,value=0.)\n",
"dpsi=fp.CellVariable(name='d_potential',mesh=mesh3,hasOld=True,value=0.)\n",
"\n",
"underRelaxation = 1.\n",
"\n",
"deq1=((-fp.TransientTerm(coeff=q, var=dn)+fp.DiffusionTerm(coeff=q*Dn,var=dn)-fp.ConvectionTerm(coeff=q*un*psi.faceGrad,var=dn)-fp.DiffusionTerm(coeff=q*un*n.harmonicFaceValue, var=dpsi)\n",
" == fp.ImplicitSourceTerm(coeff=q/1e-6,var=dn)) + fp.ResidualTerm(equation=eq1, underRelaxation=underRelaxation))\n",
"deq2=((-fp.TransientTerm(coeff=q, var=dp)+fp.DiffusionTerm(coeff=q*Dp,var=dp)+fp.ConvectionTerm(coeff=q*up*psi.faceGrad,var=dp)+fp.DiffusionTerm(coeff=q*up*p.harmonicFaceValue, var=dpsi)\n",
" ==fp.ImplicitSourceTerm(coeff=-q/1e-6,var=dp)) + fp.ResidualTerm(equation=eq2, underRelaxation=underRelaxation))\n",
"deq3=((fp.DiffusionTerm(coeff=e,var=dpsi)==-q*(dp-dn)*(y <= h)+0*(y>h)) + fp.ResidualTerm(equation=eq3, underRelaxation=underRelaxation))\n",
"\n",
"dp.constrain(0., where=mesh3.facesLeft)\n",
"dn.constrain(0., where=mesh3.facesLeft)\n",
"dpsi.constrain(0., where=mesh3.facesLeft)\n",
"dpsi.constrain(0., where=mesh3.facesRight)\n",
"dp.constrain(0., where=mesh3.facesRight)\n",
"dn.constrain(0., where=mesh3.facesRight)\n",
"\n",
"deq= deq1 & deq2 & deq3\n",
"\n",
"viewer1=fp.Matplotlib1DViewer(vars=p, axes=plt.subplot(3, 1, 1))\n",
"viewer2=fp.Matplotlib1DViewer(vars=n, axes=plt.subplot(3, 1, 2))\n",
"viewer3=fp.Matplotlib1DViewer(vars=psi, axes=plt.subplot(3, 1, 3))\n",
"plt.tight_layout()\n",
"\n",
"def damp_concentration(delta, scale=1.):\n",
" return 0.1 * delta / scale\n",
"\n",
"def damp_potential(delta, scale=1.):\n",
" return delta\n",
" \n",
"for potential in fp.numerix.linspace(0., 5., 51):\n",
" bias.value = potential\n",
"\n",
" for step in range(200):\n",
" p.updateOld()\n",
" n.updateOld()\n",
" psi.updateOld()\n",
" dn.updateOld()\n",
" dp.updateOld()\n",
" dpsi.updateOld()\n",
" res=1e10\n",
" for sweep in range(1):\n",
" res = deq.sweep(dt=1.e-12)\n",
" n.value = n.value + damp_concentration(dn.value)\n",
" p.value = p.value + damp_concentration(dp.value)\n",
" psi.value = psi.value + damp_potential(dpsi.value, scale=Vth)\n",
"\n",
" viewer1.plot()\n",
" viewer2.plot()\n",
" viewer3.plot()\n",
" print potential\n",
" print(\"n: {:e} =?= {:e}\".format(n[..., -1].value, n0*fp.numerix.exp(potential/Vth)))\n",
" print(\"p: {:e} =?= {:e}\".format(p[..., -1].value, p0*fp.numerix.exp(-potential/Vth))) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This solves up to 0.6 V, but the solutions are nonsense after about 0.2 V (`n` is negative)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Compressed mesh\n",
"\n",
"The magnitude of `n` is changing very steeply near the right hand boundary. Compressing the mesh can help."
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {
"ExecuteTime": {
"end_time": "2020-06-11T22:09:44.776133Z",
"start_time": "2020-06-11T22:08:22.387054Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<fipy.viewers.matplotlibViewer.matplotlib1DViewer.Matplotlib1DViewer at 0x7fa6305f7a50>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.7000000000000001\n",
"n: 1.884061e+22 =?= 4.926560e+22\n",
"p: -1.106371e+14 =?= 2.029814e+09\n"
]
},
{
"ename": "RuntimeError",
"evalue": "Factor is exactly singular",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-127-56f44022fa49>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 103\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1e10\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 104\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0msweep\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 105\u001b[0;31m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdeq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msweep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdt\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1.e-12\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 106\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mdamp_concentration\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 107\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mdamp_concentration\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/term.pyc\u001b[0m in \u001b[0;36msweep\u001b[0;34m(self, var, solver, boundaryConditions, dt, underRelaxation, residualFn, cacheResidual, cacheError)\u001b[0m\n\u001b[1;32m 230\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresidualVector\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 231\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 232\u001b[0;31m \u001b[0msolver\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_solve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 233\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 234\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresidual\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/solvers/pysparse/pysparseSolver.pyc\u001b[0m in \u001b[0;36m_solve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 72\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mSolutionVariableNumberError\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 73\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 74\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_solve_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mRHSvector\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 75\u001b[0m \u001b[0mfactor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munit\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 76\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mfactor\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/solvers/pysparse/linearLUSolver.pyc\u001b[0m in \u001b[0;36m_solve_\u001b[0;34m(self, L, x, b)\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mmaxdiag\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 60\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 61\u001b[0;31m \u001b[0mLU\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msuperlu\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactorize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mL\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_csr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 62\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mDEBUG\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mRuntimeError\u001b[0m: Factor is exactly singular"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import fipy as fp\n",
"L= 5e-6\n",
"h= 10e-6\n",
"tox= 0.1*1e-6\n",
"q=1.6*1e-19\n",
"un=0.14\n",
"up=0.045\n",
"Vth=0.026\n",
"Dp= up*Vth\n",
"Dn=un*Vth\n",
"p0= 1e21\n",
"n0= 1e11\n",
"e0=8.854*1e-12\n",
"\n",
"grid_resolution = h / 10\n",
"\n",
"compression_factor = 0.8\n",
"compression_count = 20\n",
"\n",
"compressed_dx = grid_resolution * compression_factor**fp.numerix.arange(compression_count)\n",
"compressed_length = compressed_dx.sum()\n",
"compressed_dx = list(compressed_dx)\n",
"\n",
"uncompressed_thickness = h - compressed_length\n",
"dx = uncompressed_thickness / round(uncompressed_thickness / grid_resolution)\n",
"dx = [dx] * int(uncompressed_thickness / dx) + compressed_dx\n",
"\n",
"\n",
"mesh1= fp.Grid1D(dx=dx) # mesh for domain 1 for solving for p and n\n",
"mesh2= fp.Grid1D(dx=tox/10,nx=10)\n",
"mesh3= mesh1\n",
"\n",
"y = mesh3.cellCenters[0]\n",
"\n",
"\n",
"N= 1e21*(y<=h) # N changes from Domain 1 to Domain 2\n",
"e= 11.9*e0*(y<=h)+ 3.9*e0*(y>h) # e changes from Domain 1 to Domain 2\n",
"\n",
"\n",
"p=fp.CellVariable(name='hole',mesh=mesh3,hasOld=True,value=p0)\n",
"n=fp.CellVariable(name='electron',mesh=mesh3,hasOld=True,value=n0)\n",
"psi=fp.CellVariable(name='potential',mesh=mesh3,hasOld=True,value=0.)\n",
"\n",
"bias = fp.Variable(0.)\n",
"\n",
"psi.constrain(0., where=mesh3.facesLeft)\n",
"psi.constrain(bias, where=mesh3.facesRight)\n",
"p.constrain(p0, where=mesh3.facesLeft)\n",
"p.constrain(p0*fp.numerix.exp(-psi.faceValue/Vth), where=mesh3.facesRight)\n",
"n.constrain(n0, where=mesh3.facesLeft)\n",
"n.constrain(n0*fp.numerix.exp(psi.faceValue/Vth), where=mesh3.facesRight)\n",
"\n",
"eq1=(-fp.TransientTerm(coeff=q, var=n)+fp.DiffusionTerm(coeff=q*Dn,var=n)-fp.DiffusionTerm(coeff=q*un*n.harmonicFaceValue, var=psi)\n",
" == fp.ImplicitSourceTerm(coeff=q/1e-6,var=n)-q*n0/1e-6)\n",
"eq2=(-fp.TransientTerm(coeff=q, var=p)+fp.DiffusionTerm(coeff=q*Dp,var=p)+fp.DiffusionTerm(coeff=q*up*p.harmonicFaceValue, var=psi)\n",
" ==fp.ImplicitSourceTerm(coeff=-q/1e-6,var=p)+q*p0/1e-6)\n",
"eq3=(fp.DiffusionTerm(coeff=e,var=psi)==-q*(p-n-N)*(y <= h)+0*(y>h))\n",
"\n",
"eq= eq1 & eq2 & eq3\n",
"\n",
"dp=fp.CellVariable(name='d_hole',mesh=mesh3,hasOld=True,value=0.)\n",
"dn=fp.CellVariable(name='d_electron',mesh=mesh3,hasOld=True,value=0.)\n",
"dpsi=fp.CellVariable(name='d_potential',mesh=mesh3,hasOld=True,value=0.)\n",
"\n",
"underRelaxation = 1.\n",
"\n",
"deq1=((-fp.TransientTerm(coeff=q, var=dn)+fp.DiffusionTerm(coeff=q*Dn,var=dn)-fp.ConvectionTerm(coeff=q*un*psi.faceGrad,var=dn)-fp.DiffusionTerm(coeff=q*un*n.harmonicFaceValue, var=dpsi)\n",
" == fp.ImplicitSourceTerm(coeff=q/1e-6,var=dn)) + fp.ResidualTerm(equation=eq1, underRelaxation=underRelaxation))\n",
"deq2=((-fp.TransientTerm(coeff=q, var=dp)+fp.DiffusionTerm(coeff=q*Dp,var=dp)+fp.ConvectionTerm(coeff=q*up*psi.faceGrad,var=dp)+fp.DiffusionTerm(coeff=q*up*p.harmonicFaceValue, var=dpsi)\n",
" ==fp.ImplicitSourceTerm(coeff=-q/1e-6,var=dp)) + fp.ResidualTerm(equation=eq2, underRelaxation=underRelaxation))\n",
"deq3=((fp.DiffusionTerm(coeff=e,var=dpsi)==-q*(dp-dn)*(y <= h)+0*(y>h)) + fp.ResidualTerm(equation=eq3, underRelaxation=underRelaxation))\n",
"\n",
"dp.constrain(0., where=mesh3.facesLeft)\n",
"dn.constrain(0., where=mesh3.facesLeft)\n",
"dpsi.constrain(0., where=mesh3.facesLeft)\n",
"dpsi.constrain(0., where=mesh3.facesRight)\n",
"dp.constrain(0., where=mesh3.facesRight)\n",
"dn.constrain(0., where=mesh3.facesRight)\n",
"\n",
"deq= deq1 & deq2 & deq3\n",
"\n",
"viewer1=fp.Matplotlib1DViewer(vars=p, axes=plt.subplot(3, 1, 1))\n",
"viewer2=fp.Matplotlib1DViewer(vars=n, axes=plt.subplot(3, 1, 2))\n",
"viewer3=fp.Matplotlib1DViewer(vars=psi, axes=plt.subplot(3, 1, 3))\n",
"plt.tight_layout()\n",
"\n",
"def damp_concentration(delta, scale=1.):\n",
" return 0.1 * delta / scale\n",
"\n",
"def damp_potential(delta, scale=1.):\n",
" return delta\n",
" \n",
"for potential in fp.numerix.linspace(0., 5., 51):\n",
" bias.value = potential\n",
"\n",
" for step in range(100):\n",
" p.updateOld()\n",
" n.updateOld()\n",
" psi.updateOld()\n",
" dn.updateOld()\n",
" dp.updateOld()\n",
" dpsi.updateOld()\n",
" res=1e10\n",
" for sweep in range(1):\n",
" res = deq.sweep(dt=1.e-12)\n",
" n.value = n.value + damp_concentration(dn.value)\n",
" p.value = p.value + damp_concentration(dp.value)\n",
" psi.value = psi.value + damp_potential(dpsi.value, scale=Vth)\n",
"\n",
" viewer1.plot()\n",
" viewer2.plot()\n",
" viewer3.plot()\n",
" print potential\n",
" print(\"n: {:e} =?= {:e}\".format(n[..., -1].value, n0*fp.numerix.exp(potential/Vth)))\n",
" print(\"p: {:e} =?= {:e}\".format(p[..., -1].value, p0*fp.numerix.exp(-potential/Vth))) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This works up to 0.7 V (although `p` becomes dubious sooner), but afterwards, the potential steps must become smaller and smaller to achieve solution. Ultimately, this isn't too surprising. `n` at the right-hand boundary is constrained to $n_0 \\exp(V_R/V_{th})$, which is exploding past the order of $p_0$ at 0.6 V. Potential does not need to go much higher before `n` becomes unphysical. Perhaps some more elaborate damping might help, but this isn't really the problem we're interested in anyway."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Restoring internal boundary"
]
},
{
"cell_type": "code",
"execution_count": 128,
"metadata": {
"ExecuteTime": {
"end_time": "2020-06-11T22:10:38.842997Z",
"start_time": "2020-06-11T22:10:16.856656Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<fipy.viewers.matplotlibViewer.matplotlib1DViewer.Matplotlib1DViewer at 0x7fa611350a90>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"ename": "RuntimeError",
"evalue": "Factor is exactly singular",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-128-a7a743c5e1be>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 118\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1e10\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 119\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0msweep\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 120\u001b[0;31m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdeq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msweep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdt\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1.e-12\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 121\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mpotential\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msweep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 122\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mdamp_concentration\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/terms/term.pyc\u001b[0m in \u001b[0;36msweep\u001b[0;34m(self, var, solver, boundaryConditions, dt, underRelaxation, residualFn, cacheResidual, cacheError)\u001b[0m\n\u001b[1;32m 230\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresidualVector\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 231\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 232\u001b[0;31m \u001b[0msolver\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_solve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 233\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 234\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresidual\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/solvers/pysparse/pysparseSolver.pyc\u001b[0m in \u001b[0;36m_solve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 72\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mSolutionVariableNumberError\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 73\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 74\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_solve_\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mRHSvector\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 75\u001b[0m \u001b[0mfactor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munit\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 76\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mfactor\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/guyer/Documents/research/FiPy/fipy/fipy/solvers/pysparse/linearLUSolver.pyc\u001b[0m in \u001b[0;36m_solve_\u001b[0;34m(self, L, x, b)\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mmaxdiag\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 60\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 61\u001b[0;31m \u001b[0mLU\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msuperlu\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactorize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mL\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_csr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 62\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mDEBUG\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mRuntimeError\u001b[0m: Factor is exactly singular"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import fipy as fp\n",
"L= 5e-6\n",
"h= 10e-6\n",
"tox= 0.1*1e-6\n",
"q=1.6*1e-19\n",
"un=0.14\n",
"up=0.045\n",
"Vth=0.026\n",
"Dp= up*Vth\n",
"Dn=un*Vth\n",
"p0= 1e21\n",
"n0= 1e11\n",
"e0=8.854*1e-12\n",
"\n",
"grid_resolution = h / 10\n",
"\n",
"compression_factor = 0.8\n",
"compression_count = 20\n",
"\n",
"compressed_dx = grid_resolution * compression_factor**fp.numerix.arange(compression_count)\n",
"compressed_length = compressed_dx.sum()\n",
"compressed_dx = list(compressed_dx)\n",
"\n",
"uncompressed_thickness = h - compressed_length\n",
"dx = uncompressed_thickness / round(uncompressed_thickness / grid_resolution)\n",
"dx = [dx] * int(uncompressed_thickness / dx) + compressed_dx\n",
"\n",
"\n",
"mesh1= fp.Grid1D(dx=dx) # mesh for domain 1 for solving for p and n\n",
"\n",
"grid_resolution = tox / 5\n",
"\n",
"compression_factor = 0.8\n",
"compression_count = 20\n",
"\n",
"compressed_dx = grid_resolution * compression_factor**fp.numerix.arange(compression_count)\n",
"compressed_length = compressed_dx.sum()\n",
"compressed_dx = list(compressed_dx)\n",
"\n",
"uncompressed_thickness = tox - compressed_length\n",
"dx = uncompressed_thickness / round(uncompressed_thickness / grid_resolution)\n",
"dx = [dx] * int(uncompressed_thickness / dx) + compressed_dx\n",
"\n",
"mesh2= fp.Grid1D(dx=dx[::-1])\n",
"mesh3= mesh1+(mesh2+[[h]]) # mesh for Domain 1 and Domain 2 for solving for psi\n",
"\n",
"y = mesh3.cellCenters[0]\n",
"\n",
"\n",
"N= 1e21*(y<=h) # N changes from Domain 1 to Domain 2\n",
"e= 11.9*e0*(y<=h)+ 3.9*e0*(y>h) # e changes from Domain 1 to Domain 2\n",
"\n",
"\n",
"p=fp.CellVariable(name='hole',mesh=mesh3,hasOld=True,value=p0)\n",
"n=fp.CellVariable(name='electron',mesh=mesh3,hasOld=True,value=n0)\n",
"psi=fp.CellVariable(name='potential',mesh=mesh3,hasOld=True,value=0.)\n",
"\n",
"bias = fp.Variable(0.)\n",
"\n",
"psi.constrain(0., where=mesh3.facesLeft)\n",
"psi.constrain(bias, where=mesh3.facesRight)\n",
"p.constrain(p0, where=mesh3.facesLeft)\n",
"n.constrain(n0, where=mesh3.facesLeft)\n",
"\n",
"mask2=((y>h - h/100) * (y < h)) # Boundary2\n",
"largevalue= 1e45\n",
"\n",
"eq1=(-fp.TransientTerm(coeff=q, var=n)+fp.DiffusionTerm(coeff=q*Dn,var=n)-fp.DiffusionTerm(coeff=q*un*n.harmonicFaceValue, var=psi)\n",
" == fp.ImplicitSourceTerm(coeff=q/1e-6,var=n)-q*n0/1e-6\n",
" - fp.ImplicitSourceTerm(coeff=mask2 * largevalue, var=n) + mask2 * largevalue * n0*fp.numerix.exp(psi/Vth))\n",
"eq2=(-fp.TransientTerm(coeff=q, var=p)+fp.DiffusionTerm(coeff=q*Dp,var=p)+fp.DiffusionTerm(coeff=q*up*p.harmonicFaceValue, var=psi)\n",
" ==fp.ImplicitSourceTerm(coeff=-q/1e-6,var=p)+q*p0/1e-6\n",
" - fp.ImplicitSourceTerm(coeff=mask2 * largevalue, var=p) + mask2 * largevalue * p0*fp.numerix.exp(-psi/Vth))\n",
"eq3=(fp.DiffusionTerm(coeff=e,var=psi)==-q*(p-n-N)*(y <= h)+0*(y>h))\n",
"\n",
"eq= eq1 & eq2 & eq3\n",
"\n",
"dp=fp.CellVariable(name='d_hole',mesh=mesh3,hasOld=True,value=0.)\n",
"dn=fp.CellVariable(name='d_electron',mesh=mesh3,hasOld=True,value=0.)\n",
"dpsi=fp.CellVariable(name='d_potential',mesh=mesh3,hasOld=True,value=0.)\n",
"\n",
"underRelaxation = 1.\n",
"\n",
"deq1=((-fp.TransientTerm(coeff=q, var=dn)+fp.DiffusionTerm(coeff=q*Dn,var=dn)-fp.ConvectionTerm(coeff=q*un*psi.faceGrad,var=dn)-fp.DiffusionTerm(coeff=q*un*n.harmonicFaceValue, var=dpsi)\n",
" == fp.ImplicitSourceTerm(coeff=q/1e-6,var=dn) + fp.ImplicitSourceTerm(coeff=mask2 * largevalue, var=dn) - mask2 * largevalue * n0*fp.numerix.exp(psi/Vth)*dpsi/Vth) + fp.ResidualTerm(equation=eq1, underRelaxation=underRelaxation))\n",
"deq2=((-fp.TransientTerm(coeff=q, var=dp)+fp.DiffusionTerm(coeff=q*Dp,var=dp)+fp.ConvectionTerm(coeff=q*up*psi.faceGrad,var=dp)+fp.DiffusionTerm(coeff=q*up*p.harmonicFaceValue, var=dpsi)\n",
" == fp.ImplicitSourceTerm(coeff=-q/1e-6,var=dp) + fp.ImplicitSourceTerm(coeff=mask2 * largevalue, var=dp) + mask2 * largevalue * p0*fp.numerix.exp(-psi/Vth)*dpsi/Vth) + fp.ResidualTerm(equation=eq2, underRelaxation=underRelaxation))\n",
"deq3=((fp.DiffusionTerm(coeff=e,var=dpsi)==-q*(dp-dn)*(y <= h)+0*(y>h)) + fp.ResidualTerm(equation=eq3, underRelaxation=underRelaxation))\n",
"\n",
"dp.constrain(0., where=mesh3.facesLeft)\n",
"dn.constrain(0., where=mesh3.facesLeft)\n",
"dpsi.constrain(0., where=mesh3.facesLeft)\n",
"dpsi.constrain(0., where=mesh3.facesRight)\n",
"\n",
"deq= deq1 & deq2 & deq3\n",
"\n",
"viewer1=fp.Matplotlib1DViewer(vars=p, axes=plt.subplot(3, 1, 1))\n",
"viewer2=fp.Matplotlib1DViewer(vars=n, axes=plt.subplot(3, 1, 2))\n",
"viewer3=fp.Matplotlib1DViewer(vars=psi, axes=plt.subplot(3, 1, 3))\n",
"plt.tight_layout()\n",
"\n",
"def damp_concentration(delta, scale=1.):\n",
" return 0.1 * delta / scale\n",
"\n",
"def damp_potential(delta, scale=1.):\n",
" return delta\n",
" \n",
"for potential in fp.numerix.linspace(0., 5., 51):\n",
" bias.value = potential + 1e-2\n",
"\n",
" for step in range(200):\n",
" p.updateOld()\n",
" n.updateOld()\n",
" psi.updateOld()\n",
" dn.updateOld()\n",
" dp.updateOld()\n",
" dpsi.updateOld()\n",
" res=1e10\n",
" for sweep in range(1):\n",
" res = deq.sweep(dt=1.e-12)\n",
" print potential, step, sweep, res\n",
" n.value = n.value + damp_concentration(dn.value)\n",
" p.value = p.value + damp_concentration(dp.value)\n",
" psi.value = psi.value + damp_potential(dpsi.value, scale=Vth)\n",
"\n",
" viewer1.plot()\n",
" viewer2.plot()\n",
" viewer3.plot()\n",
" print potential\n",
" print(\"n: {:e} =?= {:e}\".format(n[..., mask2].value, n0*fp.numerix.exp(potential/Vth)))\n",
" print(\"p: {:e} =?= {:e}\".format(p[..., mask2].value, p0*fp.numerix.exp(-potential/Vth))) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Alternative potential damper\n",
"\n",
"Taken from:\n",
"\n",
"It doesn't help much in this case"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def damp_potential(delta, scale=1.):\n",
" delta /= scale\n",
"\n",
" dVsgn = fp.numerix.sign(delta)\n",
" dVabs = fp.numerix.absolute(delta)\n",
" dVabs = fp.numerix.where(dVabs == 0., 1., dVabs)\n",
" delta = fp.numerix.where((1. < dVabs) & (dVabs < 3.7), \n",
" dVsgn * dVabs**0.2, delta)\n",
" return fp.numerix.where(dVabs >= 3.7, dVsgn * fp.numerix.log(dVabs), delta) * scale"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.15"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {
"height": "calc(100% - 180px)",
"left": "10px",
"top": "150px",
"width": "332px"
},
"toc_section_display": true,
"toc_window_display": true
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment