Files
JuliaFEM.jl/docs/tutorials/2016-02-03-curved-interface.ipynb
T

1439 lines
428 KiB
Plaintext
Raw Normal View History

2016-02-08 11:10:19 +02:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"300"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using JuliaFEM\n",
"\n",
"using JuliaFEM.Core: Node, Element, Seg2, Tri3, Quad4\n",
"using JuliaFEM.Core: Problem, FieldProblem, BoundaryProblem, Dirichlet, Elasticity, Mortar\n",
"using JuliaFEM.Core: Solver, SparseMatrixCOO\n",
"using JuliaFEM.Core: get_elements, update!, calculate_normal_tangential_coordinates!,\n",
"get_connectivity, get_field_assembly, get_boundary_problems, handle_overconstraint_error!\n",
"\n",
"using JuliaFEM.Preprocess: parse_aster_med_file\n",
"\n",
"import JuliaFEM.Core: solve_linear_system\n",
"\n",
"using PyPlot\n",
"\n",
"ENV[\"COLUMNS\"] = 300"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"plot_segmentation (generic function with 1 method)"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function plot_it(field_problem, scaling_factor=1, time=0.0; show_undeformed=true,\n",
" show_deformed=true, show_node_ids=true, equal_axis=true, xmin=-1000, ymin=-1000, xmax=1000, ymax=1000)\n",
"\n",
" function in_window(X)\n",
" xmin < X[1] < xmax || return false\n",
" ymin < X[2] < ymax || return false\n",
" return true\n",
" end\n",
"\n",
" for element in field_problem.elements\n",
" conn = get_connectivity(element)\n",
" X = element(\"geometry\", time)\n",
" \n",
" u = element(\"displacement\", time)\n",
" x = X + scaling_factor*u\n",
"\n",
" if show_undeformed\n",
" # undeformed\n",
" for i=1:length(X)\n",
" in_window(X[i]) || continue\n",
" px1 = X[i][1]\n",
" py1 = X[i][2]\n",
" px2 = X[mod(i,length(X))+1][1]\n",
" py2 = X[mod(i,length(X))+1][2]\n",
" PyPlot.plot([px1, px2], [py1, py2], \"k-\", alpha=0.5, label=\"undeformed\")\n",
" end\n",
" end\n",
"\n",
" if show_deformed\n",
" # deformed\n",
" for i=1:length(x)\n",
" in_window(x[i]) || continue\n",
" px1 = x[i][1]\n",
" py1 = x[i][2]\n",
" px2 = x[mod(i,length(x))+1][1]\n",
" py2 = x[mod(i,length(x))+1][2]\n",
" PyPlot.plot([px1, px2], [py1, py2], \"g-\", alpha=0.5, label=\"deformed\")\n",
" end\n",
" end\n",
"\n",
" if show_node_ids\n",
" for (i, c) in enumerate(conn)\n",
" in_window(x[i]) || continue\n",
" PyPlot.text(x[i][1], x[i][2], \"$c\")\n",
" end\n",
" end\n",
" \n",
" end\n",
"\n",
" if equal_axis\n",
" PyPlot.axis(\"equal\")\n",
" end\n",
" #PyPlot.grid()\n",
"\n",
"end\n",
"\n",
"using JuliaFEM.Core: project_from_master_to_slave, project_from_slave_to_master\n",
"\n",
"function plot_normals(contact_problem, time, scale=3)\n",
" for element in get_elements(contact_problem)\n",
" X1 = element(\"geometry\", [-1.0], time)\n",
" X2 = element(\"geometry\", [ 1.0], time)\n",
" n1 = element(\"normal-tangential coordinates\", [-1.0], time)\n",
" n2 = element(\"normal-tangential coordinates\", [ 1.0], time)\n",
" plot([X1[1], X1[1]+scale*n1[1]], [X1[2], X1[2]+scale*n1[2]], \"-b\")\n",
" plot([X2[1], X2[1]+scale*n2[1]], [X2[2], X2[2]+scale*n2[2]], \"-b\")\n",
" end\n",
"end\n",
"\n",
"function plot_contact_segmentation(slave_element, time)\n",
" for master_element in slave_element[\"master elements\"]\n",
" xi1a = project_from_master_to_slave(slave_element, master_element, [-1.0])\n",
" xi1b = project_from_master_to_slave(slave_element, master_element, [ 1.0])\n",
" xi1 = clamp([xi1a xi1b], -1.0, 1.0)\n",
" l = 1/2*(xi1[2]-xi1[1])\n",
" if abs(l) < 1.0e-9\n",
" #info(\"no contribution\")\n",
" end\n",
" Xs1 = slave_element(\"geometry\", [xi1[1]], time)\n",
" Xs2 = slave_element(\"geometry\", [xi1[2]], time)\n",
" xi2a = project_from_slave_to_master(slave_element, master_element, [xi1[1]])\n",
" xi2b = project_from_slave_to_master(slave_element, master_element, [xi1[2]])\n",
" Xm1 = master_element(\"geometry\", xi2a, time)\n",
" Xm2 = master_element(\"geometry\", xi2b, time)\n",
" plot([Xs1[1], Xm1[1]], [Xs1[2], Xm1[2]], \"-r\", alpha=0.3)\n",
" plot([Xs2[1], Xm2[1]], [Xs2[2], Xm2[2]], \"-r\", alpha=0.3)\n",
" end\n",
"end\n",
"\n",
"function plot_segmentation(contact_problem)\n",
" for (i, element) in enumerate(get_elements(contact_problem))\n",
" haskey(element, \"master elements\") || continue\n",
" plot_contact_segmentation(element, 0.0)\n",
" end\n",
"end\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: normal direction on slave side = [0.8944271909999159 0.4472135954999579]\n"
]
}
],
"source": [
"function get_test_problem_1()\n",
"\n",
" gap = [0.5, 0.0]\n",
" nodes = Dict{Int64, Node}(\n",
" 1 => [0.0, 0.0],\n",
" 2 => [2.0, 0.0],\n",
" 3 => [1.0, 2.0],\n",
" 4 => [0.0, 2.0],\n",
" 5 => [2.0, 0.0]+gap,\n",
" 6 => [4.0, 0.0]+gap,\n",
" 7 => [4.0, 1.0]+gap,\n",
" 8 => [2.0, 1.0]+gap)\n",
"\n",
" E = 288.0\n",
" nu = 1.0/3.0\n",
"\n",
" # field problem is plane stress linear elasticity\n",
" element1 = Quad4([1, 2, 3, 4])\n",
" element2 = Quad4([5, 6, 7, 8])\n",
" update!([element1, element2], \"geometry\", nodes)\n",
" update!([element1, element2], \"youngs modulus\", E)\n",
" update!([element1, element2], \"poissons ratio\", nu)\n",
" field_problem = Problem(Elasticity, \"block\", 2)\n",
" field_problem.properties.formulation = :plane_stress\n",
" push!(field_problem, element1, element2)\n",
"\n",
" # dirichlet boundary conditions\n",
" bc1 = Seg2([1, 4])\n",
" bc2 = Seg2([6, 7])\n",
" update!([bc1, bc2], \"geometry\", nodes)\n",
" update!(bc1, \"displacement 1\", 0.0)\n",
" update!(bc1, \"displacement 2\", 0.0)\n",
" update!(bc2, \"displacement 1\", 0.0)\n",
" update!(bc2, \"displacement 2\", 0.0)\n",
" # name, unknown field, unknown field dimension\n",
" boundary_problem_1 = Problem(Dirichlet, \"ends\", 2, \"displacement\")\n",
" push!(boundary_problem_1, bc1, bc2)\n",
"\n",
" # symmetry boundary condition\n",
" bc3 = Seg2([1, 2])\n",
" bc4 = Seg2([5, 6])\n",
" update!([bc3, bc4], \"geometry\", nodes)\n",
" update!([bc3, bc4], \"displacement 2\", 0.0)\n",
" boundary_problem_2 = Problem(Dirichlet, \"symmetry x-line\", 2, \"displacement\")\n",
" push!(boundary_problem_2, bc3, bc4)\n",
" \n",
" # mortar boundary condition between blocks (set left side as non-mortar side)\n",
" bc5 = Seg2([3, 2])\n",
" bc6 = Seg2([8, 5])\n",
" update!([bc5, bc6], \"geometry\", nodes)\n",
" calculate_normal_tangential_coordinates!(bc5, 0.0)\n",
" bc5[\"master elements\"] = [bc6]\n",
" boundary_problem_3 = Problem(Mortar, \"contact between bodies\", 2, \"displacement\")\n",
" push!(boundary_problem_3, bc5, bc6)\n",
" nt = bc5(\"normal-tangential coordinates\", [0.0], 0.0)[:,1]\n",
" info(\"normal direction on slave side = $(nt')\")\n",
"\n",
" return field_problem, boundary_problem_1, boundary_problem_2, boundary_problem_3\n",
"end\n",
"field_problem, boundary_problem_1, boundary_problem_2, boundary_problem_3 = get_test_problem_1();"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: normal direction on slave side = [0.8944271909999159 0.4472135954999579]\n",
"INFO: solving linear system of 4 problems.\n",
"INFO: System is overconstrained by 2 dofs.\n",
"INFO: Overconstrained_nodes: 1, 6.\n",
"INFO: Following dofs already constrained: 2, 12.\n",
"INFO: \n",
"INFO: SUMMARY for node id 1 with dofs 1, 2:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 1: ⋯ + 1.0*λ₁ ⋯\n",
"INFO: dof 2: ⋯ + 1.0*λ₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 1: 1.0*u₁ = 0.0\n",
"INFO: dof 2: 1.0*u₂ = 0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 2: ⋯ + 1.0*λ₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 2: 1.0*u₂ = 0.0 <-- overconstrained dof\n",
"INFO: rank = 1, dofs = 1\n",
"INFO: algorithm 1 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 2: 1.0*u₂ = 0.0\n",
"INFO: \n",
"INFO: \n",
"INFO: SUMMARY for node id 6 with dofs 11, 12:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 11: ⋯ + 0.5*λ₁₁ ⋯\n",
"INFO: dof 12: ⋯ + 0.5*λ₁₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 11: 0.5*u₁₁ = 0.0\n",
"INFO: dof 12: 0.5*u₁₂ = 0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 12: ⋯ + 1.0*λ₁₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 12: 1.0*u₁₂ = 0.0 <-- overconstrained dof\n",
"INFO: rank = 1, dofs = 1\n",
"INFO: algorithm 1 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 12: 1.0*u₁₂ = 0.0\n",
"INFO: \n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 2.\n",
"INFO: Following dofs already constrained: 4.\n",
"INFO: \n",
"INFO: SUMMARY for node id 2 with dofs 3, 4:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 4: ⋯ + 1.0*λ₄ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 4: 1.0*u₄ = 0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 3: ⋯ + 0.57*λ₃ ⋯\n",
"INFO: dof 4: ⋯ + 0.57*λ₄ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 3: 0.51*u₃ + 0.255*u₄ - 0.383*u₉ - 0.191*u₁₀ - 0.128*u₁₅ - 0.064*u₁₆ = 0.319\n",
"INFO: dof 4: 0.255*u₃ - 0.51*u₄ - 0.191*u₉ + 0.383*u₁₀ - 0.064*u₁₅ + 0.128*u₁₆ = 0.0 <-- overconstrained dof\n",
"INFO: ----- Related equations -----\n",
"INFO: dof 3: 0.51*u₃ + 0.255*u₄ - 0.383*u₉ - 0.191*u₁₀ - 0.128*u₁₅ - 0.064*u₁₆ = 0.319\n",
"INFO: dof 10: 1.0*u₁₀ = 0.0\n",
"INFO: algorithm 1 solved issue? false\n",
"INFO: algorithm 2 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 4: 0.255*u₃ - 0.51*u₄ - 0.191*u₉ + 0.383*u₁₀ - 0.064*u₁₅ + 0.128*u₁₆ = 0.0\n",
"INFO: \n",
"INFO: UMFPACK: solved in 1.722184181213379 seconds. norm = 0.7572029587976586\n",
"INFO: solving linear system of 4 problems.\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"PyPlot.Figure(PyObject <matplotlib.figure.Figure object at 0x7f43da840390>)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"field_problem, boundary_problem_1, boundary_problem_2, boundary_problem_3 = get_test_problem_1()\n",
"solver = Solver(\"solve block problem\")\n",
"push!(solver, field_problem, boundary_problem_1, boundary_problem_2, boundary_problem_3)\n",
"#solver.is_linear_system = true\n",
"call(solver)\n",
"plot_it(field_problem)\n",
"plot_segmentation(boundary_problem_3)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: System is overconstrained by 2 dofs.\n",
"INFO: Overconstrained_nodes: 1, 6.\n",
"INFO: Following dofs already constrained: 2, 12.\n",
"INFO: \n",
"INFO: SUMMARY for node id 1 with dofs 1, 2:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 1: ⋯ + 1.0*λ₁ ⋯\n",
"INFO: dof 2: ⋯ + 1.0*λ₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 1: 1.0*u₁ = 0.0\n",
"INFO: dof 2: 1.0*u₂ = 0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 2: ⋯ + 1.0*λ₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 2: 1.0*u₂ = 0.0 <-- overconstrained dof\n",
"INFO: rank = 1, dofs = 1\n",
"INFO: algorithm 1 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 2: 1.0*u₂ = 0.0\n",
"INFO: \n",
"INFO: \n",
"INFO: SUMMARY for node id 6 with dofs 11, 12:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 11: ⋯ + 0.5*λ₁₁ ⋯\n",
"INFO: dof 12: ⋯ + 0.5*λ₁₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 11: 0.5*u₁₁ = 0.0\n",
"INFO: dof 12: 0.5*u₁₂ = 0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 12: ⋯ + 1.0*λ₁₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 12: 1.0*u₁₂ = 0.0 <-- overconstrained dof\n",
"INFO: rank = 1, dofs = 1\n",
"INFO: algorithm 1 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 12: 1.0*u₁₂ = 0.0\n",
"INFO: \n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 2.\n",
"INFO: Following dofs already constrained: 4.\n",
"INFO: \n",
"INFO: SUMMARY for node id 2 with dofs 3, 4:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 4: ⋯ + 1.0*λ₄ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 4: 1.0*u₄ = 0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 3: ⋯ + 0.57*λ₃ ⋯\n",
"INFO: dof 4: ⋯ + 0.57*λ₄ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 3: 0.51*u₃ + 0.255*u₄ - 0.383*u₉ - 0.191*u₁₀ - 0.128*u₁₅ - 0.064*u₁₆ = 0.319\n",
"INFO: dof 4: 0.255*u₃ - 0.51*u₄ - 0.191*u₉ + 0.383*u₁₀ - 0.064*u₁₅ + 0.128*u₁₆ = 0.0 <-- overconstrained dof\n",
"INFO: ----- Related equations -----\n",
"INFO: dof 3: 0.51*u₃ + 0.255*u₄ - 0.383*u₉ - 0.191*u₁₀ - 0.128*u₁₅ - 0.064*u₁₆ = 0.319\n",
"INFO: dof 10: 1.0*u₁₀ = 0.0\n",
"INFO: algorithm 1 solved issue? false\n",
"INFO: algorithm 2 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 4: 0.255*u₃ - 0.51*u₄ - 0.191*u₉ + 0.383*u₁₀ - 0.064*u₁₅ + 0.128*u₁₆ = 0.0\n",
"INFO: \n",
"INFO: UMFPACK: solved in 0.002077817916870117 seconds. norm = 0.7572029587976586\n",
"INFO: Converged in 2 iterations.\n"
]
}
],
"source": [
"@assert isapprox(norm(field_problem.assembly.u), 0.7572029587976579)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: [0.24895296909147305 0.18847925373355964]\n",
"INFO: [-0.12546065165888792 0.0]\n"
]
}
],
"source": [
"info(field_problem.elements[1](\"displacement\", [ 1.0, -1.0], 0.0)')\n",
"info(field_problem.elements[2](\"displacement\", [-1.0, -1.0], 0.0)')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Curved interface"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: Found 5 element sets: SYM23, LOWER_TO_UPPER, LOAD, SYM13, UPPER_TO_LOWER\n",
"INFO: created 170 field elements.\n",
"INFO: slave element UPPER_TO_LOWER: midpoint = [0.4147584594687138,0.40581289439367096], nt coordinate = [0.06698025853929859 -0.995493336386047\n",
" 0.995493336386047 0.06698025853929859]\n",
"INFO: # of master elements: 5\n",
"INFO: # of slave elements: 6\n",
"INFO: solving linear system of 4 problems.\n",
"INFO: System is overconstrained by 1 dofs.\n"
]
},
{
"data": {
"text/plain": [
"true"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function curved_interface_problem(meshfile=\"/geometry/2d_curved_interface/MESH_SPARSE.med\")\n",
"\n",
" mesh = parse_aster_med_file(Pkg.dir(\"JuliaFEM\")*meshfile)\n",
" \n",
" field_problem = Problem(Elasticity, \"two parts with curved interface\", 2)\n",
" field_problem.properties.formulation = :plane_stress\n",
"\n",
" # field problems\n",
" mapping = Dict(:QU4 => Quad4, :TR3 => Tri3)\n",
" for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" haskey(mapping, eltype) || continue\n",
" element = mapping[eltype](elcon)\n",
" update!(element, \"geometry\", mesh[\"nodes\"])\n",
" element[\"youngs modulus\"] = 2880.0\n",
" element[\"poissons ratio\"] = 1/3\n",
" push!(field_problem, element)\n",
" end\n",
" for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" eltype == :SE2 || continue\n",
" elset == :LOAD || continue\n",
" element = Seg2(elcon)\n",
" update!(element, \"geometry\", mesh[\"nodes\"])\n",
" update!(element, \"displacement traction force 2\", -100.0)\n",
" push!(field_problem, element)\n",
" end\n",
"\n",
" # boundary conditions\n",
" sym13 = Problem(Dirichlet, \"SYM13\", 2, \"displacement\")\n",
" sym23 = Problem(Dirichlet, \"SYM23\", 2, \"displacement\")\n",
"\n",
" for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" eltype == :SE2 || continue\n",
" elset == :SYM13 || continue\n",
" element = Seg2(elcon)\n",
" update!(element, \"geometry\", mesh[\"nodes\"])\n",
" push!(sym13, element)\n",
" end\n",
" for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" eltype == :SE2 || continue\n",
" elset == :SYM23 || continue\n",
" element = Seg2(elcon)\n",
" update!(element, \"geometry\", mesh[\"nodes\"])\n",
" push!(sym23, element)\n",
" end\n",
"\n",
" update!(get_elements(sym13), \"displacement 2\", 0.0)\n",
" update!(get_elements(sym23), \"displacement 1\", 0.0)\n",
"\n",
" info(\"created $(length(get_elements(field_problem))) field elements.\")\n",
"# info(\"created $(length(get_elements(boundary_problem))) boundary elements.\")\n",
"\n",
" slave_surface = :UPPER_TO_LOWER\n",
" master_surface = :LOWER_TO_UPPER\n",
"\n",
" contact = Problem(Mortar, \"tie contact between blocks\", 2, \"displacement\")\n",
" master_elements = Element[]\n",
" for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" eltype == :SE2 || continue\n",
" elset == master_surface || continue\n",
" element = Seg2(elcon)\n",
" update!(element, \"geometry\", mesh[\"nodes\"])\n",
" push!(master_elements, element)\n",
" push!(contact, element)\n",
" end\n",
"\n",
" first = true\n",
" slave_elements = Element[]\n",
" for (elid, (eltype, elset, elcon)) in mesh[\"connectivity\"]\n",
" eltype == :SE2 || continue\n",
" elset == slave_surface || continue\n",
" element = Seg2(elcon)\n",
" update!(element, \"geometry\", mesh[\"nodes\"])\n",
" element[\"master elements\"] = master_elements\n",
" push!(slave_elements, element)\n",
" push!(contact, element)\n",
" end\n",
" calculate_normal_tangential_coordinates!(slave_elements, 0.0)\n",
" if first\n",
" element = slave_elements[1]\n",
" Q = element(\"normal-tangential coordinates\", [0.0], 0.0)\n",
" X = element(\"geometry\", [0.0], 0.0)\n",
" info(\"slave element $slave_surface: midpoint = $X, nt coordinate = $Q\")\n",
" first = false\n",
" end\n",
"\n",
" info(\"# of master elements: $(length(master_elements))\")\n",
" info(\"# of slave elements: $(length(slave_elements))\")\n",
"\n",
" return field_problem, sym13, sym23, contact\n",
"\n",
"end\n",
"\n",
"field_problem, sym13, sym23, contact = curved_interface_problem()\n",
"solver = Solver(\"solver curved interface\")\n",
"\n",
"push!(solver, field_problem, sym13, sym23, contact)\n",
"\n",
"#solver.is_linear_system = true\n",
"call(solver)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"PyPlot.Figure(PyObject <matplotlib.figure.Figure object at 0x7f43d83f3210>)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"(-0.1,1.1,0.3,0.52)"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: Overconstrained_nodes: 47.\n",
"INFO: Following dofs already constrained: 93.\n",
"INFO: \n",
"INFO: SUMMARY for node id 47 with dofs 93, 94:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 93: ⋯ + 0.062*λ₉₃ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 93: 0.062*u₉₃ = 0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 93: ⋯ + 0.085*λ₉₃ ⋯\n",
"INFO: dof 94: ⋯ + 0.085*λ₉₄ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 93: 0.027*u₉ - 0.081*u₁₀ - 0.0*u₁₁ - 0.0*u₁₂ + 0.027*u₉₃ + 0.081*u₉₄ = 0.0 <-- overconstrained dof\n",
"INFO: dof 94: 0.081*u₉ - 0.027*u₁₀ + 0.0*u₁₁ - 0.0*u₁₂ - 0.081*u₉₃ + 0.027*u₉₄ = -0.0\n",
"INFO: ----- Related equations -----\n",
"INFO: dof 94: 0.081*u₉ - 0.027*u₁₀ + 0.0*u₁₁ - 0.0*u₁₂ - 0.081*u₉₃ + 0.027*u₉₄ = -0.0\n",
"INFO: dof 9: 0.062*u₉ = 0.0\n",
"INFO: algorithm 1 solved issue? false\n",
"INFO: algorithm 2 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 93: 0.027*u₉ - 0.081*u₁₀ - 0.0*u₁₁ - 0.0*u₁₂ + 0.027*u₉₃ + 0.081*u₉₄ = 0.0\n",
"INFO: \n",
"INFO: UMFPACK: solved in 0.0029261112213134766 seconds. norm = 0.2117161697202773\n",
"INFO: solving linear system of 4 problems.\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 47.\n",
"INFO: Following dofs already constrained: 93.\n",
"INFO: \n",
"INFO: SUMMARY for node id 47 with dofs 93, 94:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 93: ⋯ + 0.062*λ₉₃ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 93: 0.062*u₉₃ = 0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 93: ⋯ + 0.085*λ₉₃ ⋯\n",
"INFO: dof 94: ⋯ + 0.085*λ₉₄ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 93: 0.027*u₉ - 0.081*u₁₀ - 0.0*u₁₁ - 0.0*u₁₂ + 0.027*u₉₃ + 0.081*u₉₄ = 0.0 <-- overconstrained dof\n",
"INFO: dof 94: 0.081*u₉ - 0.027*u₁₀ + 0.0*u₁₁ - 0.0*u₁₂ - 0.081*u₉₃ + 0.027*u₉₄ = -0.0\n",
"INFO: ----- Related equations -----\n",
"INFO: dof 94: 0.081*u₉ - 0.027*u₁₀ + 0.0*u₁₁ - 0.0*u₁₂ - 0.081*u₉₃ + 0.027*u₉₄ = -0.0\n",
"INFO: dof 9: 0.062*u₉ = 0.0\n",
"INFO: algorithm 1 solved issue? false\n",
"INFO: algorithm 2 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 93: 0.027*u₉ - 0.081*u₁₀ - 0.0*u₁₁ - 0.0*u₁₂ + 0.027*u₉₃ + 0.081*u₉₄ = 0.0\n",
"INFO: \n",
"INFO: UMFPACK: solved in 0.002628803253173828 seconds. norm = 0.2117161697202773\n",
"INFO: Converged in 2 iterations.\n"
]
}
],
"source": [
"figure(figsize=(12, 4))\n",
"plot_it(field_problem; show_undeformed=false, equal_axis=false, show_node_ids=false)\n",
"xlim(-0.1, 1.1)\n",
"ylim(0.30, 0.52)\n",
"axis(\"off\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: Found 6 element sets: SYM23, BLOCK_TO_CYLINDER, CYLINDER_TO_BLOCK, CYLINDER, GROUND, BLOCK\n",
"INFO: # of master elements: 27\n"
]
}
],
"source": [
"using JuliaFEM.Preprocess: aster_create_elements\n",
"\n",
"function create_hertzian_problem(meshfile=\"/geometry/2d_cylinder_roller_contact/MESH_REFINED_3.med\")\n",
"\n",
" mesh = parse_aster_med_file(Pkg.dir(\"JuliaFEM\")*meshfile)\n",
" \n",
" body1 = Problem(Elasticity, \"cylinder\", 2)\n",
" body1_elements = aster_create_elements(mesh, :CYLINDER, :TR3)\n",
" body1.properties.formulation = :plane_strain\n",
" update!(body1_elements, \"youngs modulus\", 210e3)\n",
" update!(body1_elements, \"poissons ratio\", 0.3)\n",
" push!(body1, body1_elements...)\n",
"\n",
" body2 = Problem(Elasticity, \"block\", 2)\n",
" body2_elements = aster_create_elements(mesh, :BLOCK, :TR3)\n",
" body2.properties.formulation = :plane_strain\n",
" update!(body2_elements, \"youngs modulus\", 70.0e3)\n",
" update!(body2_elements, \"poissons ratio\", 0.3)\n",
" push!(body2, body2_elements...)\n",
"\n",
" # boundary conditions\n",
" bc1 = Problem(Dirichlet, \"ground\", 2, \"displacement\")\n",
" bc1_elements = aster_create_elements(mesh, :GROUND, :SE2)\n",
" update!(bc1_elements, \"displacement\", 0.0)\n",
" push!(bc1, bc1_elements...)\n",
"\n",
" bc2 = Problem(Dirichlet, \"symmetry line\", 2, \"displacement\")\n",
" bc2_elements = aster_create_elements(mesh, :SYM23, :SE2)\n",
" update!(bc2_elements, \"displacement 1\", 0.0)\n",
" push!(bc2, bc2_elements...)\n",
"\n",
" # contact\n",
" bc3 = Problem(Mortar, \"contact interface\", 2, \"displacement\")\n",
" bc3_slave_elements = aster_create_elements(mesh, :CYLINDER_TO_BLOCK, :SE2)\n",
" bc3_master_elements = aster_create_elements(mesh, :BLOCK_TO_CYLINDER, :SE2)\n",
" update!(bc3_slave_elements, \"master elements\", bc3_master_elements)\n",
" calculate_normal_tangential_coordinates!(bc3_slave_elements, 0.0)\n",
" push!(bc3, bc3_slave_elements...)\n",
" push!(bc3, bc3_master_elements...)\n",
" info(\"# of master elements: $(length(bc3_master_elements))\")\n",
" info(\"# of slave elements: $(length(bc3_slave_elements))\")\n",
" fel = bc3_slave_elements[1]\n",
" n = fel(\"normals\", [0.0], 0.0)\n",
" X1 = fel(\"geometry\", [-1.0], 0.0)\n",
" X2 = fel(\"geometry\", [ 1.0], 0.0)\n",
" info(\"normal direction of first contact element: $n\")\n",
" info(\"element geometry: from $X1 to $X2\")\n",
"\n",
" return body1, body2, bc1, bc2, bc3\n",
"\n",
"end\n",
"create_hertzian_problem();"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: # of slave elements: 37\n",
"INFO: normal direction of first contact element: [0.33004993336440486,-0.9438504633679171]\n",
"INFO: element geometry: from [17.19187882421571,203.04854312703935] to [15.811388300842912,202.56583509747463]\n",
"INFO: Found 6 element sets: SYM23, BLOCK_TO_CYLINDER, CYLINDER_TO_BLOCK, CYLINDER, GROUND, BLOCK\n",
"INFO: # of master elements: 27\n",
"INFO: # of slave elements: 37\n",
"INFO: normal direction of first contact element: [0.33004993336440486,-0.9438504633679171]\n",
"INFO: element geometry: from [17.19187882421571,203.04854312703935] to [15.811388300842912,202.56583509747463]\n",
"INFO: solving linear system of 5 problems.\n",
"INFO: Hacking nodal force.\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 11.\n",
"INFO: Following dofs already constrained: 21.\n",
"INFO: \n",
"INFO: SUMMARY for node id 11 with dofs 21, 22:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: dof 22: ⋯ + 5.0*λ₂₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: dof 22: 5.0*u₂₂ = 0.0\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: rank = 1, dofs = 1\n",
"INFO: algorithm 1 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 21: 1.0*u₂₁ = 0.0\n",
"INFO: \n",
"INFO: PDASS: Starting primal-dual active set strategy to determine active constraints\n",
"INFO: PDASS: contact nodes: [490,491,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: active nodes: [491]\n",
"INFO: PDASS: inactive nodes: [490,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 491.\n",
"INFO: Following dofs already constrained: 981.\n",
"INFO: \n",
"INFO: SUMMARY for node id 491 with dofs 981, 982:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.1*u₉₈₁ = -0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: dof 982: ⋯ + 0.1*λ₉₈₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0 <-- overconstrained dof\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: ----- Related equations -----\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: dof 115: 0.1*u₁₁₅ = 0.0\n",
"INFO: algorithm 1 solved issue? false\n",
"INFO: algorithm 2 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0\n",
"INFO: \n",
"INFO: UMFPACK: solved in 0.14606285095214844 seconds. norm = 85.08623527509272\n",
"INFO: solving linear system of 5 problems.\n",
"INFO: Hacking nodal force.\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 11.\n",
"INFO: Following dofs already constrained: 21.\n",
"INFO: \n",
"INFO: SUMMARY for node id 11 with dofs 21, 22:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: dof 22: ⋯ + 5.0*λ₂₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: dof 22: 5.0*u₂₂ = 0.0\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: rank = 1, dofs = 1\n",
"INFO: algorithm 1 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 21: 1.0*u₂₁ = 0.0\n",
"INFO: \n",
"INFO: PDASS: Starting primal-dual active set strategy to determine active constraints\n",
"INFO: PDASS: contact nodes: [490,491,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: active nodes: [491,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: inactive nodes: [490,561,562,563,564,565,566,567,568,569,570,571,572]\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 491.\n",
"INFO: Following dofs already constrained: 981.\n",
"INFO: \n",
"INFO: SUMMARY for node id 491 with dofs 981, 982:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.1*u₉₈₁ = -0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: dof 982: ⋯ + 0.1*λ₉₈₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0 <-- overconstrained dof\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: ----- Related equations -----\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: dof 115: 0.1*u₁₁₅ = 0.0\n",
"INFO: algorithm 1 solved issue? false\n",
"INFO: algorithm 2 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0\n",
"INFO: \n",
"INFO: UMFPACK: solved in 0.026980876922607422 seconds. norm = 59.83136581257375\n",
"INFO: solving linear system of 5 problems.\n",
"INFO: Hacking nodal force.\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 11.\n",
"INFO: Following dofs already constrained: 21.\n",
"INFO: \n",
"INFO: SUMMARY for node id 11 with dofs 21, 22:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: dof 22: ⋯ + 5.0*λ₂₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: dof 22: 5.0*u₂₂ = 0.0\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: rank = 1, dofs = 1\n",
"INFO: algorithm 1 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 21: 1.0*u₂₁ = 0.0\n",
"INFO: \n",
"INFO: PDASS: Starting primal-dual active set strategy to determine active constraints\n",
"INFO: PDASS: contact nodes: [490,491,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: active nodes: [491,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: inactive nodes: [490,561,562,563,564,565,566,567,568,569,570,571,572,573,574]\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 491.\n",
"INFO: Following dofs already constrained: 981.\n",
"INFO: \n",
"INFO: SUMMARY for node id 491 with dofs 981, 982:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.1*u₉₈₁ = -0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: dof 982: ⋯ + 0.1*λ₉₈₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0 <-- overconstrained dof\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: ----- Related equations -----\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: dof 115: 0.1*u₁₁₅ = 0.0\n",
"INFO: algorithm 1 solved issue? false\n",
"INFO: algorithm 2 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0\n",
"INFO: \n",
"INFO: UMFPACK: solved in 0.02696514129638672 seconds. norm = 52.776611096750806\n",
"INFO: solving linear system of 5 problems.\n",
"INFO: Hacking nodal force.\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 11.\n",
"INFO: Following dofs already constrained: 21.\n",
"INFO: \n",
"INFO: SUMMARY for node id 11 with dofs 21, 22:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: dof 22: ⋯ + 5.0*λ₂₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: dof 22: 5.0*u₂₂ = 0.0\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: rank = 1, dofs = 1\n",
"INFO: algorithm 1 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 21: 1.0*u₂₁ = 0.0\n",
"INFO: \n",
"INFO: PDASS: Starting primal-dual active set strategy to determine active constraints\n",
"INFO: PDASS: contact nodes: [490,491,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: active nodes: [491,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: inactive nodes: [490,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576]\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 491.\n",
"INFO: Following dofs already constrained: 981.\n",
"INFO: \n",
"INFO: SUMMARY for node id 491 with dofs 981, 982:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.1*u₉₈₁ = -0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: dof 982: ⋯ + 0.1*λ₉₈₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0 <-- overconstrained dof\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: ----- Related equations -----\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: dof 115: 0.1*u₁₁₅ = 0.0\n",
"INFO: algorithm 1 solved issue? false\n",
"INFO: algorithm 2 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0\n",
"INFO: \n",
"INFO: UMFPACK: solved in 0.02712392807006836 seconds. norm = 48.47259883552261\n",
"INFO: solving linear system of 5 problems.\n",
"INFO: Hacking nodal force.\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 11.\n",
"INFO: Following dofs already constrained: 21.\n",
"INFO: \n",
"INFO: SUMMARY for node id 11 with dofs 21, 22:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: dof 22: ⋯ + 5.0*λ₂₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: dof 22: 5.0*u₂₂ = 0.0\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: rank = 1, dofs = 1\n",
"INFO: algorithm 1 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 21: 1.0*u₂₁ = 0.0\n",
"INFO: \n",
"INFO: PDASS: Starting primal-dual active set strategy to determine active constraints\n",
"INFO: PDASS: contact nodes: [490,491,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: active nodes: [491,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: inactive nodes: [490,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578]\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 491.\n",
"INFO: Following dofs already constrained: 981.\n",
"INFO: \n",
"INFO: SUMMARY for node id 491 with dofs 981, 982:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.1*u₉₈₁ = -0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: dof 982: ⋯ + 0.1*λ₉₈₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0 <-- overconstrained dof\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: ----- Related equations -----\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: dof 115: 0.1*u₁₁₅ = 0.0\n",
"INFO: algorithm 1 solved issue? false\n",
"INFO: algorithm 2 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0\n",
"INFO: \n",
"INFO: UMFPACK: solved in 0.03039407730102539 seconds. norm = 46.17282278249895\n",
"INFO: solving linear system of 5 problems.\n",
"INFO: Hacking nodal force.\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 11.\n",
"INFO: Following dofs already constrained: 21.\n",
"INFO: \n",
"INFO: SUMMARY for node id 11 with dofs 21, 22:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: dof 22: ⋯ + 5.0*λ₂₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: dof 22: 5.0*u₂₂ = 0.0\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: rank = 1, dofs = 1\n",
"INFO: algorithm 1 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 21: 1.0*u₂₁ = 0.0\n",
"INFO: \n",
"INFO: PDASS: Starting primal-dual active set strategy to determine active constraints\n",
"INFO: PDASS: contact nodes: [490,491,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: active nodes: [491,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: inactive nodes: [490,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579]\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 491.\n",
"INFO: Following dofs already constrained: 981.\n",
"INFO: \n",
"INFO: SUMMARY for node id 491 with dofs 981, 982:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.1*u₉₈₁ = -0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: dof 982: ⋯ + 0.1*λ₉₈₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0 <-- overconstrained dof\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: ----- Related equations -----\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: dof 115: 0.1*u₁₁₅ = 0.0\n",
"INFO: algorithm 1 solved issue? false\n",
"INFO: algorithm 2 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0\n",
"INFO: \n",
"INFO: UMFPACK: solved in 0.032618045806884766 seconds. norm = 45.75796140962765\n",
"INFO: solving linear system of 5 problems.\n",
"INFO: Hacking nodal force.\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 11.\n",
"INFO: Following dofs already constrained: 21.\n",
"INFO: \n",
"INFO: SUMMARY for node id 11 with dofs 21, 22:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: dof 22: ⋯ + 5.0*λ₂₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: dof 22: 5.0*u₂₂ = 0.0\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: rank = 1, dofs = 1\n",
"INFO: algorithm 1 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 21: 1.0*u₂₁ = 0.0\n",
"INFO: \n",
"INFO: PDASS: Starting primal-dual active set strategy to determine active constraints\n",
"INFO: PDASS: contact nodes: [490,491,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: active nodes: [491,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: inactive nodes: [490,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580]\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 491.\n",
"INFO: Following dofs already constrained: 981.\n",
"INFO: \n",
"INFO: SUMMARY for node id 491 with dofs 981, 982:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.1*u₉₈₁ = -0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: dof 982: ⋯ + 0.1*λ₉₈₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0 <-- overconstrained dof\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: ----- Related equations -----\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: dof 115: 0.1*u₁₁₅ = 0.0\n",
"INFO: algorithm 1 solved issue? false\n",
"INFO: algorithm 2 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0\n",
"INFO: \n",
"INFO: UMFPACK: solved in 0.037216901779174805 seconds. norm = 45.34459038168802\n",
"INFO: solving linear system of 5 problems.\n",
"INFO: Hacking nodal force.\n"
]
},
{
"data": {
"text/plain": [
"true"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import JuliaFEM.Core: boundary_assembly_posthook!, field_assembly_posthook!\n",
"\n",
"\"\"\" Hack y direction nodal force. \"\"\"\n",
"function field_assembly_posthook!(solver::Solver, K::SparseMatrixCSC, f::SparseMatrixCSC)\n",
" info(\"Hacking nodal force.\")\n",
" f[2*(450-1)+2] = -35.0e3/2\n",
"end\n",
"\n",
"body1, body2, bc1, bc2, bc3 = create_hertzian_problem()\n",
"solver = Solver(\"roller contact\")\n",
"#solver.is_linear_system = true\n",
"solver.nonlinear_system_max_iterations = 20\n",
"bc3.properties.inequality_constraints = true\n",
"#bc3.properties.normal_condition = :Contact\n",
"#bc3.properties.tangential_condition = :Slip\n",
"push!(solver, body1, body2, bc1, bc2, bc3)\n",
"solver()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"PyPlot.Figure(PyObject <matplotlib.figure.Figure object at 0x7f43d78a3690>)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"(199,202)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 11.\n",
"INFO: Following dofs already constrained: 21.\n",
"INFO: \n",
"INFO: SUMMARY for node id 11 with dofs 21, 22:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: dof 22: ⋯ + 5.0*λ₂₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: dof 22: 5.0*u₂₂ = 0.0\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 21: ⋯ + 5.0*λ₂₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 21: 5.0*u₂₁ = 0.0 <-- overconstrained dof\n",
"INFO: rank = 1, dofs = 1\n",
"INFO: algorithm 1 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 21: 1.0*u₂₁ = 0.0\n",
"INFO: \n",
"INFO: PDASS: Starting primal-dual active set strategy to determine active constraints\n",
"INFO: PDASS: contact nodes: [490,491,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: active nodes: [491,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596]\n",
"INFO: PDASS: inactive nodes: [490,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580]\n",
"INFO: System is overconstrained by 1 dofs.\n",
"INFO: Overconstrained_nodes: 491.\n",
"INFO: Following dofs already constrained: 981.\n",
"INFO: \n",
"INFO: SUMMARY for node id 491 with dofs 981, 982:\n",
"INFO: ----- Current constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.1*u₉₈₁ = -0.0 <-- overconstrained dof\n",
"INFO: ----- New constraint -----\n",
"INFO: lambda coefficients in C1 matrix are:\n",
"INFO: dof 981: ⋯ + 0.1*λ₉₈₁ ⋯\n",
"INFO: dof 982: ⋯ + 0.1*λ₉₈₂ ⋯\n",
"INFO: rows in constraint matrix C2 & D\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0 <-- overconstrained dof\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: ----- Related equations -----\n",
"INFO: dof 982: 0.0*u₁₁₁ + 0.0*u₁₁₃ + 0.0*u₁₁₄ - 0.1*u₁₁₅ - 0.0*u₁₁₆ + 0.1*u₉₈₁ + 0.0*u₉₈₂ = -0.0\n",
"INFO: dof 115: 0.1*u₁₁₅ = 0.0\n",
"INFO: algorithm 1 solved issue? false\n",
"INFO: algorithm 2 solved issue? true\n",
"INFO: fixed: new setting is\n",
"INFO: dof 981: 0.0*u₁₁₂ + 0.0*u₁₁₃ - 0.0*u₁₁₄ - 0.0*u₁₁₅ + 0.1*u₁₁₆ + 0.0*u₉₈₁ - 0.1*u₉₈₂ = -0.0\n",
"INFO: \n",
"INFO: UMFPACK: solved in 0.027383089065551758 seconds. norm = 45.34459038168802\n",
"INFO: Converged in 8 iterations.\n"
]
}
],
"source": [
"fig = PyPlot.figure(figsize=(8,4))\n",
"plot_it(body1, 1.0; show_node_ids=false, show_undeformed=false,\n",
" show_deformed=true, xmin=-1, xmax=30, ymin=190, ymax=210)\n",
"plot_it(body2, 1.0; show_node_ids=false, show_undeformed=false,\n",
" show_deformed=true, xmin=-1, xmax=30, ymin=190, ymax=210)\n",
"#plot_normals(bc3, 0.0, 1)\n",
"#grid(\"off\")\n",
"#axis(\"off\")\n",
"xlim(0, 10)\n",
"ylim(199, 202)\n",
"#legend(loc=2)\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"@assert isapprox(norm(body1.assembly.u), 45.34459038168802)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"pmax = 3585.362230884501\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: pn[1] = 3662.35094080636\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"PyPlot.Figure(PyObject <matplotlib.figure.Figure object at 0x7f43da89b850>)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"(0,10)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function get_acc_sol()\n",
" B = 1\n",
" E1 = 210.0e3\n",
" E2 = 70.0e3\n",
" nu1 = 0.3\n",
" nu2 = 0.3\n",
" F = 35.0e3\n",
" E = 2*E1*E2/(E2*(1-nu1^2) + E1*(1-nu2^2))\n",
" R = 50.0\n",
" pmax = sqrt(F*E/(2*pi*B*R))\n",
" println(\"pmax = $pmax\")\n",
" a = sqrt(8*F*R/(pi*B*E))\n",
" acc_x = linspace(1.0e-10, a)\n",
" acc_p = pmax*sqrt(1-acc_x/a)\n",
" return acc_x, acc_p\n",
"end\n",
"acc_x, acc_p = get_acc_sol()\n",
"\n",
"x = Float64[]\n",
"pn = Float64[]\n",
"#xi = linspace(-1, 1, 5)\n",
"xi = [-1.0, 0.0, 1.0]\n",
"\n",
"for element in get_elements(bc3)\n",
" haskey(element, \"master elements\") || continue\n",
" for k in xi\n",
" X = element(\"geometry\", [k], 0.0)\n",
" u = element(\"displacement\", [k], 0.0)\n",
" pxy = element(\"reaction force\", [k], 0.0)\n",
" Q = element(\"normal-tangential coordinates\", [k], 0.0)\n",
" pnt = Q'*pxy\n",
" push!(x, X[1])\n",
" push!(pn, pnt[1])\n",
" #plot(X[1], pnt[1], \"bo\")\n",
" end\n",
"end\n",
"\n",
"P = sortperm(x)\n",
"figure(figsize=(5, 5))\n",
"x = x[P]\n",
"pn = pn[P]\n",
"info(\"pn[1] = $(pn[1])\")\n",
"plot(x, pn, \"k.\")\n",
"plot(acc_x, acc_p, \"-g\")\n",
"# plot(X[1], pxy[1], \"ro\", label=\"x direction\")\n",
"# plot(X[1], pxy[2], \"go\", label=\"y direction\")\n",
"# plot(X[1], pnt[2], \"bo\", label=\"tangential direction\")\n",
"xlim(0, 10)\n",
"#ylim(0, 4200)\n",
"#legend()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(-8378.501456957838,671.4667011944753)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"minimum(bc3.assembly.la), maximum(bc3.assembly.la)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 0.4.3",
"language": "julia",
"name": "julia-0.4"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "0.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}