Files
JuliaFEM.jl/docs/tutorials/2015-12-13-3d-tie-contact.ipynb
T
Jukka Aho 0f0c49da62 Cleanup of obsolete files
A lot of old files from old documentation systems etc. is in package.
These are now removed or moved. Old notebooks are in docs/tutorials.
This PR closes issue #124.
2017-08-05 12:08:46 +03:00

1330 lines
170 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Tie contact 3d\n",
"\n",
"Author(s): Jukka Aho"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Solid block\n",
"\n",
"Geometry and mesh:\n",
"\n",
"<div class=\"main_block\" style=\"max-width: 800px;\">\n",
" <div class=\"inner_block\" style=\"display: inline-block; float:left; width:50%;\">\n",
" <img src=\"http://results.juliafem.org/2015-12-13-box_geom.png\"\n",
" style=\"width:100%; height:auto; vertical-align:middle;\">\n",
" </div>\n",
" <div class=\"inner_block\" style=\"display: inline-block; float:left; width:50%;\">\n",
" <img src=\"http://results.juliafem.org/2015-12-13-box_bcs.png\"\n",
" style=\"width:100%; height:auto; vertical-align:middle;\">\n",
" </div>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"using JuliaFEM\n",
"using JuliaFEM.Preprocess: parse_aster_med_file\n",
"using JuliaFEM.Core: LinearElasticityProblem, DirichletProblem, get_connectivity, Quad4, Hex8, DirectSolver"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: Found 4 element sets: SYM23, SYM12, SYM13, LOAD\n"
]
},
{
"data": {
"text/plain": [
"Dict{ASCIIString,Any} with 2 entries:\n",
" \"nodes\" => Dict(2=>[0.0,0.0,0.0],11=>[0.0,0.3333333333333333,1.0],39=>…\n",
" \"connectivity\" => Dict(68=>(:QU4,:OTHER,[45,47,48,46]),2=>(:SE2,:OTHER,[9,10]…"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mesh = parse_aster_med_file(Pkg.dir(\"JuliaFEM\")*\"/geometry/unit_box/mesh.med\")\n",
"#mesh = parse_aster_med_file(Pkg.dir(\"JuliaFEM\")*\"/geometry/unit_box/twoelem_box.med\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: created 36 elements.\n"
]
}
],
"source": [
"# interior elements are of type HE8\n",
"field_problem = LinearElasticityProblem()\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" eltype == :HE8 || continue\n",
" element = Hex8(elcon)\n",
" element[\"geometry\"] = Vector{Float64}[mesh[\"nodes\"][i] for i in get_connectivity(element)]\n",
" element[\"youngs modulus\"] = 900.0\n",
" element[\"poissons ratio\"] = 0.25\n",
" push!(field_problem, element)\n",
"end\n",
"# Neumann boundary condition, traction force -100 on Z direction for element set LOAD\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :QU4) && (elset == :LOAD) || continue\n",
" element = Quad4(elcon)\n",
" element[\"geometry\"] = Vector{Float64}[mesh[\"nodes\"][i] for i in get_connectivity(element)]\n",
" element[\"displacement traction force\"] = Vector{Float64}[[0.0, 0.0, -100.0] for i=1:4]\n",
" push!(field_problem, element)\n",
"end\n",
"info(\"created $(length(field_problem.elements)) elements.\")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: created 27 boundary elements.\n"
]
}
],
"source": [
"# boundary conditions\n",
"boundary_problem = DirichletProblem(\"displacement\", 3)\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :QU4) && (elset in [:SYM23, :SYM12, :SYM13]) || continue\n",
" element = Quad4(elcon)\n",
" element[\"geometry\"] = Vector{Float64}[mesh[\"nodes\"][i] for i in get_connectivity(element)]\n",
" if elset == :SYM23\n",
" element[\"displacement 1\"] = 0.0\n",
" elseif elset == :SYM12\n",
" element[\"displacement 3\"] = 0.0\n",
" elseif elset == :SYM13\n",
" element[\"displacement 2\"] = 0.0\n",
" end\n",
" push!(boundary_problem, element)\n",
"end\n",
"info(\"created $(length(boundary_problem.elements)) boundary elements.\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: # of field problems: 1\n",
"INFO: # of boundary problems: 1\n",
"INFO: Starting iteration 1\n",
"INFO: Assembling field problems...\n",
"INFO: Assembling body 1...\n",
"INFO: dim = 192\n",
"INFO: Assembling boundary problems...\n",
"INFO: Assembling boundary 1...\n",
"INFO: dumping matrices to disk, file = matrices_block_host_1_iteration_1.jld\n",
"INFO: Solving system\n",
"INFO: CHOLMOD: all dofs = 192\n",
"INFO: CHOLMOD: interior dofs = 144\n",
"INFO: CHOLMOD: boundary dofs = 48\n",
"INFO: CHOLMOD: displacement on boundary solved.\n",
"INFO: CHOLMOD: homogeneous dirichlet boundary\n",
"INFO: CHOLMOD: LDLt factorization done in 0.0012049674987792969 seconds\n",
"INFO: CHOLMOD: solved in 0.05479288101196289 seconds. norm = 0.5879447357921324\n",
"INFO: timing info for iteration:\n",
"INFO: boundary assembly : 0.09608697891235352\n"
]
},
{
"data": {
"text/plain": [
"(1,true)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: field assembly : 1.0157549381256104\n",
"INFO: dump matrices to disk : 0.9569120407104492\n",
"INFO: solve problem : 0.48387885093688965\n",
"INFO: update element data : 0.01578807830810547\n",
"INFO: non-linear iteration : 2.568441867828369\n",
"INFO: solver finished in 2.7200798988342285 seconds.\n"
]
}
],
"source": [
"solver = DirectSolver()\n",
"solver.name = \"block\"\n",
"solver.nonlinear_problem = false\n",
"#solver.method = :UMFPACK\n",
"solver.dump_matrices = true\n",
"push!(solver, field_problem)\n",
"push!(solver, boundary_problem)\n",
"call(solver, 0.0)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: nid near corner = 7\n"
]
},
{
"data": {
"text/plain": [
"7"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nid = 0\n",
"for (nid, coords) in mesh[\"nodes\"]\n",
" if isapprox(coords, [1.0, 1.0, 1.0])\n",
" info(\"nid near corner = $nid\")\n",
" break\n",
" end\n",
"end\n",
"nid"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777794,0.02777777777777784,-0.11111111111111129]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777794,0.02777777777777784,-0.11111111111111129]\n"
]
}
],
"source": [
"using JuliaFEM.Test\n",
"known_value = [1/36, 1/36, -1/9]\n",
"for element in field_problem.elements\n",
" i = indexin([nid], get_connectivity(element))[1]\n",
" i != 0 || continue\n",
" X = element(\"geometry\", 0.0)\n",
" u = element(\"displacement\", 0.0)\n",
" info(\"displacement X = $(X[i]), u = $(u[i])\")\n",
" @test isapprox(u[i], known_value)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: XDFM: ndim = 192\n"
]
}
],
"source": [
"xdoc, xmodel = JuliaFEM.Postprocess.xdmf_new_model()\n",
"coll = JuliaFEM.Postprocess.xdmf_new_temporal_collection(xmodel)\n",
"grid = JuliaFEM.Postprocess.xdmf_new_grid(coll; time=0.0)\n",
"\n",
"Xg = Dict{Int64, Vector{Float64}}()\n",
"ug = Dict{Int64, Vector{Float64}}()\n",
"for element in field_problem.elements\n",
" conn = get_connectivity(element)\n",
" X = element(\"geometry\", 0.0)\n",
" u = element(\"displacement\", 0.0)\n",
" for (i, c) in enumerate(conn)\n",
" Xg[c] = X[i]\n",
" ug[c] = u[i]\n",
" end\n",
"end\n",
"perm = sort(collect(keys(Xg)))\n",
"nodes = Vector{Float64}[Xg[i] for i in perm]\n",
"disp = Vector{Float64}[ug[i] for i in perm]\n",
"elements = []\n",
"for el in field_problem.elements\n",
" isa(el, JuliaFEM.Core.Element{JuliaFEM.Core.Hex8}) || continue\n",
" push!(elements, (:Hex8, get_connectivity(el)))\n",
"end\n",
"#elements\n",
"JuliaFEM.Postprocess.xdmf_new_mesh!(grid, nodes, elements)\n",
"JuliaFEM.Postprocess.xdmf_new_nodal_field!(grid, \"displacement\", disp)\n",
"JuliaFEM.Postprocess.xdmf_save_model(xdoc, \"/tmp/foobar2.xmf\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<img src=\"http://results.juliafem.org/2015-12-13-box_results.png\" width=300px style=\"float:left\">"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Block divived to two parts\n",
"\n",
"Block is now divided to two parts and meshes are tied using mortar method.\n",
"\n",
"<div class=\"main_block\" style=\"max-width: 800px;\">\n",
" <div class=\"inner_block\" style=\"display: inline-block; float:left; width:50%;\">\n",
" <img src=\"http://results.juliafem.org/2015-12-13-divided-block-geometry.png\"\n",
" style=\"width:100%; height:auto; vertical-align:middle;\">\n",
" </div>\n",
" <div class=\"inner_block\" style=\"display: inline-block; float:left; width:50%;\">\n",
" <img src=\"http://results.juliafem.org/2015-12-17-divided-block-both-parts.png\"\n",
" style=\"width:100%; height:auto; vertical-align:middle;\">\n",
" </div>\n",
"</div>"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: Found 6 element sets: SYM23, SYM12, UPPER_TO_LOWER, LOAD, SYM13, LOWER_TO_UPPER\n"
]
},
{
"data": {
"text/plain": [
"Dict{ASCIIString,Any} with 2 entries:\n",
" \"nodes\" => Dict(11=>[1.0,0.0,0.5],134=>[0.5,0.25,1.0],158=>[1.0,0.5,0.…\n",
" \"connectivity\" => Dict(288=>(:HE8,:OTHER,[176,177,180,179,167,168,171,170]),3…"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using JuliaFEM\n",
"using JuliaFEM.Preprocess: parse_aster_med_file\n",
"using JuliaFEM.Core: LinearElasticityProblem, DirichletProblem, get_connectivity,\n",
" Quad4, Hex8, LinearSolver, update\n",
"mesh = parse_aster_med_file(Pkg.dir(\"JuliaFEM\")*\"/geometry/unit_box/BLOCKS.med\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: created 107 elements.\n",
"INFO: created 59 boundary elements.\n"
]
}
],
"source": [
"# interior elements are of type HE8\n",
"field_problem = LinearElasticityProblem()\n",
"\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" eltype == :HE8 || continue\n",
" element = Hex8(elcon)\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" element[\"youngs modulus\"] = 900.0\n",
" element[\"poissons ratio\"] = 0.25\n",
" #info(\"lower: add element with connectivity $elcon\")\n",
" push!(field_problem, element)\n",
"end\n",
"\n",
"# Neumann boundary condition, traction force -100 on Z direction for element set LOAD\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :QU4) && (elset == :LOAD) || continue\n",
" element = Quad4(elcon)\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" element[\"displacement traction force 3\"] = -100.0\n",
" push!(field_problem, element)\n",
"end\n",
"info(\"created $(length(field_problem.elements)) elements.\")\n",
"\n",
"# boundary conditions\n",
"boundary_problem = DirichletProblem(\"displacement\", 3)\n",
"\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :QU4) && (elset in [:SYM23, :SYM12, :SYM13]) || continue\n",
" element = Quad4(elcon)\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" if elset == :SYM23\n",
" element[\"displacement 1\"] = 0.0\n",
" elseif elset == :SYM12\n",
" element[\"displacement 3\"] = 0.0\n",
" elseif elset == :SYM13\n",
" element[\"displacement 2\"] = 0.0\n",
" end\n",
" push!(boundary_problem, element)\n",
"end\n",
"info(\"created $(length(boundary_problem.elements)) boundary elements.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Creating tie contact\n",
"- define slave element surface (the one where integration happend)\n",
"- define potential master elements for slave elements"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING: using PyPlot.mesh in module Main conflicts with an existing identifier.\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"PyPlot.Figure(PyObject <matplotlib.figure.Figure object at 0x7f5cf2a922d0>)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"(-0.1,1.1)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using JuliaFEM.Core: Element, MortarProblem, calculate_normal_tangential_coordinates!\n",
"\n",
"using PyPlot\n",
"\n",
"#mortar_surface = :LOWER_TO_UPPER\n",
"#slave_surface = :UPPER_TO_LOWER\n",
"mortar_surface = :UPPER_TO_LOWER\n",
"slave_surface = :LOWER_TO_UPPER\n",
"\n",
"fig1 = figure(figsize=(5, 5))\n",
"master_elements = JuliaFEM.Core.Element[]\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :QU4) && (elset == mortar_surface) || continue\n",
" element = Quad4(elcon)\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" X = element(\"geometry\", 0.0)\n",
" x = [X[mod(i, 4)+1][1] for i=1:5]\n",
" y = [X[mod(i, 4)+1][2] for i=1:5]\n",
" plot(x, y, \"-bo\", alpha=0.5)\n",
" push!(master_elements, element)\n",
"end\n",
"\n",
"contact_problem = MortarProblem(\"displacement\", 3)\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :QU4) && (elset == slave_surface) || continue\n",
" element = Quad4(reverse(elcon))\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" element[\"master elements\"] = master_elements\n",
" X = element(\"geometry\", 0.0)\n",
" x = [X[mod(i, 4)+1][1] for i=1:5]\n",
" y = [X[mod(i, 4)+1][2] for i=1:5]\n",
" plot(x, y, \"-ro\", alpha=0.5)\n",
" calculate_normal_tangential_coordinates!(element, 0.0)\n",
" push!(contact_problem, element)\n",
"end\n",
"xlim(-0.1, 1.1)\n",
"ylim(-0.1, 1.1)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: # of field problems: 1\n",
"INFO: # of boundary problems: 2\n",
"INFO: Starting iteration 1\n",
"INFO: Assembling field problems...\n",
"INFO: Assembling body 1...\n",
"INFO: Assembly: 10.0 % done. \n",
"INFO: Assembly: 20.0 % done. \n",
"INFO: Assembly: 30.0 % done. \n",
"INFO: Assembly: 40.0 % done. \n",
"INFO: Assembly: 50.0 % done. \n",
"INFO: Assembly: 60.0 % done. \n",
"INFO: Assembly: 70.0 % done. \n",
"INFO: Assembly: 80.0 % done. \n",
"INFO: Assembly: 90.0 % done. \n",
"INFO: Assembly: 100.0 % done. \n",
"INFO: dim = 567\n",
"INFO: Assembling boundary problems...\n",
"INFO: Assembling boundary 1...\n",
"INFO: Assembling boundary 2...\n",
"INFO: dumping matrices to disk, file = matrices_tie_contact_3d_host_1_iteration_1.jld\n",
"INFO: Solving system\n",
"INFO: UMFPACK: solved in 0.21409296989440918 seconds. norm = 1.0506403593090503\n",
"INFO: timing info for iteration:\n",
"INFO: boundary assembly : 1.9287428855895996\n",
"INFO: field assembly : 1.2453219890594482\n",
"INFO: dump matrices to disk : 1.1484379768371582\n",
"INFO: solve problem : 0.34978604316711426\n",
"INFO: update element data : 0.023519039154052734\n",
"INFO: non-linear iteration : 4.695832014083862\n",
"INFO: solver finished in 4.851454019546509 seconds.\n",
"INFO: nid near corner = 95\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777818,0.02777777777777777,-0.11111111111111108]\n"
]
}
],
"source": [
"using JuliaFEM.Core: DirectSolver\n",
"solver = DirectSolver()\n",
"solver.name = \"tie_contact_3d\"\n",
"solver.method = :UMFPACK\n",
"solver.nonlinear_problem = false\n",
"solver.max_iterations = 1\n",
"solver.dump_matrices = true\n",
"push!(solver, field_problem)\n",
"push!(solver, boundary_problem)\n",
"push!(solver, contact_problem)\n",
"call(solver, 0.0)\n",
"\n",
"using JuliaFEM.Test\n",
"\n",
"nid = 0\n",
"for (nid, coords) in mesh[\"nodes\"]\n",
" if isapprox(coords, [1.0, 1.0, 1.0])\n",
" info(\"nid near corner = $nid\")\n",
" break\n",
" end\n",
"end\n",
"nid\n",
"\n",
"known_value = [1/36, 1/36, -1/9]\n",
"\n",
"for element in field_problem.elements\n",
" i = indexin([nid], get_connectivity(element))[1]\n",
" i != 0 || continue\n",
" X = element(\"geometry\", 0.0)\n",
" u = element(\"displacement\", 0.0)\n",
" info(\"displacement X = $(X[i]), u = $(u[i])\")\n",
" @test isapprox(u[i], known_value)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777818,0.02777777777777777,-0.11111111111111108]\n",
"INFO: XDFM: ndim = 567\n"
]
}
],
"source": [
"xdoc, xmodel = JuliaFEM.Postprocess.xdmf_new_model()\n",
"coll = JuliaFEM.Postprocess.xdmf_new_temporal_collection(xmodel)\n",
"grid = JuliaFEM.Postprocess.xdmf_new_grid(coll; time=0.0)\n",
"\n",
"Xg = Dict{Int64, Vector{Float64}}()\n",
"ug = Dict{Int64, Vector{Float64}}()\n",
"for element in field_problem.elements\n",
" conn = get_connectivity(element)\n",
" X = element(\"geometry\", 0.0)\n",
" u = element(\"displacement\", 0.0)\n",
" for (i, c) in enumerate(conn)\n",
" Xg[c] = X[i]\n",
" ug[c] = u[i]\n",
" end\n",
"end\n",
"perm = sort(collect(keys(Xg)))\n",
"nodes = Vector{Float64}[Xg[i] for i in perm]\n",
"disp = Vector{Float64}[ug[i] for i in perm]\n",
"elements = []\n",
"for el in field_problem.elements\n",
" isa(el, JuliaFEM.Core.Element{JuliaFEM.Core.Hex8}) || continue\n",
" push!(elements, (:Hex8, get_connectivity(el)))\n",
"end\n",
"#elements\n",
"JuliaFEM.Postprocess.xdmf_new_mesh!(grid, nodes, elements)\n",
"JuliaFEM.Postprocess.xdmf_new_nodal_field!(grid, \"displacement\", disp)\n",
"JuliaFEM.Postprocess.xdmf_save_model(xdoc, \"/tmp/blocks.xmf\");"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"<img src=\"http://results.juliafem.org/2015-12-17-divided-block-results.png\"\n",
" style=\"width:80%; height:auto; vertical-align:middle;\">"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"using JuliaFEM\n",
"using JuliaFEM.Preprocess: parse_aster_med_file\n",
"using JuliaFEM.Core: LinearElasticityProblem, DirichletProblem, get_connectivity, Tri3, Tet4, LinearSolver, update"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: Found 6 element sets: SYM23, SYM12, UPPER_TO_LOWER, LOAD, SYM13, LOWER_TO_UPPER\n"
]
},
{
"data": {
"text/plain": [
"Dict{ASCIIString,Any} with 2 entries:\n",
" \"nodes\" => Dict(11=>[0.0,0.3333333333333333,0.0],134=>[0.0,0.869378844…\n",
" \"connectivity\" => Dict(306=>(:TE4,:OTHER,[53,24,51,83]),1316=>(:TE4,:OTHER,[2…"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mesh = parse_aster_med_file(Pkg.dir(\"JuliaFEM\")*\"/geometry/unit_box/BLOCKS_TET4.med\")\n",
"#med = JuliaFEM.Preprocess.MEDFile(Pkg.dir(\"JuliaFEM\")*\"/geometry/unit_box/BLOCKS_TET4.med\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: created 955 elements.\n",
"INFO: created 116 boundary elements.\n"
]
}
],
"source": [
"# interior elements are of type HE8\n",
"field_problem = LinearElasticityProblem()\n",
"\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" eltype == :TE4 || continue\n",
" element = Tet4(elcon)\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" element[\"youngs modulus\"] = 900.0\n",
" element[\"poissons ratio\"] = 0.25\n",
" #info(\"lower: add element with connectivity $elcon\")\n",
" push!(field_problem, element)\n",
"end\n",
"\n",
"# Neumann boundary condition, traction force -100 on Z direction for element set LOAD\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :TR3) && (elset == :LOAD) || continue\n",
" element = Tri3(elcon)\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" element[\"displacement traction force 3\"] = -100.0\n",
" push!(field_problem, element)\n",
"end\n",
"info(\"created $(length(field_problem.elements)) elements.\")\n",
"\n",
"# boundary conditions\n",
"boundary_problem = DirichletProblem(\"displacement\", 3)\n",
"\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :TR3) && (elset in [:SYM23, :SYM12, :SYM13]) || continue\n",
" element = Tri3(elcon)\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" if elset == :SYM23\n",
" element[\"displacement 1\"] = 0.0\n",
" elseif elset == :SYM12\n",
" element[\"displacement 3\"] = 0.0\n",
" elseif elset == :SYM13\n",
" element[\"displacement 2\"] = 0.0\n",
" end\n",
" push!(boundary_problem, element)\n",
"end\n",
"info(\"created $(length(boundary_problem.elements)) boundary elements.\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING: using PyPlot.mesh in module Main conflicts with an existing identifier.\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"PyPlot.Figure(PyObject <matplotlib.figure.Figure object at 0x7f7024d3c2d0>)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"(-0.1,1.1)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using JuliaFEM.Core: Element, MortarProblem, calculate_normal_tangential_coordinates!\n",
"\n",
"using PyPlot\n",
"\n",
"#mortar_surface = :LOWER_TO_UPPER\n",
"#slave_surface = :UPPER_TO_LOWER\n",
"mortar_surface = :UPPER_TO_LOWER\n",
"slave_surface = :LOWER_TO_UPPER\n",
"\n",
"fig1 = figure(figsize=(5, 5))\n",
"master_elements = JuliaFEM.Core.Element[]\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :TR3) && (elset == mortar_surface) || continue\n",
" element = Tri3(elcon)\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" X = element(\"geometry\", 0.0)\n",
" x = [X[mod(i, 3)+1][1] for i=1:4]\n",
" y = [X[mod(i, 3)+1][2] for i=1:4]\n",
" plot(x, y, \"-bo\", alpha=0.5)\n",
" push!(master_elements, element)\n",
"end\n",
"\n",
"contact_problem = MortarProblem(\"displacement\", 3)\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :TR3) && (elset == slave_surface) || continue\n",
" element = Tri3(reverse(elcon))\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" element[\"master elements\"] = master_elements\n",
" X = element(\"geometry\", 0.0)\n",
" x = [X[mod(i, 3)+1][1] for i=1:4]\n",
" y = [X[mod(i, 3)+1][2] for i=1:4]\n",
" plot(x, y, \"-ro\", alpha=0.5)\n",
" calculate_normal_tangential_coordinates!(element, 0.0)\n",
" push!(contact_problem, element)\n",
"end\n",
"xlim(-0.1, 1.1)\n",
"ylim(-0.1, 1.1)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: # of field problems: 1\n",
"INFO: # of boundary problems: 2\n",
"INFO: Starting iteration 1\n",
"INFO: Assembling field problems...\n",
"INFO: Assembling body 1...\n",
"INFO: Assembly: 10.0 % done. \n",
"INFO: Assembly: 20.0 % done. \n",
"INFO: Assembly: 30.0 % done. \n",
"INFO: Assembly: 40.0 % done. \n",
"INFO: Assembly: 50.0 % done. \n",
"INFO: Assembly: 60.0 % done. \n",
"INFO: Assembly: 70.0 % done. \n",
"INFO: Assembly: 80.0 % done. \n",
"INFO: Assembly: 90.0 % done. \n",
"INFO: Assembly: 100.0 % done. \n",
"INFO: dim = 807\n",
"INFO: Assembling boundary problems...\n",
"INFO: Assembling boundary 1...\n",
"INFO: Assembly: 10.0 % done. \n",
"INFO: Assembly: 20.0 % done. \n",
"INFO: Assembly: 30.0 % done. \n",
"INFO: Assembly: 40.0 % done. \n",
"INFO: Assembly: 50.0 % done. \n",
"INFO: Assembly: 60.0 % done. \n",
"INFO: Assembly: 70.0 % done. \n",
"INFO: Assembly: 80.0 % done. \n",
"INFO: Assembly: 90.0 % done. \n",
"INFO: Assembly: 100.0 % done. \n",
"INFO: Assembling boundary 2...\n",
"INFO: dumping matrices to disk, file = matrices_tie_contact_3d_host_1_iteration_1.jld\n",
"INFO: Solving system\n",
"INFO: UMFPACK: solved in 0.23568201065063477 seconds. norm = 1.2500614850006646\n",
"INFO: timing info for iteration:\n",
"INFO: boundary assembly : 3.2558910846710205\n",
"INFO: field assembly : 1.247041940689087\n",
"INFO: dump matrices to disk : 1.1785790920257568\n",
"INFO: solve problem : 0.3804500102996826\n",
"INFO: update element data : 0.03557395935058594\n",
"INFO: non-linear iteration : 6.097559213638306\n",
"INFO: solver finished in 6.260515928268433 seconds.\n",
"INFO: nid near corner = 120\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777707,0.027777777777777592,-0.11111111111111081]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777707,0.027777777777777592,-0.11111111111111081]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777707,0.027777777777777592,-0.11111111111111081]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777707,0.027777777777777592,-0.11111111111111081]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777707,0.027777777777777592,-0.11111111111111081]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777707,0.027777777777777592,-0.11111111111111081]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777707,0.027777777777777592,-0.11111111111111081]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777707,0.027777777777777592,-0.11111111111111081]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777707,0.027777777777777592,-0.11111111111111081]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777707,0.027777777777777592,-0.11111111111111081]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777707,0.027777777777777592,-0.11111111111111081]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777777777777707,0.027777777777777592,-0.11111111111111081]\n"
]
}
],
"source": [
"using JuliaFEM.Core: DirectSolver\n",
"solver = DirectSolver()\n",
"solver.name = \"tie_contact_3d\"\n",
"solver.method = :UMFPACK\n",
"solver.nonlinear_problem = false\n",
"solver.max_iterations = 1\n",
"solver.dump_matrices = true\n",
"push!(solver, field_problem)\n",
"push!(solver, boundary_problem)\n",
"push!(solver, contact_problem)\n",
"call(solver, 0.0)\n",
"\n",
"using JuliaFEM.Test\n",
"\n",
"nid = 0\n",
"for (nid, coords) in mesh[\"nodes\"]\n",
" if isapprox(coords, [1.0, 1.0, 1.0])\n",
" info(\"nid near corner = $nid\")\n",
" break\n",
" end\n",
"end\n",
"nid\n",
"\n",
"known_value = [1/36, 1/36, -1/9]\n",
"\n",
"for element in field_problem.elements\n",
" i = indexin([nid], get_connectivity(element))[1]\n",
" i != 0 || continue\n",
" X = element(\"geometry\", 0.0)\n",
" u = element(\"displacement\", 0.0)\n",
" info(\"displacement X = $(X[i]), u = $(u[i])\")\n",
" @test isapprox(u[i], known_value, atol=1.0e-5)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: XDFM: ndim = 807\n"
]
}
],
"source": [
"xdoc, xmodel = JuliaFEM.Postprocess.xdmf_new_model()\n",
"coll = JuliaFEM.Postprocess.xdmf_new_temporal_collection(xmodel)\n",
"grid = JuliaFEM.Postprocess.xdmf_new_grid(coll; time=0.0)\n",
"\n",
"Xg = Dict{Int64, Vector{Float64}}()\n",
"ug = Dict{Int64, Vector{Float64}}()\n",
"for element in field_problem.elements\n",
" conn = get_connectivity(element)\n",
" X = element(\"geometry\", 0.0)\n",
" u = element(\"displacement\", 0.0)\n",
" for (i, c) in enumerate(conn)\n",
" Xg[c] = X[i]\n",
" ug[c] = u[i]\n",
" end\n",
"end\n",
"perm = sort(collect(keys(Xg)))\n",
"nodes = Vector{Float64}[Xg[i] for i in perm]\n",
"disp = Vector{Float64}[ug[i] for i in perm]\n",
"elements = []\n",
"for el in field_problem.elements\n",
" isa(el, JuliaFEM.Core.Element{JuliaFEM.Core.Tet4}) || continue\n",
" push!(elements, (:Tet4, get_connectivity(el)))\n",
"end\n",
"#elements\n",
"JuliaFEM.Postprocess.xdmf_new_mesh!(grid, nodes, elements)\n",
"JuliaFEM.Postprocess.xdmf_new_nodal_field!(grid, \"displacement\", disp)\n",
"JuliaFEM.Postprocess.xdmf_save_model(xdoc, \"/tmp/blocks_tet4.xmf\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<img src=\"http://results.juliafem.org/divided-block-tet4/2015-12-17-tet4-results.png\"\n",
" style=\"width:80%; height:auto; vertical-align:middle;\">"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Several contacts with shared nodes"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: Found 12 element sets: BLOCK4_TO_BLOCK3, SYM12, SYM23, BLOCK4_TO_BLOCK2, BLOCK3_TO_BLOCK4, BLOCK1_TO_BLOCK3, SYM13, LOAD, BLOCK1_TO_BLOCK2, BLOCK2_TO_BLOCK4, BLOCK2_TO_BLOCK1, BLOCK3_TO_BLOCK1\n"
]
},
{
"data": {
"text/plain": [
"Dict{ASCIIString,Any} with 2 entries:\n",
" \"nodes\" => Dict(306=>[0.0,0.8469606634303125,0.4191161978569679],29=>[…\n",
" \"connectivity\" => Dict(2843=>(:TE4,:OTHER,[631,574,595,513]),1316=>(:TR3,:SYM…"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using JuliaFEM\n",
"using JuliaFEM.Preprocess: parse_aster_med_file\n",
"using JuliaFEM.Core: LinearElasticityProblem, DirichletProblem, get_connectivity, Tri3, Tet4, LinearSolver, update\n",
"mesh = parse_aster_med_file(Pkg.dir(\"JuliaFEM\")*\"/geometry/unit_box/SUPERBLOCK.med\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: created 2878 elements.\n",
"INFO: created 403 boundary elements.\n"
]
}
],
"source": [
"# interior elements are of type HE8\n",
"field_problem = LinearElasticityProblem()\n",
"\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" eltype == :TE4 || continue\n",
" element = Tet4(elcon)\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" element[\"youngs modulus\"] = 900.0\n",
" element[\"poissons ratio\"] = 0.25\n",
" #info(\"lower: add element with connectivity $elcon\")\n",
" push!(field_problem, element)\n",
"end\n",
"\n",
"# Neumann boundary condition, traction force -100 on Z direction for element set LOAD\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :TR3) && (elset == :LOAD) || continue\n",
" element = Tri3(elcon)\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" element[\"displacement traction force 3\"] = -100.0\n",
" push!(field_problem, element)\n",
"end\n",
"info(\"created $(length(field_problem.elements)) elements.\")\n",
"\n",
"# boundary conditions\n",
"boundary_problem = DirichletProblem(\"displacement\", 3)\n",
"\n",
"for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :TR3) && (elset in [:SYM23, :SYM12, :SYM13]) || continue\n",
" element = Tri3(elcon)\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" if elset == :SYM23\n",
" element[\"displacement 1\"] = 0.0\n",
" elseif elset == :SYM12\n",
" element[\"displacement 3\"] = 0.0\n",
" elseif elset == :SYM13\n",
" element[\"displacement 2\"] = 0.0\n",
" end\n",
" push!(boundary_problem, element)\n",
"end\n",
"info(\"created $(length(boundary_problem.elements)) boundary elements.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Contact pairs: BLOCK1 <-> BLOCK3, BLOCK1 <-> BLOCK2, BLOCK2 <-> BLOCK4, BLOCK3 <-> BLOCK4"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"using JuliaFEM.Core: Element, MortarProblem, calculate_normal_tangential_coordinates!\n",
"\n",
"function create_contact(master_surface, slave_surface)\n",
"\n",
" master_elements = JuliaFEM.Core.Element[]\n",
" for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :TR3) && (elset == master_surface) || continue\n",
" element = Tri3(elcon)\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" push!(master_elements, element)\n",
" end\n",
"\n",
" contact_problem = MortarProblem(\"displacement\", 3)\n",
" for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" (eltype == :TR3) && (elset == slave_surface) || continue\n",
" element = Tri3(reverse(elcon))\n",
" update(element, \"geometry\", mesh[\"nodes\"])\n",
" element[\"master elements\"] = master_elements\n",
" calculate_normal_tangential_coordinates!(element, 0.0)\n",
" push!(contact_problem, element)\n",
" end\n",
"\n",
" return contact_problem\n",
"end\n",
"\n",
"tie1 = create_contact(:BLOCK1_TO_BLOCK3, :BLOCK3_TO_BLOCK1)\n",
"tie2 = create_contact(:BLOCK1_TO_BLOCK2, :BLOCK2_TO_BLOCK1)\n",
"tie3 = create_contact(:BLOCK2_TO_BLOCK4, :BLOCK4_TO_BLOCK2)\n",
"tie4 = create_contact(:BLOCK3_TO_BLOCK4, :BLOCK4_TO_BLOCK3);"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: # of field problems: 1\n",
"INFO: # of boundary problems: 5\n",
"INFO: Starting iteration 1\n",
"INFO: Assembling field problems...\n",
"INFO: Assembling body 1...\n",
"INFO: Assembly: 10.0 % done. \n",
"INFO: Assembly: 20.0 % done. \n",
"INFO: Assembly: 30.0 % done. \n",
"INFO: Assembly: 40.0 % done. \n",
"INFO: Assembly: 50.0 % done. \n",
"INFO: Assembly: 60.0 % done. \n",
"INFO: Assembly: 70.0 % done. \n",
"INFO: Assembly: 80.0 % done. \n",
"INFO: Assembly: 90.0 % done. \n",
"INFO: Assembly: 100.0 % done. \n",
"INFO: dim = 2562\n",
"INFO: Assembling boundary problems...\n",
"INFO: Assembling boundary 1...\n",
"INFO: Assembly: 10.0 % done. \n",
"INFO: Assembly: 20.0 % done. \n",
"INFO: Assembly: 30.0 % done. \n",
"INFO: Assembly: 40.0 % done. \n",
"INFO: Assembly: 50.0 % done. \n",
"INFO: Assembly: 60.0 % done. \n",
"INFO: Assembly: 70.0 % done. \n",
"INFO: Assembly: 80.0 % done. \n",
"INFO: Assembly: 90.0 % done. \n",
"INFO: Assembly: 100.0 % done. \n",
"INFO: Assembling boundary 2...\n",
"INFO: Assembling boundary 3...\n",
"INFO: Assembling boundary 4...\n",
"INFO: Assembling boundary 5...\n",
"INFO: dumping matrices to disk, file = matrices_tie_contact_3d_host_1_iteration_1.jld\n",
"INFO: Solving system\n",
"INFO: UMFPACK: solved in 0.2858870029449463 seconds. norm = 1.9710688787586395\n",
"INFO: timing info for iteration:\n",
"INFO: boundary assembly : 10.795902967453003\n",
"INFO: field assembly : 1.356456995010376\n",
"INFO: dump matrices to disk : 1.1161930561065674\n",
"INFO: solve problem : 0.4241180419921875\n",
"INFO: update element data : 0.05763602256774902\n",
"INFO: non-linear iteration : 13.75032901763916\n",
"INFO: solver finished in 13.92406702041626 seconds.\n",
"INFO: nid near corner = 502\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777977912483327,0.02776944079303928,-0.11111675469425412]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777977912483327,0.02776944079303928,-0.11111675469425412]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777977912483327,0.02776944079303928,-0.11111675469425412]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777977912483327,0.02776944079303928,-0.11111675469425412]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777977912483327,0.02776944079303928,-0.11111675469425412]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777977912483327,0.02776944079303928,-0.11111675469425412]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777977912483327,0.02776944079303928,-0.11111675469425412]\n",
"INFO: displacement X = [1.0,1.0,1.0], u = [0.027777977912483327,0.02776944079303928,-0.11111675469425412]\n"
]
}
],
"source": [
"using JuliaFEM.Core: DirectSolver\n",
"solver = DirectSolver()\n",
"solver.name = \"tie_contact_3d\"\n",
"solver.method = :UMFPACK\n",
"solver.nonlinear_problem = false\n",
"solver.max_iterations = 1\n",
"solver.dump_matrices = true\n",
"push!(solver, field_problem)\n",
"push!(solver, boundary_problem)\n",
"push!(solver, tie1, tie2, tie3, tie4)\n",
"call(solver, 0.0)\n",
"\n",
"using JuliaFEM.Test\n",
"\n",
"nid = 0\n",
"for (nid, coords) in mesh[\"nodes\"]\n",
" if isapprox(coords, [1.0, 1.0, 1.0])\n",
" info(\"nid near corner = $nid\")\n",
" break\n",
" end\n",
"end\n",
"nid\n",
"\n",
"known_value = [1/36, 1/36, -1/9]\n",
"\n",
"for element in field_problem.elements\n",
" i = indexin([nid], get_connectivity(element))[1]\n",
" i != 0 || continue\n",
" X = element(\"geometry\", 0.0)\n",
" u = element(\"displacement\", 0.0)\n",
" info(\"displacement X = $(X[i]), u = $(u[i])\")\n",
" @test isapprox(u[i], known_value, atol=1.0e-3)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: XDFM: ndim = 2562\n"
]
}
],
"source": [
"xdoc, xmodel = JuliaFEM.Postprocess.xdmf_new_model()\n",
"coll = JuliaFEM.Postprocess.xdmf_new_temporal_collection(xmodel)\n",
"grid = JuliaFEM.Postprocess.xdmf_new_grid(coll; time=0.0)\n",
"\n",
"Xg = Dict{Int64, Vector{Float64}}()\n",
"ug = Dict{Int64, Vector{Float64}}()\n",
"for element in field_problem.elements\n",
" conn = get_connectivity(element)\n",
" X = element(\"geometry\", 0.0)\n",
" u = element(\"displacement\", 0.0)\n",
" for (i, c) in enumerate(conn)\n",
" Xg[c] = X[i]\n",
" ug[c] = u[i]\n",
" end\n",
"end\n",
"perm = sort(collect(keys(Xg)))\n",
"nodes = Vector{Float64}[Xg[i] for i in perm]\n",
"disp = Vector{Float64}[ug[i] for i in perm]\n",
"elements = []\n",
"for el in field_problem.elements\n",
" isa(el, JuliaFEM.Core.Element{JuliaFEM.Core.Tet4}) || continue\n",
" push!(elements, (:Tet4, get_connectivity(el)))\n",
"end\n",
"#elements\n",
"JuliaFEM.Postprocess.xdmf_new_mesh!(grid, nodes, elements)\n",
"JuliaFEM.Postprocess.xdmf_new_nodal_field!(grid, \"displacement\", disp)\n",
"JuliaFEM.Postprocess.xdmf_save_model(xdoc, \"/tmp/superblock.xmf\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<img src=\"http://results.juliafem.org/2015-12-17-superblock.png\"\n",
" style=\"width:80%; height:auto; vertical-align:middle;\">"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 0.4.2",
"language": "julia",
"name": "julia-0.4"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "0.4.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}