Mercurial > repos > public > sbplib
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 |
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 |