11 N = ceil(2*pi*R/Le/4);
12 disc = create_circle(R, N);
13 b = get_boundary(disc);
15 side = extrude_mesh(b, [0 0
H/Nz], Nz);
16 mesh = join_meshes(disc,...
18 translate_mesh(flip_mesh(disc), [0 0
H]));
19 mesh = merge_coincident_nodes(mesh);
20 mesh = drop_unused_nodes(mesh);
22 %% quadratic elements and blow up
23 qmesh = quadratise(mesh,
struct(
'quad_with_mid',
true));
24 [nodidx, elidx] = mesh_select(qmesh, sprintf(
'abs(r-%g) < 1e-2', R),
'ind');
25 sidenodes = qmesh.Nodes(nodidx,2:3);
26 r = sqrt(dot(sidenodes, sidenodes, 2));
27 qmesh.Nodes(nodidx,2:3) = bsxfun(@times, qmesh.Nodes(nodidx,2:3), R./r);
31 mex -v CXXFLAGS="$CXXFLAGS -std=c++11 -O3 -fPIC" ...
32 ../../src/tutorial/elastostatics.mex.cpp ...
33 ../../src/library/lib_element.cpp ...
34 ../../src/library/lib_shape.cpp ...
35 ../../src/library/lib_domain.cpp ...
37 -I/usr/local/include/eigen3 ...
40 %% Call NiHu to compute system matrices
41 [nodes, elements] = extract_core_mesh(qmesh);
43 [U, T] = elastostatics(nodes, elements, nu, mu);
46 %% Boundary conditions
47 [xc, nc] = centnorm(mesh);
48 phi = atan2(xc(:,2), xc(:,1));
49 tpre = [sin(phi) -cos(phi) zeros(size(phi,1),1)];
50 tpre(xc(:,3) <
H,:) = 0;
52 upind = find(xc(:,3) > 0);
53 updofind =
union(
union(3*upind-2, 3*upind-1), 3*upind);
55 Uc = U(updofind, updofind);
56 Tc = T(updofind, updofind);
58 ures(updofind) = (Tc - .5*eye(size(Tc))) \ (Uc * reshape(tpre(upind,:).', [], 1));
59 ures = reshape(ures, 3, []).
';
61 Trans = cell2node_interp(mesh);
62 Trans(end,:) = Trans(end,:)/4;
63 ures_node = Trans * ures;
67 disp_mesh.Nodes(:,2:4) = disp_mesh.Nodes(:,2:4)-ures_node/10e-8;
69 formatfig([6 10], [0 0 0 0]);
71 quiver3(xc(:,1), xc(:,2), xc(:,3)+.5, tpre(:,1), tpre(:,2), tpre(:,3), 'LineWidth
', 2, 'Color
', 'black
');
73 plot_mesh(disp_mesh, ures_node(:,1));
78 %print -dpng bar -r600