Files
JuliaFEM.jl/docs/tutorials/2015-12-10-3d-mortar-assembly.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

243 lines
39 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 3d mortar assembly\n",
"\n",
"Author: Jukka Aho\n",
"\n",
"**Abstract**: Mortar assembly for 3d problems."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"using JuliaFEM"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1-element Array{JuliaFEM.Core.Element{E<:JuliaFEM.Core.AbstractElement},1}:\n",
" JuliaFEM.Core.Element{JuliaFEM.Core.Tri3}([4,5,6],Dict{ASCIIString,JuliaFEM.Core.Field{A<:Union{JuliaFEM.Core.Continuous,JuliaFEM.Core.Discrete},B<:Union{JuliaFEM.Core.Constant,JuliaFEM.Core.Variable},C<:Union{JuliaFEM.Core.TimeInvariant,JuliaFEM.Core.TimeVariant}}}(\"geometry\"=>JuliaFEM.Core.Field{JuliaFEM.Core.Discrete,JuliaFEM.Core.Variable,JuliaFEM.Core.TimeInvariant}([[-1.0,1.0,0.1],[2.0,-0.5,0.1],[2.0,2.0,0.1]])))"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nodes = Vector{Float64}[\n",
" [0.0, 0.0, 0.0],\n",
" [3.0, 0.0, 0.0],\n",
" [0.0, 3.0, 0.0],\n",
" [-1.0, 1.0, 0.1],\n",
" [ 2.0, -0.5, 0.1],\n",
" [ 2.0, 2.0, 0.1]]\n",
"\n",
"mel = JuliaFEM.Core.Tri3([4, 5, 6])\n",
"mel[\"geometry\"] = Vector{Float64}[nodes[4], nodes[5], nodes[6]]\n",
"\n",
"sel = JuliaFEM.Core.Tri3([1, 2, 3])\n",
"sel[\"geometry\"] = Vector{Float64}[nodes[1], nodes[2], nodes[3]]\n",
"R = [\n",
" 0.0 1.0 0.0\n",
" 0.0 0.0 1.0\n",
" 1.0 0.0 0.0]\n",
"sel[\"nodal ntsys\"] = Matrix{Float64}[R, R, R]\n",
"sel[\"master elements\"] = JuliaFEM.Core.Element[mel]"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(\n",
"2x3 Array{Float64,2}:\n",
" -1.0 2.0 -1.0\n",
" -1.0 -1.0 2.0,\n",
"\n",
"2x3 Array{Float64,2}:\n",
" -2.0 1.0 1.0\n",
" 0.0 -1.5 1.0,\n",
"\n",
"2x6 Array{Float64,2}:\n",
" -1.0 0.0 1.0 1.0 0.25 -1.0 \n",
" -0.5 -1.0 -1.0 0.0 0.75 0.333333,\n",
"\n",
"3x3 Array{Int64,2}:\n",
" 1 0 1\n",
" 1 1 0\n",
" 0 1 1,\n",
"\n",
"[0.039743589743589755,-0.1952991452991453])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"time = 0.0\n",
"x0, Q = JuliaFEM.Core.create_auxiliary_plane(sel, time)\n",
"S = Vector{Float64}[]\n",
"for p in sel(\"geometry\", time)\n",
" push!(S, JuliaFEM.Core.project_point_to_auxiliary_plane(p, x0, Q))\n",
"end\n",
"\n",
"M = Vector{Float64}[]\n",
"for p in mel(\"geometry\", time)\n",
" push!(M, JuliaFEM.Core.project_point_to_auxiliary_plane(p, x0, Q))\n",
"end\n",
"\n",
"#S = Matrix[x' for x in S]\n",
"#S, M\n",
"S = reshape([S...;], 2, 3)\n",
"M = reshape([M...;], 2, 3)\n",
"P, neighbours = JuliaFEM.Core.clip_polygon(S, M)\n",
"C = JuliaFEM.Core.calculate_polygon_centerpoint(P)\n",
"S, M, P, neighbours, C"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: npts = 6\n"
]
},
{
"data": {
"image/png": "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6uyjMhISBnPmTLxlAorrJkV4PW66CbZu1Tbz9fPTnisuhldfhdBQbRqGTNMsV03+0j3H3q9FKopCv379SExMZPbs2dx0003Vfq3p06fz+eefWzBd5e3cuZP69etzxx13MG/ePNzd3XnxxRfZtm0beXl5/PLLLza5UbAlf37atHkdb+9+AJSVnSIurjclJTKv1hZIEV4vJydt496UFJg6VTt9CpCRAUOHwh13aBP1hS5qy7VIT09PJk+eXO05iKqq8u6777Jnzx4LJ6uc0NBQ5s+fz+7duzlx4gQbNmxg2rRpdOnSBVdXV10yVYYlf34UxUBY2Arq1LkBgOLiA8TF9aGszHo3RImrkyK0lHr1YPZsiIuDHj0uPP/rrxAVBY89BidP6pfPQcm1SM3+/fvJy8uz2NZLqqqSnJzMokWLGDlyJI8//niFn+/u7s7EiRMxGo1VurFF79Palv75MRi8MBrX4+amLdhx+vSfJCePRFVloQ49SRFaWkgIfP01bNgAbdtqz5nN8O672nSLDz6g3G2thcVZ+wYQPWVmZpZ7d2lsbCxAtdcYNZlM/P3338ybN4/777+fJk2aEBYWxiOPPEJCQgKNGzeudu7y2MJp7cr+/CwFPqvka7q5NcNo3IjBUAeA7Owv2LfvecsEFtViO7uF1iaKAr17a1Mu5s3Trhnm52sjwgkTtDJ85x3o1k3vpA7BHssvel00Ww9upWtA10rlLysr484776Rx48YsWLAAo9F4yfGdO3fSpEkTmjZtWq08H374IY8++ihubm506tSJ8ePH061bN7p06UK9GlqD11ZOa1fm339V/w3UqdOe8PDPiIvrA5g5eHAWHh5BNG06ploZxfWREWFNcnODZ57Rrh8OH37h+V274F//gmHDtGuJQlykOiMhg8HA3LlzyczMJCoqiilTpvDyyy+jKAqKovCf//yHzMxMFEVh9uzZV3z9teYp9u/fny1btpCXl8evv/7Kq6++yj333FNjJQi1/7R248a9CAycf/5xaup4cnJ+1jGR45LdJ6xpyxZtd4uzp6kA8PSE6dPh//4PbPCuOUtYs8aPlSszGTHCj759j+odx+ZVZTeJy5WUlDB//nyef/55SitY8ei5557DaDTy22+/8dtvvzFo0CBeeOGF685uaVUdGevist0nqMScyIulpT3O4cPvAODs3ICoqO14eYVa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",
"text/plain": [
"PyPlot.Figure(PyObject <matplotlib.figure.Figure object at 0x7f170b2a8490>)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"(-2.1,2.1,-1.6,2.1)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using PyPlot\n",
"fig = figure(figsize=(5.0, 5.0))\n",
"plot(S[1, [1, 2, 3, 1]]', S[2, [1, 2, 3, 1]]', \"-yo\", lw=2.0)\n",
"plot(M[1, [1, 2, 3, 1]]', M[2, [1, 2, 3, 1]]', \"-ro\", lw=2.0)\n",
"#plot(P[1, [1, 2, 3, 4, 5, 6, 1]]', P[2, [1, 2, 3, 4, 5, 6, 1]]', \"-k\", lw=2.5)\n",
"npts = size(P, 2)\n",
"info(\"npts = $npts\")\n",
"# loop over cells\n",
"ips = JuliaFEM.Core.get_integration_points(JuliaFEM.Core.Tri3, Val{5})\n",
"#info(\"ips = $ips\")\n",
"SM = zeros(3, 3)\n",
"SS = zeros(3, 3)\n",
"for i=1:npts\n",
" xvec = [C[1], P[1, i], P[1, mod(i, npts)+1]]\n",
" yvec = [C[2], P[2, i], P[2, mod(i, npts)+1]]\n",
" plot(xvec, yvec, \"--ko\", lw=1.0)\n",
" X = hcat(xvec, yvec)'\n",
" geom = JuliaFEM.Core.Field(Vector{Float64}[X[:,i] for i=1:size(X,2)])\n",
" #info(\"geom = $geom\")\n",
" for ip in ips\n",
" dN = JuliaFEM.Core.get_dbasis(JuliaFEM.Core.Tri3, ip.xi)\n",
" J = sum([kron(dN[:,j], geom[j]') for j=1:length(geom)])\n",
" w = ip.weight*det(J)\n",
" x = vec(JuliaFEM.Core.get_basis(JuliaFEM.Core.Tri3, ip.xi)*geom)\n",
" plot(x[1], x[2], \".g\")\n",
" theta1 = JuliaFEM.Core.project_point_from_plane_to_surface(x, x0, Q, sel, time)\n",
" N1 = sel(theta1[2:3], time)\n",
" theta2 = JuliaFEM.Core.project_point_from_plane_to_surface(x, x0, Q, mel, time)\n",
" N2 = mel(theta2[2:3], time)\n",
" SS += w*N1'*N1\n",
" SM += w*N1'*N2\n",
" end\n",
"end\n",
"plot(C[1], C[2], \"ko\")\n",
"xlim(-2.1, 2.1)\n",
"ylim(-1.6, 2.1)\n",
"axis(\"off\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"INFO: SS = \n",
"[0.5123885459533705 0.29124871399177565 0.23957261659808454\n",
" 0.29124871399177565 0.40967399691358797 0.23773469650206241\n",
" 0.23957261659808454 0.23773469650206241 0.2491587362825836]\n",
"INFO: SM = \n",
"[0.4042245370370448 0.38539094650206535 0.2535943930041208\n",
" 0.21609760802469608 0.37920524691358753 0.3433545524691425\n",
" 0.24657600308642466 0.1835519547325143 0.2963380915637917]\n"
]
}
],
"source": [
"info(\"SS = \\n$SS\")\n",
"info(\"SM = \\n$SM\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 0.4.1",
"language": "julia",
"name": "julia-0.4"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "0.4.1"
}
},
"nbformat": 4,
"nbformat_minor": 0
}