Files
JuliaFEM.jl/notebooks/2015-06-25-elasticity-solver-example.ipynb
T

659 lines
35 KiB
Plaintext
Raw Normal View History

2015-06-25 00:47:03 +03:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
2015-06-25 23:11:57 +03:00
"# Elasticity solver examples\n",
2015-06-25 00:47:03 +03:00
"\n",
"Author(s): Jukka Aho <jukka.aho@kapsi.fi>"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
2015-06-25 23:11:57 +03:00
"collapsed": false
2015-06-25 00:47:03 +03:00
},
2015-06-25 23:11:57 +03:00
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"WARNING: deprecated syntax \"{a=>b, ...}\" at /Users/jukka/.julia/v0.4/JuliaFEM/src/abaqus_reader.jl:29.\n",
"Use \"Dict{Any,Any}(a=>b, ...)\" instead.\n"
]
},
{
"data": {
"text/plain": [
"Logger(root,DEBUG,Pipe(open, 0 bytes waiting),root)"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
2015-06-25 00:47:03 +03:00
"source": [
"# These are internal module functions and not intended to use like this.\n",
2015-06-25 23:11:57 +03:00
"using JuliaFEM.elasticity_solver\n",
"using JuliaFEM.xdmf\n",
"using JuliaFEM.abaqus_reader\n",
"using Logging\n",
"Logging.configure(level=DEBUG)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2d beam with linear elements"
2015-06-25 00:47:03 +03:00
]
},
{
"cell_type": "code",
2015-06-25 23:11:57 +03:00
"execution_count": 2,
2015-06-25 00:47:03 +03:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Converged\n"
]
},
{
"data": {
"text/plain": [
"2x4 Array{Float64,2}:\n",
" 0.0 -0.399145 -0.0722858 0.0\n",
" 0.0 -2.17799 -2.22224 0.0"
]
},
2015-06-25 23:11:57 +03:00
"execution_count": 2,
2015-06-25 00:47:03 +03:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function one_elem_fixture()\n",
" X = [0.0 0.0; 10.0 0.0; 10.0 1.0; 0.0 1.0]'\n",
" elmap = [1; 2; 3; 4]\n",
" nodalloads = [0 0; 0 0; 0 -2; 0 0]'\n",
" dirichletbc = [0 0; NaN NaN; NaN NaN; 0 0]'\n",
"\n",
" E = 90\n",
" nu = 0.25\n",
" mu = E/(2*(1+nu))\n",
" la = E*nu/((1+nu)*(1-2*nu))\n",
" la = 2*la*mu/(la + 2*mu)\n",
"\n",
" la = la*ones(1, 4)\n",
" mu = mu*ones(1, 4)\n",
" u = zeros(2, 4)\n",
" du = zeros(2, 4)\n",
"\n",
" N(xi) = [\n",
" (1-xi[1])*(1-xi[2])/4\n",
" (1+xi[1])*(1-xi[2])/4\n",
" (1+xi[1])*(1+xi[2])/4\n",
" (1-xi[1])*(1+xi[2])/4\n",
" ]\n",
"\n",
" dNdξ(ξ) = [-(1-ξ[2])/4.0 -(1-ξ[1])/4.0\n",
" (1-ξ[2])/4.0 -(1+ξ[1])/4.0\n",
" (1+ξ[2])/4.0 (1+ξ[1])/4.0\n",
" -(1+ξ[2])/4.0 (1-ξ[1])/4.0]\n",
"\n",
" ipoints = 1/sqrt(3)*[-1 -1; 1 -1; 1 1; -1 1]\n",
" iweights = [1 1 1 1]\n",
"\n",
" return (X, u, du, elmap, nodalloads, dirichletbc,\n",
" la, mu, N, dNdξ, ipoints, iweights)\n",
"end\n",
"\n",
"(X, u, du, elmap, nodalloads, dirichletbc,\n",
" la, mu, N, dNdξ, ipoints, iweights) = one_elem_fixture()\n",
" \n",
"for i=1:10\n",
2015-06-25 23:11:57 +03:00
" JuliaFEM.elasticity_solver.solve_elasticity_increment!(X, u, du, elmap, nodalloads, dirichletbc,\n",
2015-06-25 00:47:03 +03:00
" la, mu, N, dNdξ, ipoints, iweights)\n",
" u += du\n",
" if norm(du) < 1.0e-9\n",
" println(\"Converged\")\n",
" break\n",
" end\n",
"end\n",
"\n",
"u"
]
},
{
"cell_type": "code",
2015-06-25 23:11:57 +03:00
"execution_count": 3,
2015-06-25 00:47:03 +03:00
"metadata": {
"collapsed": false
},
2015-06-25 23:11:57 +03:00
"outputs": [],
2015-06-25 00:47:03 +03:00
"source": [
"u3d = [u; 0 0 0 0] # extend to 3d vector field\n",
"X3d = [X; 0 0 0 0]\n",
2015-06-25 23:11:57 +03:00
"elmap2 = [0x5; elmap]'';"
2015-06-25 00:47:03 +03:00
]
},
{
"cell_type": "code",
2015-06-25 23:11:57 +03:00
"execution_count": 4,
2015-06-25 00:47:03 +03:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<Xdmf xmlns:xi=\"http://www.w3.org/2001/XInclude\" Version=\"2.1\">\n",
" <Domain>\n",
" <Grid CollectionType=\"Temporal\" GridType=\"Collection\" Name=\"Collection\">\n",
" <Geometry Type=\"None\"/>\n",
" <Topology Dimensions=\"0\" Type=\"NoTopology\"/>\n",
" <Grid Name=\"Grid\">\n",
" <Time Value=\"0\"/>\n",
" <Geometry Type=\"XYZ\">\n",
" <DataItem DataType=\"Float\" Dimensions=\"12\" Format=\"XML\" Precision=\"4\">0.0 0.0 0.0 10.0 0.0 0.0 10.0 1.0 0.0 0.0 1.0 0.0</DataItem>\n",
" </Geometry>\n",
" <Topology Dimensions=\"1\" Type=\"Mixed\">\n",
" <DataItem DataType=\"Int\" Dimensions=\"5\" Format=\"XML\" Precision=\"4\">5 0 1 2 3</DataItem>\n",
" </Topology>\n",
" <Attribute Center=\"Node\" Name=\"Displacement\" Type=\"Vector\">\n",
" <DataItem DataType=\"Float\" Dimensions=\"12\" Format=\"XML\" Precision=\"4\">0.0 0.0 0.0 -0.3991450609547433 -2.17798923170735 0.0 -0.07228582695592455 -2.222244754401764 0.0 0.0 0.0 0.0</DataItem>\n",
" </Attribute>\n",
" </Grid>\n",
" </Grid>\n",
" </Domain>\n",
"</Xdmf>\n",
"\n"
]
2015-06-25 23:11:57 +03:00
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING: int(x) is deprecated, use Int(x) instead.\n"
]
},
{
"data": {
"text/plain": [
"1015"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
" in depwarn at /Applications/Julia-0.4.0-dev-539c818c4e.app/Contents/Resources/julia/lib/julia/sys.dylib\n",
" in int at deprecated.jl:49\n",
" in save_file at /Users/jukka/.julia/v0.4/LightXML/src/document.jl:108\n",
" in xdmf_save_model at /Users/jukka/.julia/v0.4/JuliaFEM/src/xdmf.jl:106\n",
" in include_string at loading.jl:99\n",
" in execute_request_0x535c5df2 at /Users/jukka/.julia/v0.4/IJulia/src/execute_request.jl:157\n",
" in eventloop at /Users/jukka/.julia/v0.4/IJulia/src/IJulia.jl:123\n",
" in anonymous at task.jl:365\n",
"while loading In[4], in expression starting on line 7\n"
]
2015-06-25 00:47:03 +03:00
}
],
"source": [
2015-06-25 23:11:57 +03:00
"xdoc, model = JuliaFEM.xdmf.xdmf_new_model()\n",
"temporal_collection = JuliaFEM.xdmf.xdmf_new_temporal_collection(model)\n",
"grid = JuliaFEM.xdmf.xdmf_new_grid(temporal_collection; time=0)\n",
"JuliaFEM.xdmf.xdmf_new_mesh(grid, X3d, elmap2)\n",
"JuliaFEM.xdmf.xdmf_new_field(grid, \"Displacement\", \"nodes\", u3d)\n",
"print(xdoc)\n",
"JuliaFEM.xdmf.xdmf_save_model(xdoc, \"/tmp/foo.xmf\")"
2015-06-25 00:47:03 +03:00
]
},
{
"cell_type": "code",
2015-06-25 23:11:57 +03:00
"execution_count": 25,
2015-06-25 00:47:03 +03:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
2015-06-25 23:11:57 +03:00
"image/png": [
"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
],
2015-06-25 00:47:03 +03:00
"text/plain": [
2015-06-25 23:11:57 +03:00
"PyObject <IPython.core.display.Image object>"
2015-06-25 00:47:03 +03:00
]
},
2015-06-25 23:11:57 +03:00
"execution_count": 25,
2015-06-25 00:47:03 +03:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2015-06-25 23:11:57 +03:00
"using PyCall\n",
"@pyimport IPython.display as d\n",
"d.Image(\"/tmp/displacement.png\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## 3d beam with quadratic elements"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"25-Jun 20:00:29:INFO:root:Registered handlers: Any[\"ELEMENT\",\"NODE\",\"NSET\"]\n",
"WARNING: beginswith is deprecated, use startswith instead.\n",
" in depwarn at /Applications/Julia-0.4.0-dev-539c818c4e.app/Contents/Resources/julia/lib/julia/sys.dylib\n",
" in beginswith at deprecated.jl:30\n",
" in parse_abaqus at /Users/jukka/.julia/v0.4/JuliaFEM/src/abaqus_reader.jl:110\n",
" in include_string at loading.jl:99\n",
" in execute_request_0x535c5df2 at /Users/jukka/.julia/v0.4/IJulia/src/execute_request.jl:157\n",
" in eventloop at /Users/jukka/.julia/v0.4/IJulia/src/IJulia.jl:123\n",
" in anonymous at task.jl:365\n",
"while loading In[5], in expression starting on line 2\n",
"WARNING: beginswith is deprecated, use startswith instead.\n",
" in depwarn at /Applications/Julia-0.4.0-dev-539c818c4e.app/Contents/Resources/julia/lib/julia/sys.dylib\n",
" in beginswith at deprecated.jl:30\n",
" in parse_abaqus at /Users/jukka/.julia/v0.4/JuliaFEM/src/abaqus_reader.jl:110\n",
" in include_string at loading.jl:99\n",
" in execute_request_0x535c5df2 at /Users/jukka/.julia/v0.4/IJulia/src/execute_request.jl:157\n",
" in eventloop at /Users/jukka/.julia/v0.4/IJulia/src/IJulia.jl:123\n",
" in anonymous at task.jl:365\n",
"while loading In[5], in expression starting on line 2\n",
"25-Jun 20:00:30:DEBUG:root:Found NODE section\n",
"25-Jun 20:00:30:DEBUG:root:Found ELEMENT section\n",
"WARNING: integer(s::AbstractString) is deprecated, use parse(Int,s) instead.\n",
" in depwarn at /Applications/Julia-0.4.0-dev-539c818c4e.app/Contents/Resources/julia/lib/julia/sys.dylib\n",
" in integer at deprecated.jl:49\n",
" in map at abstractarray.jl:1251\n",
" in parse_element_section at /Users/jukka/.julia/v0.4/JuliaFEM/src/abaqus_reader.jl:56\n",
" in process_section at /Users/jukka/.julia/v0.4/JuliaFEM/src/abaqus_reader.jl:105\n",
" in parse_abaqus at /Users/jukka/.julia/v0.4/JuliaFEM/src/abaqus_reader.jl:114\n",
" in include_string at loading.jl:99\n",
" in execute_request_0x535c5df2 at /Users/jukka/.julia/v0.4/IJulia/src/execute_request.jl:157\n",
" in eventloop at /Users/jukka/.julia/v0.4/IJulia/src/IJulia.jl:123\n",
" in anonymous at task.jl:365\n",
"while loading In[5], in expression starting on line 2\n",
"25-Jun 20:00:31:DEBUG:root:120 elements found\n",
"25-Jun 20:00:31:INFO:root:Creating ELSET Body1\n",
"25-Jun 20:00:31:DEBUG:root:Found NSET section\n",
"25-Jun 20:00:31:DEBUG:root:Creating node set SUPPORT\n",
"25-Jun 20:00:31:DEBUG:root:Found NSET section\n",
"25-Jun 20:00:31:DEBUG:root:Creating node set LOAD\n",
"25-Jun 20:00:31:DEBUG:root:Found NSET section\n",
"25-Jun 20:00:31:DEBUG:root:Creating node set TOP\n"
]
},
{
"data": {
"text/plain": [
"Dict{Any,Any} with 4 entries:\n",
" \"nodes\" => Dict{Any,Any}(288=>[97.5,7.5,10.0],11=>[92.5,2.5,5.0],134=>[45.…\n",
" \"elements\" => Dict{Any,Any}(68=>[71,144,149,198,51,150,57,43,50,214],2=>[204,…\n",
" \"elsets\" => Dict{Any,Any}(\"Body1\"=>[1,2,3,4,5,6,7,8,9,10 … 111,112,113,11…\n",
" \"nsets\" => Dict{Any,Any}(\"LOAD\"=>[82,84,87,179,197,246,249,256,257],\"SUPPO…"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fid = open(\"../geometry/3d_beam/palkki.inp\")\n",
"model = JuliaFEM.abaqus_reader.parse_abaqus(fid)\n",
"close(fid)\n",
"model"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"10x120 Array{Int64,2}:\n",
" 47 56 91 87 72 72 176 290 … 260 165 101 18 271 72 24\n",
" 173 236 176 45 97 253 173 22 236 181 261 201 211 146 166\n",
" 76 97 139 49 253 158 76 252 202 87 19 71 18 289 196\n",
" 202 111 242 290 289 289 47 49 254 290 254 255 277 29 133\n",
" 156 10 120 53 74 169 144 127 114 95 75 2 100 67 135\n",
" 88 214 266 291 270 118 88 70 … 14 185 104 235 257 180 198\n",
" 16 89 179 40 169 209 44 17 103 68 215 12 212 200 65\n",
" 134 278 199 4 200 200 34 177 147 163 145 121 170 167 92\n",
" 32 187 221 243 210 37 156 240 195 7 117 80 9 48 52\n",
" 132 15 265 177 37 233 16 268 79 4 263 168 208 57 150"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nnodes = length(model[\"nodes\"])\n",
"nelements = length(model[\"elements\"])\n",
"dim = 3\n",
"E = 90\n",
"nu = 0.25\n",
"mu = E/(2*(1+nu))\n",
"la = E*nu/((1+nu)*(1-2*nu))\n",
"\n",
"X = zeros(dim, nnodes)\n",
"u = zeros(dim, nnodes)\n",
"du = zeros(dim, nnodes)\n",
"elmap = zeros(Int, 10, nelements)\n",
"nodalloads = zeros(3, nnodes)\n",
"dirichletbc = NaN*ones(3, nnodes)\n",
"la = la*ones(1, nnodes)\n",
"mu = mu*ones(1, nnodes)\n",
"\n",
"# calculate permutation which maps node ids to matrix indices\n",
"perm = Dict()\n",
"for (j, k) in enumerate(keys(model[\"nodes\"]))\n",
" perm[k] = j\n",
"end\n",
"\n",
"for j=1:nnodes\n",
" X[:,j] = model[\"nodes\"][perm[j]]\n",
"end\n",
"\n",
"for (j, k) in enumerate(keys(model[\"elements\"]))\n",
" node_ids = model[\"elements\"][k]\n",
" for l=1:10\n",
" elmap[l, j] = perm[node_ids[l]]\n",
" end\n",
"end\n",
"\n",
"elmap"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"3x298 Array{Float64,2}:\n",
" NaN NaN NaN NaN NaN NaN NaN NaN … NaN NaN NaN NaN NaN NaN NaN\n",
" NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN\n",
" NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Handle dirichlet boundaries on SUPPORT\n",
"for j in model[\"nsets\"][\"SUPPORT\"]\n",
" dirichletbc[perm[j]] = 0.0\n",
"end\n",
"dirichletbc"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Shape functions and integration points"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"dNtet (generic function with 1 method)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Ntet(xi) = [ -xi[1] - xi[2] - xi[3] + 1\n",
" xi[1]\n",
" xi[2]\n",
" xi[3]\n",
" 4*xi[1]*(-xi[1] - xi[2] - xi[3] + 1)\n",
" 4*xi[1]*xi[2]\n",
" 4*xi[2]*(-xi[1] - xi[2] - xi[3] + 1)\n",
" 4*xi[3]*(-xi[1] - xi[2] - xi[3] + 1)\n",
" 4*xi[1]*xi[3]\n",
" 4*xi[2]*xi[3]]\n",
"\n",
"dNtet(xi) = [\n",
" -1 -1 -1\n",
" 1 0 0\n",
" 0 1 0\n",
" 0 0 1\n",
"-8*xi[1] - 4*xi[2] - 4*xi[3] + 4 -4*xi[1] -4*xi[1]\n",
" 4*xi[2] 4*xi[1] 0\n",
" -4*xi[2] -4*xi[1] - 8*xi[2] - 4*xi[3] + 4 -4*xi[2]\n",
" -4*xi[3] -4*xi[3] -4*xi[1] - 4*xi[2] - 8*xi[3] + 4\n",
" 4*xi[3] 0 4*xi[1]\n",
" 0 4*xi[3] 4*xi[2]]"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"10x3 Array{Int64,2}:\n",
" -1 -1 -1\n",
" 1 0 0\n",
" 0 1 0\n",
" 0 0 1\n",
" -4 0 0\n",
" 4 0 0\n",
" -4 -8 -4\n",
" -4 -4 -8\n",
" 4 0 0\n",
" 0 4 4"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dNtet([0, 1, 1])"
2015-06-25 00:47:03 +03:00
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
2015-06-25 23:11:57 +03:00
"1x4 Array{Float64,2}:\n",
" 0.0416667 0.0416667 0.0416667 0.0416667"
2015-06-25 00:47:03 +03:00
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
2015-06-25 23:11:57 +03:00
"# from code aster documentation\n",
"a = 1/20*(5-sqrt(5))\n",
"b = 1/20*(5+3*sqrt(5))\n",
"ipoints = [a a a; a a b; a b a; b a a]\n",
"iweights = 1/24*[1 1 1 1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Add point force to LOAD nodeset"
2015-06-25 00:47:03 +03:00
]
},
{
"cell_type": "code",
2015-06-25 23:11:57 +03:00
"execution_count": 33,
2015-06-25 00:47:03 +03:00
"metadata": {
2015-06-25 23:11:57 +03:00
"collapsed": false
2015-06-25 00:47:03 +03:00
},
2015-06-25 23:11:57 +03:00
"outputs": [
{
"data": {
"text/plain": [
"9-element Array{Int64,1}:\n",
" 82\n",
" 84\n",
" 87\n",
" 179\n",
" 197\n",
" 246\n",
" 249\n",
" 256\n",
" 257"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model[\"nsets\"][\"LOAD\"]"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[95.0,10.0,5.0]\n"
]
}
],
"source": [
"nodalloads[3, perm[82]] = -0.0001\n",
"println(model[\"nodes\"][83])"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"3x298 Array{Float64,2}:\n",
" -76167.8 -73.0493 … 5.19615e7 -43075.8 \n",
" -7.72988e5 6.45188e5 8.51808e7 559158.0 \n",
" 1.26765e6 -74404.1 -2.43735e7 6.01587e5"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"u = zeros(dim, nnodes)\n",
"du = zeros(dim, nnodes)\n",
"\n",
"for i=1:10\n",
" JuliaFEM.elasticity_solver.solve_elasticity_increment!(X, u, du, elmap, nodalloads, dirichletbc,\n",
" la, mu, Ntet, dNtet, ipoints, iweights)\n",
" u += du\n",
" if norm(du) < 1.0e-9\n",
" println(\"Converged\")\n",
" break\n",
" end\n",
"end\n",
"u"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Not converging."
]
2015-06-25 00:47:03 +03:00
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 0.4.0-dev",
"language": "julia",
"name": "julia-0.4"
},
"language_info": {
"name": "julia",
"version": "0.4.0"
}
},
"nbformat": 4,
"nbformat_minor": 0
}