updated SoL code to phiflow3.2

This commit is contained in:
N_T committed 2024-12-09 16:37:50 +08:00
1 parent 148118cbe3
commit 1049044612
1 file changed
+165 -96
+165 -96
View File
@@ -123,33 +123,49 @@
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 1, "execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"This notebook is running locally, please make sure the necessary pip packages are isntalled.\n"
]
}
],
"source": [
"try:\n",
" import google.colab # to ensure that we are inside colab\n",
" !pip install --upgrade --quiet phiflow==3.2\n",
" #!pip install --upgrade --quiet git+https://github.com/tum-pbs/PhiFlow@develop\n",
" # NT_DEBUG , remove develop for pbdl-dataset:\n",
" !pip install --upgrade --quiet git+https://github.com/tum-pbs/pbdl-dataset@develop\n",
"\n",
"except ImportError:\n",
" print(\"This notebook is running locally, please make sure the necessary pip packages are installed.\")\n",
" pass"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": { "metadata": {
"colab": { "colab": {
"base_uri": "https://localhost:8080/" "base_uri": "https://localhost:8080/"
}, },
"id": "JwZudtWauiGa", "id": "JwZudtWauiGa",
"outputId": "3e61b6dd-e1ea-47e7-f9af-6cde0c64162a" "outputId": "bb03fd1b-62e7-4657-fe80-046b11c9852d"
}, },
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m182.2/182.2 kB\u001b[0m \u001b[31m9.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
"\u001b[2K \u001b[90m\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[0m \u001b[32m306.1/306.1 kB\u001b[0m \u001b[31m11.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
"\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n",
" Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n",
" Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n",
"Using device: cuda:0\n" "Using device: cuda:0\n"
] ]
} }
], ],
"source": [ "source": [
"!pip install --upgrade --quiet phiflow==3.1\n",
"!pip install --upgrade --quiet git+https://github.com/tum-pbs/pbdl-dataset@develop\n",
"\n",
"import os, sys, logging, argparse, pickle, glob, random, pylab, time\n", "import os, sys, logging, argparse, pickle, glob, random, pylab, time\n",
"from tqdm import tqdm\n", "from tqdm import tqdm\n",
"from phi.torch.flow import *\n", "from phi.torch.flow import *\n",
@@ -175,7 +191,7 @@
"id": "RY1F4kdWPLNG" "id": "RY1F4kdWPLNG"
}, },
"source": [ "source": [
"And while we're at it, we also set the random seed - obviously, 42 is the ultimate choice here \ud83d\ude42" "And while we're at it, we also set the random seed - obviously, 42 is the ultimate choice here 🙂"
] ]
}, },
{ {
@@ -206,7 +222,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 2, "execution_count": 3,
"metadata": { "metadata": {
"id": "6WNMcdWUw4EP" "id": "6WNMcdWUw4EP"
}, },
@@ -218,7 +234,7 @@
" def __init__(self, domain):\n", " def __init__(self, domain):\n",
" self.domain = domain\n", " self.domain = domain\n",
"\n", "\n",
" self.vel_BcMask = self.domain.staggered_grid(HardGeometryMask( Box(y=(None, 5), x=None) ) )\n", " self.vel_BcMask = self.domain.staggered_grid( HardGeometryMask( Box(y=(None, 5), x=None) ) )\n",
"\n", "\n",
" self.inflow = self.domain.scalar_grid(Box(y=(5,10), x=(25,75)) ) # scale with domain if necessary!\n", " self.inflow = self.domain.scalar_grid(Box(y=(5,10), x=(25,75)) ) # scale with domain if necessary!\n",
" self.obstacles = [Obstacle(Sphere(center=tensor([50, 50], channel(vector=\"y,x\")), radius=10))]\n", " self.obstacles = [Obstacle(Sphere(center=tensor([50, 50], channel(vector=\"y,x\")), radius=10))]\n",
@@ -280,13 +296,13 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 3, "execution_count": 4,
"metadata": { "metadata": {
"colab": { "colab": {
"base_uri": "https://localhost:8080/" "base_uri": "https://localhost:8080/"
}, },
"id": "qIrWYTy6xscA", "id": "qIrWYTy6xscA",
"outputId": "90e91528-0f57-467a-a407-6f895bd8333b" "outputId": "209465bc-507e-4cd1-de90-2df940cda497"
}, },
"outputs": [ "outputs": [
{ {
@@ -362,7 +378,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 4, "execution_count": 5,
"metadata": { "metadata": {
"id": "hhGFpTjGyRyg" "id": "hhGFpTjGyRyg"
}, },
@@ -421,7 +437,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 5, "execution_count": 6,
"metadata": { "metadata": {
"id": "Dfwd4TnqN1Tn" "id": "Dfwd4TnqN1Tn"
}, },
@@ -449,22 +465,23 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 6, "execution_count": 7,
"metadata": { "metadata": {
"colab": { "colab": {
"base_uri": "https://localhost:8080/" "base_uri": "https://localhost:8080/"
}, },
"id": "59EBdEdj0QR2", "id": "59EBdEdj0QR2",
"outputId": "16176f06-542c-4a65-8562-b0efd0da621d" "outputId": "3fb7f0f4-a515-4478-ec4d-18a329ad693b"
}, },
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"\u001b[Kdownload completed\t \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[38;5;240m\u001b[94m 100%\u001b[0m\n", "\u001b[Kdownload completed\t ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[38;5;240m\u001b[96m 100%\u001b[0m6m\u001b[96m\u001b[96m\u001b[96m\u001b[96m\u001b[96m\u001b[96m\u001b[96m\u001b[96m\u001b[96m\n",
"\u001b[96m\u001b[1mSuccess:\u001b[22m Loaded solver-in-the-loop-wake-flow with 6 simulations (6 selected) and 496 samples each.\u001b[0m\n", "\u001b[96m\u001b[1mSuccess:\u001b[22m Loaded solver-in-the-loop-wake-flow with 10 simulations (6 selected) and 496 samples each.\u001b[0m\n",
"\u001b[1mInfo:\u001b[22m No precomputed normalization data found (or not complete). Calculating data...\u001b[0m\n" "\u001b[1mInfo:\u001b[22m No precomputed normalization data found (or not complete). Calculating data...\u001b[0m\n",
"[np.float64(1237.79296875), np.float64(1453.7359614526729)]\n"
] ]
} }
], ],
@@ -473,12 +490,16 @@
"import pbdl.torch.loader\n", "import pbdl.torch.loader\n",
"\n", "\n",
"dataloader = pbdl.torch.loader.Dataloader(\"solver-in-the-loop-wake-flow\", MSTEPS, shuffle=True, sel_sims=[0,1,2,3,4,5],\n", "dataloader = pbdl.torch.loader.Dataloader(\"solver-in-the-loop-wake-flow\", MSTEPS, shuffle=True, sel_sims=[0,1,2,3,4,5],\n",
" batch_size=BATCH_SIZE, normalize=\"std\", intermediate_time_steps=True)\n", " batch_size=BATCH_SIZE, normalize_const=\"std\", normalize_data=\"std\", intermediate_time_steps=True)\n",
"\n", "\n",
"# remember for normalization of the Reynolds number conditioning , then turn off (None), we'll only normalize Re manually below\n", "# workaround for using un-normalized and normalized values in one script:\n",
"DATA_RE_MEAN = dataloader.dataset.normalize.const_mean[0][0]\n", "# save the normalization constants of the Reynolds number conditioning , then turn off (norm=None);\n",
"DATA_RE_STD = dataloader.dataset.normalize.const_std[0][0]\n", "# the Re values will be normalized manually later on\n",
"dataloader.dataset.normalize = None" "DATA_RE_MEAN = dataloader.dataset.norm_strat_const.const_mean[0][0]\n",
"DATA_RE_STD = dataloader.dataset.norm_strat_const.const_std[0][0]\n",
"print([DATA_RE_MEAN,DATA_RE_STD])\n",
"dataloader.dataset.norm_strat_const = None\n",
"dataloader.dataset.norm_strat_data = None"
] ]
}, },
{ {
@@ -494,16 +515,34 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 7, "execution_count": 8,
"metadata": { "metadata": {
"colab": { "colab": {
"base_uri": "https://localhost:8080/" "base_uri": "https://localhost:8080/"
}, },
"id": "EjgkdCzKP2Ip", "id": "EjgkdCzKP2Ip",
"outputId": "36d2d677-6293-4b7d-e7f2-c6f1a7343aa9", "outputId": "3ebef773-0d85-43de-9f78-c31719ccbd45",
"scrolled": true "scrolled": true
}, },
"outputs": [], "outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_774262/1641432920.py:8: FutureWarning: Domain (phi.physics._boundaries) is deprecated and will be removed in a future release.\n",
"Please create grids directly, replacing the domain with a dict, e.g.\n",
" domain = dict(x=64, y=128, bounds=Box(x=1, y=1))\n",
" grid = CenteredGrid(0, **domain)\n",
" from phi.physics._boundaries import Domain, OPEN, STICKY as CLOSED\n",
"/tmp/ipykernel_774262/1641432920.py:15: DeprecationWarning: Domain is deprecated and will be removed in a future release. Use a dict instead, e.g. CenteredGrid(values, extrapolation, **domain_dict)\n",
" domain = phi.physics._boundaries.Domain(y=SOURCE_RES[0], x=SOURCE_RES[1], boundaries=BNDS, bounds=Box(y=2*LENGTH, x=LENGTH))\n",
"/tmp/ipykernel_774262/1641432920.py:15: FutureWarning: Domain is deprecated and will be removed in a future release. Use a dict instead, e.g. CenteredGrid(values, extrapolation, **domain_dict)\n",
" domain = phi.physics._boundaries.Domain(y=SOURCE_RES[0], x=SOURCE_RES[1], boundaries=BNDS, bounds=Box(y=2*LENGTH, x=LENGTH))\n",
"/tmp/ipykernel_774262/1529251970.py:7: DeprecationWarning: HardGeometryMask and SoftGeometryMask are deprecated. Use field.mask or field.resample instead.\n",
" self.vel_BcMask = self.domain.staggered_grid( HardGeometryMask( Box(y=(None, 5), x=None) ) )\n"
]
}
],
"source": [ "source": [
"# this is the actual resolution in terms of cells for phiflow (not too crucial)\n", "# this is the actual resolution in terms of cells for phiflow (not too crucial)\n",
"SOURCE_RES = [64,32]\n", "SOURCE_RES = [64,32]\n",
@@ -536,7 +575,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 8, "execution_count": 9,
"metadata": { "metadata": {
"id": "5VCAzofU1FoH" "id": "5VCAzofU1FoH"
}, },
@@ -565,7 +604,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 9, "execution_count": 10,
"metadata": { "metadata": {
"id": "KFp4eUta1FoH" "id": "KFp4eUta1FoH"
}, },
@@ -617,18 +656,40 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 10, "execution_count": 11,
"metadata": { "metadata": {
"colab": { "colab": {
"base_uri": "https://localhost:8080/" "base_uri": "https://localhost:8080/"
}, },
"id": "AJn5a5k31FoH", "id": "AJn5a5k31FoH",
"outputId": "91c710f7-1475-4dbb-8c33-45d33063859b", "outputId": "11f40f98-5554-4b6f-f436-c385d98534b0",
"scrolled": true "scrolled": true
}, },
"outputs": [], "outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" 0%| | 0/4960 [00:00<?, ?it/s]/tmp/ipykernel_774262/4154370188.py:7: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
" input = torch.tensor(input_cpu, dtype=torch.float32).to(device);\n",
"/tmp/ipykernel_774262/4154370188.py:8: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
" targets = torch.tensor(targets_cpu, dtype=torch.float32).to(device)\n",
"/home/thuerey/anaconda3/envs/torch24/lib/python3.12/site-packages/phiml/math/_optimize.py:631: UserWarning: Possible rank deficiency detected. Matrix might be singular which can lead to convergence problems. Please specify using Solve(rank_deficiency=...).\n",
" warnings.warn(\"Possible rank deficiency detected. Matrix might be singular which can lead to convergence problems. Please specify using Solve(rank_deficiency=...).\")\n",
"/home/thuerey/anaconda3/envs/torch24/lib/python3.12/site-packages/phiml/backend/torch/_torch_backend.py:803: UserWarning: Sparse CSR tensor support is in beta state. If you miss a functionality in the sparse tensor support, please submit a feature request to https://github.com/pytorch/pytorch/issues. (Triggered internally at ../aten/src/ATen/SparseCsrTensorImpl.cpp:53.)\n",
" return torch.sparse_csr_tensor(row_pointers, column_indices, values, shape, device=values.device)\n",
"/home/thuerey/anaconda3/envs/torch24/lib/python3.12/site-packages/phiml/math/_optimize.py:631: UserWarning: Possible rank deficiency detected. Matrix might be singular which can lead to convergence problems. Please specify using Solve(rank_deficiency=...).\n",
" warnings.warn(\"Possible rank deficiency detected. Matrix might be singular which can lead to convergence problems. Please specify using Solve(rank_deficiency=...).\")\n",
"loss 15.62617: 0%| | 1/4960 [00:12<16:36:58, 12.06s/it]/tmp/ipykernel_774262/4154370188.py:7: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
" input = torch.tensor(input_cpu, dtype=torch.float32).to(device);\n",
"/tmp/ipykernel_774262/4154370188.py:8: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
" targets = torch.tensor(targets_cpu, dtype=torch.float32).to(device)\n",
"loss 0.23079132: 100%|████████████████████████████████████| 4960/4960 [3:10:57<00:00, 2.31s/it]\n"
]
}
],
"source": [ "source": [
"EPOCHS = 1\n", "EPOCHS = 5\n",
"\n", "\n",
"pbar = tqdm(initial=0, total=EPOCHS*len(dataloader), ncols=96)\n", "pbar = tqdm(initial=0, total=EPOCHS*len(dataloader), ncols=96)\n",
"\n", "\n",
@@ -673,26 +734,21 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 11, "execution_count": 12,
"metadata": { "metadata": {
"colab": { "id": "RPhPR9-51FoI"
"base_uri": "https://localhost:8080/"
},
"id": "RPhPR9-51FoI",
"outputId": "6adee7c0-2117-4ec6-e731-b71532d4e819"
}, },
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"\u001b[Kdownload completed\t \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u001b[38;5;240m\u001b[94m 100%\u001b[0m\n", "\u001b[Kdownload completed\t ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[38;5;240m\u001b[96m 100%\u001b[0m6m\u001b[96m\u001b[96m\u001b[96m\u001b[96m\u001b[96m\u001b[96m\u001b[96m\u001b[96m\u001b[96m\n",
"\u001b[96m\u001b[1mSuccess:\u001b[22m Loaded solver-in-the-loop-wake-flow with 10 simulations (4 selected) and 300 samples each.\u001b[0m\n" "\u001b[96m\u001b[1mSuccess:\u001b[22m Loaded solver-in-the-loop-wake-flow with 10 simulations (4 selected) and 300 samples each.\u001b[0m\n"
] ]
} }
], ],
"source": [ "source": [
"#del dataloader # close hdf5 file handle\n",
"del dataloader # close hdf5 file handle\n", "del dataloader # close hdf5 file handle\n",
"\n", "\n",
"# get new & unseen test data\n", "# get new & unseen test data\n",
@@ -711,7 +767,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 12, "execution_count": 13,
"metadata": { "metadata": {
"id": "NRJwUnRz1FoI" "id": "NRJwUnRz1FoI"
}, },
@@ -737,7 +793,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 13, "execution_count": 14,
"metadata": { "metadata": {
"id": "RWC0mKNJ1FoI" "id": "RWC0mKNJ1FoI"
}, },
@@ -803,20 +859,26 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 14, "execution_count": 15,
"metadata": { "metadata": {
"colab": { "id": "aA7BRsSZ1FoJ"
"base_uri": "https://localhost:8080/"
},
"id": "aA7BRsSZ1FoJ",
"outputId": "fa436860-e5c9-4719-a605-50b9668fbe2d"
}, },
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Re \u001b[94m1171.875\u001b[0m\n" "Re \u001b[94m73.24219\u001b[0m\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_774262/1514360431.py:3: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
" input = torch.tensor(input_cpu, dtype=torch.float32).to(device)\n",
"/tmp/ipykernel_774262/1514360431.py:4: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
" targets = torch.tensor(targets_cpu, dtype=torch.float32).to(device)\n"
] ]
} }
], ],
@@ -840,39 +902,61 @@
"`ROLLOUT_STEPS` below determines the number of time steps to compute with both variants. The cell also directly outputs the mean relative error.\n", "`ROLLOUT_STEPS` below determines the number of time steps to compute with both variants. The cell also directly outputs the mean relative error.\n",
"Due to the stochastic training and numerical round-off errors, the results can vary slightly over different runs, but in general the hybrid solver with its Neural correction operator should show a significantly reduced numerical error: typically 5-6x lower than the low-fidelity solver.\n", "Due to the stochastic training and numerical round-off errors, the results can vary slightly over different runs, but in general the hybrid solver with its Neural correction operator should show a significantly reduced numerical error: typically 5-6x lower than the low-fidelity solver.\n",
"\n", "\n",
"**This shows the central objective of this training setup has been achieved: the hybrid solver yields substantially reduced numerical errors and generalizes to new Reynolds numbers \ud83d\udc4d**" "**This shows the central objective of this training setup has been achieved: the hybrid solver yields substantially reduced numerical errors and generalizes to new Reynolds numbers 👍**"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 15, "execution_count": 16,
"metadata": { "metadata": {
"colab": { "id": "QlsK9rG71FoJ"
"base_uri": "https://localhost:8080/"
},
"id": "QlsK9rG71FoJ",
"outputId": "2005389a-32e1-49b9-cb46-3a7c6d2d425d"
}, },
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Running test with Re=\u001b[94m1171.875\u001b[0m, Sim. only\n" "Running test with Re=\u001b[94m73.24219\u001b[0m, Sim. only\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Sim. only: 0%| | 0/100 [00:00<?, ?it/s]/home/thuerey/anaconda3/envs/torch24/lib/python3.12/site-packages/phiml/math/_optimize.py:631: UserWarning: Possible rank deficiency detected. Matrix might be singular which can lead to convergence problems. Please specify using Solve(rank_deficiency=...).\n",
" warnings.warn(\"Possible rank deficiency detected. Matrix might be singular which can lead to convergence problems. Please specify using Solve(rank_deficiency=...).\")\n",
"/home/thuerey/anaconda3/envs/torch24/lib/python3.12/site-packages/phiml/math/_optimize.py:631: UserWarning: Possible rank deficiency detected. Matrix might be singular which can lead to convergence problems. Please specify using Solve(rank_deficiency=...).\n",
" warnings.warn(\"Possible rank deficiency detected. Matrix might be singular which can lead to convergence problems. Please specify using Solve(rank_deficiency=...).\")\n",
"Sim. only: 100%|██████████████| 100/100 [00:31<00:00, 3.14it/s]\n"
] ]
}, },
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Running test with Re=\u001b[94m1171.875\u001b[0m, With corr.\n" "Running test with Re=\u001b[94m73.24219\u001b[0m, With corr.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"With corr.: 100%|█████████████| 100/100 [00:52<00:00, 1.89it/s]"
] ]
}, },
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Rel. L2 errors: low-fidelity: 0.13708033837378025 corrected: 0.03381159909069538\n" "\n",
" Rel. L2 errors: low-fidelity: 0.10863638424314559 corrected: 0.031211425131186844\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
] ]
} }
], ],
@@ -895,26 +979,24 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 16, "execution_count": 17,
"metadata": { "metadata": {
"colab": { "id": "ys_qAMGu1FoK"
"base_uri": "https://localhost:8080/",
"height": 466
},
"id": "ys_qAMGu1FoK",
"outputId": "02dc5fa1-62e9-4f24-cce6-051bd644c30e"
}, },
"outputs": [ "outputs": [
{ {
"name": "stdout", "data": {
"output_type": "stream", "text/plain": [
"text": [ "<matplotlib.legend.Legend at 0x7de77dc7b770>"
"MAE for low-fidelity: 0.13708033837378025 , and hybrid: 0.03381159909069538\n" ]
] },
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}, },
{ {
"data": { "data": {
"image/png": "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 truncated "image/png": "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 truncated
"text/plain": [ "text/plain": [
"<Figure size 640x480 with 1 Axes>" "<Figure size 640x480 with 1 Axes>"
] ]
@@ -942,19 +1024,14 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 17, "execution_count": 18,
"metadata": { "metadata": {
"colab": { "id": "MZnqSzq21FoK"
"base_uri": "https://localhost:8080/",
"height": 471
},
"id": "MZnqSzq21FoK",
"outputId": "14037f18-44e4-4d3a-c0bd-0caeb384513b"
}, },
"outputs": [ "outputs": [
{ {
"data": { "data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABhIAAAHqCAYAAADhzdTUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzde3wU1fk/8M/MXpNAiNwS0HBRK3gFhBJRaKFGIyoVoV6oVkShrYpVoqJY5aJ+oVZFbItGFAVtFbVeqj8UL1EKKEgBabUVBERBJBFQCAlkr/P7A7MyZ+c5m72EhOTz9rUv2TlzzpyZ3T3PTM7MOYZlWRaIiIiIiIiIiIiIiIgcmI1dASIiIiIiIiIiIiIiarrYkUBERERERERERERERCJ2JBARERERERERERERkYgdCUREREREREREREREJGJHAhERERERERERERERidiRQEREREREREREREREInYkEBERERERERERERGRiB0JREREREREREREREQkYkcCERERERERERERERGJ2JFAh8SGDRtw9tlno02bNjAMA6+88kpjV4mIiA4z9913H44++mi4XC707t0bANCtWzdceeWVCfPOmzcPhmHgiy++aNA6EhERERERETVH7EigOHV/bKl7ud1uHHnkkbjyyiuxbdu2lMocPXo0Pv74Y/zf//0fnn76afTr1y/DtSYiokyoiwGrVq1q7KrYvPXWW5g4cSLOOOMMPPnkk5g+fXpjV4mIiBrApk2b8Jvf/AZHH300/H4/cnNzccYZZ+Chhx7C/v37G7t6RERERC2Wu7ErQE3XXXfdhe7du6O2thYrVqzAvHnzsGzZMnzyySfw+/31Lmf//v1Yvnw5fv/732P8+PENWGMiImqu3n33XZimiblz58Lr9caWr1+/HqbJ+yKIiJqDhQsX4qKLLoLP58MVV1yBk046CcFgEMuWLcMtt9yC//73v5gzZ05jV5OIiIioRWJHAomGDh0ae3Jg7NixaN++Pe699168+uqruPjii+tdzo4dOwAAeXl5DVFNIiJqAb755htkZWXZOhEAwOfzNVKNiIgokzZv3oxLL70UXbt2xbvvvotOnTrF0q677jps3LgRCxcuTGsblmWhtrYWWVlZcWm1tbXwer3snCYiIiIS8CyJ6m3QoEEADjxuXGfdunX4xS9+gbZt28Lv96Nfv3549dVXY+lTp05F165dAQC33HILDMNAt27dDmm9iYgosz766CMMHToUubm5aNWqFc4880ysWLEilr579264XC786U9/ii3buXMnTNNEu3btYFlWbPk111yDgoIC7fYMw8CTTz6Jmpqa2LB78+bNA+A8R8J///tf/OxnP0NWVhaOOuoo3HPPPYhGo+nvOBERNZg//vGPqK6uxty5c22dCHWOPfZY3HDDDQCAcDiMu+++G8cccwx8Ph+6deuG22+/HYFAwJanW7duOP/88/Hmm2+iX79+yMrKwqOPPorFixfDMAwsWLAAd9xxB4488khkZ2ejqqrqkOwrERER0eGITyRQvdVNUHnEEUcAOPCHmjPOOANHHnkkbrvtNuTk5OD555/H8OHD8eKLL+LCCy/EiBEjkJeXhwkTJmDUqFE499xz0apVq0bcCyIiSsd///tfDBo0CLm5uZg4cSI8Hg8effRRDB48GP/85z9RVFSEvLw8nHTSSViyZAl+97vfAQCWLVsGwzDw7bff4n//+x9OPPFEAMDSpUtjHdWSp59+GnPmzMHKlSvx+OOPAwBOP/10x3UrKiowZMgQhMPhWGyaM2eO492nRETUdLz22ms4+uijxfb9YGPHjsX8+fPxi1/8AjfddBM+/PBDzJgxA59++ilefvll27rr16/HqFGj8Jvf/Abjxo1Djx49Yml33303vF4vbr75ZgQCgbin3oiIiIjoB+xIINGePXuwc+dO1NbW4sMPP8S0adPg8/lw/vnnAwBuuOEGdOnSBf/6179iQ0tce+21GDhwIG699VZceOGFOOWUU5Cbm4sJEybg1FNPxeWXX96Yu0RERGm64447EAqFsGzZMhx99NEAgCuuuAI9evTAxIkT8c9//hPAgafY/v73v8fyLV26FAMHDsS6deuwdOlSnHjiibFOhV//+tfabV5++eV45513sGbNmoRx5N5778WOHTvw4Ycfon///gCA0aNH40c/+lE6u01ERA2oqqoK27ZtwwUXXJBw3X//+9+YP38+xo4di8ceewzAgWuQjh074v7778d7772HIUOGxNbfuHEjFi1ahJKSktiyxYsXAzgwnNGqVavY2UxERERUDxzaiETFxcXo0KEDCgsL8Ytf/AI5OTl49dVXcdRRR+Hbb7/Fu+++i4svvhh79+7Fzp07sXPnTuzatQslJSXYsGEDtm3b1ti7QEREGRSJRPDWW29h+PDhsU4EAOjUqRN++ctfYtmyZbFhIQYNGoTKykqsX78ewIGOhJ/85CcYNGgQli5dCuDAUwqWZSV8IiEZr7/+Ok477bRYJwIAdOjQAZdddlnGtkFERJlVFztat26dcN3XX38dAFBaWmpbftNNNwFA3DwK3bt3t3UiHGz06NHsRCAiIiKqJ3YkkGj27Nl4++238fe//x3nnnsudu7cGXvyYOPGjbAsC3feeSc6dOhge02ZMgXAgYkxiYio+dixYwf27dtnGxaizvHHH49oNIqtW7cC+GFenaVLl6KmpgYfffQRBg0ahJ/85CexjoSlS5ciNzcXvXr1AgBUV1ejoqIi9tqxY0fSdfzyyy8dnz5wqjMRETUNubm5AIC9e/cmXPfLL7+EaZo49thjbcsLCgqQl5eHL7/80ra8e/fuYlm6NCIiIiKy49BGJOrfvz/69esHABg+fDgGDhyIX/7yl1i/fn1s0sqbb75ZvMNHPbknIqKWo3PnzujevTuWLFmCbt26wbIsDBgwAB06dMANN9yAL7/8EkuXLsXpp58O0zxwX8P999+PadOmxcro2rVrbH4eIiJqvnJzc9G5c2d88skn9c5jGEa91tM9ccCnEYiIiIjqjx0JVC8ulwszZszAkCFD8Je//AVXXXUVAMDj8aC4uLiRa0dERIdChw4dkJ2dHRuu6GDr1q2DaZooLCyMLRs0aBCWLFmC7t27o3fv3mjdujV69eqFNm3aYNGiRVizZo2t4+CKK67AwIEDY+9T+QNP165dsWHDhrjlTnUmIqKm4/zzz8ecOXOwfPlyDBgwQFyva9euiEaj2LBhA44//vjY8srKSuzevRtdu3Y9FNUlIiIianE4tBHV2+DBg9G/f3/MmjULubm5GDx4MB599FFs3749bt1UhqMgIqKmzeVy4eyzz8Y//vEP25MClZWVeOaZZzBw4MDY8BTAgY6EL774As8991xsqCPTNHH66adj5syZCIVCtvkRjj76aBQXF8deZ5xxRtJ1PPfcc7FixQqsXLkytmzHjh3429/+Frfu9u3bsW7dOoRCoaS3Q0REmTVx4kTk5ORg7NixqKysjEvftGkTHnroIZx77rkAgFmzZtnSZ86cCQA477zzUq4D4wIRERGRjE8kUFJuueUWXHTRRZg3bx5mz56NgQMH4uSTT8a4ceNw9NFHo7KyEsuXL8dXX32Ff//7341dXSIiStETTzyBRYsWxS2fOnUq3n77bQwcOBDXXnst3G43Hn30UQQCAfzxj3+0rVvXSbB+/XpMnz49tvwnP/kJ3njjDfh8Pvz4xz/OaL0nTpyIp59+Gueccw5uuOEG5OTkYM6cOejatSv+85//2NadNGkS5s+fj82bN6Nbt24ZrQcRESXnmGOOwTPPPINLLrkExx9/PK644gqcdNJJCAaD+OCDD/DCCy/gyiuvxA033IDRo0djzpw52L17N376059i5cqVmD9/PoYPH44hQ4akXAfGBSIiIiIZOxIoKSNGjMAxxxyD+++/H+PGjcOqVaswbdo0zJs3D7t27ULHjh3Rp08fTJ48ubGrSkREaXjkkUccl1955ZVYunQpJk2ahBkzZiAajaKoqAh//etfUVRUZFu3R48e6NixI7755hvbkEV1HQz9+/eHz+fLaL07deqE9957D9dffz3+8Ic/oF27dvjtb3+Lzp074+qrr87otoiIKLN+/vOf4z//+Q/uu+8+/OMf/8AjjzwCn8+HU045BQ888ADGjRsHAHj88cdx9NFHY968eXj55ZdRUFCASZMmYcqUKY28B0RERETNl2FZltXYlSAiIiIiIiIiIiIioqaJcyQQEREREREREREREZGIHQlERERERERERERERCRiRwIREREREREREREREYnYkUBERERERERERERERCJ2JBARERERERERERERkYgdCUREREREREREREREJHI3dgVU0WgUX3/9NVq3bg3DMBq7OkTNimVZ2Lt3Lzp37gzTTK0fsba2FsFgMKP18nq98Pv9GS2TiPGEqGFkIpYAjCd0eGAsIWoYjCVERNRUNEQsAZpnPGlyHQlff/01CgsLG7saRM3a1q1bcdRRRyWdr7a2Ft27H4mKim8zWp+CggJs3ry52TWw1LgYT4gaVqqxBGA8ocMHYwlRw2IsISKixlRbW4vuXXNR8U0o42U3x3jS5DoSWrduDQBYceYv0crtjUs/avyRzhmzNB+KIdzhYMp3FVm++G0DAPw+eTtuj5wmCQYcFxu7vhOzWJ9uFdP2LK92XL52Uycxz7/3ZDkur6wVsyBqOS9vIxw2AMjzOGc6QlgOAEd4w8JyuafwiCy54q2zndP8reTyPH7n+pmar4IpHAdD84sz3Mnf5bZ3k8tx+RXlbR2Xh60gVuydE/udJSsYDKKi4lt88eXzyM3NTqkMVVXVPnTrejGCwWCzalyp8dV9z1/p92vkOMSTfpfud8xnHOn8+wEAuJx/c9qBAqPScikBQERIC8htlbXPOZ5Ye+Q2Mfqdcx4ACH/nXIfa3XJbVVvt3PjtD8jBoTbo3DCGovJBteSwIXKZzpmLine truncated "image/png": "iVBORw0KGgoAAAANSUhEUgAABgkAAAHqCAYAAAA+g67LAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeXgV1f0/8PfM3C0JBGQNKJtawaosQokotKDRiEqlUheqFVGwWrFKqiitsqgVrRaxFaW4Bf1WUVvXH4pLlIItSgFppS0IFAWRBFAhEMjdZn5/xFy5c8/n3NzhhmzvF888D5mZM3Nm7tzzmblnzjmG4zgOiIiIiIiIiIiIiIioxTEbOgNERERERERERERERNQwWElARERERERERERERNRCsZKAiIiIiIiIiIiIiKiFYiUBEREREREREREREVELxUoCIiIiIiIiIiIiIqIWipUEREREREREREREREQtFCsJiIiIiIiIiIiIiIhaKFYSEBERERERERERERG1UKwkICIiIiIiIiIiIiJqoVhJQIfFhg0bcNZZZ6FNmzYwDAMvv/xyQ2eJiIiagPvuuw9HH300LMtC//79AQA9e/bEFVdckTZtaWkpDMPAp59+Wq95JCIiIiIiImrKWElAKWp/VKmdfD4fjjzySFxxxRXYtm2bp22OGzcOH3/8MX7zm9/g6aefxqBBg7KcayIi8qq23F+5cmVDZyXJW2+9hSlTpuC0007Dk08+ibvvvruhs0RERFm0adMm/OxnP8PRRx+NUCiE/Px8nHbaaXjwwQdx4MCBhs4eERERUYvha+gMUON1xx13oFevXqiursYHH3yA0tJSvP/++1i7di1CoVCdt3PgwAEsX74cv/71rzFp0qR6zDERETUn7777LkzTxOOPP45AIJCYv379epgm33MgImrKFi1ahAsvvBDBYBCXX345TjzxREQiEbz//vu4+eab8e9//xvz589v6GwSERERtQisJCDRyJEjE2/8T5gwAR06dMC9996LV199FRdddFGdt7Nz504AQNu2besjm0RE1Ezt2LEDOTk5SRUEABAMBhsoR0RElA2bN2/GJZdcgh49euDdd99Fly5dEsuuu+46bNy4EYsWLTqkfTiOg+rqauTk5KQsq66uRiAQYIUzERER0Td4V0R1NmzYMAA1zYJrrVu3Dj/+8Y/Rrl07hEIhDBo0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TsTRRx+NiooKLF++HJ9//jn++c9/NnR2iYgoA0888QQWL16cMn/GjBl4++23MXToUPz85z+Hz+fDH//4R4TDYfz2t79NWre2AmD9+vW4++67E/O///3v44033kAwGMT3vve9rOZ7ypQpePrpp3H22WfjhhtuQF5eHubPn48ePXrgX//6V9K6U6dOxYIFC7B582b07Nkzq/kgIqK6OeaYY/DMM8/g4osvxvHHH4/LL78cJ554IiKRCP7+97/jhRdewBVXXIEbbrgB48aNw/z587F792784Ac/wIoVK7BgwQKMHj0aI0aM8JwHxgMiIiKib7GSgDJywQUX4JhjjsH999+PiRMnYuXKlZg5cyZKS0vx5ZdfolOnThgwYACmTZvW0FklIqIMPfLII8r5V1xxBZYtW4apU6di1qxZsG0bhYWF+L//+z8UFhYmrdu7d2906tQJO3bsSOpGqLbyYPDgwQgGg1nNd5cuXfDee+/h+uuvxz333IP27dvjmmuuQdeuXXHVVVdldV9ERJQdP/zhD/Gvf/0L9913H1555RU88sgjCAaD6Nu3L373u99h4sSJAIDHHnsMRx99NEpLS/HSSy+hoKAAU6dOxfTp0xv4CIiIiIiaD8NxHKehM0FERERERERERERERIcfxyQgIiIiIiIiIiIiImqhWElARERERERERERERNRCsZKAiIiIiIiIiIiIiKiFYiUBEREREREREREREVE9WLp0KUaNGoWuXbvCMAy8/PLLadMsWbIEJ598MoLBII499liUlpbWax5ZSUBEREREREREREREVA+qqqrQr18/zJ07t07rb968Geeeey5GjBiBNWvW4MYbb8SECRPw5ptv1lseDcdxnHrbOhERERERERERERERwTAMvPTSSxg9erS4zi233IJFixZh7dq1iXmXXHIJdu/ejcWLF9dLvnz1stVDYNs2vvjiC7Ru3RqGYTR0doiaFcdxsHfvXnTt2hWm6b0hUXV1NSKRSBZzBgQCAYRCoaxuk1oexhCi+sH4QS0BYwhR/WAMISKihtQU48fy5ctRVFSUNK+4uBg33nhjve2z0VUSfPHFF+jWrVtDZ4OoWdu6dSuOOuooT2mrq6vRq9eRKC//Kqt5KigowObNm3mTToeEMYSofjF+UHPGGEJUvxhDiIjocKuurkavHvko3xHN6nYLCgrwz3/+Myl+BINBBIPBrGy/vLwcnTt3TprXuXNnVFZW4sCBA8jJycnKfg7W6CoJWrduDQC4qMNk+M3UE3tqR3XvSN9ts1fc5tHdv1Tv62T5hJoDeinn292OFNMgN08939b06FS9Xznb2FclJjG+/Fre3rZdytnx/8k3U/s3x5Tzv6xoJab5ar/63B2IWWILine truncated
"text/plain": [ "text/plain": [
"<Figure size 1600x500 with 8 Axes>" "<Figure size 1600x500 with 8 Axes>"
] ]
@@ -1032,15 +1109,6 @@
"* Use the external github code to generate tougher test data, and run your trained NN on these cases. You'll see that a reduced training error not always directly correlates with an improved test performance.\n", "* Use the external github code to generate tougher test data, and run your trained NN on these cases. You'll see that a reduced training error not always directly correlates with an improved test performance.\n",
"\n" "\n"
] ]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"id": "WyM-UoqA1FoL"
},
"outputs": [],
"source": []
} }
], ],
"metadata": { "metadata": {
@@ -1051,7 +1119,8 @@
"provenance": [] "provenance": []
}, },
"kernelspec": { "kernelspec": {
"display_name": "Python 3", "display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3" "name": "python3"
}, },
"language_info": { "language_info": {
@@ -1068,5 +1137,5 @@
} }
}, },
"nbformat": 4, "nbformat": 4,
"nbformat_minor": 0 "nbformat_minor": 4
} }