2015-09-24 15:03:02 +03:00
|
|
|
|
{
|
|
|
|
|
|
"cells": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"# Ideal plastic Von Mises material\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Author(s): Olli Väinölä <olli.vainola@student.oulu.fi>\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"In this notebook is an small tutorial, how to create a Von Mises material without any hardening. Equations are formulated into rate depended form."
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
2015-11-05 16:42:19 +02:00
|
|
|
|
"execution_count": 1,
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"metadata": {
|
|
|
|
|
|
"collapsed": false
|
|
|
|
|
|
},
|
|
|
|
|
|
"outputs": [],
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"# imports\n",
|
|
|
|
|
|
"using ForwardDiff\n",
|
2015-11-05 14:35:46 +02:00
|
|
|
|
"using NLsolve\n",
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"using PyPlot"
|
2015-09-24 15:03:02 +03:00
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"Let's create a isotropic Hooke material."
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
2015-11-05 16:42:19 +02:00
|
|
|
|
"execution_count": 2,
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"metadata": {
|
|
|
|
|
|
"collapsed": false
|
|
|
|
|
|
},
|
2015-11-05 16:42:19 +02:00
|
|
|
|
"outputs": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"text/plain": [
|
|
|
|
|
|
"6x6 Array{Float64,2}:\n",
|
|
|
|
|
|
" 2.69231e5 1.15385e5 1.15385e5 0.0 0.0 0.0 \n",
|
|
|
|
|
|
" 1.15385e5 2.69231e5 1.15385e5 0.0 0.0 0.0 \n",
|
|
|
|
|
|
" 1.15385e5 1.15385e5 2.69231e5 0.0 0.0 0.0 \n",
|
|
|
|
|
|
" 0.0 0.0 0.0 1.53846e5 0.0 0.0 \n",
|
|
|
|
|
|
" 0.0 0.0 0.0 0.0 1.53846e5 0.0 \n",
|
|
|
|
|
|
" 0.0 0.0 0.0 0.0 0.0 1.53846e5"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
"execution_count": 2,
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"output_type": "execute_result"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"source": [
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"\"\"\"\n",
|
|
|
|
|
|
"Create a isotropic Hooke material matrix C \n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"More information: # http://www.efunda.com/formulae/solid_mechanics/mat_mechanics/hooke_isotropic.cfm\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Parameters\n",
|
|
|
|
|
|
"----------\n",
|
|
|
|
|
|
" E: Float\n",
|
|
|
|
|
|
" Elastic modulus\n",
|
|
|
|
|
|
" ν: Float\n",
|
|
|
|
|
|
" Poisson constant\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Returns\n",
|
|
|
|
|
|
"-------\n",
|
|
|
|
|
|
" Array{Float64, (6,6)}\n",
|
|
|
|
|
|
"\"\"\"\n",
|
|
|
|
|
|
"function hookeStiffnessTensor(E, ν)\n",
|
|
|
|
|
|
" a = 1 - ν\n",
|
|
|
|
|
|
" b = 1 - 2*ν\n",
|
|
|
|
|
|
" c = 1 + ν\n",
|
|
|
|
|
|
" multiplier = E / (b * c)\n",
|
|
|
|
|
|
" return Float64[a ν ν 0 0 0;\n",
|
|
|
|
|
|
" ν a ν 0 0 0;\n",
|
|
|
|
|
|
" ν ν a 0 0 0;\n",
|
|
|
|
|
|
" 0 0 0 b 0 0;\n",
|
|
|
|
|
|
" 0 0 0 0 b 0;\n",
|
|
|
|
|
|
" 0 0 0 0 0 b].*multiplier\n",
|
|
|
|
|
|
"end\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"# Pick material values\n",
|
|
|
|
|
|
"E = 200.0e3\n",
|
|
|
|
|
|
"ν = 0.3\n",
|
|
|
|
|
|
"C = hookeStiffnessTensor(E, ν)"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
"collapsed": false
|
|
|
|
|
|
},
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"# Defining equations for the calculation\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Functions are defined for strain controller simulation"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
2015-11-09 21:12:23 +02:00
|
|
|
|
"execution_count": 3,
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"metadata": {
|
|
|
|
|
|
"collapsed": false
|
|
|
|
|
|
},
|
2015-11-05 16:42:19 +02:00
|
|
|
|
"outputs": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"text/plain": [
|
2015-11-09 21:12:23 +02:00
|
|
|
|
"calculate_stress (generic function with 1 method)"
|
2015-11-05 16:42:19 +02:00
|
|
|
|
]
|
|
|
|
|
|
},
|
2015-11-09 21:12:23 +02:00
|
|
|
|
"execution_count": 3,
|
2015-11-05 16:42:19 +02:00
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"output_type": "execute_result"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"source": [
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"# using vectors with double contradiction\n",
|
|
|
|
|
|
"# http://www-2.unipv.it/compmech/teaching/available/const_mod/const_mod_mat-review_notation.pdf\n",
|
2015-11-05 14:35:46 +02:00
|
|
|
|
"M = [1 0 0 0 0 0;\n",
|
|
|
|
|
|
" 0 1 0 0 0 0;\n",
|
|
|
|
|
|
" 0 0 1 0 0 0;\n",
|
|
|
|
|
|
" 0 0 0 2 0 0;\n",
|
|
|
|
|
|
" 0 0 0 0 2 0;\n",
|
|
|
|
|
|
" 0 0 0 0 0 2;]\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"\n",
|
|
|
|
|
|
"\"\"\"\n",
|
|
|
|
|
|
"Equivalent tensile stress. \n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"More info can be found from: https://en.wikipedia.org/wiki/Von_Mises_yield_criterion\n",
|
|
|
|
|
|
" Section: Reduced von Mises equation for different stress conditions\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Parameters\n",
|
|
|
|
|
|
"----------\n",
|
|
|
|
|
|
" σ: Array{Float64, 6}\n",
|
|
|
|
|
|
" Stress in Voigt notation\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Returns\n",
|
|
|
|
|
|
"-------\n",
|
|
|
|
|
|
" Float\n",
|
|
|
|
|
|
"\"\"\"\n",
|
|
|
|
|
|
"function σₑ(σ)\n",
|
2015-11-05 14:35:46 +02:00
|
|
|
|
" s = σ[1:6] - 1/3 * sum([σ[1], σ[2], σ[3]]) * [1 1 1 0 0 0]'\n",
|
|
|
|
|
|
" return sqrt(3/2 * s' * M * s)[1]\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"end\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"\"\"\"\n",
|
|
|
|
|
|
"Von Mises Yield criterion\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"More info can be found from: http://csm.mech.utah.edu/content/wp-content/uploads/2011/10/9tutorialOnJ2Plasticity.pdf\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Parameters\n",
|
|
|
|
|
|
"----------\n",
|
|
|
|
|
|
" σ: Array{Float64, 6}\n",
|
|
|
|
|
|
" Stress in Voigt notation\n",
|
|
|
|
|
|
" k: Float64\n",
|
|
|
|
|
|
" Material constant, Yield limit\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Returns\n",
|
|
|
|
|
|
"-------\n",
|
|
|
|
|
|
" Float\n",
|
|
|
|
|
|
"\"\"\"\n",
|
|
|
|
|
|
"function vonMisesYield(σ, k)\n",
|
|
|
|
|
|
" σₑ(σ) - k\n",
|
|
|
|
|
|
"end\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"\"\"\"\n",
|
2015-09-24 15:19:35 +03:00
|
|
|
|
"Function for NLsolve. Inside this function are the equations which we want to find root.\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"Ψ is the yield function below. Functions defined here:\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
" dσ - C (dϵ - dλ*dΨ/dσ) = 0\n",
|
|
|
|
|
|
" σₑ(σ) - k = 0\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Parameters\n",
|
|
|
|
|
|
"----------\n",
|
|
|
|
|
|
" params: Array{Float64, 7}\n",
|
|
|
|
|
|
" Array containing values from solver\n",
|
|
|
|
|
|
" dϵ: Array{Float64, 6}\n",
|
|
|
|
|
|
" Strain rate vector in Voigt notation\n",
|
|
|
|
|
|
" C: Array{Float64, (6, 6)}\n",
|
|
|
|
|
|
" Material tensor\n",
|
|
|
|
|
|
" k: Float\n",
|
|
|
|
|
|
" Material constant, yield limit\n",
|
|
|
|
|
|
" Δt: Float\n",
|
|
|
|
|
|
" time increment\n",
|
|
|
|
|
|
" σ_begin:Array{Float64, 6}\n",
|
|
|
|
|
|
" Stress vector in Voigt notation\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Returns\n",
|
|
|
|
|
|
"-------\n",
|
|
|
|
|
|
" Array{Float64, 7}, return values for solver\n",
|
|
|
|
|
|
"\"\"\"\n",
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"function G(params, dϵ, C, k, σ_begin)\n",
|
2015-11-05 14:35:46 +02:00
|
|
|
|
"\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
" # Creating wrapper for gradient\n",
|
|
|
|
|
|
" yield(pars) = vonMisesYield(pars, k)\n",
|
|
|
|
|
|
" dfdσ = ForwardDiff.gradient(yield)\n",
|
|
|
|
|
|
" \n",
|
|
|
|
|
|
" # Stress rate\n",
|
2015-11-05 14:35:46 +02:00
|
|
|
|
" dσ = params[1:6]\n",
|
|
|
|
|
|
" \n",
|
|
|
|
|
|
" σ_tot = [vec(σ_begin); 0.0] + params\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
" \n",
|
|
|
|
|
|
" # Calculating plastic strain rate\n",
|
2015-11-05 14:35:46 +02:00
|
|
|
|
" dϵp = params[end] * dfdσ(σ_tot)\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
" \n",
|
|
|
|
|
|
" # Calculating equations\n",
|
|
|
|
|
|
" function_1 = dσ - C * (dϵ - dϵp[1:6])\n",
|
2015-11-05 14:35:46 +02:00
|
|
|
|
" function_2 = yield(σ_tot)\n",
|
|
|
|
|
|
" [vec(function_1); function_2]\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"end\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"\"\"\"\n",
|
|
|
|
|
|
"Function which calculates the stress. Also handles if any yielding happens\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Parameters\n",
|
|
|
|
|
|
"----------\n",
|
|
|
|
|
|
" dϵ: Array{Float64, 6}\n",
|
|
|
|
|
|
" Strain rate vector in Voigt notation\n",
|
|
|
|
|
|
" Δt: Float\n",
|
|
|
|
|
|
" time increment\n",
|
|
|
|
|
|
" σ: Array{Float64, 6}\n",
|
|
|
|
|
|
" Last stress vector in Voigt notation\n",
|
|
|
|
|
|
" C: Array{Float64, (6, 6)}\n",
|
|
|
|
|
|
" Material tensor\n",
|
|
|
|
|
|
" k: Float\n",
|
|
|
|
|
|
" Material constant, yield limit\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Returns\n",
|
|
|
|
|
|
"-------\n",
|
|
|
|
|
|
" Tuple\n",
|
|
|
|
|
|
" Plastic strain rate dϵᵖ and new stress vector σ\n",
|
|
|
|
|
|
"\"\"\"\n",
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"function calculate_stress(dϵ, σ, C, k)\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
" # Test stress\n",
|
2015-11-06 12:06:49 +02:00
|
|
|
|
" σ_tria = σ + C * dϵ\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
" \n",
|
|
|
|
|
|
" # Calculating yield\n",
|
|
|
|
|
|
" yield = vonMisesYield(σ_tria, k)\n",
|
2015-11-05 14:35:46 +02:00
|
|
|
|
"\n",
|
2015-11-09 21:12:23 +02:00
|
|
|
|
" if yield > 0\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
" # Yielding happened\n",
|
|
|
|
|
|
" # Creating functions for newton: xₙ₊₁ = xₙ - df⁻¹ * f and initial values\n",
|
2015-11-05 14:35:46 +02:00
|
|
|
|
" initial_guess = [vec(σ_tria - σ); 0.1]\n",
|
2015-11-06 12:06:49 +02:00
|
|
|
|
" f(σ_) = G(σ_, dϵ, C, k, σ)\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
" df = ForwardDiff.jacobian(f)\n",
|
|
|
|
|
|
" \n",
|
|
|
|
|
|
" # Calculating root \n",
|
|
|
|
|
|
" result = nlsolve(not_in_place(f, df), initial_guess).zero\n",
|
2015-11-05 14:35:46 +02:00
|
|
|
|
"\n",
|
|
|
|
|
|
" σ[:] += result[1:6]\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
" else\n",
|
|
|
|
|
|
" σ = σ_tria\n",
|
|
|
|
|
|
" end\n",
|
2015-11-05 16:42:19 +02:00
|
|
|
|
" return σ\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"end"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"# Defining strain history"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
2015-11-09 21:12:23 +02:00
|
|
|
|
"execution_count": 4,
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"metadata": {
|
|
|
|
|
|
"collapsed": false
|
|
|
|
|
|
},
|
2015-11-05 16:42:19 +02:00
|
|
|
|
"outputs": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"text/plain": [
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"300-element Array{Float64,1}:\n",
|
|
|
|
|
|
" -0.0 \n",
|
|
|
|
|
|
" -5.67002e-5 \n",
|
|
|
|
|
|
" -0.000113175\n",
|
|
|
|
|
|
" -0.0001692 \n",
|
|
|
|
|
|
" -0.000224554\n",
|
|
|
|
|
|
" -0.000279014\n",
|
|
|
|
|
|
" -0.000332367\n",
|
|
|
|
|
|
" -0.000384399\n",
|
|
|
|
|
|
" -0.000434904\n",
|
|
|
|
|
|
" -0.00048368 \n",
|
|
|
|
|
|
" -0.000530536\n",
|
|
|
|
|
|
" -0.000575283\n",
|
|
|
|
|
|
" -0.000617745\n",
|
|
|
|
|
|
" ⋮ \n",
|
|
|
|
|
|
" 0.000575283\n",
|
|
|
|
|
|
" 0.000530536\n",
|
|
|
|
|
|
" 0.00048368 \n",
|
|
|
|
|
|
" 0.000434904\n",
|
|
|
|
|
|
" 0.000384399\n",
|
|
|
|
|
|
" 0.000332367\n",
|
|
|
|
|
|
" 0.000279014\n",
|
|
|
|
|
|
" 0.000224554\n",
|
|
|
|
|
|
" 0.0001692 \n",
|
|
|
|
|
|
" 0.000113175\n",
|
|
|
|
|
|
" 5.67002e-5 \n",
|
|
|
|
|
|
" 6.61309e-19"
|
2015-11-05 16:42:19 +02:00
|
|
|
|
]
|
|
|
|
|
|
},
|
2015-11-09 21:12:23 +02:00
|
|
|
|
"execution_count": 4,
|
2015-11-05 16:42:19 +02:00
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"output_type": "execute_result"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"source": [
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"steps = 300\n",
|
|
|
|
|
|
"strain_max = 0.003\n",
|
|
|
|
|
|
"num_cycles = 3\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"\n",
|
|
|
|
|
|
"ϵ_tot = zeros(Float64, (steps, 6))\n",
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"ϵ_tot2 = zeros(Float64, (steps, 6))\n",
|
|
|
|
|
|
"ϵ_tot3 = zeros(Float64, (steps, 6))\n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"\n",
|
|
|
|
|
|
"# Adding only strain in x-axis and counting for the poisson effect\n",
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"ϵ_tot[:, 1] = strain_max * sin(2 * pi * linspace(0, num_cycles, steps))\n",
|
|
|
|
|
|
"ϵ_tot[:, 2] = strain_max * sin(2 * pi * linspace(0, num_cycles, steps)).*-ν\n",
|
|
|
|
|
|
"ϵ_tot[:, 3] = strain_max * sin(2 * pi * linspace(0, num_cycles, steps)).*-ν"
|
2015-09-24 15:03:02 +03:00
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"# Simulation\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"Ok, we're good to go! Now we just need to define yield limit and the main loop.\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"This simulation is not time dependent, but since it's already defined in the equations we'll give it value 1"
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
2015-11-09 21:12:23 +02:00
|
|
|
|
"execution_count": 5,
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"metadata": {
|
|
|
|
|
|
"collapsed": false,
|
|
|
|
|
|
"scrolled": false
|
|
|
|
|
|
},
|
2015-11-05 16:42:19 +02:00
|
|
|
|
"outputs": [
|
|
|
|
|
|
{
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"data": {
|
2015-11-09 21:12:23 +02:00
|
|
|
|
"image/png": "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
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"text/plain": [
|
2015-11-09 21:12:23 +02:00
|
|
|
|
"PyPlot.Figure(PyObject <matplotlib.figure.Figure object at 0x7f0821bd9610>)"
|
2015-11-06 12:06:49 +02:00
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"text/plain": [
|
2015-11-09 21:12:23 +02:00
|
|
|
|
"PyObject <matplotlib.text.Text object at 0x7f0821a8f790>"
|
2015-11-06 12:06:49 +02:00
|
|
|
|
]
|
|
|
|
|
|
},
|
2015-11-09 21:12:23 +02:00
|
|
|
|
"execution_count": 5,
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"metadata": {},
|
|
|
|
|
|
"output_type": "execute_result"
|
2015-11-05 16:42:19 +02:00
|
|
|
|
}
|
|
|
|
|
|
],
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"source": [
|
|
|
|
|
|
"ϵ_last = zeros(Float64, (6))\n",
|
|
|
|
|
|
"ϵᵖ = zeros(Float64, (6))\n",
|
|
|
|
|
|
"σ = zeros(Float64, (6, 1))\n",
|
|
|
|
|
|
"σy = 200.0\n",
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"ss = Float64[]\n",
|
|
|
|
|
|
"ee = Float64[]\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"for i=1:steps\n",
|
|
|
|
|
|
" dϵ = reshape(ϵ_tot[i, :, :], (6, 1)) - ϵ_last\n",
|
|
|
|
|
|
" σ = calculate_stress(dϵ, σ, C, σy)\n",
|
2015-11-09 21:12:23 +02:00
|
|
|
|
" ϵ_last += dϵ \n",
|
2015-11-06 12:06:49 +02:00
|
|
|
|
" push!(ss, σ[1])\n",
|
|
|
|
|
|
" push!(ee, ϵ_last[1]) \n",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"end\n",
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"\n",
|
|
|
|
|
|
"PyPlot.plot(ee, ss)\n",
|
|
|
|
|
|
"PyPlot.title(\"Stress-Strain curve\")\n",
|
|
|
|
|
|
"PyPlot.xlabel(\"Strain\")\n",
|
|
|
|
|
|
"PyPlot.ylabel(\"Stress\")"
|
2015-09-24 15:03:02 +03:00
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
"collapsed": true
|
|
|
|
|
|
},
|
|
|
|
|
|
"outputs": [],
|
|
|
|
|
|
"source": []
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
"kernelspec": {
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"display_name": "Julia 0.4.1-pre",
|
2015-09-24 15:03:02 +03:00
|
|
|
|
"language": "julia",
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"name": "julia-0.4"
|
2015-09-24 15:03:02 +03:00
|
|
|
|
},
|
|
|
|
|
|
"language_info": {
|
|
|
|
|
|
"file_extension": ".jl",
|
|
|
|
|
|
"mimetype": "application/julia",
|
|
|
|
|
|
"name": "julia",
|
2015-11-06 12:06:49 +02:00
|
|
|
|
"version": "0.4.1"
|
2015-09-24 15:03:02 +03:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"nbformat": 4,
|
|
|
|
|
|
"nbformat_minor": 0
|
|
|
|
|
|
}
|