annotate +multiblock/+domain/Circle.m @ 1031:2ef20d00b386 feature/advectionRV

For easier comparison, return both the first order and residual viscosity when evaluating the residual. Add the first order and residual viscosity to the state of the RungekuttaRV time steppers
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Thu, 17 Jan 2019 10:25:06 +0100
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