diff --git a/src/Playground.ipynb b/src/Playground.ipynb deleted file mode 100644 index bb41bef94ac418375086adb98852ec61fb94d83d..0000000000000000000000000000000000000000 --- a/src/Playground.ipynb +++ /dev/null @@ -1,165 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import os\n", - "import argparse\n", - "import shutil\n", - "import time\n", - "import subprocess\n", - "import re\n", - "import numpy as np" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "# Function to extract the times of different stages from the program output\n", - "def extract_times(program_output):\n", - " # Dictionary to store timing values\n", - " timing_values = {}\n", - " \n", - " # Regular expressions to match specific timing entries\n", - " time_patterns = {\n", - " 'Total time': r'Total time: (\\d+\\.\\d+)',\n", - " 'Setup': r'Setup: (\\d+\\.\\d+)',\n", - " 'Assembly Linear System': r'Assembly Linear System: (\\d+\\.\\d+)',\n", - " 'Solving Linear System': r'Solving Linear System: (\\d+\\.\\d+)',\n", - " 'Plotting': r'Plotting: (\\d+\\.\\d+)'\n", - " }\n", - " \n", - " # Extract times using regex\n", - " for key, pattern in time_patterns.items():\n", - " match = re.search(pattern, program_output)\n", - " if match:\n", - " timing_values[key] = float(match.group(1))\n", - " else:\n", - " timing_values[key] = None\n", - " \n", - " return timing_values" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# refinement level\n", - "DEGREE_ELEVATIONS = 0\n", - "H_REFINEMENTS = 1\n", - "# Define the folder where the geometry is stored\n", - "DataFolder = f'Data/H_REFINEMENTS_{H_REFINEMENTS}'" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# path to gismo executable for numerical simulation\n", - "stokes_executable = 'gismo/stokes_example'" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# lets go for training data\n", - "stage = 'train'\n", - "df = pd.read_excel(f'{DataFolder}/{stage}/parameter_input.xlsx').transpose()\n", - "N_FILES_STAGE = df.shape[1]\n", - "\n", - "# Just run the first geometry\n", - "index_vec = [0, 1, 2, 3, 4]\n", - "timings = []\n", - "total_time = 0\n", - "setup_time = 0\n", - "assembly_linear_system_time = 0\n", - "solving_linear_system_time = 0\n", - "dict_entries = ['Total time', 'Setup', 'Assembly Linear System', 'Solving Linear System']\n", - "property_entries = [total_time, setup_time, assembly_linear_system_time, solving_linear_system_time]\n", - "for index in index_vec:\n", - " # file for the geometry\n", - " file = f'{DataFolder}/{stage}/microstructure/index_{index}.xml'\n", - "\n", - " # Run simulation\n", - " program_output = subprocess.Popen(\n", - " [f'./{stokes_executable}', f'-f {file}', '--export-xml', f'-e {DEGREE_ELEVATIONS}', f'-r {H_REFINEMENTS}', '--no-plot'],\n", - " # shell=True, # do I need it?\n", - " stdout=subprocess.PIPE,\n", - " text=True\n", - " ).communicate()[0]\n", - " # print(program_output)\n", - "\n", - " timings.append(extract_times(program_output))\n", - " total_time += timings[-1]['Total time']\n", - " setup_time += timings[-1]['Setup']\n", - " assembly_linear_system_time += timings[-1]['Assembly Linear System']\n", - " solving_linear_system_time += timings[-1]['Solving Linear System']" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "total time: 2.417550374869\n", - "setup time: 0.03952433483208\n", - "assembly linear system time: 0.32472395699010004\n", - "solving linear system time: 2.053302083049\n" - ] - } - ], - "source": [ - "print(f'total time: {total_time}')\n", - "print(f'setup time: {setup_time}')\n", - "print(f'assembly linear system time: {assembly_linear_system_time}')\n", - "print(f'solving linear system time: {solving_linear_system_time}')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "POD", - "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.12.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/src/Visualizations/HighestError.zip b/src/Visualizations/HighestError.zip new file mode 100644 index 0000000000000000000000000000000000000000..b86d91da4f04716b612abf628faaf7c114022a39 Binary files /dev/null and b/src/Visualizations/HighestError.zip differ diff --git a/src/Visualizations/HighestError/Pressure_RBFCubic_R16_i59_Error.png b/src/Visualizations/HighestError/Pressure_RBFCubic_R16_i59_Error.png new file mode 100644 index 0000000000000000000000000000000000000000..9b277e346d913de07661dfc863bac7ec123d7316 Binary files /dev/null and b/src/Visualizations/HighestError/Pressure_RBFCubic_R16_i59_Error.png differ diff --git a/src/Visualizations/HighestError/Pressure_RBFCubic_R16_i59_Predicted.png b/src/Visualizations/HighestError/Pressure_RBFCubic_R16_i59_Predicted.png new file mode 100644 index 0000000000000000000000000000000000000000..4fbc68e123056568a7752fddc28be0835afa8f4f Binary files /dev/null and b/src/Visualizations/HighestError/Pressure_RBFCubic_R16_i59_Predicted.png differ diff --git a/src/Visualizations/HighestError/Pressure_RBFCubic_R16_i59_True.png b/src/Visualizations/HighestError/Pressure_RBFCubic_R16_i59_True.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7b6e18deeb5ad77d00645cfeccd9befd8a0afb Binary files /dev/null and b/src/Visualizations/HighestError/Pressure_RBFCubic_R16_i59_True.png differ diff --git a/src/Visualizations/HighestError/VelocityX_RBFCubic_R16_i63_Error.png b/src/Visualizations/HighestError/VelocityX_RBFCubic_R16_i63_Error.png new file mode 100644 index 0000000000000000000000000000000000000000..48f149921ff1bea779b4bc45ccfc9e9482840c0e Binary files /dev/null and b/src/Visualizations/HighestError/VelocityX_RBFCubic_R16_i63_Error.png differ diff --git a/src/Visualizations/HighestError/VelocityX_RBFCubic_R16_i63_Predicted.png b/src/Visualizations/HighestError/VelocityX_RBFCubic_R16_i63_Predicted.png new file mode 100644 index 0000000000000000000000000000000000000000..ab3b3450550cd6bc4f75c409d605734bf174e05a Binary files /dev/null and b/src/Visualizations/HighestError/VelocityX_RBFCubic_R16_i63_Predicted.png differ diff --git a/src/Visualizations/HighestError/VelocityX_RBFCubic_R16_i63_True.png b/src/Visualizations/HighestError/VelocityX_RBFCubic_R16_i63_True.png new file mode 100644 index 0000000000000000000000000000000000000000..c938c2597d4aa91f34011537e4363b2fa87fb8ad Binary files /dev/null and b/src/Visualizations/HighestError/VelocityX_RBFCubic_R16_i63_True.png differ diff --git a/src/Visualizations/HighestError/VelocityY_RBFCubic_R16_i55_Error.png b/src/Visualizations/HighestError/VelocityY_RBFCubic_R16_i55_Error.png new file mode 100644 index 0000000000000000000000000000000000000000..9076cdfc9358d325348800225c8d81d24961b680 Binary files /dev/null and b/src/Visualizations/HighestError/VelocityY_RBFCubic_R16_i55_Error.png differ diff --git a/src/Visualizations/HighestError/VelocityY_RBFCubic_R16_i55_Predicted.png b/src/Visualizations/HighestError/VelocityY_RBFCubic_R16_i55_Predicted.png new file mode 100644 index 0000000000000000000000000000000000000000..04fbb56a90b05134ea285b2bcbc3a5aa16dc95ce Binary files /dev/null and b/src/Visualizations/HighestError/VelocityY_RBFCubic_R16_i55_Predicted.png differ diff --git a/src/Visualizations/HighestError/VelocityY_RBFCubic_R16_i55_True.png b/src/Visualizations/HighestError/VelocityY_RBFCubic_R16_i55_True.png new file mode 100644 index 0000000000000000000000000000000000000000..845bf94fc00b48a3754251557e49845c53ea5f92 Binary files /dev/null and b/src/Visualizations/HighestError/VelocityY_RBFCubic_R16_i55_True.png differ diff --git a/src/f2_EvaluationError_POD.py b/src/f2_EvaluationError_POD.py index 03889624f0a0ec2556a864f7bff840a747e8f9b2..27045e9b47c18703ad5bf32e4b678af6e67d160b 100755 --- a/src/f2_EvaluationError_POD.py +++ b/src/f2_EvaluationError_POD.py @@ -115,17 +115,7 @@ for R_ in tqdm(R): ms_v.show() # Compute errors - # norms = list(norm_funcs.keys()) - # error_values = [] - # # Pressure - # for norm in norms: - # error_value = compute_integral_error( - # multipatch=microstructure, - # fields_original=pressure_data, - # fields_recreated=pressure_rec_data, - # norm=norm - # ) - # error_values.append(error_value) + # Pressure error_values = compute_integral_error( multipatch=microstructure, fields_original=pressure_data, @@ -138,15 +128,6 @@ for R_ in tqdm(R): L2_rel_p_s.append(error_values[3]) # Velocity - # error_values = [] - # for norm in norms: - # error_value = compute_integral_error( - # multipatch=ms_vel, - # fields_original=velocity_data, - # fields_recreated=velocity_rec_data, - # norm=norm - # ) - # error_values.append(error_value) error_values = compute_integral_error( multipatch=ms_vel, fields_original=velocity_data, diff --git a/src/i6_VisualizeDifferentErrorFields.py b/src/i6_VisualizeDifferentErrorFields.py index 5713002952868585cda808a7bcb536e4c0e9f9cd..892ecb6b4ddca0a3572109d4f6300f03803ed2c4 100644 --- a/src/i6_VisualizeDifferentErrorFields.py +++ b/src/i6_VisualizeDifferentErrorFields.py @@ -27,7 +27,7 @@ ModelFolder = f'{DataFolder}/TrainedModels/RBF_cubic' PatchesFolder = f'{DataFolder}/Patches' R_ = 21 -sample = 14#!0 +sample = 14 GEOMETRY_FILE = f'{DataFolder}/test/microstructure/index_{sample}.xml' PRESSURE_FILE = f'{PatchesFolder}/POD_{int(R_)}/pressure_field_patches_{sample}.xml' diff --git a/src/i8_IdentifyWorstPrediction.ipynb b/src/i8_IdentifyWorstPrediction.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..6f66293f6bc99924e7b9c3c732f42987e9c4b1ac --- /dev/null +++ b/src/i8_IdentifyWorstPrediction.ipynb @@ -0,0 +1,359 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "541bec77", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import argparse\n", + "import os\n", + "from tqdm import tqdm" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7a7f470c", + "metadata": {}, + "outputs": [], + "source": [ + "from miscellaneous.error_evaluation import get_solution_vectors, load_geometry, compute_integral_error, show_multipatch_field" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "21199ef3", + "metadata": {}, + "outputs": [], + "source": [ + "# Define refinement\n", + "DEGREE_ELEVATIONS = 1\n", + "H_REFINEMENTS = [0]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "33201cad", + "metadata": {}, + "outputs": [], + "source": [ + "# Take the 99 percent cutoff\n", + "# As the velocity cutoff is later than the pressure cutoff we take the velocity cutoff\n", + "R = 16\n", + "models = {\n", + " # 'POD'\n", + " # 'LinearRegression',\n", + " # 'GP_RationalQuadratic',\n", + " # 'RBF_Linear',\n", + " # 'RBF_thinplatespline',\n", + " 'RBF_cubic',\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "de6d2dd0", + "metadata": {}, + "outputs": [], + "source": [ + "DataFolder = [f'Data/H_REFINEMENTS_{H_REFINEMENT}' for H_REFINEMENT in H_REFINEMENTS]\n", + "# Load test input \n", + "df = [pd.read_excel(f'{DataFolder_}/test/parameter_input.xlsx').transpose() for DataFolder_ in DataFolder]\n", + "SAMPLES_TEST = [df_.shape[1] for df_ in df]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "a38a3424", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 0%| | 0/1 [00:00<?, ?it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Evaluating model RBF_cubic with R=16 for H_REFINEMENT=0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 64/64 [00:36<00:00, 1.77it/s]\n", + "100%|██████████| 1/1 [00:36<00:00, 36.16s/it]\n" + ] + } + ], + "source": [ + "L1_rel_p, L2_rel_p = [], []\n", + "L1_rel_vx, L2_rel_vx = [], []\n", + "L1_rel_vy, L2_rel_vy = [], []\n", + "\n", + "# Loop over H_REFINEMENTS\n", + "for h_ref_idx, H_REFINEMENT in enumerate(H_REFINEMENTS):\n", + " L1_rel_p_h, L2_rel_p_h = [], []\n", + " L1_rel_vx_h, L2_rel_vx_h = [], []\n", + " L1_rel_vy_h, L2_rel_vy_h = [], []\n", + " \n", + " DataFolder = f'Data/H_REFINEMENTS_{H_REFINEMENT}'\n", + " \n", + " for model_name in tqdm(models):\n", + " print(f'Evaluating model {model_name} with R={R} for H_REFINEMENT={H_REFINEMENT}')\n", + " ModelFolder = f'{DataFolder}/TrainedModels/{model_name}'\n", + " PatchesFolder = f'{DataFolder}/Patches'\n", + " # Solution vector\n", + " L1_rel_p_s, L2_rel_p_s = [], []\n", + " L1_rel_vx_s, L2_rel_vx_s = [], []\n", + " L1_rel_vy_s, L2_rel_vy_s = [], []\n", + "\n", + " # iterate over the test samples\n", + " for sample in tqdm(range(SAMPLES_TEST[h_ref_idx])):\n", + " # Collect input files for evaluation\n", + " GEOMETRY_FILE = f'{DataFolder}/test/microstructure/index_{sample}.xml'\n", + " PRESSURE_FILE = f'{PatchesFolder}/{model_name}_{int(R)}/pressure_field_patches_{sample}.xml'\n", + " VELOCITY_FILE = f'{PatchesFolder}/{model_name}_{int(R)}/velocity_field_patches_{sample}.xml'\n", + " PRESSURE_REC_FILE = f'{PatchesFolder}/{model_name}_{int(R)}/pressure_field_rec_patches_{sample}.xml'\n", + " VELOCITY_REC_FILE = f'{PatchesFolder}/{model_name}_{int(R)}/velocity_field_rec_patches_{sample}.xml'\n", + "\n", + " # Get solution vector for pressure and velocity\n", + " pressure_data = get_solution_vectors(file_path=PRESSURE_FILE)\n", + " velocity_data = get_solution_vectors(file_path=VELOCITY_FILE, two_dimensional=True)\n", + " pressure_rec_data = get_solution_vectors(file_path=PRESSURE_REC_FILE)\n", + " velocity_rec_data = get_solution_vectors(file_path=VELOCITY_REC_FILE, two_dimensional=True)\n", + "\n", + " # Load the geometry\n", + " microstructure, ms_vel = load_geometry(GEOMETRY_FILE, degree_elevations=DEGREE_ELEVATIONS, h_refinements=H_REFINEMENTS[h_ref_idx])\n", + "\n", + " # Compute the error\n", + " # Pressure\n", + " error_values = compute_integral_error(\n", + " multipatch=microstructure,\n", + " fields_original=pressure_data,\n", + " fields_recreated=pressure_rec_data,\n", + " )\n", + " L1_rel_p_s.append(error_values[2])\n", + " L2_rel_p_s.append(error_values[3])\n", + " # Velocity\n", + " error_values = compute_integral_error(\n", + " multipatch=ms_vel,\n", + " fields_original=velocity_data,\n", + " fields_recreated=velocity_rec_data,\n", + " )\n", + "\n", + " # Append the error values\n", + " L1_rel_vx_s.append(error_values[2][0])\n", + " L2_rel_vx_s.append(error_values[3][0])\n", + " L1_rel_vy_s.append(error_values[2][1])\n", + " L2_rel_vy_s.append(error_values[3][1])\n", + "\n", + " # Append the error values for this model\n", + " L1_rel_p_h.append(L1_rel_p_s)\n", + " L2_rel_p_h.append(L2_rel_p_s)\n", + " L1_rel_vx_h.append(L1_rel_vx_s)\n", + " L2_rel_vx_h.append(L2_rel_vx_s)\n", + " L1_rel_vy_h.append(L1_rel_vy_s)\n", + " L2_rel_vy_h.append(L2_rel_vy_s)\n", + " \n", + " # Append results for this h-refinement level\n", + " L1_rel_p.append(L1_rel_p_h)\n", + " L2_rel_p.append(L2_rel_p_h)\n", + " L1_rel_vx.append(L1_rel_vx_h)\n", + " L2_rel_vx.append(L2_rel_vx_h)\n", + " L1_rel_vy.append(L1_rel_vy_h)\n", + " L2_rel_vy.append(L2_rel_vy_h)\n", + "\n", + "# Save the error values\n", + "np.savez(\n", + " f'Data/error_evaluation_99Cutoff.npz',\n", + " L1_rel_p=L1_rel_p, L2_rel_p=L2_rel_p,\n", + " L1_rel_vx=L1_rel_vx, L2_rel_vx=L2_rel_vx,\n", + " L1_rel_vy=L1_rel_vy, L2_rel_vy=L2_rel_vy,\n", + " h_refinements=H_REFINEMENTS\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "c8e0eca1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((1, 64), (1, 64), (1, 64))" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "L2_rel_p = np.array(L2_rel_p).reshape(len(models), SAMPLES_TEST[0])\n", + "L2_rel_vx = np.array(L2_rel_vx).reshape(len(models), SAMPLES_TEST[0])\n", + "L2_rel_vy = np.array(L2_rel_vy).reshape(len(models), SAMPLES_TEST[0])\n", + "L2_rel_p.shape, L2_rel_vx.shape, L2_rel_vy.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "ebf09da1", + "metadata": {}, + "outputs": [], + "source": [ + "# Identify for each model the index with the highest L2 error\n", + "identifier_p = np.where(\n", + " L2_rel_p == np.max(L2_rel_p),\n", + " True,\n", + " False,\n", + ")\n", + "identifier_vx = np.where(\n", + " L2_rel_vx == np.max(L2_rel_vx),\n", + " True,\n", + " False,\n", + ")\n", + "identifier_vy = np.where(\n", + " L2_rel_vy == np.max(L2_rel_vy),\n", + " True,\n", + " False,\n", + ")\n", + "# print('Pressure')\n", + "# print(f'Max Pressure Error: {L2_rel_p[identifier_p == True]}')\n", + "# print(f'Identifier pressure {identifier_p}')\n", + "# print(f'---------' * 20)\n", + "# print('Velocity X')\n", + "# print(f'Max Velocity X Error: {L2_rel_vx[identifier_vx == True]}')\n", + "# print(f'Identifier velocity x {identifier_vx}')\n", + "# print(f'---------' * 20)\n", + "# print('Velocity Y')\n", + "# print(f'Max Velocity Y Error: {L2_rel_vy[identifier_vy == True]}')\n", + "# print(f'Identifier velocity y {identifier_vy}')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "5b6e6c8f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((array([0]), array([59])),\n", + " (array([0]), array([63])),\n", + " (array([0]), array([55])))" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "idx_p = np.where(identifier_p == True)\n", + "idx_vx = np.where(identifier_vx == True)\n", + "idx_vy = np.where(identifier_vy == True)\n", + "idx_p, idx_vx, idx_vy" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "bd27750b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pressure\n", + "Pressure\n", + "Model with maximum relative L2 error: RBF_cubic\n", + "Test sample for the maximum error: 59\n", + "Max Pressure Error: [0.0580657]\n", + "------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n", + "Velocity X\n", + "Model with maximum relative L2 error: RBF_cubic\n", + "Test sample for the maximum error: 63\n", + "Max Velocity X Error: [0.03785187]\n", + "------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n", + "Velocity Y\n", + "Model with maximum relative L2 error: RBF_cubic\n", + "Test sample for the maximum error: 55\n", + "Max Velocity Y Error: [0.06116032]\n", + "------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/v_/5q1gkdc53z34pdsfnpkx2t340000gn/T/ipykernel_81308/1771942688.py:9: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)\n", + " print(f'Model with maximum relative L2 error: {model_list[int(idx[0])]}')\n", + "/var/folders/v_/5q1gkdc53z34pdsfnpkx2t340000gn/T/ipykernel_81308/1771942688.py:10: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)\n", + " print(f'Test sample for the maximum error: {int(idx[1])}')\n" + ] + } + ], + "source": [ + "print(f'Pressure')\n", + "model_list = list(models)\n", + "for field_name, idx, L2_rel in [\n", + " (\"Pressure\", idx_p, L2_rel_p), \n", + " (\"Velocity X\", idx_vx, L2_rel_vx), \n", + " (\"Velocity Y\", idx_vy, L2_rel_vy)\n", + "]:\n", + " print(f'{field_name}')\n", + " print(f'Model with maximum relative L2 error: {model_list[int(idx[0])]}')\n", + " print(f'Test sample for the maximum error: {int(idx[1])}')\n", + " print(f'Max {field_name} Error: {L2_rel[idx]}')\n", + " print(f'---------' * 20)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0f4e9bf4", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "POD", + "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.12.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}