diff --git a/notebooks/2015-09-15-2d-segmentation.ipynb b/notebooks/2015-09-15-2d-segmentation.ipynb index 8c5f147..1531e0e 100644 --- a/notebooks/2015-09-15-2d-segmentation.ipynb +++ b/notebooks/2015-09-15-2d-segmentation.ipynb @@ -4,23 +4,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Contact segmentation in 2d\n", + "# Calculating mortar projection matrices\n", "\n", "Author(s): Jukka Aho\n", "\n", - "**Abstract**: Calculate mortar projection for 2d" + "**Abstract**: Evaluate mortar projection matrices in 2d and 3d" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [], "source": [ - "using JuliaFEM: new_fieldset!, add_field!, dinterpolate\n", - "using JuliaFEM: Field, FieldSet, Seg2\n", + "using JuliaFEM\n", + "using JuliaFEM: Seg2, Basis, Field, FieldSet, dinterpolate, interpolate, get_connectivity\n", "using PyPlot\n", "using ForwardDiff" ] @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 55, "metadata": { "collapsed": false }, @@ -45,7 +45,7 @@ "rlinspace (generic function with 1 method)" ] }, - "execution_count": 4, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } @@ -81,7 +81,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 56, "metadata": { "collapsed": false }, @@ -89,23 +89,24 @@ { "data": { "text/plain": [ - "1-element Array{Array{T,1},1}:\n", - " [0,1]" + "interpolate (generic function with 11 methods)" ] }, - "execution_count": 6, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "f = Field(0.0, Vector[])\n", - "push!(f.values, [0, 1])" + "function FEM.interpolate(basis::Basis, field::Field, xis::Array{Vector,1})\n", + " [FEM.interpolate(basis, field, xi) for xi in xis]\n", + "end\n", + "#FEM.interpolate(Γ₁[1], \"geometry\", Vector[[-1.0], [1.0]], 0.0)" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 78, "metadata": { "collapsed": false }, @@ -118,19 +119,24 @@ ] }, { - "ename": "LoadError", - "evalue": "LoadError: \"Empty set of fields.\"\nwhile loading In[9], in expression starting on line 60", - "output_type": "error", - "traceback": [ - "LoadError: \"Empty set of fields.\"\nwhile loading In[9], in expression starting on line 60", - "", - " in interpolate at C:\\Users\\jahx06\\.julia\\v0.4\\JuliaFEM\\src\\interpolate.jl:28", - " in dinterpolate at C:\\Users\\jahx06\\.julia\\v0.4\\JuliaFEM\\src\\elements.jl:208", - " in calculate_normals! at In[9]:36", - " in calculate_normals! at In[9]:33", - " [inlined code] from In[9]:61", - " in anonymous at no file:0" - ] + "data": { + "image/png": "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XSuckpaeng6Aj4+PNZcDoHv37iQnJ1d5zsqVK7Ujm4hUyVDNts/VHRcREZGmo6IBjaSkJEJCQmrU36qNB2666SaSk5PJyckp037gwAEAgoKCrLkcACdPnqRjx45W9xMRuZavr2+djouIiIj9sCrkREdHU1xczJtvvmlpKygoYO3atQwZMoRu3boBkJGRwfHjx8ssAr5w4UK5623dupWkpCTGjRtX2/pFRADYsmULjo4VD047OjqyZcuWRq5IREREbMWq6WqDBg1i6tSpLF26lPPnz9OnTx/ee+890tLSWLt2reW8JUuWEBsbS2pqquWnp2FhYQQHBxMSEoKnpydJSUm88847+Pr68vjjj9fvU4lIixMYGMjhw4eZMGECaWlpmM1mDAYDvr6+bNmyhcDAQFuXKCIiIo3EqpADEBsby1NPPcX777/P5cuXufHGGzEajdx6zcv0DAZDufnvM2bM4JNPPmH79u3k5ubi4+PDvHnzeOaZZzRdTUTqRWBgICdOnLB1GSIiImJjBnMT3nLo6uKixMREbTwgIiIiItKCWZMNrFqTIyIiIiIi0tQp5IiIiIiIiF1RyBEREREREbuikCMiIiIiInZFIUdEREREROyKQo6IiIiIiNgVhRwREREREbErCjkiIiIiImJXFHJERERERMSuKOSIiIiIiIhdUcgRERERERG7opAjIiIiIiJ2RSFHRERERETsikKOiIiIiIjYFYUcERERERGxK1aFnIKCAh577DF8fHxo06YNQ4YMYefOnTXqm5WVxdy5c+nYsSNt27ZlxIgRHDp0qFZFi4iIiIiIVMaqkDN79mxWrlzJXXfdxapVq2jVqhW33347X375ZZX9SkpKGD9+PHFxccyfP58VK1Zw/vx5wsPDSUlJqdMDiIiIiIiIXMuxpicePHiQDz74gJdeeolHHnkEgLvuuov+/fuzePHiKoNOfHw8+/fvJz4+nilTpgAwbdo0AgICeOaZZ1i/fn0dH0NERERERKRUjUdy4uPjcXR0ZO7cuZY2FxcX7rnnHvbv38+ZM2eq7NulSxdLwAHw9vZm2rRpbN68GZPJVMvyRUREREREyqpxyDl06BABAQG0bdu2THtoaCgA3377bZV9g4ODy7WHhoaSm5tLcnJyTcsQERERERGpUo1DTnp6Ol27di3XfrXt7NmzDdJXRERERETEGjUOOXl5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", + "text/plain": [ + "PyPlot.Figure(PyObject )" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(-0.1,4.0)" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" }, { "name": "stdout", @@ -173,16 +179,17 @@ "\"\"\"\n", "Calculate element local normal field\n", "\"\"\"\n", - "function calculate_normals!(el::Seg2, time, field_name=\"normal\")\n", - " new_fieldset!(el, field_name)\n", + "function calculate_normals!(element::Seg2, time, field_name=\"normal\")\n", + " normal_fieldset = FieldSet(field_name)\n", " normal_field = Field(time, Vector[])\n", + " tangent(xi) = dinterpolate(element, \"geometry\", xi, time)\n", " for xi in Vector[[-1.0], [1.0]]\n", - " tangent = dinterpolate(el, \"geometry\", xi, time)\n", - " normal = [0 -1; 1 0]*tangent\n", - " normal /= norm(normal)\n", - " push!(normal_field.values, normal)\n", + " t = tangent(xi)\n", + " n = [-t[2], t[1]]\n", + " push!(normal_field, n/norm(n))\n", " end\n", - " #add_field!(el, field_name, normal_field)\n", + " push!(normal_fieldset, normal_field)\n", + " push!(element, normal_fieldset)\n", "end\n", "\n", "function create_elements(X, sid=0)\n", @@ -192,24 +199,49 @@ " for i=1:nelements\n", " con = sid+[i, i+1]\n", " el = Seg2(con)\n", - " new_fieldset!(el, \"geometry\")\n", - " #add_field!(el, \"geometry\", Field(0.0, Vector[X[:, i], X[:, i+1]]))\n", + " push!(el, FieldSet(\"geometry\", [Field(0.0, Vector[X[:, i], X[:, i+1]])]))\n", " push!(Γ, el)\n", " end\n", " return Γ\n", "end\n", + "\n", + "function plot_element(el; plot_with_normal=false)\n", + " # create a array of vectors\n", + " xis = linspace([-1.0], [1.0], 3)\n", + " time = 0.0\n", + " coords = interpolate(el, \"geometry\", xis, time)\n", + " ncoords = interpolate(el, \"geometry\", xis, time)\n", + " normals = interpolate(el, \"normal\", xis, time)\n", + " xs = [X[1] for X in coords]\n", + " ys = [X[2] for X in coords]\n", + " plot(xs, ys, \"-\")\n", + " plot([xs[1], xs[end]], [ys[1], ys[end]], \"ko\")\n", + " plot([xs[1], xs[end]], [ys[1], ys[end]], \"ko\")\n", + " if plot_with_normal\n", + " for i=1:3\n", + " p0 = ncoords[i]\n", + " p1 = ncoords[i]+0.3*normals[i]\n", + " plot([p0[1], p1[1]], [p0[2], p1[2]], \"-k\")\n", + " end\n", + " end\n", + "end\n", + "\n", "Γ₁ = create_elements([x1 y1]', 0)\n", "Γ₂ = create_elements([x2 y2]', nsl);\n", - "\n", "for el in [Γ₁; Γ₂]\n", " calculate_normals!(el, 0.0)\n", "end\n", "\n", "figure(figsize=(10, 3))\n", - "plot(x1, y1, \"-ko\")\n", - "plot(x2, y2, \"-ko\")\n", + "for el in Γ₁\n", + " plot_element(el; plot_with_normal=true)\n", + "end\n", + "for el in Γ₂\n", + " plot_element(el; plot_with_normal=false)\n", + "end\n", "axis(\"equal\")\n", - "ylim(-0.1, 4.0)" + "ylim(-0.1, 4.0)\n", + "#axis(\"off\")" ] }, { @@ -218,28 +250,48 @@ "source": [ "### Calculating surface normals\n", "\n", - "- must have unique normal" + "To define so called \"continuous normal field\", normals must be unambiguous in nodes. This can be done by averaging normals of adjacent elements:\n", + "\\begin{equation}\n", + "\\mathbf{n}_{k}=\\frac{\\sum_{e=1}^{n_{k}^{\\mathrm{adj}}} \\mathbf{n}_{k}^{\\left(e\\right)}}{\\left\\Vert \\sum_{e=1}^{n_{k}^{\\mathrm{adj}}} \\mathbf{n}_{k}^{\\left(e\\right)}\\right\\Vert }.\n", + "\\end{equation}\n", + "\n", + "In practice, we take average of all normal vectors connecting to some arbitrary node." ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 79, "metadata": { "collapsed": false }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Converged. p = [4.2905787641613236,5.624156522861784,0.04706336239279979,6.561746550428803]\n" - ] - }, + "data": { + "text/plain": [ + "JuliaFEM.Field{Array{Array{T,1},1}}(0.0,1,Array{T,1}[[0.7021480119880804,-0.7120310170639945],[0.7021480119880804,-0.7120310170639945]])" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "FEM.interpolate(Γ₁[1][\"normal\"], 0.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "collapsed": false + }, + "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzgAAAEeCAYAAABG5rCAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XtcVVX+//HX4X5HRU2JME0wM40k1LCLZt/MBLwEKDOa6ZTNTFdsUrMpv2XONFaj4zg2U7/SQY3xK2kKWpqW5TimJpaVElIhGqCCoSgXuZzfH2egkNsBgQ3nvJ+Px3moa++192fXFnmz1l7bZDabzYiIiIiIiNgAB6MLEBERERERaSkKOCIiIiIiYjMUcERERERExGYo4IiIiIiIiM1QwBEREREREZuhgCMiIiIiIjZDAUdERERERGyGAo6IiIiIiNgMBRwREREREbEZCjgiIiIiImIznJqy89dff83//u//kpqaSm5uLm5ubvTr14+HH36YX/7ylw32XblyJTNmzKhzW25uLt27d6/VnpeXx9atW7n66qtxd3dvSqkiIiIiImJDiouLyczMZPTo0XTt2rXe/ZoUcLKysjh//jz3338//v7+FBUVkZSUxNSpU8nMzOSZZ55p9BgLFiygd+/eNdp8fX3r3Hfr1q1MmTKlKSWKiIiIiIgNW716dYODKyaz2Wy+nBNUVlYSGhrKmTNnOHbsWL37VY3gfPbZZwwePNiqY+/evZtbbrmF1atX079//8sps0OKj49n8eLFRpchBtN9ILoHBHQfiIXuAwH7vQ+OHDnClClT+Pe//83w4cPr3a9JIzh1cXBwICAggMLCQqv2N5vNFBYW4uHhgaOjY4P7Vk1L69+/v9WhyJb4+vra5XVLTboPRPeAgO4DsdB9IKD7oLFHV5q1yEBRURF5eXl8++23LF68mK1btzJ79myr+o4cORJfX188PT0ZN24cGRkZzSlBRERExC4cOXKEoKAgXF1dSUlJwdXVlaCgII4cOWJ0aSLtUrNGcGbNmsXrr79uOYCTE0uXLmXmzJkN9vH09GT69OmMHDkSHx8fPvvsM/785z8THh5OamoqAQEBzSlFRERExGZ9/fXXhISEUF5eXt128eJFMjIyGDRoEIcOHbLLafwiDWlWwImPjyc2Npbs7GzWrFnDI488gru7O9OmTau3T0xMDDExMdV/joqKYvTo0dx2220sXLiQ1157rTmliIiIiNis8ePH1wg3P1deXk5UVBRHjx5t46pE2rdmBZx+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", + "image/png": "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", "text/plain": [ - "PyPlot.Figure(PyObject )" + "PyPlot.Figure(PyObject )" ] }, "metadata": {}, @@ -251,43 +303,39 @@ "(-0.1,3.6)" ] }, - "execution_count": 3, + "execution_count": 80, "metadata": {}, "output_type": "execute_result" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Converged. p = [2.110067133637596,1.2802355090457196,1.5675520985912952,-3.7904167887303712]\n" - ] } ], "source": [ - "# calculate and average normals like we did in last notebook\n", - "average_normals!(Γ₁)\n", - "average_normals!(Γ₂)\n", - "\n", - "function plot_element(el; plot_with_normal=false)\n", - " # create a array of vectors\n", - " xis = Vector[[xi] for xi in linspace(-1, 1)]\n", - " coords = interpolate(el, :Geometry, xis)\n", - " normals = interpolate(el, :Normals, Vector[[-1.0], [1.0]])\n", - " ncoords = interpolate(el, :Geometry, Vector[[-1.0], [1.0]])\n", - " xs = [X[1] for X in coords]\n", - " ys = [X[2] for X in coords]\n", - " plot(xs, ys, \"-\")\n", - " plot([xs[1], xs[end]], [ys[1], ys[end]], \"ko\")\n", - " plot([xs[1], xs[end]], [ys[1], ys[end]], \"ko\")\n", - " if plot_with_normal\n", - " for i=1:2\n", - " p0 = ncoords[i]\n", - " p1 = ncoords[i]+0.3*normals[i]\n", - " plot([p0[1], p1[1]], [p0[2], p1[2]], \"-k\")\n", + "function average_normals!(elements, time, normal_field=\"normal\")\n", + " d = Dict()\n", + " # calculate sum of normals connecting to node k\n", + " for el in elements\n", + " c = get_connectivity(el)\n", + " n = interpolate(el[normal_field], time).values\n", + " for (ci, ni) in zip(c, n)\n", + " d[ci] = haskey(d, ci) ? d[ci] + ni : ni\n", " end\n", " end\n", + " # norm\n", + " for (ci, ni) in d\n", + " d[ci] /= norm(d[ci])\n", + " end\n", + " # update back to elements\n", + " for el in elements\n", + " c = get_connectivity(el)\n", + " #new_normals = Field(time, [d[ci] for ci in c])\n", + " #set_field(el, normal_field, new_normals)\n", + " #el[normal_field][end].values = new_normals\n", + " #push!(el[normal_field], new_normals)\n", + " el[normal_field][end].values = [d[ci] for ci in c]\n", + " end\n", "end\n", "\n", + "average_normals!(Γ₁, 0.0)\n", + "average_normals!(Γ₂, 0.0)\n", "\n", "figure(figsize=(10, 3))\n", "for el in Γ₁\n", @@ -301,62 +349,6 @@ "#axis(\"off\")" ] }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "6x2 Array{Float64,2}:\n", - " 4.0 3.5 \n", - " 3.05326 2.5664 \n", - " 1.89394 1.91534\n", - " 0.60401 1.59286\n", - " -0.725305 1.62176\n", - " -2.0 2.0 " - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "[x1 y1]" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "6x2 Array{Float64,2}:\n", - " 3.0 1.0 \n", - " 2.18891 1.17082\n", - " 1.36075 1.2053 \n", - " 0.538273 1.10249\n", - " -0.255919 0.86522\n", - " -1.0 0.5 " - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "[x2 y2]" - ] - }, { "cell_type": "code", "execution_count": 6,