├── .gitignore ├── README.md ├── models └── openFoam │ ├── Allrun │ └── case │ ├── 0 │ ├── p │ └── U │ ├── constant │ └── transportProperties │ └── system │ ├── fvSchemes │ ├── controlDict │ ├── fvSolution │ ├── sample │ └── blockMeshDict ├── Dockerfile └── post_processing └── Ansys_Analysis -16k_32k_64k.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | .ipynb_checkpoints 2 | */.ipynb_checkpoints/* 3 | *.msh 4 | *.tar 5 | *.tar.gz 6 | *.tar.xz -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # pipe_verification 2 | An example of pipe flow simulation with OpenFoam. Results compared with Ansys simulation for the same parameters and the same meshes. Ansys and OpenFoam results compared with the analytical solution of Hagen-Poiseuille flow. 3 | 4 | 5 | Access to the [meshes](https://zenodo.org/record/7311316#.Y21rKezMKdZ) and results in [.vtk](https://zenodo.org/record/7314089#.Y26FOdLMI5k) 6 | 7 | 8 | Singularity with docker container [here](https://github.com/piyueh/openfoam-pipe-flow-verification) 9 | -------------------------------------------------------------------------------- /models/openFoam/Allrun: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | curl -LO https://zenodo.org/record/7311316/files/pipe_meshes.tar.xz 4 | tar -xvf pipe_meshes.tar.xz 5 | 6 | mv pipe_meshes.tar.xz ./mesh_files/ 7 | 8 | cp -r case case32 9 | cp -r case case64 10 | mv case case16 11 | 12 | mv pipe16.msh case16 13 | mv pipe32.msh case32 14 | mv pipe64.msh case64 15 | 16 | cd case16 17 | fluentMeshToFoam pipe16.msh 18 | icoFoam > run.log 2>&1 19 | foamToVTK 20 | cd .. 21 | 22 | cd case32 23 | fluentMeshToFoam pipe32.msh 24 | icoFoam > run.log 2>&1 25 | foamToVTK 26 | cd .. 27 | 28 | cd case64 29 | fluentMeshToFoam pipe64.msh 30 | icoFoam > run.log 2>&1 31 | foamToVTK -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openfoam/openfoam9-paraview56:9 2 | 3 | USER root 4 | 5 | # Install any extra things we might need 6 | RUN apt-get update \ 7 | && apt-get install -y \ 8 | vim \ 9 | ssh \ 10 | sudo \ 11 | wget \ 12 | git \ 13 | software-properties-common ;\ 14 | rm -rf /var/lib/apt/lists/* 15 | # Create a new user called foam 16 | RUN useradd --user-group --create-home --shell /bin/bash foam ;\ 17 | echo "foam ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers 18 | 19 | RUN mkdir -p /newfolder 20 | RUN chown foam /newfolder 21 | RUN git clone https://github.com/barbagroup/pipe_verification.git /home/foam/pipe_verification 22 | # set the default container user to foam 23 | USER foam -------------------------------------------------------------------------------- /models/openFoam/case/constant/transportProperties: -------------------------------------------------------------------------------- 1 | /*--------------------------------*- C++ -*----------------------------------*\ 2 | ========= | 3 | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox 4 | \\ / O peration | Website: https://openfoam.org 5 | \\ / A nd | Version: 6 6 | \\/ M anipulation | 7 | \*---------------------------------------------------------------------------*/ 8 | FoamFile 9 | { 10 | version 2.0; 11 | format ascii; 12 | class dictionary; 13 | location "constant"; 14 | object transportProperties; 15 | } 16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 17 | 18 | nu [0 2 -1 0 0 0 0] 1.48e-05; 19 | 20 | // ************************************************************************* // 21 | -------------------------------------------------------------------------------- /models/openFoam/case/0/p: -------------------------------------------------------------------------------- 1 | /*--------------------------------*- C++ -*----------------------------------*\ 2 | ========= | 3 | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox 4 | \\ / O peration | Website: https://openfoam.org 5 | \\ / A nd | Version: 6 6 | \\/ M anipulation | 7 | \*---------------------------------------------------------------------------*/ 8 | FoamFile 9 | { 10 | version 2.0; 11 | format ascii; 12 | class volScalarField; 13 | location "0"; 14 | object p; 15 | } 16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 17 | 18 | dimensions [0 2 -2 0 0 0 0]; 19 | 20 | internalField uniform 0; 21 | 22 | boundaryField 23 | { 24 | wall 25 | { 26 | type zeroGradient; 27 | } 28 | inlet 29 | { 30 | type zeroGradient; 31 | } 32 | outlet 33 | { 34 | type fixedValue; 35 | value uniform 0; 36 | } 37 | } 38 | 39 | 40 | // ************************************************************************* // 41 | -------------------------------------------------------------------------------- /models/openFoam/case/0/U: -------------------------------------------------------------------------------- 1 | /*--------------------------------*- C++ -*----------------------------------*\ 2 | ========= | 3 | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox 4 | \\ / O peration | Website: https://openfoam.org 5 | \\ / A nd | Version: 6 6 | \\/ M anipulation | 7 | \*---------------------------------------------------------------------------*/ 8 | FoamFile 9 | { 10 | version 2.0; 11 | format ascii; 12 | class volVectorField; 13 | location "0"; 14 | object U; 15 | } 16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 17 | 18 | dimensions [0 1 -1 0 0 0 0]; 19 | 20 | internalField uniform (0 0 0.521646); 21 | 22 | boundaryField 23 | { 24 | wall 25 | { 26 | type noSlip; 27 | } 28 | inlet 29 | { 30 | type fixedValue; 31 | value uniform (0 0 0.521646); 32 | } 33 | outlet 34 | { 35 | type zeroGradient; 36 | } 37 | } 38 | 39 | 40 | // ************************************************************************* // 41 | -------------------------------------------------------------------------------- /models/openFoam/case/system/fvSchemes: -------------------------------------------------------------------------------- 1 | /*--------------------------------*- C++ -*----------------------------------*\ 2 | ========= | 3 | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox 4 | \\ / O peration | Website: https://openfoam.org 5 | \\ / A nd | Version: 6 6 | \\/ M anipulation | 7 | \*---------------------------------------------------------------------------*/ 8 | FoamFile 9 | { 10 | version 2.0; 11 | format ascii; 12 | class dictionary; 13 | location "system"; 14 | object fvSchemes; 15 | } 16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 17 | 18 | ddtSchemes 19 | { 20 | default Euler;//CrankNicolson 0.9; 21 | } 22 | 23 | gradSchemes 24 | { 25 | default Gauss linear; 26 | grad(p) Gauss linear; 27 | } 28 | 29 | divSchemes 30 | { 31 | default none; 32 | div(phi,U) Gauss linear; 33 | } 34 | 35 | laplacianSchemes 36 | { 37 | default Gauss linear orthogonal; 38 | } 39 | /* 40 | interpolationSchemes 41 | { 42 | default linear; 43 | } 44 | 45 | snGradSchemes 46 | { 47 | default orthogonal; 48 | } 49 | 50 | */ 51 | // ************************************************************************* // 52 | -------------------------------------------------------------------------------- /models/openFoam/case/system/controlDict: -------------------------------------------------------------------------------- 1 | /*--------------------------------*- C++ -*----------------------------------*\ 2 | ========= | 3 | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox 4 | \\ / O peration | Website: https://openfoam.org 5 | \\ / A nd | Version: 6 6 | \\/ M anipulation | 7 | \*---------------------------------------------------------------------------*/ 8 | FoamFile 9 | { 10 | version 2.0; 11 | format ascii; 12 | class dictionary; 13 | location "system"; 14 | object controlDict; 15 | } 16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 17 | 18 | application icoFoam; 19 | 20 | startFrom startTime; 21 | 22 | startTime 0; 23 | 24 | stopAt endTime; 25 | 26 | endTime 1.0; 27 | 28 | deltaT 0.0005//0.005; 29 | 30 | writeControl timeStep; 31 | 32 | writeInterval 200; 33 | 34 | purgeWrite 0; 35 | 36 | writeFormat ascii; 37 | 38 | writePrecision 6; 39 | 40 | writeCompression off; 41 | 42 | timeFormat general; 43 | 44 | timePrecision 6; 45 | 46 | runTimeModifiable yes; 47 | 48 | adjustTimeStep yes; 49 | 50 | maxCo 1.0; 51 | 52 | maxDeltaT 1; 53 | 54 | 55 | 56 | // ************************************************************************* // -------------------------------------------------------------------------------- /models/openFoam/case/system/fvSolution: -------------------------------------------------------------------------------- 1 | /*--------------------------------*- C++ -*----------------------------------*\ 2 | ========= | 3 | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox 4 | \\ / O peration | Website: https://openfoam.org 5 | \\ / A nd | Version: 6 6 | \\/ M anipulation | 7 | \*---------------------------------------------------------------------------*/ 8 | FoamFile 9 | { 10 | version 2.0; 11 | format ascii; 12 | class dictionary; 13 | location "system"; 14 | object fvSolution; 15 | } 16 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 17 | 18 | solvers 19 | { 20 | p 21 | { 22 | solver PCG; 23 | preconditioner DIC; 24 | tolerance 1e-08; 25 | relTol 1e-08; 26 | } 27 | 28 | pFinal 29 | { 30 | $p; 31 | relTol 1e-08; 32 | } 33 | 34 | U 35 | { 36 | solver smoothSolver; 37 | smoother symGaussSeidel; 38 | tolerance 1e-08; 39 | relTol 1e-08; 40 | } 41 | } 42 | 43 | PISO 44 | { 45 | nCorrectors 2; 46 | nNonOrthogonalCorrectors 0; 47 | pRefCell 0; 48 | pRefValue 0; 49 | } 50 | 51 | 52 | // ************************************************************************* // 53 | -------------------------------------------------------------------------------- /models/openFoam/case/system/sample: -------------------------------------------------------------------------------- 1 | /*--------------------------------*- C++ -*----------------------------------*\ 2 | ========= | 3 | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox 4 | \\ / O peration | Website: https://openfoam.org 5 | \\ / A nd | Version: 6 6 | \\/ M anipulation | 7 | \*---------------------------------------------------------------------------*/ 8 | FoamFile 9 | { 10 | version 2.0; 11 | format ascii; 12 | class dictionary; 13 | location "system"; 14 | object sample; 15 | } 16 | 17 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 18 | 19 | type sets; 20 | libs ("libsampling.so"); 21 | 22 | interpolationScheme cell;//cellPointFace--; 23 | // interpolationScheme. choice of 24 | // cell : use cell-centre value only; constant over cells (default) 25 | // cellPoint : use cell-centre and vertex values 26 | // cellPointFace : use cell-centre, vertex and face values. 27 | // 1] vertex values determined from neighbouring cell-centre values 28 | // 2] face values determined using the current face interpolation scheme 29 | // for the field (linear, gamma, etc.) 30 | interpolationScheme cell; 31 | 32 | 33 | setFormat csv; 34 | // null : suppress output 35 | // foamFile : separate points, faces and values file 36 | // dx : DX scalar or vector format 37 | // vtk : VTK ascii format 38 | // raw : x y z value format for use with e.g. gnuplot 'splot'. 39 | 40 | 41 | sets 42 | ( 43 | at0.02 44 | { 45 | type lineCell;//lineFace; 46 | axis y; 47 | start (0 -0.00227 0.02); 48 | end (0 0.00227 0.02); 49 | } 50 | at0.04 51 | { 52 | type lineCell;//lineFace; 53 | axis y; 54 | start (0 -0.00227 0.04); 55 | end (0 0.00227 0.04); 56 | } 57 | at0.06 58 | { 59 | type lineCell;//lineFace; 60 | axis y; 61 | start (0 -0.00227 0.06); 62 | end (0 0.00227 0.06); 63 | } 64 | at0.08 65 | { 66 | type lineCell;//lineFace; 67 | axis y; 68 | start (0 -0.00227 0.08); 69 | end (0 0.00227 0.08); 70 | } 71 | at0.1 72 | { 73 | type lineCell;//lineFace; 74 | axis y; 75 | start (0 -0.00227 0.1); 76 | end (0 0.00227 0.1); 77 | } 78 | at0.012 79 | { 80 | type lineCell;//lineFace; 81 | axis y; 82 | start (0 -0.00227 0.12); 83 | end (0 0.00227 0.12); 84 | } 85 | ); 86 | 87 | fields 88 | ( 89 | U 90 | ); 91 | 92 | 93 | // ************************************************************************* // 94 | -------------------------------------------------------------------------------- /models/openFoam/case/system/blockMeshDict: -------------------------------------------------------------------------------- 1 | /*--------------------------------*- C++ -*----------------------------------*\ 2 | | ========= | | 3 | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | 4 | | \\ / O peration | | 5 | | \\ / A nd | Copyright (C) 2016 Ehsan Madadi-Kandjani | 6 | | \\/ M anipulation | | 7 | \*---------------------------------------------------------------------------*/ 8 | FoamFile 9 | { 10 | version 2.0; 11 | format ascii; 12 | class dictionary; 13 | object blockMeshDict; 14 | } 15 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 16 | // General macros to create cylinder mesh 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 29 | 30 | convertToMeters 0.001; 31 | 32 | // Inner square side half 33 | 34 | 35 | // Inner square side curvature 36 | 37 | 38 | // cylinder radius 39 | 40 | 41 | // Height of cylinder 42 | 43 | 44 | // Base z 45 | 46 | 47 | // Outlet z 48 | 49 | 50 | // Number of cells at inner square 51 | 52 | 53 | // Number of cells between inner square and circle 54 | 55 | 56 | // Number of cells in the cylinder height 57 | 58 | 59 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 60 | 61 | 62 | 63 | 64 | // 45 degree points angle 65 | 66 | 67 | 68 | 69 | 70 | // Half of 45 degree points angle 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | // Inner square x and y position 97 | 98 | // x 99 | 100 | 101 | 102 | 103 | 104 | // y 105 | 106 | 107 | 108 | 109 | 110 | // Circle x and y positions 111 | 112 | // x 113 | 114 | 115 | 116 | 117 | 118 | // y 119 | 120 | 121 | 122 | 123 | 124 | // Inner square x and y position middle curvatures 125 | 126 | // x 127 | 128 | 129 | 130 | 131 | 132 | // y 133 | 134 | 135 | 136 | 137 | 138 | // Circle x and y positions middle curvatures 139 | 140 | // x 141 | 142 | 143 | 144 | 145 | 146 | // y 147 | 148 | 149 | 150 | 151 | 152 | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 153 | 154 | vertices 155 | ( 156 | (1.0 -1 0) // Vertex s0b = 0 157 | (-1 -1 0) // Vertex s1b = 1 158 | (-1 1.0 0) // Vertex s2b = 2 159 | (1.0 1.0 0) // Vertex s3b = 3 160 | 161 | (1.60513239329346 -1.60513239329346 0) // Vertex r0b = 4 162 | (-1.60513239329346 -1.60513239329346 0) // Vertex r1b = 5 163 | (-1.60513239329346 1.60513239329346 0) // Vertex r2b = 6 164 | (1.60513239329346 1.60513239329346 0) // Vertex r3b = 7 165 | 166 | (1.0 -1 200) // Vertex s0t = 8 167 | (-1 -1 200) // Vertex s1t = 9 168 | (-1 1.0 200) // Vertex s2t = 10 169 | (1.0 1.0 200) // Vertex s3t = 11 170 | 171 | (1.60513239329346 -1.60513239329346 200) // Vertex r0t = 12 172 | (-1.60513239329346 -1.60513239329346 200) // Vertex r1t = 13 173 | (-1.60513239329346 1.60513239329346 200) // Vertex r2t = 14 174 | (1.60513239329346 1.60513239329346 200) // Vertex r3t = 15 175 | ); 176 | 177 | blocks 178 | ( 179 | //block0 180 | hex (1 0 3 2 9 8 11 10) 181 | square 182 | (8 8 300) 183 | simpleGrading (1 1 1) 184 | 185 | //block1 186 | hex (0 4 7 3 8 12 15 11) 187 | innerCircle 188 | (4 8 300) 189 | simpleGrading (1 1 1) 190 | 191 | //block2 192 | hex (3 7 6 2 11 15 14 10) 193 | innerCircle 194 | (4 8 300) 195 | simpleGrading (1 1 1) 196 | 197 | //block3 198 | hex (2 6 5 1 10 14 13 9) 199 | innerCircle 200 | (4 8 300) 201 | simpleGrading (1 1 1) 202 | 203 | //block4 204 | hex (1 5 4 0 9 13 12 8) 205 | innerCircle 206 | (4 8 300) 207 | simpleGrading (1 1 1) 208 | ); 209 | 210 | edges 211 | ( 212 | //Circle edges 213 | arc 7 4 (2.27 0 0) 214 | arc 4 5 (1.38997411703225e-16 -2.27 0) 215 | arc 5 6 (-2.27 2.77994823406448e-16 0) 216 | arc 6 7 (1.38997411703225e-16 2.27 0) 217 | 218 | //Circle edges 219 | arc 15 12 (2.27 0 200) 220 | arc 12 13 (1.38997411703225e-16 -2.27 200) 221 | arc 13 14 (-2.27 2.77994823406448e-16 200) 222 | arc 14 15 (1.38997411703225e-16 2.27 200) 223 | 224 | arc 3 0 (1.1 0 0) 225 | arc 0 1 (0 -1.1 0) 226 | arc 1 2 (-1.1 0 0) 227 | arc 2 3 (0 1.1 0) 228 | 229 | arc 11 8 (1.1 0 200) 230 | arc 8 9 (0 -1.1 200) 231 | arc 9 10 (-1.1 0 200) 232 | arc 10 11 (0 1.1 200) 233 | 234 | ); 235 | 236 | patches 237 | ( 238 | wall walls 239 | ( 240 | (4 7 15 12) 241 | (5 4 12 13) 242 | (6 5 13 14) 243 | (7 6 14 15) 244 | ) 245 | 246 | patch inlet 247 | ( 248 | (3 0 1 2) 249 | (3 7 4 0) 250 | (2 6 7 3) 251 | (1 5 6 2) 252 | (0 4 5 1) 253 | ) 254 | 255 | patch outlet 256 | ( 257 | (11 10 9 8) 258 | (11 8 12 15) 259 | (10 11 15 14) 260 | (9 10 14 13) 261 | (8 9 13 12) 262 | ) 263 | ); 264 | 265 | mergePatchPairs 266 | ( 267 | ); 268 | -------------------------------------------------------------------------------- /post_processing/Ansys_Analysis -16k_32k_64k.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import numpy as np\n", 10 | "import csv\n", 11 | "import glob\n", 12 | "import pandas as pd\n", 13 | "from matplotlib import pyplot" 14 | ] 15 | }, 16 | { 17 | "cell_type": "markdown", 18 | "metadata": {}, 19 | "source": [ 20 | "# Functions" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 2, 26 | "metadata": {}, 27 | "outputs": [], 28 | "source": [ 29 | "############ Get Data from CSV File ########### \n", 30 | "def dataGet(data_file): ## Simulation Data\n", 31 | " \"\"\"Collects data from csv file\n", 32 | " \n", 33 | " Arguments\n", 34 | " ---------\n", 35 | " data_file : csv file \n", 36 | " comma-separated values file \n", 37 | " \n", 38 | " Returns\n", 39 | " -------\n", 40 | " two-dimensional list of strings\n", 41 | " \"\"\"\n", 42 | " global data \n", 43 | " raw=open(data_file)\n", 44 | " get_csv=csv.reader(raw)\n", 45 | " data = []\n", 46 | " for line in get_csv:\n", 47 | " data.append(line) \n", 48 | " return data\n", 49 | "\n", 50 | "def dataCleanDiameter():\n", 51 | " \"\"\"Cleans Diameter Data (increments of 0.01m along the z-axis) \n", 52 | " \n", 53 | " Details\n", 54 | " ---------\n", 55 | " Directory must contain all csv files to be read\n", 56 | " \n", 57 | " Returns\n", 58 | " -------\n", 59 | " Three lists of floats: \n", 60 | " Vel = Velocity [m/s]\n", 61 | " label = file name followed by Z-axis location of diameter\n", 62 | " x_l = position along diameter\n", 63 | " \"\"\"\n", 64 | " data_file=glob.glob('*.csv')\n", 65 | " temp = []\n", 66 | " for file in data_file:\n", 67 | " data = dataGet(file);\n", 68 | " name_file=file.rsplit('.',1)[0]; \n", 69 | " data_t = np.transpose(data)\n", 70 | " data_Vel, data_x = data_t[1], data_t[0] \n", 71 | " i = 0;\n", 72 | " buffer, buffer_x = [], []\n", 73 | " label.append('FILE: '+ name_file)\n", 74 | " for radius in data_x:\n", 75 | " buffer.append(data_Vel[i])\n", 76 | " buffer_x.append(data_x[i])\n", 77 | " if radius == \"[Name]\":\n", 78 | " buffer_x = buffer_x[4:len(buffer_x)-3]\n", 79 | " buffer_x = [float(item) for item in buffer_x] \n", 80 | " x_loc.append(buffer_x) \n", 81 | " buffer = buffer[4:len(buffer)-3]\n", 82 | " buffer = [float(item) for item in buffer] \n", 83 | " Vel.append(buffer) \n", 84 | " label.append(data_x[i+1])\n", 85 | " buffer, buffer_x = [], []\n", 86 | " i+=1 \n", 87 | " buffer_x = buffer_x[4:-1]\n", 88 | " buffer_x = [float(item) for item in buffer_x] \n", 89 | " x_loc.append(buffer_x) \n", 90 | " buffer = buffer[4:-1]\n", 91 | " buffer = [float(item) for item in buffer] \n", 92 | " Vel.append(buffer)\n", 93 | " return Vel,label,x_loc\n", 94 | "############ #######################\n", 95 | "def dataCleanPlane():\n", 96 | " \"\"\"Cleans Plane Data (at 0.11[m] for final timestep) \n", 97 | " \n", 98 | " Details\n", 99 | " ---------\n", 100 | " Directory must contain all csv files to be read\n", 101 | " \n", 102 | " Returns\n", 103 | " -------\n", 104 | " Three lists of floats:\n", 105 | " Vel = Velocity [m/s]\n", 106 | " label = file name followed by Z-axis location of diameter\n", 107 | " x_loc = x component of vertex where velocity is calculated\n", 108 | " y_loc = y component of vertex where velocity is calculated\n", 109 | " z_loc = z component of vertex where velocity is calculated\n", 110 | " area = the sum of sector areas associated with the node\n", 111 | " (a sector area is the portion of area of a face \n", 112 | " touching a node that can be associated with that node)\n", 113 | " \"\"\"\n", 114 | " data_file=glob.glob('*.csv')\n", 115 | " temp = []\n", 116 | " for file in data_file:\n", 117 | " data = dataGet(file);\n", 118 | " name_file=file.rsplit('.',1)[0]; \n", 119 | " data_t = np.transpose(data)\n", 120 | " data_x, data_y, data_z = data_t[0], data_t[1], data_t[2]\n", 121 | " data_Vel, data_area = data_t[3], data_t[4]\n", 122 | " i = 0;\n", 123 | " buffer_Vel, buffer_x,buffer_y,buffer_z,buffer_area = [],[],[],[],[]\n", 124 | " label.append('FILE: '+ name_file)\n", 125 | " for radius in data_x:\n", 126 | " buffer_x.append(data_x[i])\n", 127 | " buffer_y.append(data_y[i])\n", 128 | " buffer_z.append(data_z[i])\n", 129 | " buffer_Vel.append(data_Vel[i])\n", 130 | " buffer_area.append(data_area[i]) \n", 131 | " if radius == \"[Name]\":\n", 132 | " buffer_x = buffer_x[4:len(buffer_x)-3]\n", 133 | " buffer_x = [float(item) for item in buffer_x] \n", 134 | " x_loc.append(buffer_x) \n", 135 | " buffer_y = buffer_y[4:len(buffer_y)-3]\n", 136 | " buffer_y = [float(item) for item in buffer_y] \n", 137 | " y_loc.append(buffer_y) \n", 138 | " buffer_z = buffer_z[4:len(buffer_z)-3]\n", 139 | " buffer_z = [float(item) for item in buffer_z] \n", 140 | " z_loc.append(buffer_z) \n", 141 | " buffer_Vel = buffer_Vel[4:len(buffer_Vel)-3]\n", 142 | " buffer_Vel = [float(item) for item in buffer_Vel] \n", 143 | " Vel.append(buffer_Vel)\n", 144 | " buffer_area = buffer_area[4:len(buffer_area)-3]\n", 145 | " buffer_area = [float(item) for item in buffer_area] \n", 146 | " area.append(buffer_area) \n", 147 | " label.append(data_x[i+1])\n", 148 | " buffer_Vel, buffer_area,buffer_x,buffer_y,buffer_z = [],[],[],[],[]\n", 149 | " i+=1 \n", 150 | " buffer_x = buffer_x[4:-1]\n", 151 | " buffer_x = [float(item) for item in buffer_x] \n", 152 | " x_loc.append(buffer_x) \n", 153 | " buffer_y = buffer_y[4:-1]\n", 154 | " buffer_y = [float(item) for item in buffer_y] \n", 155 | " y_loc.append(buffer_y) \n", 156 | " buffer_z = buffer_z[4:-1]\n", 157 | " buffer_z = [float(item) for item in buffer_z] \n", 158 | " z_loc.append(buffer_z) \n", 159 | " buffer_Vel = buffer_Vel[4:-1]\n", 160 | " buffer_Vel = [float(item) for item in buffer_Vel] \n", 161 | " Vel.append(buffer_Vel)\n", 162 | " buffer_area = buffer_area[4:-1]\n", 163 | " buffer_area = [float(item) for item in buffer_area] \n", 164 | " area.append(buffer_area)\n", 165 | " return Vel,label,x_loc,y_loc,z_loc,area\n", 166 | "############ Analytic Solution ################\n", 167 | "def analytic_Sol(r,R,pressureGrad):\n", 168 | " \"\"\"Calculates the analytic solution\n", 169 | " \n", 170 | " Arguments\n", 171 | " ---------\n", 172 | " data_file : csv file \n", 173 | " comma-separated values file\n", 174 | " r : array of float\n", 175 | " Radius values along the diameter\n", 176 | " R : float\n", 177 | " Radius of the pipe\n", 178 | " pressureGrad : float \n", 179 | " pressure gradient \n", 180 | " \n", 181 | " Returns\n", 182 | " -------\n", 183 | " analytic_solution: array of float\n", 184 | " \"\"\"\n", 185 | " analytic_solution = (R**2-r**2)*(1/(4*1.48e-05))*pressureGrad \n", 186 | " return analytic_solution\n", 187 | "################ L2 Norm ##################### \n", 188 | "def l2_norm_calc(x_loc, y_loc, Vel, area):\n", 189 | " \"\"\"Calculates the L2 Norm\n", 190 | " \n", 191 | " Arguments\n", 192 | " ---------\n", 193 | " data_file : csv file \n", 194 | " comma-separated values file\n", 195 | " r : array of float\n", 196 | " Radius values along the diameter\n", 197 | " R : float\n", 198 | " Radius of the pipe\n", 199 | " pressureGrad : float \n", 200 | " pressure gradient \n", 201 | " \n", 202 | " Returns\n", 203 | " -------\n", 204 | " analytic_solution: array of float\n", 205 | " \"\"\"\n", 206 | " a = 0\n", 207 | " x0, y0 = 0, 0 \n", 208 | " analytic_solution = []\n", 209 | " diff_sqr_areas = []\n", 210 | " error_sum = 0\n", 211 | " for point in x_loc:\n", 212 | " r = np.sqrt((x_loc[a] - 0)**2 + (y_loc[a] - 0)**2)\n", 213 | " asol = (R**2-r**2)*(1/(4*1.48e-05))*pressureGrad\n", 214 | " analytic_solution.append(asol)\n", 215 | " differ = Vel[a] - asol\n", 216 | " diff_sqr = differ**2\n", 217 | " diff_sqr_area = float(diff_sqr) * area[a]\n", 218 | " diff_sqr_areas.append(diff_sqr_area)\n", 219 | " error_sum += diff_sqr_area \n", 220 | " a+=1 \n", 221 | " l2_norm = np.sqrt(error_sum)\n", 222 | " return l2_norm, analytic_solution,diff_sqr_areas" 223 | ] 224 | }, 225 | { 226 | "cell_type": "markdown", 227 | "metadata": {}, 228 | "source": [ 229 | "# Pipe Flow Parameters" 230 | ] 231 | }, 232 | { 233 | "cell_type": "code", 234 | "execution_count": 3, 235 | "metadata": {}, 236 | "outputs": [], 237 | "source": [ 238 | "length = 0.12 # Pipe Length\n", 239 | "R = 0.00227 # Pipe Radius\n", 240 | "rho = 1.0 # Fluid Density\n", 241 | "v = 0.5216 # Uniform Inlet Velocity\n", 242 | "\n", 243 | "Re = rho*v*R*2/(1.48e-05) # Reynolds number\n", 244 | "f = 64/Re # Friction Factor\n", 245 | "dP = f*length*1*v**2/(2*R*2) \n", 246 | "pressureGrad = dP/length\n", 247 | "dPdx = 1.48e-05*4/(R**2)\n", 248 | "v_max = v*2 # Maximum Velocity" 249 | ] 250 | }, 251 | { 252 | "cell_type": "markdown", 253 | "metadata": {}, 254 | "source": [ 255 | "# Analytic Solution" 256 | ] 257 | }, 258 | { 259 | "cell_type": "code", 260 | "execution_count": 4, 261 | "metadata": {}, 262 | "outputs": [], 263 | "source": [ 264 | "r1 = np.linspace(-0.00227,0.00227,31)#,1000)\n", 265 | "r = np.sqrt(r1**2) # array how radius changing\n", 266 | "analytic_Sol = analytic_Sol(r,R,pressureGrad)" 267 | ] 268 | }, 269 | { 270 | "cell_type": "code", 271 | "execution_count": 14, 272 | "metadata": {}, 273 | "outputs": [ 274 | { 275 | "data": { 276 | "text/plain": [ 277 | "numpy.float64" 278 | ] 279 | }, 280 | "execution_count": 14, 281 | "metadata": {}, 282 | "output_type": "execute_result" 283 | } 284 | ], 285 | "source": [ 286 | "type(r[0])" 287 | ] 288 | }, 289 | { 290 | "cell_type": "markdown", 291 | "metadata": {}, 292 | "source": [ 293 | "# ANSYS - Diameter Data " 294 | ] 295 | }, 296 | { 297 | "cell_type": "code", 298 | "execution_count": 5, 299 | "metadata": {}, 300 | "outputs": [ 301 | { 302 | "name": "stdout", 303 | "output_type": "stream", 304 | "text": [ 305 | "C:\\Users\\Paulina\\Desktop\\PausWorld\\Analysis_ANSYS\\Analysis_Meshes-3_Pipeflow_ANSYS\\data\\Diameter\n" 306 | ] 307 | } 308 | ], 309 | "source": [ 310 | "cd data\\Diameter" 311 | ] 312 | }, 313 | { 314 | "cell_type": "code", 315 | "execution_count": 6, 316 | "metadata": {}, 317 | "outputs": [], 318 | "source": [ 319 | "Vel, label, x_loc = [],[],[] # Initialize variables\n", 320 | "Vel, label, x_loc = dataCleanDiameter() # Collect Diameter Data" 321 | ] 322 | }, 323 | { 324 | "cell_type": "code", 325 | "execution_count": 7, 326 | "metadata": {}, 327 | "outputs": [], 328 | "source": [ 329 | "# Collect velocity by mesh: Coarse(16), Med(32), Fine(64)\n", 330 | "x_position = x_loc[1] # Position along diameter at cross section \n", 331 | "Vel_16_z11, Vel_32_z11, Vel_64_z11 = Vel[11], Vel[25], Vel[39]" 332 | ] 333 | }, 334 | { 335 | "cell_type": "code", 336 | "execution_count": 8, 337 | "metadata": {}, 338 | "outputs": [], 339 | "source": [ 340 | "# Create Dataframes for each mesh table1(Coarse), table2(Med), table3(Fine)\n", 341 | "headings = ['x'] + label[1:14]\n", 342 | "#transient_16_1s_0.0005_Diameters\n", 343 | "table1 = [x_loc[1],Vel[1],Vel[2],Vel[3],Vel[4],\n", 344 | " Vel[5],Vel[6],Vel[7],Vel[8],Vel[9],Vel[10],Vel[11],Vel[12],Vel[13]]\n", 345 | "df1 = pd.DataFrame(table1)\n", 346 | "df1 = df1.transpose()\n", 347 | "df1.columns = headings\n", 348 | "\n", 349 | "#transient_32_0.3s_0.0005_Diameters\n", 350 | "table2 = [x_loc[2],Vel[15],Vel[16],Vel[17],Vel[18],Vel[19],\n", 351 | " Vel[20],Vel[21],Vel[22],Vel[23],Vel[24],Vel[25],Vel[26],Vel[27]]\n", 352 | "df2 = pd.DataFrame(table2)\n", 353 | "df2 = df2.transpose()\n", 354 | "df2.columns = headings\n", 355 | "\n", 356 | "#transient_64_0.3s_0.00025_Diameters\n", 357 | "table3 = [x_loc[3],Vel[28],Vel[29],Vel[30],Vel[31],Vel[32],\n", 358 | " Vel[33],Vel[34],Vel[35],Vel[36],Vel[37],Vel[38],Vel[39],Vel[40]]\n", 359 | "df3 = pd.DataFrame(table3)\n", 360 | "df3 = df3.transpose()\n", 361 | "df3.columns = headings" 362 | ] 363 | }, 364 | { 365 | "cell_type": "code", 366 | "execution_count": 9, 367 | "metadata": {}, 368 | "outputs": [ 369 | { 370 | "data": { 371 | "image/png": "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iEi2Z4xpBUSTeR/d5R6FICIiIldBI4MiIiIiIiJ5kEYGRURERERE8qBc/9B5f39/W6pUKUfHEBERERERcYiIiIgYa23hi5fn+jJYqlQp1q1b5+gYIiIiIiIiDmGM2X+p5bpMVEREREREJA9SGRQREREREcmDVAZFRERERETyIJVBERERERGRPEhlUEREREREJA9SGRQREREREcmDVAZFRERERETyIJVBERERERGRPEhlUERERERE5AqOHTtGz549KVu2LFWqVKFt27bs2LHD0bGum8qgiIiIiIjIZVhr6dKlC+Hh4ezevZstW7YwadIkoqKirmufGRkZNzDltVEZFBERERERuYwVK1bg6urKfffdd35ZzZo1adSoEY888ghVq1alWrVqzJ8/H4C4uDiaN29O7dq1qVatGp9//jkA+/bto3LlygwfPpzatWtz8OBBBgwYcH771157DYDdu3fTunVr6tSpQ+PGjdm2bdtNOzeXm7ZnERERERGRG+SZL/9iy5EzN3SfVYp681SHkCuuExkZSZ06df6xfNGiRWzYsIGNGzcSExND3bp1adKkCYULF2bx4sV4e3sTExND/fr16dixIwDbt29n+vTpTJ06lYiICA4fPkxkZCQAp0+fBmDo0KG8++67lC9fnjVr1jB8+HB+/PHHG3re56gMioiIiIiIXKVffvmFXr164ezsTGBgILfffjtr166lTZs2jB8/nlWrVuHk5MThw4fPX1IaHBxM/fr1AShTpgx79uxh5MiRtGvXjpYtWxIXF8dvv/3GXXfddf44ycnJN+0cVAZFRERERCTb+7cRvJslJCSEhQsX/mO5tfaS68+ZM4fo6GgiIiJwdXWlVKlSJCUlAZA/f/7z6/n6+rJx40a+++473nnnHRYsWMDrr79OwYIF2bBhw805mYvonkEREREREZHLaNasGcnJybz//vvnl61duxZfX1/mz59Peno60dHRrFq1irCwMGJjYwkICMDV1ZUVK1awf//+S+43JiaGjIwMunbtynPPPceff/6Jt7c3pUuX5tNPPwUyC+fGjRtv2rlpZFBEREREROQyjDEsXryYBx54gBdeeAEPDw9KlSrF66+/TlxcHDVq1MAYw5QpUwgKCqJPnz506NCB0NBQatasSaVKlS6538OHDzNw4MDzs4pOnjwZyBxZHDZsGBMnTiQ1NZWePXtS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\n", 372 | "text/plain": [ 373 | "
" 374 | ] 375 | }, 376 | "metadata": { 377 | "needs_background": "light" 378 | }, 379 | "output_type": "display_data" 380 | } 381 | ], 382 | "source": [ 383 | "pyplot.figure(figsize=(15,9))\n", 384 | "pyplot.plot(df1['x'],df1['Diameter11 at Diameter11'] ,label=\"Coarse\" )\n", 385 | "pyplot.plot(df2['x'],df2['Diameter11 at Diameter11'] ,label=\"Medium\" )\n", 386 | "pyplot.plot(df3['x'],df3['Diameter11 at Diameter11'] ,label=\"Fine\" )\n", 387 | "pyplot.plot(r1,analytic_Sol, label = 'Analytic',color='black',linestyle=':')\n", 388 | "pyplot.xlabel('\\n Pipe Diameter Location [m] \\n')\n", 389 | "pyplot.ylabel('Velocity [m/s] \\n')\n", 390 | "pyplot.title('ANSYS \\n Velocity Profile at z = 0.11[m]')\n", 391 | "pyplot.legend(loc=\"upper right\");\n", 392 | "pyplot.legend(loc=\"upper right\", frameon = False);\n", 393 | "pyplot.savefig('Vel_Mesh16-32-64_ANSYS.png',dpi =1000)" 394 | ] 395 | }, 396 | { 397 | "cell_type": "markdown", 398 | "metadata": {}, 399 | "source": [ 400 | "----" 401 | ] 402 | }, 403 | { 404 | "cell_type": "markdown", 405 | "metadata": {}, 406 | "source": [ 407 | "# ANSYS - Plane Data " 408 | ] 409 | }, 410 | { 411 | "cell_type": "code", 412 | "execution_count": 10, 413 | "metadata": {}, 414 | "outputs": [ 415 | { 416 | "name": "stdout", 417 | "output_type": "stream", 418 | "text": [ 419 | "C:\\Users\\Paulina\\Desktop\\PausWorld\\Analysis_ANSYS\\Analysis_Meshes-3_Pipeflow_ANSYS\\data\\Plane_11\n" 420 | ] 421 | } 422 | ], 423 | "source": [ 424 | "cd ..\\Plane_11" 425 | ] 426 | }, 427 | { 428 | "cell_type": "code", 429 | "execution_count": 11, 430 | "metadata": { 431 | "scrolled": true 432 | }, 433 | "outputs": [], 434 | "source": [ 435 | "Vel,label, x_loc, y_loc, z_loc, area = [], [], [], [], [], []\n", 436 | "# Collect & Clean All data\n", 437 | "Vel,label, x_loc, y_loc, z_loc, area = dataCleanPlane()" 438 | ] 439 | }, 440 | { 441 | "cell_type": "code", 442 | "execution_count": 12, 443 | "metadata": {}, 444 | "outputs": [ 445 | { 446 | "name": "stdout", 447 | "output_type": "stream", 448 | "text": [ 449 | " l2_norm_16 = 1.427405027665904e-05 \n", 450 | " l2_norm_32 = 5.0785806969720265e-06 \n", 451 | " l2_norm_64 = 1.6882401183998343e-06\n" 452 | ] 453 | } 454 | ], 455 | "source": [ 456 | "# Calculate L2 Norm\n", 457 | "l2_norm_16, analytic_solution_16,diff_16 = l2_norm_calc(x_loc[1], y_loc[1], Vel[1], area[1])\n", 458 | "l2_norm_32, analytic_solution_32,diff_32 = l2_norm_calc(x_loc[3], y_loc[3], Vel[3], area[3])\n", 459 | "l2_norm_64, analytic_solution_64,diff_64 = l2_norm_calc(x_loc[5], y_loc[5], Vel[5], area[5])\n", 460 | "print(' l2_norm_16 =',l2_norm_16,'\\n','l2_norm_32 =',l2_norm_32,'\\n','l2_norm_64 =',l2_norm_64)" 461 | ] 462 | }, 463 | { 464 | "cell_type": "code", 465 | "execution_count": 12, 466 | "metadata": {}, 467 | "outputs": [ 468 | { 469 | "data": { 470 | "text/plain": [ 471 | "float" 472 | ] 473 | }, 474 | "execution_count": 12, 475 | "metadata": {}, 476 | "output_type": "execute_result" 477 | } 478 | ], 479 | "source": [ 480 | "type(x_loc[1][0])" 481 | ] 482 | }, 483 | { 484 | "cell_type": "code", 485 | "execution_count": 13, 486 | "metadata": {}, 487 | "outputs": [], 488 | "source": [ 489 | "#Data Frames for each mesh: Coarse(16),Med(32),Fine(64)\n", 490 | "headings = ['x','y','Error']\n", 491 | "\n", 492 | "#transient_16_1s_0.0005_Diameters\n", 493 | "table16 = [x_loc[1],y_loc[1],diff_16]\n", 494 | "df16 = pd.DataFrame(table16)\n", 495 | "df16 = df16.transpose()\n", 496 | "df16.columns = headings\n", 497 | "\n", 498 | "#transient_32_1s_0.0005_Diameters\n", 499 | "table32 = [x_loc[3],y_loc[3],diff_32]\n", 500 | "df32 = pd.DataFrame(table32)\n", 501 | "df32 = df32.transpose()\n", 502 | "df32.columns = headings\n", 503 | "\n", 504 | "#transient_64_1s_0.0005_Diameters\n", 505 | "table64 = [x_loc[5],y_loc[5],diff_64]\n", 506 | "df64 = pd.DataFrame(table64)\n", 507 | "df64 = df64.transpose()\n", 508 | "df64.columns = headings" 509 | ] 510 | }, 511 | { 512 | "cell_type": "markdown", 513 | "metadata": {}, 514 | "source": [ 515 | "## LogLog of Errors" 516 | ] 517 | }, 518 | { 519 | "cell_type": "code", 520 | "execution_count": 14, 521 | "metadata": {}, 522 | "outputs": [], 523 | "source": [ 524 | "Error_Openfoam = np.array([9.421e-05,2.721e-05,1.129e-05])\n", 525 | "Error_Ansys = np.array([l2_norm_16,l2_norm_32,l2_norm_64])\n", 526 | "mesh_elem = np.array([16,32,64]) # or [32040,78840,630720]" 527 | ] 528 | }, 529 | { 530 | "cell_type": "code", 531 | "execution_count": 15, 532 | "metadata": {}, 533 | "outputs": [ 534 | { 535 | "data": { 536 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAFPCAYAAABTW4kXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd3gU5drH8e+z6ZCQUBOS0HtLkVCUFkQFkZJjQcTeFSv2dqzHczw2RMXXY0UPAqJCAMFGE/VYaAFCRxBJgoCoQJASkuf9YwImIQkBkt3N7u9zXXvhzs7O3M+AuTNzz3OPsdYiIiJSFpenAxAREe+mRCEiIuVSohARkXIpUYiISLmUKEREpFxKFCIiUi4lChERKZcShcgJMsb8ZIzZZ4zJLfJ62dNxiVS2QE8HIFLNDbbWzi5vBWNMoLX20LGWHe82RNxFZxQilcwYc4Ux5htjzGhjzG/Ao2UscxljHjLGbDbGbDfGvGuMiSzcRlNjjDXGXG2M+RmY69FBiV9TohCpGt2AjUAD4Mkyll1R+OoLNAfCgZKXrvoA7YD+VR2wSFmMej2JnBhjzE9APaDoJaG7gTzgcWtt4yLrXlHKsjnAR9baVwrftwEygTAgHtgEtLDWbqzakYiUT2cUIicnzVobVeT1euHyLaWsW3JZLLC5yPvNOHXD6HK+I+J2ShQiVaO0U/WSy3KAJkXeN8Y5O9l2jO2IuJUShYjnTARGGWOaGWPCgX8C7+vuJvE2uj1W5OTMMMbkF3n/BTCtgt99C+fy0wIgFPgMuKVywxM5eSpmi4hIuXTpSUREyqVEISIi5VKiEBGRcilRiIhIuZQoRESkXD55e2y9evVs06ZNPR2Gx+zdu5eaNWt6Ogyf5s/H2BfG7u1j8FR8ixcv/tVaW7/kcp9MFE2bNmXRokWeDsNj5s+fT2pqqqfD8Gn+fIx9YezePgZPxWeM2Vzacl16EhGRcilRiIhIuZQoRESkXNWiRmGMqYnTD+cRa+3Hno5HRCpfXl4eWVlZ7N+/v8r3FRkZyerVq6t8PyeqquMLDQ0lPj6eoKCgCq1fpYnCGPMWMAjYbq3tWGT5AGAMEAC8Ya196hibuheYXGWBiojHZWVlERERQdOmTTHGVOm+9uzZQ0RERJXu42RUZXzWWnbu3ElWVhbNmjWr0Heq+oxiHM6jHd89vMAYEwCMBc4EsoCFxpjpOEnjXyW+fxWQAKzC6a4pIj5q//79bkkS/s4YQ926ddmxY0eFv1OlicJau8AY07TE4q7AhsOPdzTGTAKGWmv/hXP2UYwxpi9QE2gP7DPGzLLWFpSy3nXAdQDR0dHMnz+/EkdSveTm5vr1+N3Bn49xVY09MjKS3NzcSt9uafLz89mzZ49b9nUi3BHf/v37K/73aK2t0hfQFMgs8v58nMtNh99fCrxcge1cAQyqyD47d+5sj9fUJVn2tH/NsU3v/die9q85duqSrOPehreYN2+ep0Pwef58jKtq7KtWraqS7ZZm9+7dZX62ZcsWO2TIENuyZUvbvHlze+utt9oDBw5U6v4feeQRGxsbaxMTE21iYqK99957rbXWHjhwwN522222adOmtmXLlnbIkCF2y5Ytxb47ZcoUC9jVq1cfWbZp0yYL2IceeujIsh07dtjAwEB70003lRpDaccbWGRL+ZnqibueSjuvPOZDMay142wVFbLTl2Zz/5QVZP+xDwtk/7GP+6esIH1pdlXsTkQqQfrSbHo8NZdm982kx1NzK+X/V2st5557Lmlpaaxfv55169aRm5vLgw8+WAkRFzdq1CgyMjLIyMjgqaecMu0DDzzAnj17WLp0KevXryctLY1zzz338C/LAEycOJGePXsyadKkYttr3rw5H3/814/IDz74gA4dOlRKrJ5IFFlAoyLv43GeHewxz3y2ln15+cWW7cvL55nP1nooIhEpT1X9cjd37lxCQ0O58sorAQgICGD06NG89dZbvPLKKwwdOpQBAwbQpk0bHnvssSPfGz9+PF27diUpKYnrr7+e/Hzn50l4eDgPPvggiYmJdO/enW3btpW6X4A///yTt99+m9GjRxMQEADAlVdeSUhICHPnzgWcy37ffPMNb7755lGJIiwsjHbt2h3pSvH+++8zbNiwkzoeh3ni9tiFQCtjTDMgGxgOjPBAHEfk/LHvuJaLSNV6bMZKVuXsLvPzpT//wcH84qXKfXn53PPhcib+8HOp32kfW4tHBpf/G/bKlSvp3LlzsWW1atWicePGHDp0iB9++IHMzExq1KhBly5dOOecc6hZsybvv/8+33zzDUFBQYwcOZL33nuPyy67jL1799K9e3eefPJJ7rnnHl5//XUeeughAEaPHs348eMB+Pe//03Dhg1p3Lgx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\n", 537 | "text/plain": [ 538 | "
" 539 | ] 540 | }, 541 | "metadata": { 542 | "needs_background": "light" 543 | }, 544 | "output_type": "display_data" 545 | } 546 | ], 547 | "source": [ 548 | "pyplot.figure(figsize=[6,5])\n", 549 | "pyplot.title('Error')\n", 550 | "pyplot.xlabel('Mesh Elements')\n", 551 | "pyplot.ylabel('L2 Norm')\n", 552 | "pyplot.loglog(mesh_elem,Error_Openfoam,'-o', label = 'OpenFOAM')\n", 553 | "pyplot.loglog(mesh_elem,Error_Ansys,'-o', label = 'ANSYS')\n", 554 | "pyplot.legend()\n", 555 | "pyplot.grid(True, which=\"both\", ls=\"-\")" 556 | ] 557 | }, 558 | { 559 | "cell_type": "code", 560 | "execution_count": null, 561 | "metadata": {}, 562 | "outputs": [], 563 | "source": [] 564 | }, 565 | { 566 | "cell_type": "code", 567 | "execution_count": null, 568 | "metadata": {}, 569 | "outputs": [], 570 | "source": [] 571 | } 572 | ], 573 | "metadata": { 574 | "kernelspec": { 575 | "display_name": "Python 3", 576 | "language": "python", 577 | "name": "python3" 578 | }, 579 | "language_info": { 580 | "codemirror_mode": { 581 | "name": "ipython", 582 | "version": 3 583 | }, 584 | "file_extension": ".py", 585 | "mimetype": "text/x-python", 586 | "name": "python", 587 | "nbconvert_exporter": "python", 588 | "pygments_lexer": "ipython3", 589 | "version": "3.9.7" 590 | } 591 | }, 592 | "nbformat": 4, 593 | "nbformat_minor": 2 594 | } 595 | --------------------------------------------------------------------------------