comparison +multiblock/+domain/Annulus.m @ 1328:3a286d2d1939 feature/D2_boundary_opt

Merge with feature/FMMlabb
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Mon, 14 Feb 2022 11:14:46 +0100
parents 4d472d020ccf
children 09a5783a3d37
comparison
equal deleted inserted replaced
1327:7ab7d42a5b24 1328:3a286d2d1939
1 classdef Annulus < multiblock.DefCurvilinear
2 properties
3 r_inner % Radii of inner disk
4 c_inner % Center of inner disk
5 r_outer % Radii of outer disk
6 c_outer % Radii of outer disk
7 end
8
9 methods
10 function obj = Annulus(r_inner, c_inner, r_outer, c_outer)
11 default_arg('r_inner', 0.3);
12 default_arg('c_inner', [0; 0]);
13 default_arg('r_outer', 1)
14 default_arg('c_outer', [0; 0]);
15 % Assert that the problem is well-defined
16 d = norm(c_outer-c_inner,2);
17 assert(r_inner > 0, 'Inner radius must be greater than zero');
18 assert(r_outer > d+r_inner, 'Inner disk not contained in outer disk');
19
20 cir_out_A = parametrization.Curve.circle(c_outer,r_outer,[-pi/2 pi/2]);
21 cir_in_A = parametrization.Curve.circle(c_inner,r_inner,[pi/2 -pi/2]);
22
23 cir_out_B = parametrization.Curve.circle(c_outer,r_outer,[pi/2 3*pi/2]);
24 cir_in_B = parametrization.Curve.circle(c_inner,r_inner,[3*pi/2 pi/2]);
25
26 c0_out = cir_out_A(0);
27 c1_out = cir_out_A(1);
28
29 c0_in_A = cir_in_A(1);
30 c1_in_A = cir_in_A(0);
31
32 c0_out_B = cir_out_B(0);
33 c1_out_B = cir_out_B(1);
34
35 c0_in_B = cir_in_B(1);
36 c1_in_B = cir_in_B(0);
37
38
39 sp2_A = parametrization.Curve.line(c0_in_A,c0_out);
40 sp3_A = parametrization.Curve.line(c1_in_A,c1_out);
41
42 sp2_B = parametrization.Curve.line(c0_in_B,c0_out_B);
43 sp3_B = parametrization.Curve.line(c1_in_B,c1_out_B);
44
45
46 A = parametrization.Ti(sp2_A, cir_out_A, sp3_A.reverse, cir_in_A);
47 B = parametrization.Ti(sp2_B , cir_out_B,sp3_B.reverse, cir_in_B );
48
49 blocks = {A,B};
50 blocksNames = {'A','B'};
51
52 conn = cell(2,2);
53
54 conn{1,2} = {'n','s'};
55 conn{2,1} = {'n','s'};
56
57 boundaryGroups = struct();
58 boundaryGroups.out = multiblock.BoundaryGroup({{1,'e'},{2,'e'}});
59 boundaryGroups.in = multiblock.BoundaryGroup({{1,'w'},{2,'w'}});
60 boundaryGroups.all = multiblock.BoundaryGroup({{1,'e'},{2,'w'},{1,'w'},{2,'e'}});
61
62 obj = obj@multiblock.DefCurvilinear(blocks, conn, boundaryGroups, blocksNames);
63
64 obj.r_inner = r_inner;
65 obj.r_outer = r_outer;
66 obj.c_inner = c_inner;
67 obj.c_outer = c_outer;
68 end
69
70 function ms = getGridSizes(obj, m)
71 ms = {[m m], [m m]};
72 end
73 end
74 end