├── LICENSE ├── README.md ├── SoilTestPlot.ipynb ├── Some_examples ├── MC and HSS │ ├── TRX - LinkedIn Post.gif │ ├── TRX CIDC - HSS model.gif │ ├── TRX CIDC - MC model.gif │ ├── TRX CIUC - HSS model.gif │ └── TRX CIUC - MC model.gif └── Undergraduate │ ├── Triaxial drenado - Arcilla NC.gif │ ├── Triaxial drenado - Arcilla OC.gif │ ├── Triaxial drenado - Arena densa.gif │ ├── Triaxial drenado - Arena suelta.gif │ ├── Triaxial no drenado - Arcilla NC.gif │ ├── Triaxial no drenado - Arcilla OC .gif │ ├── Triaxial no drenado - Arena densa.gif │ └── Triaxial no drenado - Arena suelta.gif └── info ├── HowToConnect.png ├── LogoSRK.jpeg ├── Version.gif ├── logofiuba.png ├── logos.png └── logos2.png /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Nicolás Tasso 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SoilTestPlot 2 | 3 | ## Note 4 | This project is currently under construction and will be completed in the coming days. Please check back soon for updates. If you have any questions or concerns, please feel free to contact me at ntasso@fi.uba.ar. Thank you for your patience and understanding. 5 | 6 | ## GIFs in Some_examples/Undergraduate folder 7 | 8 | The files located in the "undergraduate" folder are intended to provide undergraduate students with an illustration of stress paths for different soil types. The GIFs were created using different models, including OCclay, NorSand, and HS-Small. Please note that the Mohr-Coulomb failure envelope shown in the GIFs is not an accurate representation of the yield surface of the models, but rather a simplified schematic representation for instructional purposes only. 9 | 10 | We hope that these files will be helpful for students who are learning about soil mechanics and stress paths. If you have any questions or comments, please feel free to contact us. 11 | -------------------------------------------------------------------------------- /SoilTestPlot.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# SoilTest Plot" 8 | ] 9 | }, 10 | { 11 | "attachments": {}, 12 | "cell_type": "markdown", 13 | "metadata": {}, 14 | "source": [ 15 | "
\n", 16 | "
\n", 17 | "\n", 18 | "Coded by
\n", 19 | "
\n", 20 | "\n", 22 | "\n", 23 | "
\n", 24 | "Usage
\n", 25 | "
\n", 26 | "
\n", 29 | "
\n", 30 | "Input
\n", 31 | "
\n", 32 | "
\n", 35 | "
\n", 36 | "Output
\n", 37 | "
\n", 38 | "\n", 41 | "
\n", 42 | "
" 43 | ] 44 | }, 45 | { 46 | "attachments": {}, 47 | "cell_type": "markdown", 48 | "id": "17e24958", 49 | "metadata": {}, 50 | "source": [ 51 | "
ⓘ #1 Before using the code: This code uses FFmpeg software to create GIFs. Please download it from official page: https://ffmpeg.org/about.html
" 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "## Libraries " 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 1, 64 | "metadata": {}, 65 | "outputs": [], 66 | "source": [ 67 | "import numpy as np\n", 68 | "import matplotlib.pyplot as plt\n", 69 | "import pandas as pd\n", 70 | "from tqdm.notebook import tnrange # Write \"pip install tdqm\" in anaconda prompt - https://pypi.org/project/tqdm/\n", 71 | "from celluloid import Camera # Write \"pip install celluloid\" in anaconda prompt - https://pypi.org/project/celluloid/\n", 72 | "import matplotlib.animation as animation\n", 73 | "import matplotlib.cbook as cbook\n", 74 | "import matplotlib.image as image" 75 | ] 76 | }, 77 | { 78 | "cell_type": "markdown", 79 | "metadata": {}, 80 | "source": [ 81 | "## Plaxis lines" 82 | ] 83 | }, 84 | { 85 | "attachments": {}, 86 | "cell_type": "markdown", 87 | "id": "a85d8d67", 88 | "metadata": {}, 89 | "source": [ 90 | "Configure the remote scripting server of SoilTest software" 91 | ] 92 | }, 93 | { 94 | "attachments": {}, 95 | "cell_type": "markdown", 96 | "id": "3c4ef280", 97 | "metadata": {}, 98 | "source": [ 99 | "" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": 2, 105 | "metadata": {}, 106 | "outputs": [], 107 | "source": [ 108 | "from plxscripting.easy import *\n", 109 | "localhostport_input = 10000\n", 110 | "s_s, g_s = new_server('localhost', localhostport_input, password='')" 111 | ] 112 | }, 113 | { 114 | "cell_type": "markdown", 115 | "metadata": {}, 116 | "source": [ 117 | "## Material parameters" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 28, 123 | "metadata": {}, 124 | "outputs": [], 125 | "source": [ 126 | "E50_ref = 3400 # Secant stiffness at 50% failure in standard drained triaxial test [kPa]\n", 127 | "Eoed_ref = 9000 # Tangent stiffness for primary oedometer loading [kPa]\n", 128 | "Eur_ref = 60000 # Unloading/reloading stiffness from drained triaxial test [kPa]\n", 129 | "nu = 0.30 # Poisson's ratio for unloading/loading [-]\n", 130 | "m = 0.80 # Power of stress-level dependency of stiffness [-]\n", 131 | "p_ref = 100 # Reference stress for stiffness [kPa]\n", 132 | "G0_ref = 50000 # Reference shear modulus at very small strains (<10E-06) [kPa]\n", 133 | "gamma_07 = 0.0001 # Threshold shear strain at which Gs = 0.722 * G0 [-]\n", 134 | "c_ref = 0 # Effective cohesion [kPa]\n", 135 | "phi = 30 # Effective angle of internal friction [deg]\n", 136 | "psi = 0 # Angle of dilatancy [deg]" 137 | ] 138 | }, 139 | { 140 | "attachments": {}, 141 | "cell_type": "markdown", 142 | "id": "00447c30", 143 | "metadata": {}, 144 | "source": [ 145 | "# Test configuration" 146 | ] 147 | }, 148 | { 149 | "cell_type": "code", 150 | "execution_count": 17, 151 | "id": "8f49f916", 152 | "metadata": {}, 153 | "outputs": [], 154 | "source": [ 155 | "cellpressure = 100 # cell pressure [kPa]\n", 156 | "behaviour = 'undrained' # drained | undrained\n", 157 | "direction = 'compression' # compression | extension\n", 158 | "emax = 5 # Maximum strain eyy\n", 159 | "steps = 500 # Number of steps" 160 | ] 161 | }, 162 | { 163 | "cell_type": "markdown", 164 | "metadata": {}, 165 | "source": [ 166 | "## Functions" 167 | ] 168 | }, 169 | { 170 | "cell_type": "markdown", 171 | "metadata": {}, 172 | "source": [ 173 | "### Yield surfaces in deviatoric plot" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": 3, 179 | "metadata": {}, 180 | "outputs": [], 181 | "source": [ 182 | "# Calculate corner points in MC failure surface\n", 183 | "def supfalla(p,phi,c):\n", 184 | " sigma1lim=np.array([(c*np.cos(phi)-3*p*(np.sin(phi)/2-0.5))/(3/2-np.sin(phi)/2),\n", 185 | " 3*p/2-1/2*((c*np.cos(phi)-3*p/2*(np.sin(phi)/2-0.5))/(3/4+np.sin(phi)/4)),\n", 186 | " 3*p-2*((c*np.cos(phi)-3*p*(np.sin(phi)/2-0.5))/(3/2-np.sin(phi)/2)),\n", 187 | " 3*p/2-1/2*((c*np.cos(phi)-3*p/2*(np.sin(phi)/2-0.5))/(3/4+np.sin(phi)/4)), \n", 188 | " (c*np.cos(phi)-3*p*(np.sin(phi)/2-0.5))/(3/2-np.sin(phi)/2),\n", 189 | " (c*np.cos(phi)-3*p/2*(np.sin(phi)/2-0.5))/(3/4+np.sin(phi)/4),\n", 190 | " \n", 191 | " (c*np.cos(phi)-3*p*(np.sin(phi)/2-0.5))/(3/2-np.sin(phi)/2),])\n", 192 | " \n", 193 | " sigma2lim=np.array([(c*np.cos(phi)-3*p*(np.sin(phi)/2-0.5))/(3/2-np.sin(phi)/2),\n", 194 | " (c*np.cos(phi)-3*p/2*(np.sin(phi)/2-0.5))/(3/4+np.sin(phi)/4),\n", 195 | " (c*np.cos(phi)-3*p*(np.sin(phi)/2-0.5))/(3/2-np.sin(phi)/2),\n", 196 | " 3*p/2-1/2*((c*np.cos(phi)-3*p/2*(np.sin(phi)/2-0.5))/(3/4+np.sin(phi)/4)), \n", 197 | " 3*p-2*((c*np.cos(phi)-3*p*(np.sin(phi)/2-0.5))/(3/2-np.sin(phi)/2)),\n", 198 | " 3*p/2-1/2*((c*np.cos(phi)-3*p/2*(np.sin(phi)/2-0.5))/(3/4+np.sin(phi)/4)),\n", 199 | " \n", 200 | " \n", 201 | " (c*np.cos(phi)-3*p*(np.sin(phi)/2-0.5))/(3/2-np.sin(phi)/2),])\n", 202 | " \n", 203 | " sigma3lim=np.array([3*p-2*((c*np.cos(phi)-3*p*(np.sin(phi)/2-0.5))/(3/2-np.sin(phi)/2)),\n", 204 | " 3*p/2-1/2*((c*np.cos(phi)-3*p/2*(np.sin(phi)/2-0.5))/(3/4+np.sin(phi)/4)),\n", 205 | " (c*np.cos(phi)-3*p*(np.sin(phi)/2-0.5))/(3/2-np.sin(phi)/2),\n", 206 | " (c*np.cos(phi)-3*p/2*(np.sin(phi)/2-0.5))/(3/4+np.sin(phi)/4),\n", 207 | " (c*np.cos(phi)-3*p*(np.sin(phi)/2-0.5))/(3/2-np.sin(phi)/2),\n", 208 | " 3*p/2-1/2*((c*np.cos(phi)-3*p/2*(np.sin(phi)/2-0.5))/(3/4+np.sin(phi)/4)),\n", 209 | " 3*p-2*((c*np.cos(phi)-3*p*(np.sin(phi)/2-0.5))/(3/2-np.sin(phi)/2)),])\n", 210 | " \n", 211 | " xlim, ylim = deviatoriccoords(sigma1lim,sigma2lim,sigma3lim)\n", 212 | " return xlim, ylim\n", 213 | "\n", 214 | "# Change of coordinates to deviatoric plane\n", 215 | "def deviatoriccoords(sigma1,sigma2,sigma3):\n", 216 | " x = (sigma3-sigma2)*(1/np.sqrt(2))\n", 217 | " y = (1/np.sqrt(6))*(sigma1*2 -sigma3-sigma2)\n", 218 | " return x,y" 219 | ] 220 | }, 221 | { 222 | "cell_type": "markdown", 223 | "metadata": { 224 | "heading_collapsed": true 225 | }, 226 | "source": [ 227 | "## Triaxial" 228 | ] 229 | }, 230 | { 231 | "cell_type": "markdown", 232 | "metadata": { 233 | "hidden": true 234 | }, 235 | "source": [ 236 | "### SoilTest lines" 237 | ] 238 | }, 239 | { 240 | "attachments": {}, 241 | "cell_type": "markdown", 242 | "id": "a2249f02", 243 | "metadata": {}, 244 | "source": [ 245 | "Change soil parameters (only if HSS is used). If another model is used, this parameters can be changed manually" 246 | ] 247 | }, 248 | { 249 | "cell_type": "code", 250 | "execution_count": null, 251 | "id": "c63e7787", 252 | "metadata": {}, 253 | "outputs": [], 254 | "source": [ 255 | "g_s.Triaxial.CellPressure = cellpressure\n", 256 | "g_s.Triaxial.MaximumStrain = emax\n", 257 | "g_s.Triaxial.Steps = steps\n", 258 | "g_s.Triaxial.Behaviour = behaviour\n", 259 | "g_s.Triaxial.Direction = 'Compression'\n", 260 | "g_s.Triaxial.Consolidation = 'Isotropic'\n", 261 | "\n", 262 | "g_s.Material.E50Ref = E50_ref \n", 263 | "g_s.Material.EOedRef = Eoed_ref\n", 264 | "g_s.Material.EURRef = Eur_ref\n", 265 | "g_s.Material.nuUR = nu\n", 266 | "g_s.Material.powerM = m\n", 267 | "g_s.Material.pRef = p_ref\n", 268 | "g_s.Material.G0Ref = G0_ref\n", 269 | "g_s.Material.gamma07 = gamma_07\n", 270 | "g_s.Material.cRef = c_ref\n", 271 | "g_s.Material.phi = phi\n", 272 | "g_s.Material.psi = psi\n" 273 | ] 274 | }, 275 | { 276 | "attachments": {}, 277 | "cell_type": "markdown", 278 | "id": "374d54dc", 279 | "metadata": {}, 280 | "source": [ 281 | "Calculate and extract data" 282 | ] 283 | }, 284 | { 285 | "cell_type": "code", 286 | "execution_count": 4, 287 | "id": "756edd0c", 288 | "metadata": {}, 289 | "outputs": [], 290 | "source": [ 291 | "\n", 292 | "g_s.calculate(g_s.Triaxial)\n", 293 | "\n", 294 | "DATA = pd.DataFrame()\n", 295 | "DATA['MeanEffStress'] = g_s.Triaxial.Results.MeanEffStress\n", 296 | "DATA['SigmaEffective1'] = g_s.Triaxial.Results.SigmaEffective1\n", 297 | "DATA['SigmaEffective2'] = g_s.Triaxial.Results.SigmaEffective2\n", 298 | "DATA['SigmaEffective3'] = g_s.Triaxial.Results.SigmaEffective3\n", 299 | "DATA['DeviatoricStress'] = g_s.Triaxial.Results.DeviatoricStress\n", 300 | "DATA['Epsxx'] = g_s.Triaxial.Results.Epsxx\n", 301 | "DATA['PExcess'] = g_s.Triaxial.Results.PExcess\n", 302 | "DATA['TotalVolumetricStrain'] = g_s.Triaxial.Results.TotalVolumetricStrain\n", 303 | "\n", 304 | "\n", 305 | "DATA['MeanEffStress'] = DATA['MeanEffStress']*-1\n", 306 | "DATA['SigmaEffective1'] = DATA['SigmaEffective1']*-1\n", 307 | "DATA['SigmaEffective2'] = DATA['SigmaEffective2']*-1\n", 308 | "DATA['SigmaEffective3'] = DATA['SigmaEffective3']*-1\n", 309 | "DATA['DeviatoricStress'] = DATA['DeviatoricStress']*1\n", 310 | "DATA['PExcess'] = DATA['PExcess']*-1" 311 | ] 312 | }, 313 | { 314 | "cell_type": "markdown", 315 | "metadata": { 316 | "hidden": true 317 | }, 318 | "source": [ 319 | "### GIF" 320 | ] 321 | }, 322 | { 323 | "cell_type": "code", 324 | "execution_count": 32, 325 | "metadata": { 326 | "hidden": true 327 | }, 328 | "outputs": [ 329 | { 330 | "data": { 331 | "application/vnd.jupyter.widget-view+json": { 332 | "model_id": "4fbc309e408740f6aa85455b5544ea68", 333 | "version_major": 2, 334 | "version_minor": 0 335 | }, 336 | "text/plain": [ 337 | " 0%| | 0/101 [00:00" 356 | ] 357 | }, 358 | "metadata": {}, 359 | "output_type": "display_data" 360 | } 361 | ], 362 | "source": [ 363 | "\n", 364 | "fig = plt.figure(figsize=(3.25*2*2,2.5*2*2))\n", 365 | "fig.patch.set_facecolor('xkcd:white')\n", 366 | "\n", 367 | "# Create four subplots\n", 368 | "ax1 = fig.add_subplot(223) # 3D plot\n", 369 | "ax2 = fig.add_subplot(221) # q-p plot\n", 370 | "ax3 = fig.add_subplot(222) # q-e plot\n", 371 | "ax4 = fig.add_subplot(224) # Mohr-Coulomb circles\n", 372 | "\n", 373 | "\n", 374 | "\n", 375 | "# initialize some variables\n", 376 | "camera = Camera(fig)\n", 377 | "xline=[]\n", 378 | "yline=[]\n", 379 | "pexcessline = []\n", 380 | "pline = []\n", 381 | "epsline = []\n", 382 | "qline= []\n", 383 | "xfacum=[]\n", 384 | "yfacum=[]\n", 385 | "mohrpacks = []\n", 386 | "mohrpackt = []\n", 387 | "\n", 388 | "# Select maximum values in deviatoric coords\n", 389 | "xs1, ys1 = deviatoriccoords(max(DATA['SigmaEffective1']*1.01),0,0)\n", 390 | "xs2, ys2 = deviatoriccoords(0,max(DATA['SigmaEffective1']*1.01),0)\n", 391 | "xs3, ys3 = deviatoriccoords(0,0,max(DATA['SigmaEffective1']*1.01))\n", 392 | "\n", 393 | "# Define limits of plots according to data\n", 394 | "ax1.axis([xs2*0.84*1.5,xs3*0.84*1.5,min(ys2,ys3)*1*1.5,ys1*0.84*1.5])\n", 395 | "ax1.axis('off')\n", 396 | "ax1.margins(0)\n", 397 | "ax2.axis([0,max(max(DATA['MeanEffStress']*1.01),max(DATA['DeviatoricStress']*1.01)),0,max(max(DATA['MeanEffStress']*1.01),max(DATA['DeviatoricStress']*1.01))])\n", 398 | "ax3.axis([0,max(DATA['Epsxx']*101),0,max(DATA['DeviatoricStress']*1.01)])\n", 399 | "ax4.axis('equal')\n", 400 | "ax4.set(xlim=(0,max(DATA['SigmaEffective1']*1.1)),ylim=(0,max(DATA['SigmaEffective1'])*0.8))\n", 401 | "\n", 402 | "\n", 403 | "# Watermark. Please do not delete!\n", 404 | "im = image.imread('info/logos.png')\n", 405 | "fig.figimage(im, 0, 0, zorder=10)\n", 406 | "\n", 407 | "# Take a 'picture' for every step in this for loop\n", 408 | "for i in tnrange(len(DATA['MeanEffStress'])):\n", 409 | " \n", 410 | " # ----------------------------------\n", 411 | " # AX1 : 3D Plot\n", 412 | " # ----------------------------------\n", 413 | " # Names of axis\n", 414 | " ax1.text((xs3-xs2)*0.04,ys1*0.8,'\\u03C3₁')\n", 415 | " ax1.text(xs3-(xs3-xs2)*0.15,min(ys2,ys3),'\\u03C3₃')\n", 416 | " ax1.text(xs2+(xs3-xs2)*0.1025,min(ys2,ys3),'\\u03C3₂')\n", 417 | " \n", 418 | " # Principal axis\n", 419 | " ax1.arrow(0,0,xs3*0.8,ys3*0.8,head_width=(-ys3/20),edgecolor='k',facecolor='k',zorder=20)\n", 420 | " ax1.arrow(0,0,xs2*0.8,ys2*0.8,head_width=(-ys3/20),edgecolor='k',facecolor='k',zorder=20)\n", 421 | " ax1.arrow(0,0,xs1*0.8,ys1*0.8,head_width=(-ys3/20),edgecolor='k',facecolor='k',zorder=20)\n", 422 | " \n", 423 | " # point and its stress path\n", 424 | " xspot,yspot = deviatoriccoords(DATA['SigmaEffective1'][i],DATA['SigmaEffective2'][i],DATA['SigmaEffective3'][i])\n", 425 | " xline = np.append(xline,xspot)\n", 426 | " yline = np.append(yline,yspot)\n", 427 | " ax1.plot(xline,yline, color='pink',zorder=120)\n", 428 | " ax1.scatter(xspot,yspot,color='r',zorder=130)\n", 429 | "\n", 430 | " # Failure surface and previous ones\n", 431 | " xf, yf = supfalla(DATA['MeanEffStress'][i],np.radians(phi),c_ref)\n", 432 | " ax1.plot(xf,yf,color='k', zorder=10)\n", 433 | " xfacum = np.append(xfacum,xf)\n", 434 | " yfacum = np.append(yfacum,yf)\n", 435 | " ax1.plot(xfacum,yfacum, color='gainsboro')\n", 436 | "\n", 437 | " # Mean effective stress text\n", 438 | " ax1.text(xs2+(xs3-xs2)*0.08,ys1*0.8,'p\\'= '+str(np.round(DATA['MeanEffStress'][i],decimals=1))+' kPa')\n", 439 | "\n", 440 | " # ----------------------------------\n", 441 | " # AX2 : q-p Plot\n", 442 | " # ----------------------------------\n", 443 | "\n", 444 | " # Calculates Mtc\n", 445 | " Mtc = 6*np.sin(np.radians(phi))/(3-np.sin(np.radians(phi)))\n", 446 | "\n", 447 | " # Plot CSL line\n", 448 | " ax2.plot([0,max(DATA['MeanEffStress']*1.01)],[0,max(DATA['MeanEffStress'])*1.01*Mtc], color='k')\n", 449 | "\n", 450 | " # Plot data\n", 451 | " ppoint = DATA['MeanEffStress'][i]\n", 452 | " qpoint = DATA['DeviatoricStress'][i]\n", 453 | " pline= np.append(pline,ppoint)\n", 454 | " qline = np.append(qline,qpoint)\n", 455 | " ax2.plot(pline,qline, color='pink',zorder=120)\n", 456 | " ax2.scatter(ppoint,qpoint,color='r',zorder=130)\n", 457 | "\n", 458 | " # fancy settings\n", 459 | " ax2.set_xlabel('Mean effective stress, p\\' [kPa]')\n", 460 | " ax2.set_ylabel('Deviatoric stress, q [kPa]')\n", 461 | " ax2.grid(color='whitesmoke')\n", 462 | "\n", 463 | " \n", 464 | " # ----------------------------------\n", 465 | " # AX2 : q-e Plot\n", 466 | " # ----------------------------------\n", 467 | "\n", 468 | " epspoint = DATA['Epsxx'][i]*100\n", 469 | " epsline= np.append(epsline,epspoint)\n", 470 | " ax3.plot(epsline,qline, color='pink',zorder=120)\n", 471 | "\n", 472 | " # fancy settings\n", 473 | " ax3.set_xlabel('Axial strain, \\u03B5ₐ [%]')\n", 474 | " ax3.set_ylabel('Deviatoric stress, q [kPa]')\n", 475 | " ax3.grid(color='whitesmoke')\n", 476 | " ax3.scatter(epspoint,qpoint,color='r',zorder=130)\n", 477 | "\n", 478 | " # ----------------------------------\n", 479 | " # AX2 : Mohr circles\n", 480 | " # ----------------------------------\n", 481 | "\n", 482 | " # Radio and midpoint of circle\n", 483 | " radio = (DATA['SigmaEffective1'][i]-DATA['SigmaEffective3'][i])/2\n", 484 | " midpoint = (DATA['SigmaEffective1'][i]+DATA['SigmaEffective3'][i])/2\n", 485 | "\n", 486 | " # Mohr circles data\n", 487 | " mohrs = np.append(np.linspace(DATA['SigmaEffective1'][i],DATA['SigmaEffective3'][i],100),DATA['SigmaEffective3'].values[i])\n", 488 | " mohrt = np.sqrt(radio**2-(mohrs-midpoint)**2+0.00000000001)\n", 489 | "\n", 490 | " # Plot previous Mohr circles\n", 491 | " ax4.plot(mohrpacks,mohrpackt, color='pink',zorder=120, alpha=0.5)\n", 492 | "\n", 493 | " # Plot actual Mohr circle\n", 494 | " ax4.plot(mohrs,mohrt,color='r',zorder=130) \n", 495 | "\n", 496 | " # Update Mohr circles packs \n", 497 | " mohrpacks = np.append(mohrpacks,mohrs)\n", 498 | " mohrpackt = np.append(mohrpackt,mohrt)\n", 499 | "\n", 500 | " # Plot MC surface\n", 501 | " ax4.plot([0,10000],[0,10000*np.tan(np.radians(phi))], color='k', linewidth=2, zorder=125)\n", 502 | "\n", 503 | " # Plot tangent line\n", 504 | " phiact = np.arcsin((DATA['SigmaEffective1'][i]-DATA['SigmaEffective3'][i])/(DATA['SigmaEffective1'][i]+DATA['SigmaEffective3'][i]))\n", 505 | " ax4.plot([0,10000],[0,10000*np.tan(phiact)], color='r', linewidth=1, zorder=140)\n", 506 | " \n", 507 | " # fancy settings\n", 508 | " ax4.set_xlabel('Effective normal stress, σ\\' [kPa]')\n", 509 | " ax4.set_ylabel('Shear stress, τ [kPa]')\n", 510 | " ax4.grid(color='whitesmoke')\n", 511 | "\n", 512 | "\n", 513 | "\n", 514 | " \n", 515 | "\n", 516 | " # take a frame\n", 517 | " camera.snap()\n", 518 | "animationi = camera.animate()\n", 519 | "\n", 520 | "fps = 20\n", 521 | "Writer = animation.writers['ffmpeg']\n", 522 | "writer3 = Writer(fps=fps, extra_args=['-r', '25'])\n", 523 | "animationi.save('TRX CIUC - HSS model.gif', writer = writer3)" 524 | ] 525 | }, 526 | { 527 | "cell_type": "code", 528 | "execution_count": 12, 529 | "id": "05557eaf", 530 | "metadata": {}, 531 | "outputs": [], 532 | "source": [ 533 | "\n" 534 | ] 535 | }, 536 | { 537 | "cell_type": "code", 538 | "execution_count": null, 539 | "id": "7bdc7a44", 540 | "metadata": {}, 541 | "outputs": [], 542 | "source": [] 543 | } 544 | ], 545 | "metadata": { 546 | "kernelspec": { 547 | "display_name": "Python 3", 548 | "language": "python", 549 | "name": "python3" 550 | }, 551 | "language_info": { 552 | "codemirror_mode": { 553 | "name": "ipython", 554 | "version": 3 555 | }, 556 | "file_extension": ".py", 557 | "mimetype": "text/x-python", 558 | "name": "python", 559 | "nbconvert_exporter": "python", 560 | "pygments_lexer": "ipython3", 561 | "version": "3.8.8" 562 | }, 563 | "latex_envs": { 564 | "LaTeX_envs_menu_present": true, 565 | "autoclose": false, 566 | "autocomplete": true, 567 | "bibliofile": "biblio.bib", 568 | "cite_by": "apalike", 569 | "current_citInitial": 1, 570 | "eqLabelWithNumbers": true, 571 | "eqNumInitial": 1, 572 | "hotkeys": { 573 | "equation": "Ctrl-E", 574 | "itemize": "Ctrl-I" 575 | }, 576 | "labels_anchors": false, 577 | "latex_user_defs": false, 578 | "report_style_numbering": false, 579 | "user_envs_cfg": false 580 | }, 581 | "toc": { 582 | "base_numbering": 1, 583 | "nav_menu": {}, 584 | "number_sections": true, 585 | "sideBar": true, 586 | "skip_h1_title": false, 587 | "title_cell": "Table of Contents", 588 | "title_sidebar": "Contents", 589 | "toc_cell": false, 590 | "toc_position": {}, 591 | "toc_section_display": true, 592 | "toc_window_display": false 593 | }, 594 | "varInspector": { 595 | "cols": { 596 | "lenName": 16, 597 | "lenType": 16, 598 | "lenVar": 40 599 | }, 600 | "kernels_config": { 601 | "python": { 602 | "delete_cmd_postfix": "", 603 | "delete_cmd_prefix": "del ", 604 | "library": "var_list.py", 605 | "varRefreshCmd": "print(var_dic_list())" 606 | }, 607 | "r": { 608 | "delete_cmd_postfix": ") ", 609 | "delete_cmd_prefix": "rm(", 610 | "library": "var_list.r", 611 | "varRefreshCmd": "cat(var_dic_list()) " 612 | } 613 | }, 614 | "types_to_exclude": [ 615 | "module", 616 | "function", 617 | "builtin_function_or_method", 618 | "instance", 619 | "_Feature" 620 | ], 621 | "window_display": false 622 | } 623 | }, 624 | "nbformat": 4, 625 | "nbformat_minor": 5 626 | } 627 | -------------------------------------------------------------------------------- /Some_examples/MC and HSS/TRX - LinkedIn Post.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/Some_examples/MC and HSS/TRX - LinkedIn Post.gif -------------------------------------------------------------------------------- /Some_examples/MC and HSS/TRX CIDC - HSS model.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/Some_examples/MC and HSS/TRX CIDC - HSS model.gif -------------------------------------------------------------------------------- /Some_examples/MC and HSS/TRX CIDC - MC model.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/Some_examples/MC and HSS/TRX CIDC - MC model.gif -------------------------------------------------------------------------------- /Some_examples/MC and HSS/TRX CIUC - HSS model.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/Some_examples/MC and HSS/TRX CIUC - HSS model.gif -------------------------------------------------------------------------------- /Some_examples/MC and HSS/TRX CIUC - MC model.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/Some_examples/MC and HSS/TRX CIUC - MC model.gif -------------------------------------------------------------------------------- /Some_examples/Undergraduate/Triaxial drenado - Arcilla NC.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/Some_examples/Undergraduate/Triaxial drenado - Arcilla NC.gif -------------------------------------------------------------------------------- /Some_examples/Undergraduate/Triaxial drenado - Arcilla OC.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/Some_examples/Undergraduate/Triaxial drenado - Arcilla OC.gif -------------------------------------------------------------------------------- /Some_examples/Undergraduate/Triaxial drenado - Arena densa.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/Some_examples/Undergraduate/Triaxial drenado - Arena densa.gif -------------------------------------------------------------------------------- /Some_examples/Undergraduate/Triaxial drenado - Arena suelta.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/Some_examples/Undergraduate/Triaxial drenado - Arena suelta.gif -------------------------------------------------------------------------------- /Some_examples/Undergraduate/Triaxial no drenado - Arcilla NC.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/Some_examples/Undergraduate/Triaxial no drenado - Arcilla NC.gif -------------------------------------------------------------------------------- /Some_examples/Undergraduate/Triaxial no drenado - Arcilla OC .gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/Some_examples/Undergraduate/Triaxial no drenado - Arcilla OC .gif -------------------------------------------------------------------------------- /Some_examples/Undergraduate/Triaxial no drenado - Arena densa.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/Some_examples/Undergraduate/Triaxial no drenado - Arena densa.gif -------------------------------------------------------------------------------- /Some_examples/Undergraduate/Triaxial no drenado - Arena suelta.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/Some_examples/Undergraduate/Triaxial no drenado - Arena suelta.gif -------------------------------------------------------------------------------- /info/HowToConnect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/info/HowToConnect.png -------------------------------------------------------------------------------- /info/LogoSRK.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/info/LogoSRK.jpeg -------------------------------------------------------------------------------- /info/Version.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/info/Version.gif -------------------------------------------------------------------------------- /info/logofiuba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/info/logofiuba.png -------------------------------------------------------------------------------- /info/logos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/info/logos.png -------------------------------------------------------------------------------- /info/logos2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ntasso/SoilTestPlot/7400569c8bcbebde17f03adc5e4041fb952ff341/info/logos2.png --------------------------------------------------------------------------------