mirror of
https://git.gfz-potsdam.de/naaice/tug.git
synced 2025-12-13 09:28:23 +01:00
526 lines
50 KiB
Plaintext
526 lines
50 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 40,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# imports\n",
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# set up environment\n",
|
|
"dim = 2\n",
|
|
"grid_size = {'x': 20, 'y': 20}\n",
|
|
"domain_size = {'x': 20, 'y': 20}\n",
|
|
"\n",
|
|
"# boundary_condition\n",
|
|
"# constant boundary condition\n",
|
|
"bc_left = 0\n",
|
|
"bc_right = 0\n",
|
|
"bc_top = 0\n",
|
|
"bc_bottom = 0\n",
|
|
"\n",
|
|
"delta_x = domain_size['x'] / grid_size['x']\n",
|
|
"delta_y = domain_size['y'] / grid_size['y'] \n",
|
|
"\n",
|
|
"alpha_x = np.random.random((grid_size['x'],grid_size['y']))\n",
|
|
"alpha_y = np.ones((grid_size['x'],grid_size['y']))\n",
|
|
"\n",
|
|
"time_step = 0.1"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAQUAAAD4CAYAAADl7fPiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAAsTAAALEwEAmpwYAAANaklEQVR4nO3df6xf9V3H8efLUliCRUCk45cbmZUEllmXpriIBmTjR0PsZpZZYhSVBFxG4hITg5qMZf4zY5BoIJBuNjCzAUata7JCaaoJI9kYhZRfG0glXegda906YcgcFt7+cU/N/dx+b3v9nu/33u+9PB/Jzfecz+dzzvmcfJNXzznfb7/vVBWSdMRPLPYEJE0WQ0FSw1CQ1DAUJDUMBUmNExZ7AoOcmJPqHZy82NOQlq3/5r94o36cQX0TGQrv4GQuzuWLPQ1p2Xq0ds3Z5+2DpEavUEhyVZLnk+xNcvOA/pOS3N/1P5rk3X2OJ2n8hg6FJCuAO4CrgQuBa5NcOGvY9cAPqurngNuAvxj2eJIWRp8rhfXA3qp6sareAO4DNs4asxG4p1v+B+DyJAMfbkiaDH1C4RzgpRnr+7u2gWOq6jDwCvDTg3aW5IYku5Ps/h9+3GNakvqYmAeNVbW5qtZV1bqVnLTY05HetvqEwhRw3oz1c7u2gWOSnAD8FPD9HseUNGZ9QuExYE2S85OcCGwCts0asw24rlv+KPAv5f/Vliba0F9eqqrDSW4CdgArgC1V9WySzwC7q2ob8LfA3yXZCxxiOjgkTbBM4j/cp+T08huN0vg8Wrt4tQ4N/CRwYh40SpoMhoKkhqEgqWEoSGoYCpIahoKkhqEgqWEoSGoYCpIahoKkhqEgqWEoSGoYCpIahoKkhqEgqWEoSGoYCpIahoKkRp8KUecl+dck30zybJI/HDDm0iSvJNnT/X2q33QljVufqtOHgT+qqieSrAIeT7Kzqr45a9xXq+qaHseRtICGvlKoqper6olu+YfAtzi6QpSkJWYkzxS6atK/CDw6oPsDSZ5M8kCSi46xD8vGSROgz+0DAEl+EvhH4JNV9eqs7ieAd1XVa0k2AP8MrBm0n6raDGyG6Z947zsvScPpdaWQZCXTgfDFqvqn2f1V9WpVvdYtbwdWJjmjzzEljVefTx/CdAWob1XVX80x5p1HSs8nWd8dz1qS0gTrc/vwy8BvA08n2dO1/SnwswBVdRfT9SM/nuQw8CNgk7UkpcnWp5bkI8DAslMzxtwO3D7sMSQtPL/RKKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpIahIKlhKEhq9A6FJPuSPN2Vhds9oD9J/ibJ3iRPJXl/32NKGp/edR86l1XV9+bou5rpWg9rgIuBO7tXSRNoIW4fNgJfqGlfB05NctYCHFfSEEYRCgU8lOTxJDcM6D8HeGnG+n4G1Jy0bJw0GUZx+3BJVU0lORPYmeS5qnr4/7sTy8ZJk6H3lUJVTXWvB4GtwPpZQ6aA82asn9u1SZpAfWtJnpxk1ZFl4ArgmVnDtgG/030K8UvAK1X1cp/jShqfvrcPq4GtXbnIE4AvVdWDSf4A/q903HZgA7AXeB34vZ7HlDRGvUKhql4EfmFA+10zlgv4RJ/jSFo4fqNRUsNQkNQwFCQ1DAVJDUNBUsNQkNQwFCQ1DAVJDUNBUsNQkNQwFCQ1DAVJDUNBUsNQkNQwFCQ1DAVJDUNBUsNQkNQYOhSSXNCVijvy92qST84ac2mSV2aM+VTvGUsaq6F/o7GqngfWAiRZwfTPtm8dMPSrVXXNsMeRtLBGdftwOfDvVfXtEe1P0iIZVShsAu6do+8DSZ5M8kCSi+bagWXjpMmQ6V9g77GD5ETgO8BFVXVgVt8pwFtV9VqSDcBfV9Wa4+3zlJxeF+fyXvOSNLdHaxev1qEM6hvFlcLVwBOzAwGgql6tqte65e3AyiRnjOCYksZkFKFwLXPcOiR5Z7ryUUnWd8f7/giOKWlMelWI6upHfgi4cUbbzJJxHwU+nuQw8CNgU/W9X5E0Vr2fKYyDzxSk8Rr3MwVJy4ihIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpIahIKkxr1BIsiXJwSTPzGg7PcnOJC90r6fNse113ZgXklw3qolLGo/5XincDVw1q+1mYFdXx2FXt95IcjpwC3AxsB64Za7wkDQZ5hUKVfUwcGhW80bgnm75HuDDAza9EthZVYeq6gfATo4OF0kTpM8zhdVV9XK3/F1g9YAx5wAvzVjf37VJmlAjedDY1XLo9Vvx1pKUJkOfUDiQ5CyA7vXggDFTwHkz1s/t2o5SVZural1VrVvJST2mJamPPqGwDTjyacJ1wJcHjNkBXJHktO4B4xVdm6QJNd+PJO8FvgZckGR/kuuBzwIfSvIC8MFunSTrknweoKoOAX8OPNb9faZrkzShLBsnvQ1ZNk7SvBkKkhqGgqSGoSCpYShIahgKkhqGgqSGoSCpYShIahgKkhqGgqSGoSCpYShIahgKkhqGgqSGoSCpYShIahgKkhqGgqTGcUNhjjqSf5nkuSRPJdma5NQ5tt2X5Okke5LsHuG8JY3JfK4U7uboUm87gfdW1fuAfwP+5BjbX1ZVa6tq3XBTlLSQjhsKg+pIVtVDVXW4W/0600VeJC0Do3im8PvAA3P0FfBQkseT3HCsnVg2TpoMJ/TZOMmfAYeBL84x5JKqmkpyJrAzyXPdlcdRqmozsBmm6z70mZek4Q19pZDkd4FrgN+qOSrKVNVU93oQ2AqsH/Z4khbGUKGQ5Crgj4Ffr6rX5xhzcpJVR5aZriP5zKCxkibHfD6SHFRH8nZgFdO3BHuS3NWNPTvJ9m7T1cAjSZ4EvgF8paoeHMtZSBoZa0lKb0PWkpQ0b4aCpIahIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpIahIKlhKEhqGAqSGoaCpMawZeM+nWSq+33GPUk2zLHtVUmeT7I3yc2jnLik8Ri2bBzAbV05uLVVtX12Z5IVwB3A1cCFwLVJLuwzWUnjN1TZuHlaD+ytqher6g3gPmDjEPuRtID6PFO4qas6vSXJaQP6zwFemrG+v2sbyLJx0mQYNhTuBN4DrAVeBm7tO5Gq2lxV66pq3UpO6rs7SUMaKhSq6kBVvVlVbwGfY3A5uCngvBnr53ZtkibYsGXjzpqx+hEGl4N7DFiT5PwkJwKbgG3DHE/Swjlu1emubNylwBlJ9gO3AJcmWct0qfl9wI3d2LOBz1fVhqo6nOQmYAewAthSVc+O4yQkjY5l46S3IcvGSZo3Q0FSw1CQ1DAUJDUMBUkNQ0FSw1CQ1DAUJDUMBUkNQ0FSw1CQ1DAUJDUMBUkNQ0FSw1CQ1DAUJDUMBUkNQ0FSYz6/0bgFuAY4WFXv7druBy7ohpwK/GdVrR2w7T7gh8CbwOGqWjeSWUsam+OGAtNl424HvnCkoap+88hykluBV46x/WVV9b1hJyhpYR03FKrq4STvHtSXJMDHgF8b8bwkLZK+zxR+BThQVS/M0V/AQ0keT3LDsXZk2ThpMszn9uFYrgXuPUb/JVU1leRMYGeS57qCtUepqs3AZpj+ifee85I0pKGvFJKcAPwGcP9cY6pqqns9CGxlcHk5SROkz+3DB4Hnqmr/oM4kJydZdWQZuILB5eUkTZDjhkJXNu5rwAVJ9ie5vuvaxKxbhyRnJ9nera4GHknyJPAN4CtV9eDopi5pHCwbJ70NWTZO0rwZCpIahoKkhqEgqWEoSGr0/UbjWPz8+15nx4498xp75dlrxzoXaSnZ8Z098xq3/srX5+zzSkFSw1CQ1DAUJDUMBUkNQ0FSw1CQ1DAUJDUMBUkNQ0FSw1CQ1JjIH1lJ8h/At2c1nwEsx/oRy/W8YPme23I4r3dV1c8M6pjIUBgkye7lWGFquZ4XLN9zW67ndYS3D5IahoKkxlIKhc2LPYExWa7nBcv33JbreQFL6JmCpIWxlK4UJC0AQ0FSY0mEQpKrkjyfZG+Smxd7PqOSZF+Sp5PsSbJ7sefTR5ItSQ4meWZG2+lJdiZ5oXs9bTHnOIw5zuvTSaa6921Pkg2LOcdRm/hQSLICuAO4GrgQuDbJhYs7q5G6rKrWLoPPve8GrprVdjOwq6rWALu69aXmbo4+L4DbuvdtbVVtH9C/ZE18KDBdqXpvVb1YVW8A9wEbF3lOmqWqHgYOzWreCNzTLd8DfHgh5zQKc5zXsrYUQuEc4KUZ6/u7tuWggIeSPJ7khsWezBisrqqXu+XvMl10eLm4KclT3e3FkrstOpalEArL2SVV9X6mb40+keRXF3tC41LTn30vl8+/7wTeA6wFXgZuXdTZjNhSCIUp4LwZ6+d2bUteVU11rweBrUzfKi0nB5KcBdC9Hlzk+YxEVR2oqjer6i3gcyyz920phMJjwJok5yc5EdgEbFvkOfWW5OQkq44sA1cAzxx7qyVnG3Bdt3wd8OVFnMvIHAm6zkdYZu/bRFaImqmqDie5CdgBrAC2VNWzizytUVgNbE0C0+/Dl6rqwcWd0vCS3AtcCpyRZD9wC/BZ4O+TXM/0f4X/2OLNcDhznNelSdYyfTu0D7hxseY3Dn7NWVJjKdw+SFpAhoKkhqEgqWEoSGoYCpIahoKkhqEgqfG/uHzLBjDxX7wAAAAASUVORK5CYII=",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# initialize environment with start values\n",
|
|
"C_t = np.zeros((grid_size['x'],grid_size['y']))\n",
|
|
"C_t[19,0] = 2000\n",
|
|
"C_t[19,19] = 2000\n",
|
|
"\n",
|
|
"\n",
|
|
"plt.imshow(C_t, vmin=0, vmax=2000)\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 41,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# calculate mean between two cells\n",
|
|
"def alpha_interblock(alpha1, alpha2, harmonic=True):\n",
|
|
" if not harmonic:\n",
|
|
" return 0.5 * (alpha1 + alpha2)\n",
|
|
" else:\n",
|
|
" return 2 / ((1/alpha1) + (1/alpha2))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 217,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def sub(delta_t, delta_x):\n",
|
|
" return delta_t / (2 * delta_x**2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 260,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"################\n",
|
|
"### CONSTANT ###\n",
|
|
"################\n",
|
|
"\n",
|
|
"# creates the coeffiecient matrix for a given row\n",
|
|
"def create_coeff_matrix(alpha_x, row_index, s_x):\n",
|
|
" # alias\n",
|
|
" r = row_index\n",
|
|
"\n",
|
|
" # a square matrix of column^2 dimension for the coefficients\n",
|
|
" cm = np.zeros((alpha_x.shape[1],alpha_x.shape[1]))\n",
|
|
"\n",
|
|
" # top left\n",
|
|
" cm[0,0] = 1 + s_x * (alpha_interblock(alpha_x[r,0], alpha_x[r,1]) + 2 * alpha_x[r,0]) # alpha_x[0,0]\n",
|
|
" cm[0,1] = -s_x * alpha_interblock(alpha_x[r, 0], alpha_x[r, 1])\n",
|
|
"\n",
|
|
" # inner cells\n",
|
|
" for i_cm in range(1, cm.shape[0]-1):\n",
|
|
" j_alpha = i_cm #- 1 # ???????\n",
|
|
" cm[i_cm,i_cm-1] = -s_x * alpha_interblock(alpha_x[r, j_alpha-1], alpha_x[r, j_alpha])\n",
|
|
" cm[i_cm,i_cm] = 1 + s_x * (alpha_interblock(alpha_x[r,j_alpha], alpha_x[r, j_alpha+1]) \\\n",
|
|
" + alpha_interblock(alpha_x[r, j_alpha], alpha_x[r, j_alpha-1]))\n",
|
|
" cm[i_cm,i_cm+1] = -s_x * alpha_interblock(alpha_x[r, j_alpha], alpha_x[r, j_alpha+1])\n",
|
|
"\n",
|
|
"\n",
|
|
" # bottom right\n",
|
|
" n = cm.shape[0]-1\n",
|
|
" cm[n,n-1] = -s_x * alpha_interblock(alpha_x[r, n-1], alpha_x[r, n]) ## changed to - !!!\n",
|
|
" cm[n,n] = 1 + s_x * (alpha_interblock(alpha_x[r, n], alpha_x[r, n-1]) + 2 * alpha_x[r,n]) # alpha_x[n,n]? -> changed to [r,n]!!! and changed to +alpha_interblock\n",
|
|
"\n",
|
|
" # print(cm)\n",
|
|
" return cm\n",
|
|
"\n",
|
|
"# creates the solution vector for a given row\n",
|
|
"# s_x, alpha_x, row_index?\n",
|
|
"def create_solution_vector(concentrations, alpha_x, alpha_y, row_index, s_x, s_y, bc_left, bc_right, bc_top, bc_bottom):\n",
|
|
"\n",
|
|
" sv = np.zeros(concentrations.shape[1])\n",
|
|
" # print(concentrations.shape[1])\n",
|
|
" # print(sv.shape[0])\n",
|
|
" # print(row_index)\n",
|
|
"\n",
|
|
" # inner rows\n",
|
|
" if row_index > 0 and row_index < concentrations.shape[0]-1:\n",
|
|
" for i in range(0, sv.shape[0]):\n",
|
|
" sv[i] = s_y * alpha_interblock(alpha_y[row_index+1,i],alpha_y[row_index,i]) * concentrations[row_index+1,i] \\\n",
|
|
" + (\n",
|
|
" 1 - s_y * (\n",
|
|
" alpha_interblock(alpha_y[row_index+1,i], alpha_y[row_index,i]) \\\n",
|
|
" + alpha_interblock(alpha_y[row_index,i], alpha_y[row_index-1,i])\n",
|
|
" )\n",
|
|
" ) * concentrations[row_index,i] \\\n",
|
|
" + s_y * alpha_interblock(alpha_y[row_index,i], alpha_y[row_index-1,i]) * concentrations[row_index-1,i]\n",
|
|
"\n",
|
|
" # first row\n",
|
|
" # TODO check formula for alpha boundary cases\n",
|
|
" # added factor of 2 in front of alpha_y!!!\n",
|
|
" if row_index == 0:\n",
|
|
" for i in range(0, sv.shape[0]):\n",
|
|
" sv[i] = s_y * alpha_interblock(alpha_y[row_index+1,i],alpha_y[row_index,i]) * concentrations[row_index+1,i] \\\n",
|
|
" + (\n",
|
|
" 1 - s_y * (\n",
|
|
" alpha_interblock(alpha_y[row_index+1,i], alpha_y[row_index,i]) \\\n",
|
|
" + 2 * alpha_y[row_index,i]\n",
|
|
" )\n",
|
|
" ) * concentrations[row_index,i] \\\n",
|
|
" + s_y * alpha_y[row_index,i] * bc_top\n",
|
|
"\n",
|
|
"\n",
|
|
" # last row\n",
|
|
" # TODO check formula for alpha boundary cases\n",
|
|
" # added factor of 2 in front of alpha_y!!!\n",
|
|
" if row_index == sv.shape[0]-1:\n",
|
|
" for i in range(0, sv.shape[0]):\n",
|
|
" i = i\n",
|
|
" sv[i] = s_y * alpha_y[row_index,i]*bc_bottom \\\n",
|
|
" + (\n",
|
|
" 1 - s_y * (\n",
|
|
" 2 * alpha_y[row_index,i] \\\n",
|
|
" + alpha_interblock(alpha_y[row_index,i], alpha_y[row_index-1,i])\n",
|
|
" )\n",
|
|
" ) * concentrations[row_index,i] \\\n",
|
|
" + s_y * alpha_interblock(alpha_y[row_index,i], alpha_y[row_index-1,i]) * concentrations[row_index-1,i]\n",
|
|
"\n",
|
|
"\n",
|
|
" # first column (additional fixed concentration change from perpendicular dimension)\n",
|
|
" # TODO check correctness of additional summand\n",
|
|
" i = 0\n",
|
|
" sv[0] += 2 * s_x * alpha_x[row_index,0] * bc_left # alpha_x[row_index,0]?\n",
|
|
"\n",
|
|
" # last column (additional fixed concentration change from perpendicular direction)\n",
|
|
" # TODO check correctness of additional summand\n",
|
|
" n = sv.shape[0]-1\n",
|
|
" sv[n] += 2 * s_x * alpha_x[row_index,n] * bc_right\n",
|
|
"\n",
|
|
" # print(sv)\n",
|
|
" return sv\n",
|
|
"\n",
|
|
"def calc_sweep(concentrations, alpha_x, alpha_y, s_x, s_y, bc_left, bc_right, bc_top, bc_bottom):\n",
|
|
"\n",
|
|
" concentrations_t1 = np.zeros((concentrations.shape[0], concentrations.shape[1]))\n",
|
|
"\n",
|
|
" for i in range(concentrations.shape[0]):\n",
|
|
" A = create_coeff_matrix(alpha_x, i, s_x)\n",
|
|
" # print(i)\n",
|
|
" b = create_solution_vector(concentrations, alpha_x, alpha_y, i, s_x, s_y, bc_left, bc_right, bc_top, bc_bottom)\n",
|
|
" concentrations_t1[i,:] = np.linalg.solve(A,b)\n",
|
|
"\n",
|
|
" # print(concentrations_t1)\n",
|
|
" return concentrations_t1\n",
|
|
"\n",
|
|
"def calc_iteration(concentrations, alpha_x, alpha_y, s_x, s_y, bc_left, bc_right, bc_top, bc_bottom):\n",
|
|
" concentrations = calc_sweep(concentrations, alpha_x, alpha_y, s_x, s_y, bc_left, bc_right, bc_top, bc_bottom)\n",
|
|
" # concentrations = calc_sweep(concentrations, alpha_x, alpha_y, s_x, s_y, bc_left, bc_right, bc_top, bc_bottom, True)\n",
|
|
" concentrations = calc_sweep(concentrations.transpose(), alpha_y.transpose(), alpha_x.transpose(), s_y, s_x, bc_top, bc_bottom, bc_left, bc_right).transpose()\n",
|
|
" \n",
|
|
" # print(concentrations)\n",
|
|
" return concentrations\n",
|
|
"\n",
|
|
"\n",
|
|
"def sim(concentrations, alpha_x, alpha_y, iterations, delta_t, delta_x, delta_y, bc_left, bc_right, bc_top, bc_bottom):\n",
|
|
" s_x = sub(delta_t, delta_x)\n",
|
|
" s_y = sub(delta_t, delta_y)\n",
|
|
" for i in range(iterations):\n",
|
|
" concentrations = calc_iteration(concentrations, alpha_x, alpha_y, s_x, s_y, bc_left, bc_right, bc_top, bc_bottom)\n",
|
|
"\n",
|
|
" return concentrations\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 263,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Test Concentrations t=0:\n",
|
|
"[[2000. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]\n",
|
|
" [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 0. 0.]]\n",
|
|
"\n",
|
|
"Test Alpha:\n",
|
|
"[[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]\n",
|
|
" [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]\n",
|
|
"\n",
|
|
"Test Concentrations t=t+100:\n",
|
|
"[[1.03406102e-02 2.94500761e-02 4.42425339e-02 5.30261971e-02\n",
|
|
" 5.54585202e-02 5.24218517e-02 4.55845468e-02 3.68489168e-02\n",
|
|
" 2.78821771e-02 1.98459113e-02 1.33384415e-02 8.49103230e-03\n",
|
|
" 5.13283898e-03 2.95299311e-03 1.61991433e-03 8.48326049e-04\n",
|
|
" 4.23411469e-04 1.98147312e-04 7.81667728e-05 0.00000000e+00]\n",
|
|
" [2.94500761e-02 8.38738682e-02 1.26002814e-01 1.51018702e-01\n",
|
|
" 1.57945963e-01 1.49297526e-01 1.29824869e-01 1.04945780e-01\n",
|
|
" 7.94084893e-02 5.65211900e-02 3.79879047e-02 2.41824749e-02\n",
|
|
" 1.46183344e-02 8.41012956e-03 4.61351885e-03 2.41603407e-03\n",
|
|
" 1.20587661e-03 5.64323892e-04 2.22619106e-04 0.00000000e+00]\n",
|
|
" [4.42425339e-02 1.26002814e-01 1.89292678e-01 2.26873779e-01\n",
|
|
" 2.37280529e-01 2.24288074e-01 1.95034511e-01 1.57658921e-01\n",
|
|
" 1.19294523e-01 8.49111786e-02 5.70688225e-02 3.63290730e-02\n",
|
|
" 2.19609672e-02 1.26344476e-02 6.93083997e-03 3.62958212e-03\n",
|
|
" 1.81157551e-03 8.47777741e-04 3.34438299e-04 0.00000000e+00]\n",
|
|
" [5.30261971e-02 1.51018702e-01 2.26873779e-01 2.71916020e-01\n",
|
|
" 2.84388867e-01 2.68816963e-01 2.33755563e-01 1.88959634e-01\n",
|
|
" 1.42978585e-01 1.01768965e-01 6.83989447e-02 4.35416423e-02\n",
|
|
" 2.63209738e-02 1.51428195e-02 8.30684985e-03 4.35017888e-03\n",
|
|
" 2.17123550e-03 1.01609075e-03 4.00835793e-04 0.00000000e+00]\n",
|
|
" [5.54585202e-02 1.57945963e-01 2.37280529e-01 2.84388867e-01\n",
|
|
" 2.97433845e-01 2.81147655e-01 2.44477981e-01 1.97627253e-01\n",
|
|
" 1.49537044e-01 1.06437130e-01 7.15364191e-02 4.55389069e-02\n",
|
|
" 2.75283226e-02 1.58374240e-02 8.68788685e-03 4.54972253e-03\n",
|
|
" 2.27083054e-03 1.06269905e-03 4.19222217e-04 0.00000000e+00]\n",
|
|
" [5.24218517e-02 1.49297526e-01 2.24288074e-01 2.68816963e-01\n",
|
|
" 2.81147656e-01 2.65753227e-01 2.31091425e-01 1.86806040e-01\n",
|
|
" 1.41349042e-01 1.00609093e-01 6.76193944e-02 4.30453935e-02\n",
|
|
" 2.60209908e-02 1.49702352e-02 8.21217577e-03 4.30059942e-03\n",
|
|
" 2.14648969e-03 1.00451025e-03 3.96267423e-04 0.00000000e+00]\n",
|
|
" [4.55845468e-02 1.29824869e-01 1.95034511e-01 2.33755563e-01\n",
|
|
" 2.44477981e-01 2.31091425e-01 2.00950511e-01 1.62441204e-01\n",
|
|
" 1.22913095e-01 8.74867972e-02 5.87998964e-02 3.74310462e-02\n",
|
|
" 2.26271113e-02 1.30176895e-02 7.14107378e-03 3.73967857e-03\n",
|
|
" 1.86652620e-03 8.73493462e-04 3.44582847e-04 0.00000000e+00]\n",
|
|
" [3.68489169e-02 1.04945780e-01 1.57658921e-01 1.88959635e-01\n",
|
|
" 1.97627254e-01 1.86806041e-01 1.62441204e-01 1.31311658e-01\n",
|
|
" 9.93585490e-02 7.07211972e-02 4.75317328e-02 3.02579187e-02\n",
|
|
" 1.82909473e-02 1.05230345e-02 5.77258858e-03 3.02302238e-03\n",
|
|
" 1.50883301e-03 7.06100867e-04 2.78548446e-04 0.00000000e+00]\n",
|
|
" [2.78821775e-02 7.94084904e-02 1.19294525e-01 1.42978587e-01\n",
|
|
" 1.49537046e-01 1.41349044e-01 1.22913097e-01 9.93585501e-02\n",
|
|
" 7.51808447e-02 5.35120470e-02 3.59654590e-02 2.28950192e-02\n",
|
|
" 1.38400659e-02 7.96238097e-03 4.36789879e-03 2.28740635e-03\n",
|
|
" 1.14167670e-03 5.34279739e-04 2.10767042e-04 0.00000000e+00]\n",
|
|
" [1.98459125e-02 5.65211936e-02 8.49111840e-02 1.01768972e-01\n",
|
|
" 1.06437136e-01 1.00609099e-01 8.74868028e-02 7.07212015e-02\n",
|
|
" 5.35120497e-02 3.80886824e-02 2.55994121e-02 1.62961644e-02\n",
|
|
" 9.85105048e-03 5.66744531e-03 3.10897301e-03 1.62812486e-03\n",
|
|
" 8.12620028e-04 3.80288410e-04 1.50019283e-04 0.00000000e+00]\n",
|
|
" [1.33384455e-02 3.79879160e-02 5.70688395e-02 6.83989650e-02\n",
|
|
" 7.15364404e-02 6.76194145e-02 5.87999139e-02 4.75317468e-02\n",
|
|
" 3.59654692e-02 2.55994181e-02 1.72053748e-02 1.09526584e-02\n",
|
|
" 6.62089482e-03 3.80909218e-03 2.08954196e-03 1.09426334e-03\n",
|
|
" 5.46162234e-04 2.55591987e-04 1.00828018e-04 0.00000000e+00]\n",
|
|
" [8.49104441e-03 2.41825094e-02 3.63291249e-02 4.35417044e-02\n",
|
|
" 4.55389718e-02 4.30454548e-02 3.74310996e-02 3.02579618e-02\n",
|
|
" 2.28950515e-02 1.62961866e-02 1.09526707e-02 6.97228990e-03\n",
|
|
" 4.21475742e-03 2.42480812e-03 1.33016952e-03 6.96590820e-04\n",
|
|
" 3.47678281e-04 1.62705835e-04 6.41855291e-05 0.00000000e+00]\n",
|
|
" [5.13287478e-03 1.46184364e-02 2.19611204e-02 2.63211574e-02\n",
|
|
" 2.75285146e-02 2.60211723e-02 2.26272691e-02 1.82910748e-02\n",
|
|
" 1.38401623e-02 9.85111856e-03 6.62093903e-03 4.21478081e-03\n",
|
|
" 2.54783994e-03 1.46580748e-03 8.04093494e-04 4.21092304e-04\n",
|
|
" 2.10173094e-04 9.83564140e-05 3.88004429e-05 0.00000000e+00]\n",
|
|
" [2.95309565e-03 8.41042158e-03 1.26348863e-02 1.51433453e-02\n",
|
|
" 1.58379739e-02 1.49707550e-02 1.30181414e-02 1.05233998e-02\n",
|
|
" 7.96265733e-03 5.66764174e-03 3.80922330e-03 2.42488886e-03\n",
|
|
" 1.46584816e-03 8.43322677e-04 4.62618922e-04 2.42266936e-04\n",
|
|
" 1.20918837e-04 5.65873727e-05 2.23230497e-05 0.00000000e+00]\n",
|
|
" [1.62019850e-03 4.61432816e-03 6.93205578e-03 8.30830705e-03\n",
|
|
" 8.68941089e-03 8.21361636e-03 7.14232647e-03 5.77360120e-03\n",
|
|
" 4.36866495e-03 3.10951819e-03 2.08990788e-03 1.33040096e-03\n",
|
|
" 8.04228939e-04 4.62684009e-04 2.53813141e-04 1.32918325e-04\n",
|
|
" 6.63414064e-05 3.10463280e-05 1.22474095e-05 0.00000000e+00]\n",
|
|
" [8.49087345e-04 2.41820225e-03 3.63283934e-03 4.35408277e-03\n",
|
|
" 4.55380549e-03 4.30445881e-03 3.74303459e-03 3.02573525e-03\n",
|
|
" 2.28945906e-03 1.62958585e-03 1.09524502e-03 6.97214952e-04\n",
|
|
" 4.21467256e-04 2.42475930e-04 1.33014273e-04 6.96576794e-05\n",
|
|
" 3.47671280e-05 1.62702559e-05 6.41842367e-06 0.00000000e+00]\n",
|
|
" [4.25380778e-04 1.21148520e-03 1.82000124e-03 2.18133403e-03\n",
|
|
" 2.28139229e-03 2.15647312e-03 1.87520751e-03 1.51585066e-03\n",
|
|
" 1.14698668e-03 8.16399513e-04 5.48702299e-04 3.49294852e-04\n",
|
|
" 2.11149148e-04 1.21477019e-04 6.66382739e-05 3.48975144e-05\n",
|
|
" 1.74178405e-05 8.15116863e-06 3.21553969e-06 0.00000000e+00]\n",
|
|
" [2.03060115e-04 5.78315563e-04 8.68797277e-04 1.04128339e-03\n",
|
|
" 1.08904728e-03 1.02941577e-03 8.95150585e-04 7.23607709e-04\n",
|
|
" 5.47526496e-04 3.89717137e-04 2.61928977e-04 1.66739675e-04\n",
|
|
" 1.00794329e-04 5.79883688e-05 3.18105008e-05 1.66587059e-05\n",
|
|
" 8.31459455e-06 3.89104850e-06 1.53497265e-06 0.00000000e+00]\n",
|
|
" [8.99709827e-05 2.56237516e-04 3.84942877e-04 4.61367265e-04\n",
|
|
" 4.82530281e-04 4.56109011e-04 3.96619385e-04 3.20612921e-04\n",
|
|
" 2.42595632e-04 1.72674155e-04 1.16054339e-04 7.38782821e-05\n",
|
|
" 4.46595081e-05 2.56932314e-05 1.40944568e-05 7.38106616e-06\n",
|
|
" 3.68399399e-06 1.72402866e-06 6.80108929e-07 0.00000000e+00]\n",
|
|
" [3.06776986e-05 8.73701394e-05 1.31255225e-04 1.57313897e-04\n",
|
|
" 1.64529919e-04 1.55520973e-04 1.35236602e-04 1.09320431e-04\n",
|
|
" 8.27186217e-05 5.88772684e-05 3.95714255e-05 2.51905181e-05\n",
|
|
" 1.52276977e-05 8.76070470e-06 4.80583278e-06 2.51674614e-06\n",
|
|
" 1.25614341e-06 5.87847659e-07 2.31898954e-07 0.00000000e+00]\n",
|
|
" [1.15629302e-05 3.29312455e-05 4.94722575e-05 5.92942005e-05\n",
|
|
" 6.20140383e-05 5.86184180e-05 5.09729041e-05 4.12046721e-05\n",
|
|
" 3.11780119e-05 2.21918128e-05 1.49151225e-05 9.49472147e-06\n",
|
|
" 5.73957026e-06 3.30205399e-06 1.81139758e-06 9.48603099e-07\n",
|
|
" 4.73461156e-07 2.21569471e-07 8.74065378e-08 0.00000000e+00]\n",
|
|
" [5.02736097e-07 1.43179328e-06 2.15096772e-06 2.57800872e-06\n",
|
|
" 2.69626254e-06 2.54862687e-06 2.21621322e-06 1.79150748e-06\n",
|
|
" 1.35556573e-06 9.64861428e-07 6.48483586e-07 4.12813977e-07\n",
|
|
" 2.49546533e-07 1.43567565e-07 7.87564166e-08 4.12436130e-08\n",
|
|
" 2.05852676e-08 9.63345528e-09 3.80028425e-09 0.00000000e+00]]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"row = 22\n",
|
|
"col = 20\n",
|
|
"domain_row = row\n",
|
|
"domain_col = col\n",
|
|
"iterations = 100\n",
|
|
"delta_t = 0.1\n",
|
|
"delta_x = domain_col / col\n",
|
|
"delta_y = domain_row / row\n",
|
|
"bc_left = 0\n",
|
|
"bc_right = 0\n",
|
|
"bc_top = 0\n",
|
|
"bc_bottom = 0\n",
|
|
"\n",
|
|
"\n",
|
|
"testConcentrations = np.zeros((row,col))\n",
|
|
"testConcentrations[0,0] = 2000\n",
|
|
"print(\"Test Concentrations t=0:\")\n",
|
|
"print(testConcentrations)\n",
|
|
"\n",
|
|
"# seed = np.random.seed(42)\n",
|
|
"# testAlpha = np.random.random((row,col)) * 10\n",
|
|
"testAlpha= np.ones((row,col))\n",
|
|
"print(\"\\nTest Alpha:\")\n",
|
|
"print(testAlpha)\n",
|
|
"\n",
|
|
"testConcentrations = sim(testConcentrations, testAlpha, testAlpha, iterations, delta_t, delta_x, delta_y, bc_left, bc_right, bc_top, bc_bottom)\n",
|
|
"print(\"\\nTest Concentrations t=t+\" + str(iterations) + \":\")\n",
|
|
"print(testConcentrations)\n",
|
|
"\n",
|
|
"\n",
|
|
"# testA = create_coeff_matrix(testAlpha, 1, 3)\n",
|
|
"# print(\"\\nTest A:\")\n",
|
|
"# print(testA)\n",
|
|
"\n",
|
|
"# testb = create_solution_vector(testConcentrations,testAlpha,testAlpha,1,1,3,3,1,1)\n",
|
|
"# print(\"\\nTest b:\")\n",
|
|
"# print(testb)\n",
|
|
"\n",
|
|
"# needed to solve: TODO calc boundary in functions\n",
|
|
"# testA[0,0] = 1\n",
|
|
"# testA[4,4] = 1\n",
|
|
"# testb[0] = 1\n",
|
|
"# test[4] = 1\n",
|
|
"\n",
|
|
"# result = solve_row(testA, testb)\n",
|
|
"# print(\"\\nResult x:\")\n",
|
|
"# print(result)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 264,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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Is3wHnA73gMmIiLyAPaAiYhIOxyCVjEBExGRdiSHoJmAvZhoMUMozq91K65dl45Bkdzw3D/IBWtBS2w0rXLFWrutctcCAESz3PrHokV+DWbRIr+mtewazAAAyd8twAVrOXMdZyKX8LkETEREXoxD0ComYCIi0g4TsIqzoImIiDyAPWAiItIMnwNuxx4wERGRBzABExEReQCHoImISDuchKViAiYiIs3wHnA7JmAiItKWDyVRGbwHTERE5AHsARMRkXZ4D1jFBExERJrhPeB2Dg9Bl5WVYebMmYiKioKiKNi3b5/6XktLC1566SWMGjUKffr0QVRUFNLT0/HNN9902mZeXh4URelwNDU1OfyBiIiIegKHE/C1a9cwevRorF+/vsN7169fx6effopXX30Vn376Kfbs2YO//e1v+MlPftJlu6GhoaitrbU6goODHQ2PiIi8mXDB4SMcHoJOSUlBSkqKzff0ej2Ki4utzq1btw7jx49HdXU1Bg4caLddRVEQERHhaDhERNSDcAi6ndtnQTc0NEBRFNx+++2dlmtsbERMTAwGDBiARx99FBUVFZ2WN5lMMBqNVgcREVFP4dZJWE1NTVixYgWeeuophIaG2i03dOhQ5OXlYdSoUTAajXjvvfcwceJEnD17FoMHD7ZZJycnB6+//nqH88JshlCc/14hTCan66pkN01v9pK5cbIbtwMu2bxdmCXbaGnxfAyAa66FN/ybCB/qgpD2OAta5bYecEtLC5544glYLBZs3Lix07IJCQn4xS9+gdGjR2PSpEn44x//iHvvvRfr1q2zWycrKwsNDQ3qUVNT4+qPQERErsZ7wCq3dLVaWlowd+5cVFVV4eOPP+6092uLn58fxo0bhwsXLtgto9PpoNPpZEMlIiLyCJf3gNuS74ULF3DkyBHceeedDrchhEBlZSUiIyNdHR4REXlQ2yQsmcNXONwDbmxsxN///nf1dVVVFSorK9G3b19ERUVhzpw5+PTTT/E///M/MJvNMBgMAIC+ffsiKCgIAJCeno677roLOTk5AIDXX38dCQkJGDx4MIxGI9auXYvKykps2LDBFZ+RiIi8Be8BqxxOwKdPn8a0adPU15mZmQCAefPmITs7GwcOHAAA3HfffVb1jh49iqlTpwIAqqur4efX3vm+cuUKnn32WRgMBuj1esTFxaGsrAzjx493NDwi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KPTq1QtTp07F559/3mW7slufORJnS0sLXnrpJYwaNQp9+vRBVFQU0tPT8c0333TaZl5ens1r3NTU5JY4AWD+/Pkdfl5CQkKX7Wp5PQHYvC6KouC3v/2t3TbdcT3Je/hMAnbHdlOuVlpaiiVLluCTTz5BcXExWltbkZycjGvXrnVZ9/z586itrVWPwYMHuy1OABgxYoTVz/vss8/slvXEtQSAU6dOWcXY9lD8z372s07ruftaXrt2DaNHj8b69ettvv/2229j9erVWL9+PU6dOoWIiAhMnz5dXc/cFldsfeZInNevX8enn36KV199FZ9++in27NmDv/3tb/jJT37SZbuhoaFW17e2tlZq9aOuridwYxeam39eUVHn6w1rfT0BdLgm27Ztg6IoePzxxztt19XXk7yI409Teafx48eLRYsWWZ0bOnSoWLFihc3yy5cvF0OHDrU699xzz4mEhAS3xXiruro6AcDqebRbHT16VAAQ3333nWZxvfbaa2L06NHdLu8N11IIIZYuXSoGDRokLBaLzfc9cS0BiL1796qvLRaLiIiIEG+99ZZ6rqmpSej1erF582a77cydO1c8/PDDVudmzJghnnjiCbfEacv//u//CgDi4sWLdsts375d6PV6l8Rki604582bJ2bNmuVQO95wPWfNmiUeeOCBTsu4+3qSZ/lED7htu6lbt49yZrup06dPo6WlxW2x3qyhoQEA0Ldv3y7LxsXFITIyEg8++CCOHj3q7tBw4cIFREVFITY2Fk888QS++uoru2W94Vo2Nzdj586dePrpp7tcDF3ra3mzqqoqGAwGq+ul0+kwZcoUu7+rgP1r3FkdV2toaICiKLj99ts7LdfY2IiYmBgMGDAAjz76KCoqKtweW0lJCcLCwnDvvffimWeeQV1dXaflPX09//nPf+LgwYNYsGBBl2U9cT1JGz6RgN2x3ZS7CSGQmZmJ+++/HyNHjrRbLjIyElu2bEFhYSH27NmDIUOG4MEHH0RZWZnbYpswYQJ27NiBQ4cO4Xe/+x0MBgOSkpJw+fJlm+U9fS0BYN++fbhy5Qrmz59vt4wnruWt2n4fHd3GzBVbn8loamrCihUr8NRTT3W6acDQoUORl5eHAwcOID8/H8HBwZg4cSIuXLjgtthSUlLwhz/8AR9//DHeffddnDp1Cg888ABMJpPdOp6+nh988AFCQkLw2GOPdVrOE9eTtONTa0G7Y7spd3n++efxl7/8pct1Q4cMGYIhQ4aorxMTE1FTU4N33nkHkydPdktsKSkp6v8fNWoUEhMTMWjQIHzwwQfIzMy0WceT1xIAtm7dipSUlE63U/PEtbTHmW3MZLc+c1ZLSwueeOIJWCwWbNy4sdOyCQkJVhOgJk6ciDFjxmDdunVYu3atW+JLTU1V///IkSMxduxYxMTE4ODBg50mOE9dTwDYtm0bfv7zn3d5L9cT15O04xM9YHdtN+UuL7zwAg4cOICjR492awvFWyUkJGj6DbhPnz4YNWqU3Z/pyWsJABcvXsSRI0ewcOFCh+tqfS3bZpM7uo2ZK7Y+c0ZLSwvmzp2LqqoqFBcXO7xlnp+fH8aNG6fpNY6MjERMTEynP9NT1xMAjh07hvPnzzv1++qJ60nu4xMJ2F3bTbmaEALPP/889uzZg48//hixsbFOtVNRUYHIyEgXR2efyWTCuXPn7P5MT1zLm23fvh1hYWH48Y9/7HBdra9lbGwsIiIirK5Xc3MzSktLO93GzBVbnzmqLfleuHABR44ccerLlBAClZWVml7jy5cvo6amptOf6Ynr2Wbr1q2Ij4/H6NGjHa7rietJbuSp2V+utnv3bhEYGCi2bt0qvvjiC5GRkSH69Okjvv76ayGEECtWrBBpaWlq+a+++kr07t1bLFu2THzxxRdi69atIjAwUPzXf/2X22L893//d6HX60VJSYmora1Vj+vXr6tlbo1zzZo1Yu/eveJvf/ub+Otf/ypWrFghADi864YjfvWrX4mSkhLx1VdfiU8++UQ8+uijIiQkxKuuZRuz2SwGDhwoXnrppQ7veepaXr16VVRUVIiKigoBQKxevVpUVFSos4ffeustodfrxZ49e8Rnn30mnnzySREZGSmMRqPaRlpamtUM/j//+c/C399fvPXWW+LcuXPirbfeEgEBAeKTTz5xS5wtLS3iJz/5iRgwYICorKy0+n01mUx248zOzhZ/+tOfxD/+8Q9RUVEh/u3f/k0EBASIkydPuiXOq1evil/96lfixIkToqqqShw9elQkJiaKu+66y6uuZ5uGhgbRu3dvmzvr2IrTHdeTvIfPJGAh3LPdlCsBsHls377dbpyrVq0SgwYNEsHBweKOO+4Q999/vzh48KBb40xNTRWRkZEiMDBQREVFiccee0x8/vnndmMUQvtr2ebQoUMCgDh//nyH9zx1Ldsed7r1mDdvnhDixqNIr732moiIiBA6nU5MnjxZfPbZZ1ZtTJkyRS3fRnbrM0firKqqsvv7evToUbtxZmRkiIEDB4qgoCDRv39/kZycLE6cOOG2OK9fvy6Sk5NF//79RWBgoBg4cKCYN2+eqK6utmrD09ezzfvvvy969eolrly5YrMNLa4neQ9uR0hEROQBPnEPmIiIqKdhAiYiIvIAJmAiIiIPYAImIiLyACZgIiIiD2ACJiIi8gAmYCIiIg9gAiYiIvIAJmAiIiIPYAImIiLyACZgIiIiD2ACJiIi8oD/D8KTXCruG+nhAAAAAElFTkSuQmCC",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 2 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.imshow(testConcentrations)\n",
|
|
"plt.colorbar()\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "forschungsprojekt",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.9.7"
|
|
},
|
|
"orig_nbformat": 4
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|