{ "cells": [ { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "import warnings\n", "warnings.simplefilter(action = 'ignore')\n", "\n", "from anisotropy.database import Database, tables\n", "import pathlib\n", "\n", "import peewee as pw\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "db = Database(pathlib.Path(\"anisotropy.db\").resolve())\n", "execution = 5" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def load_data(execution: int, field: str):\n", " if not db.getExecution(execution):\n", " print(\"Execution not found\")\n", "\n", " for model in db.tables:\n", " try:\n", " column = getattr(model, field)\n", " \n", " except AttributeError:\n", " pass\n", "\n", " else:\n", " break\n", "\n", " query = model.select(tables.Shape.alpha, column, tables.Shape.direction, tables.Shape.label)\n", " idn = db.tables.index(model)\n", "\n", " for table in reversed(db.tables[ :idn]):\n", " query = query.join(table, pw.JOIN.LEFT_OUTER)\n", " \n", " query = query.switch(tables.Shape)\n", " query = query.where(\n", " tables.Shape.exec_id == execution,\n", " # tables.Shape.label == structure,\n", " )\n", " query = query.order_by(tables.Shape.label, tables.Shape.direction, tables.Shape.alpha)\n", "\n", " with db:\n", " if query.exists():\n", " table = []\n", " for row in query.dicts():\n", " for k in row.keys():\n", " if type(row[k]) == list:\n", " row[k] = str(row[k])\n", "\n", " table.append(row)\n", " \n", " else:\n", " table = None\n", "\n", " if table is None:\n", " print(\"Results not found\")\n", "\n", " else:\n", " return pd.DataFrame(table)\n", "\n", "def permeability(label, direction):\n", " def concrete(execution, field):\n", " df = load_data(execution, field)\n", " return df[df.label == label][df.direction == direction][field].to_numpy()\n", "\n", " alpha = concrete(7, \"alpha\")\n", " viscosity = concrete(5, \"viscosity\")\n", " viscosityKinematic = concrete(5, \"viscosityKinematic\")\n", " length = concrete(7, \"length\")\n", " flowRate = concrete(5, \"flowRate\")\n", " areaCellOutlet = concrete(7, \"areaCellOutlet\")\n", " pressureInlet = concrete(5, \"pressureInlet\")\n", " pressureOutlet = concrete(5, \"pressureOutlet\")\n", " density = concrete(5, \"density\")\n", "\n", " return viscosity * length * flowRate / (areaCellOutlet * (pressureInlet - pressureOutlet))\n", "\n", "def nanmean(arr):\n", " temp = arr.copy()\n", "\n", " if np.isnan(temp[0]):\n", " temp[0] = temp[1]\n", "\n", " for n, item in enumerate(temp):\n", " if np.all(np.isnan(item)):\n", " \n", " vals = temp[n - 1 : n + 2]\n", "\n", " if np.sum(~np.isnan(vals)) <= 1:\n", " vals = temp[n - 2 : n + 3]\n", "\n", " temp[n] = vals[~np.isnan(vals)].mean()\n", "\n", " return temp\n", "\n", "def filter_group(arr, nan = True, qhigh = True, quantile = 0.97):\n", " temp = arr.copy()\n", " check = True\n", " quan = np.quantile(temp[~np.isnan(temp)], quantile)\n", " limit = 1000\n", "\n", " while check:\n", " if nan and np.any(np.isnan(temp)):\n", " temp = nanmean(temp)\n", " check = True\n", " \n", " elif qhigh and np.any(quan < temp):\n", " temp[quan < temp] = np.nan\n", " check = True\n", "\n", " else:\n", " check = False \n", " \n", " if limit <= 0:\n", " break\n", "\n", " else:\n", " limit -= 1\n", "\n", " return temp" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "plt.rcParams.update({\n", " \"font.size\": 18,\n", " \"lines.markersize\": 9.0,\n", " \"lines.linewidth\": 3\n", "})\n", "savefig = True\n", "anisotropy = pd.DataFrame({\"simple\": None, \"bodyCentered\": None, \"faceCentered\": None}, index = [\"A21\", \"A31\"])" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "df = load_data(execution, \"volume\")" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | alpha | \n", "volume | \n", "direction | \n", "label | \n", "
---|---|---|---|---|
0 | \n", "0.010 | \n", "6.299808e-15 | \n", "[0.0, 0.0, 1.0] | \n", "bodyCentered | \n", "
1 | \n", "0.015 | \n", "6.101743e-15 | \n", "[0.0, 0.0, 1.0] | \n", "bodyCentered | \n", "
2 | \n", "0.020 | \n", "5.902559e-15 | \n", "[0.0, 0.0, 1.0] | \n", "bodyCentered | \n", "
3 | \n", "0.025 | \n", "5.702339e-15 | \n", "[0.0, 0.0, 1.0] | \n", "bodyCentered | \n", "
4 | \n", "0.030 | \n", "5.508176e-15 | \n", "[0.0, 0.0, 1.0] | \n", "bodyCentered | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
316 | \n", "0.250 | \n", "1.841166e-15 | \n", "[1.0, 1.0, 1.0] | \n", "simple | \n", "
317 | \n", "0.255 | \n", "1.705807e-15 | \n", "[1.0, 1.0, 1.0] | \n", "simple | \n", "
318 | \n", "0.260 | \n", "1.574410e-15 | \n", "[1.0, 1.0, 1.0] | \n", "simple | \n", "
319 | \n", "0.265 | \n", "1.447357e-15 | \n", "[1.0, 1.0, 1.0] | \n", "simple | \n", "
320 | \n", "0.270 | \n", "1.325051e-15 | \n", "[1.0, 1.0, 1.0] | \n", "simple | \n", "
321 rows × 4 columns
\n", "\n", " | simple | \n", "bodyCentered | \n", "faceCentered | \n", "
---|---|---|---|
A21 | \n", "2.2591 | \n", "0.7571 | \n", "1.1312 | \n", "
A31 | \n", "1.5660 | \n", "1.0036 | \n", "0.9148 | \n", "