{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "*This notebook contains material from [cbe67701-uncertainty-quantification](https://ndcbe.github.io/cbe67701-uncertainty-quantification);\n", "content is available [on Github](https://github.com/ndcbe/cbe67701-uncertainty-quantification.git).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [4.0 Local Sensitivity Analysis Based on Derivative Approximations](https://ndcbe.github.io/cbe67701-uncertainty-quantification/04.00-Local-Sensitivity-Analysis-Based-on-Derivative-Approximations.html) | [Contents](toc.html) | [4.2 Advection-Diffusion-Reaction (ADR) Example](https://ndcbe.github.io/cbe67701-uncertainty-quantification/04.02-Simple-ADR-Example.html)
"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[4.1 Local sensitivity analysis and difference approximation](https://ndcbe.github.io/cbe67701-uncertainty-quantification/04.01-Local-sensitivity-analysis.html#4.1-Local-sensitivity-analysis-and-difference-approximation)",
"section": "4.1 Local sensitivity analysis and difference approximation"
}
},
"source": [
"# 4.1 Local sensitivity analysis and difference approximation"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[4.1 Local sensitivity analysis and difference approximation](https://ndcbe.github.io/cbe67701-uncertainty-quantification/04.01-Local-sensitivity-analysis.html#4.1-Local-sensitivity-analysis-and-difference-approximation)",
"section": "4.1 Local sensitivity analysis and difference approximation"
}
},
"source": [
"Created by Jialu Wang (jwang44@nd.edu)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"nbpages": {
"level": 1,
"link": "[4.1 Local sensitivity analysis and difference approximation](https://ndcbe.github.io/cbe67701-uncertainty-quantification/04.01-Local-sensitivity-analysis.html#4.1-Local-sensitivity-analysis-and-difference-approximation)",
"section": "4.1 Local sensitivity analysis and difference approximation"
}
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import scipy.sparse as sparse\n",
"import scipy.sparse.linalg as linalg\n",
"import scipy.integrate as integrate\n",
"import math"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[4.1 Local sensitivity analysis and difference approximation](https://ndcbe.github.io/cbe67701-uncertainty-quantification/04.01-Local-sensitivity-analysis.html#4.1-Local-sensitivity-analysis-and-difference-approximation)",
"section": "4.1 Local sensitivity analysis and difference approximation"
}
},
"source": [
"This example was adapted from code from:\n",
"\n",
"\n",
"McClarren, Ryan G (2018). *Uncertainty Quantification and Predictive Computational Science: A Foundation for Physical Scientists and Engineers*, *Chapter 4: Local Sensitivity Analysis Based on Derivative Approximations*, Springer, https://doi.org/10.1007/978-3-319-99525-0_4"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[4.1.1 Simple advection-diffusion-reaction (ADR) example ](https://ndcbe.github.io/cbe67701-uncertainty-quantification/04.01-Local-sensitivity-analysis.html#4.1.1-Simple-advection-diffusion-reaction-(ADR)-example)",
"section": "4.1.1 Simple advection-diffusion-reaction (ADR) example "
}
},
"source": [
"## 4.1.1 Simple advection-diffusion-reaction (ADR) example \n",
"\n",
"The steady advection-diffusion-reaction(ADR) equation in one-spatial dimension with a spatially constant, but uncertain, diffusion coefficient, a linear reaction term, and a prescribed uncertain source.\n",
"\n",
"$$\n",
"\\nu \\frac{du}{dx} - \\omega \\frac{d^2u}{dx^2} + \\kappa(x)u = S(x)\n",
"$$\n",
"\n",
"The QoI is total reaction rate: \n",
"$$\n",
"Q= \\int^{10}_{0} \\kappa(x_ u)u(x)dx\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"nbpages": {
"level": 2,
"link": "[4.1.1 Simple advection-diffusion-reaction (ADR) example ](https://ndcbe.github.io/cbe67701-uncertainty-quantification/04.01-Local-sensitivity-analysis.html#4.1.1-Simple-advection-diffusion-reaction-(ADR)-example)",
"section": "4.1.1 Simple advection-diffusion-reaction (ADR) example "
}
},
"outputs": [],
"source": [
"def ADRSource(Lx, Nx, Source, omega, v, kappa):\n",
" '''\n",
" Solve the ADR example with algorithm 4.1 from the textbook\n",
" \n",
" Arguments:\n",
" Lx: the scale of x is [0, Lx]\n",
" Nx: the number of points in x scale\n",
" Source: S(x)\n",
" omega: the diffusion coefficient\n",
" v: the convection term constant\n",
" kappa: the linear reaction term coefficient\n",
" \n",
" Return:\n",
" Solution: u \n",
" Q: QoI, the total reaction rate \n",
" '''\n",
" #Solves the diffusion equation\n",
" A = sparse.dia_matrix((Nx,Nx),dtype=\"complex\")\n",
" dx = Lx/Nx\n",
" i2dx2 = 1.0/(dx*dx)\n",
" \n",
" #fill diagonal of A\n",
" A.setdiag(2*i2dx2*omega + np.sign(v)*v/dx + kappa)\n",
" \n",
" #fill off diagonals of A\n",
" A.setdiag(-i2dx2*omega[1:Nx] + \n",
" 0.5*(1-np.sign(v[1:Nx]))*v[1:Nx]/dx,1)\n",
" \n",
" A.setdiag(-i2dx2*omega[0:(Nx-1)] - \n",
" 0.5*(np.sign(v[0:(Nx-1)])+1)*v[0:(Nx-1)]/dx,-1)\n",
" \n",
" #solve A x = Source\n",
" Solution = linalg.spsolve(A,Source)\n",
" Q = integrate.trapz(Solution*kappa,dx=dx)\n",
" return Solution, Q"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"nbpages": {
"level": 2,
"link": "[4.1.1 Simple advection-diffusion-reaction (ADR) example ](https://ndcbe.github.io/cbe67701-uncertainty-quantification/04.01-Local-sensitivity-analysis.html#4.1.1-Simple-advection-diffusion-reaction-(ADR)-example)",
"section": "4.1.1 Simple advection-diffusion-reaction (ADR) example "
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(52.390252927707564+0j)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/anaconda3/lib/python3.7/site-packages/scipy/sparse/linalg/dsolve/linsolve.py:133: SparseEfficiencyWarning: spsolve requires A be CSC or CSR matrix format\n",
" SparseEfficiencyWarning)\n"
]
}
],
"source": [
"# q: mean, variance, function\n",
"q_nom = 1\n",
"q_var = 7.062353e-4\n",
"Source_func = lambda x, q: q*x*(10-x)\n",
"\n",
"# kappa: mean, variance, function\n",
"kappal_nom = 0.1\n",
"kappal_var = 8.511570e-6\n",
"kappah_nom = 2\n",
"kappah_var = 0.002778142\n",
"kappa_func = lambda x, kappal, kappah: kappah + (kappal-kappah)*(x>5)*(x<7.5)\n",
"\n",
"# v: mean, variance, function\n",
"v_nom = 10\n",
"v_var = 0.0723493\n",
"v_func = lambda x,v: v*np.ones(x.size)\n",
"\n",
"# omega: mean, variance, function\n",
"omega_nom = 20\n",
"omega_var = 0.3195214\n",
"omega_func = lambda x,omega: omega*np.ones(x.size)\n",
"\n",
"\n",
"# define the scale of x \n",
"Lx = 10\n",
"Nx = 2000\n",
"dx = Lx/Nx\n",
"xs = np.linspace(dx/2,Lx-dx/2,Nx)\n",
"\n",
"# Calculating Q with the mean value of parameters\n",
"source = Source_func(xs, 1)\n",
"kappa = kappa_func(xs, 0.1, 2)\n",
"vs = v_func(xs, v_nom)\n",
"omegas = omega_func(xs, omega_nom)\n",
"\n",
"sol,Q = ADRSource(Lx, Nx, source, omegas, vs, kappa)\n",
"print(Q)"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[4.1.2 First-order sensitivity approximation](https://ndcbe.github.io/cbe67701-uncertainty-quantification/04.01-Local-sensitivity-analysis.html#4.1.2-First-order-sensitivity-approximation)",
"section": "4.1.2 First-order sensitivity approximation"
}
},
"source": [
"## 4.1.2 First-order sensitivity approximation"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[4.1.2 First-order sensitivity approximation](https://ndcbe.github.io/cbe67701-uncertainty-quantification/04.01-Local-sensitivity-analysis.html#4.1.2-First-order-sensitivity-approximation)",
"section": "4.1.2 First-order sensitivity approximation"
}
},
"source": [
"Forward difference derivative approximation:\n",
"\n",
"$\\frac{\\partial Q}{\\partial x_i} \\bigg|_{\\overline{x}} \\approx \\frac{Q(\\overline{x} + \\delta_i\\hat{e_i}) - Q(\\overline{x})}{\\delta_i}$\n",
"\n",
"Central difference derivative approximation:\n",
"\n",
"$\\frac{\\partial Q}{\\partial x_i} \\bigg|_{\\overline{x}} \\approx \\frac{Q(\\overline{x} + 0.5\\delta_i\\hat{e_i}) - Q(\\overline{x} - 0.5\\delta_i\\hat{e_i})}{\\delta_i}$\n",
"\n",
"The complex step formula: \n",
"\n",
"$\\frac{\\partial Q}{\\partial x_i} \\bigg|_{\\overline{x}} \\approx \\frac{\\mathscr{I} \\{Q(\\overline{x} + i\\delta_i \\hat{e_i})\\}}{\\delta_i} + O(\\delta_i^2)$"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"nbpages": {
"level": 2,
"link": "[4.1.2 First-order sensitivity approximation](https://ndcbe.github.io/cbe67701-uncertainty-quantification/04.01-Local-sensitivity-analysis.html#4.1.2-First-order-sensitivity-approximation)",
"section": "4.1.2 First-order sensitivity approximation"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:27: ComplexWarning: Casting complex values to real discards the imaginary part\n",
"/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:39: ComplexWarning: Casting complex values to real discards the imaginary part\n"
]
},
{
"data": {
"image/png": "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GeM/oaGhJCUl5b22bdsW7JCYM2cOl112WaHl+vfvn3eP2iWXXMLhw4cBeP3112nbti033ngjp06d4sILLyQpKYkJEyYENO5gsTESDzrUSGNE+jxyk3SIQO/QNSwJuZuv3+jFCxEXUaVFL3q1iqFXi2iax1S1v+pMhfDVsl28NH0Duw+n0aBmZR4eHFfiscPKlSuzfPnyIh+XlZVFWJh/foVlZ2cTGhpaojqmTp2a9/7tt9/mu+++o3nz5vz8889kZmYW6Rz9eW6lwXokHrxa/3sk36OrMzWUjKr1uTpiEeOyn+DPm25ix5R/cO0/v6LX87P404TlfL54BztSTwYpamMCK3fscNfhNBTYdTgtYGOH6enp3HbbbXTo0IFOnToxe/ZsAMaPH8+IESO4/PLLGTRoEPfccw9TpkwB4Morr+T2228HYOzYsfzlL38B4IorrqBLly4kJCTw3nvv5bURFRXFU089RY8ePVi4cCHTpk0jPj6e3r17M2nSJI9xpaWlcd1115GYmMi1115LWlpa3r5mzZpx4MABRo4cyZYtWxg6dCijR4/mpptuYvny5SQlJZGcnMzSpUvp168fXbp0YfDgwezZswdwejePP/44/fr147XXXiMlJYWrr76abt260a1bNxYsWADA008/ze23307//v1p0aIFr7/+el4M//nPf0hMTKRjx47cfPPNAF7r8afyk/JKUYv0NSBZZ2wLl2xqVa8Gty2AtV/RdNnHjNr+GY9U+oI14d35cENvnljWgUzCaFizMr1aRtOrRTS9WkbToGblIJ2JMb7729drWLvb+3O2lm0/TEZ2zhnb0jKzeWTiSj79xfNzsto1qM5fL08osN20tDSSkpIAaN68OZMnT+att94CYNWqVaxfv55BgwaxceNGABYuXMjKlSupXbs2n332GT/++CNDhw5l165deb+U58+fz3XXXQfAuHHjqF27NmlpaXTr1o2rr76a6OhoTpw4Qfv27XnmmWdIT0+ndevWzJo1i1atWnHttdd6jPWdd96hSpUqrFy5kpUrV9K5c+ezyowZM4Zp06Yxe/ZsYmJi6NGjBy+//DLffPMNmZmZ3Hzzzfzvf/8jNjaWCRMm8MQTTzBu3DgADh8+zNy5cwG44YYb+NOf/kTv3r3Zvn07gwcPZt26dQCsX7+e2bNnc+zYMeLi4rj77rvZuHEjzz33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9p9h7ujCyxZi9uzZhIeHM3LkyLxtSUlJeb+MX3rpJbp160ZiYiJ//etfAdi2bRtt27bl//7v/0hISGDQoEGkpaUxceJElixZwo033khSUhJpaWk+L9nu7uDBgwwaNIhOnTpx1113nbHuV1RUFABDhw7lxIkT9OjRg9GjR/PII48wderUvHZnzJhBr1696Ny5MyNGjOD48eOA07t55pln6N27N1988QXJyckMGTKELl260KdPH9avXw/Arbfeyn333cd5551HixYtmDhxYl4ML774Ih06dKBjx46MGuX8He2tntISyBsSFwOtRaQ5sAu4DrghX5kpwC3AQmA4MEtV1XXMDlXNEpGmQBywTVUPiMgOEYlT1Q3AQGAt56Dbzm/OBz9u5enKj/JyXLiTTAC6/19wAzPnru9Gwd5VBZfJyoDdS5xJIkv/7ZR3TV/3qF4HuPgFr7tXr15Nly5dPO6bMWMGmzZt4pdffkFVGTp0KPPmzaNJkyZs2rSJTz/9lPfff59rrrmGL7/8kptuuok333yTl19+ma5du5KZmckf//hHn5Zsd/e3v/2N3r1789RTT/Htt996XAV4ypQpREVF5a1bVbduXZYsWcKbb77JgQMHePbZZ5k5cyZVq1Zl9OjRvPLKKzz11FOAsxzL/PnOCuMDBw5kzJgxtG7dmkWLFnHPPfcwa9YsAPbs2cP8+fNZv349Q4cOZfjw4Xz33Xd89dVXLFq0iCpVquStp3XnnXd6rac0BCyRuJLAvcB0IBQYp6prROQZYImqTsEZNP9IRDbj9ESucx3eGxglIplADnCPqh5w7fsj8ImIVAK2ALcF6hyCqXbVStzQownjf9rGfQ+8QxPutmRigu/Idsj9C13VWakhulVAmpoxYwYzZsygU6dOABw/fpxNmzbRpEkTmjdvnvcMky5dunh8PG9Rlmx3N2/evLwHW1166aXUqlWrSHH//PPPrF27lvPPPx+AjIwMevU6fZdCbrvHjx/np59+YsSIEXn7Tp06lff+iiuuICQkhHbt2uVd6ps5cya33XYbVapUAZyl4gurpzQEdIkUVZ0KTM237Sm39+nACA/HfQR85KXO5UCha7+cC+7s24KPFv7GmAU7+MeID+GLW51kogo97gx2eOZcU0DPAXDGRl7ryOmhToX0wzB8HFSrW6wmExISzrhs405Veeyxx7jrrrvO2L5t27azllF3f1Kh+/G+LtmeX0mXir/ooou8riCc225OTg41a9b0uhqv+znmXl7ztFR8YfWUBruzvQyrWz2S4V0bMXHJTvadzIER4yH+MvjuYVh0dnfbmIDycN8TmlOisZIBAwZw6tQp3n//9Bjg4sWLmTt3LoMHD2bcuHF54wu7du1i//79BdZXrVq1vIc/FWXJdnfuS8V/9913HDp0qEjn1LNnTxYsWMDmzZsBOHnypMdZaNWrV6d58+Z88cUXgJMkVqxYUWDdgwYNYty4cZw86TzSOzU1tVj1+JslkjJuZN+WZKvy/rwtEFYJhv/bLZm8G+zwTEXi4b4nsjOc7cUkIkyePJnvv/+eli1bkpCQwNNPP02DBg0YNGgQN9xwA7169aJDhw4MHz48L0l4c+uttzJy5EiSkpLIzs72ecl2d3/961+ZN28enTt3ZsaMGTRp0qRI5xQbG8v48eO5/vrrSUxMpGfPnl4Hvz/55BPGjh1Lx44dSUhI4H//+1+BdQ8ZMoShQ4fStWtXkpKSePnll4tVj7/ZMvLlwJ8mLGfa6r38NGoAtapWcgY8J97mLE0/ZDT0HFl4JcZ4YMvIm1wlWUbeeiTlwN39W5KWmc2/F2x1Nrj3TKY9Cj/7/0E1xhjjK0sk5UCbutUYnFCX8T9t41h6prMxrNLpMZNpj8LP7wQ1RmNMxWWJpJz4wwWtOJqexcc/bz+9MTTcSSZtL4dpoyyZGGOCwhJJOZHYqCZ9Wscwdv4W0jPdllYIDXcuc+Umk4VvBy9IY0yFZImkHLn3glYcOJ7BhMU7ztyRl0yGwvTHYOFbwQnQGFMhWSIpR7o3r03XprV4d24yGVn55vOHhjs3hrUbBtMft2RijCk1lkjKERHhDwNasftIOl8t33V2gdBwuHrs6WTy05ulH6QxReTPZeR9MWfOHC677LKA1H348GHefrviXV62RFLO9G8TS0KD6rwzJ5nsHA/3AOUlkytgxhPw0xulH6Q5p6WcTOHWabdyIO1A4YUL4e9l5IPNEokpF0SEP1zQiq0HTjB11R7PhULD4eoPXMnkL5ZMjF+NWTmGX/f9yjsrSj5LsKBl5FWVhx9+mPbt29OhQwcmTJgAOD2Kfv36cc0119CmTRtGjRrFJ598Qvfu3enQoQPJycnA6bvc+/TpQ5s2bfjmm2/Oav/EiRPcfvvtdOvWjU6dOuXdEf7KK69w++23A7Bq1Srat2+ftyxJrjVr1tC9e3eSkpJITExk06ZNjBo1iuTkZJKSknj44YcB70vhx8fHc8stt5CYmMjw4cPPqr88CeiijSYwhiTUo2VsVd6avZnLEut7XmAut2cCTjJRhfPvK91ATbky+pfRrE/1/hyLpfuWom7Ppvt8w+d8vuFzBKFLXc9LwcfXjufR7o96rbOgZeQnTZrE8uXLWbFiBQcOHKBbt2707dsXgBUrVrBu3Tpq165NixYt+P3vf88vv/zCa6+9xhtvvMGrr74KOL+w586dS3JyMhdccEHe+le5nnvuOQYMGMC4ceM4fPgw3bt358ILL+SBBx6gf//+TJ48meeee4533303b8XdXGPGjOH+++/nxhtvJCMjg+zsbF544QVWr16dt4BiQUvhb9iwgbFjx3L++edz++238/bbb/PnP//Z6/eqLLMeSTkUEiLc3b8V6/ceY9b6AhaxCw1zkknClfD9k7DgNb8+3c5ULB1iOlA7ojbierCpINSOrE1iTGJA2ps/fz7XX389oaGh1K1bl379+rF48WIAunXrRv369YmIiKBly5YMGjTIibFDhzOWlL/mmmsICQmhdevWtGjR4qw1r2bMmMELL7xAUlIS/fv3Jz09ne3btxMSEsL48eO5+eab6devX96S8O569erFP/7xD0aPHs1vv/1G5cqVzyrjvhR+586dWb9+PZs2bQKgcePGefXedNNNec8oKY+sR1JODUtqwL++38ibszczIL6O92WvQ8Pgqg8Age+fgnVfw66lzoqtl71SqjGbsq2gnkOuZxY+w8SNE6kUWonM7EwubHohT/Z8sthtFraMvDfuS6yHhITkfQ4JCTnj0bn5/7/I/1lV+fLLL4mLizurjU2bNhEVFeX10b033HADPXr04Ntvv2Xw4MF88MEHtGjR4qz6vS2FX1hs5Yn1SMqp8NAQRvZrwbLth1m45WDBhUPD4Kr3oc3FsHOxs/T38k+sV2KKLDU9lWviruG/l/yXa+Ku4WBaIT97hShoGfm+ffsyYcIEsrOzSUlJYd68eXTv3r1I9X/xxRfk5OSQnJzMli1bzkoYgwcP5o033shLWsuWLQPgyJEj3H///cybN4+DBw96THZbtmyhRYsW3HfffQwdOpSVK1eesYx9bv3elsLfvn173hL3n376Kb179y7SuZUl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\n",
"text/plain": [
"
"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}