annotate +multiblock/+domain/Circle.m @ 1223:9fddc8749445 rv_diffOp_test

Closing branch
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Mon, 05 Aug 2019 10:48:37 +0200
parents 9be370486d36
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
588
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 classdef Circle < multiblock.DefCurvilinear
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 properties
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 r, c
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 hs
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 r_arc
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 omega
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 end
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 methods
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 function obj = Circle(r, c, hs)
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 default_arg('r', 1);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 default_arg('c', [0; 0]);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 default_arg('hs', 0.435);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17 % alpha = 0.75;
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 % hs = alpha*r/sqrt(2);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 % Square should not be a square, it should be an arc. The arc radius
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 % is chosen so that the three angles of the meshes are all equal.
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 % This gives that the (half)arc opening angle of should be omega = pi/12
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 omega = pi/12;
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 r_arc = hs*(2*sqrt(2))/(sqrt(3)-1); % = hs* 1/sin(omega)
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 c_arc = c - [(1/(2-sqrt(3))-1)*hs; 0];
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 cir = parametrization.Curve.circle(c,r,[-pi/4 pi/4]);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 c2 = cir(0);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 c3 = cir(1);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 s1 = [-hs; -hs];
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 s2 = [ hs; -hs];
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 s3 = [ hs; hs];
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 s4 = [-hs; hs];
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 sp2 = parametrization.Curve.line(s2,c2);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 sp3 = parametrization.Curve.line(s3,c3);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 Se1 = parametrization.Curve.circle(c_arc,r_arc,[-omega, omega]);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 Se2 = Se1.rotate(c,pi/2);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 Se3 = Se2.rotate(c,pi/2);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 Se4 = Se3.rotate(c,pi/2);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 S = parametrization.Ti(Se1,Se2,Se3,Se4).rotate_edges(-1);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 A = parametrization.Ti(sp2, cir, sp3.reverse, Se1.reverse);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 B = A.rotate(c,1*pi/2).rotate_edges(-1);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 C = A.rotate(c,2*pi/2).rotate_edges(-1);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 D = A.rotate(c,3*pi/2).rotate_edges(0);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 blocks = {S,A,B,C,D};
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 blocksNames = {'S','A','B','C','D'};
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 conn = cell(5,5);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 conn{1,2} = {'e','w'};
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 conn{1,3} = {'n','s'};
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59 conn{1,4} = {'w','s'};
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 conn{1,5} = {'s','w'};
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 conn{2,3} = {'n','e'};
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 conn{3,4} = {'w','e'};
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 conn{4,5} = {'w','s'};
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 conn{5,2} = {'n','s'};
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 boundaryGroups = struct();
879
9be370486d36 Fix typo in boundary group definition in multiblock.domain.Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 588
diff changeset
68 boundaryGroups.E = multiblock.BoundaryGroup({{2,'e'}});
9be370486d36 Fix typo in boundary group definition in multiblock.domain.Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 588
diff changeset
69 boundaryGroups.N = multiblock.BoundaryGroup({{3,'n'}});
9be370486d36 Fix typo in boundary group definition in multiblock.domain.Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 588
diff changeset
70 boundaryGroups.W = multiblock.BoundaryGroup({{4,'n'}});
9be370486d36 Fix typo in boundary group definition in multiblock.domain.Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 588
diff changeset
71 boundaryGroups.S = multiblock.BoundaryGroup({{5,'e'}});
588
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 boundaryGroups.all = multiblock.BoundaryGroup({{2,'e'},{3,'n'},{4,'n'},{5,'e'}});
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 obj = obj@multiblock.DefCurvilinear(blocks, conn, boundaryGroups, blocksNames);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76 obj.r = r;
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 obj.c = c;
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 obj.hs = hs;
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 obj.r_arc = r_arc;
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 obj.omega = omega;
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
81 end
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83 function ms = getGridSizes(obj, m)
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 m_S = m;
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
86 % m_Radial
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87 s = 2*obj.hs;
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88 innerArc = obj.r_arc*obj.omega;
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89 outerArc = obj.r*pi/2;
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 shortSpoke = obj.r-s/sqrt(2);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
91 x = (1/(2-sqrt(3))-1)*obj.hs;
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
92 longSpoke = (obj.r+x)-obj.r_arc;
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
93 m_R = parametrization.equal_step_size((innerArc+outerArc)/2, m_S, (shortSpoke+longSpoke)/2);
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
94
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
95 ms = {[m_S m_S], [m_R m_S], [m_S m_R], [m_S m_R], [m_R m_S]};
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
96 end
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
97 end
42124009f940 Add domain definition for circle.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
98 end