changeset 1254:204b47c51bf8 feature/FMMlabb

Add annulus
author Ylva Rydin <ylva.rydin@telia.com>
date Wed, 22 Jan 2020 15:18:11 +0100
parents 8ec777fb473e
children 5e2a61340d4e
files +multiblock/+domain/Annulus.m
diffstat 1 files changed, 83 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
diff -r 8ec777fb473e -r 204b47c51bf8 +multiblock/+domain/Annulus.m
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/+multiblock/+domain/Annulus.m	Wed Jan 22 15:18:11 2020 +0100
@@ -0,0 +1,83 @@
+classdef Annulus < multiblock.DefCurvilinear
+    properties
+        r_inner 
+        r_outer 
+        c_inner
+        c_outer
+    end
+
+    methods
+        function obj = Annulus(r_outer, r_inner, c_outer, c_inner)
+            default_arg('r_outer', 1)
+            default_arg('r_inner', 0.3);
+            default_arg('c_outer', [0; 0]);
+            default_arg('c_inner', [0; 0]);
+
+            cir_out_A = parametrization.Curve.circle(c_outer,r_outer,[-pi/2 pi/2]);
+            cir_in_A = parametrization.Curve.circle(c_inner,r_inner,[pi/2 -pi/2]);
+            
+            cir_out_B = parametrization.Curve.circle(c_outer,r_outer,[pi/2 3*pi/2]);
+            cir_in_B = parametrization.Curve.circle(c_inner,r_inner,[3*pi/2 pi/2]);
+
+            c0_out = cir_out_A(0);
+            c1_out = cir_out_A(1);
+            
+            c0_in_A = cir_in_A(1);
+            c1_in_A = cir_in_A(0);
+            
+            c0_out_B = cir_out_B(0);
+            c1_out_B = cir_out_B(1);
+            
+            c0_in_B = cir_in_B(1);
+            c1_in_B = cir_in_B(0);
+
+
+            sp2_A = parametrization.Curve.line(c0_in_A,c0_out);
+            sp3_A = parametrization.Curve.line(c1_in_A,c1_out);
+            
+            sp2_B = parametrization.Curve.line(c0_in_B,c0_out_B);
+            sp3_B = parametrization.Curve.line(c1_in_B,c1_out_B);
+
+
+            A = parametrization.Ti(sp2_A, cir_out_A, sp3_A.reverse, cir_in_A); 
+            B = parametrization.Ti( sp2_B , cir_out_B,sp3_B.reverse, cir_in_B );
+           % B = A.rotate(c_inner,pi).rotate_edges(0);
+            
+            blocks = {A,B};
+            blocksNames = {'A','B'};
+
+            conn = cell(2,2);
+
+            conn{1,2} = {'n','s'};
+            conn{2,1} = {'n','s'};
+
+            boundaryGroups = struct();
+            boundaryGroups.E = multiblock.BoundaryGroup({{1,'e'}});
+            boundaryGroups.W = multiblock.BoundaryGroup({{2,'w'}});
+            boundaryGroups.In = multiblock.BoundaryGroup({{1,'w'},{2,'e'}});
+            boundaryGroups.all = multiblock.BoundaryGroup({{1,'e'},{2,'w'},{1,'w'},{2,'e'}});
+
+            obj = obj@multiblock.DefCurvilinear(blocks, conn, boundaryGroups, blocksNames);
+
+            obj.r_inner = r_inner;
+            obj.r_outer = r_outer;
+            obj.c_inner = c_inner;
+            obj.c_outer = c_outer;
+        end
+
+        function ms = getGridSizes(obj, m)
+           % m_S = m;
+% 
+%             % m_Radial
+%             s = 2*obj.hs;
+%             innerArc = obj.r_arc*obj.omega;
+%             outerArc = obj.r*pi/2;
+%             shortSpoke = obj.r-s/sqrt(2);
+%             x = (1/(2-sqrt(3))-1)*obj.hs;
+%             longSpoke =  (obj.r+x)-obj.r_arc;
+%             m_R = parametrization.equal_step_size((innerArc+outerArc)/2, m_S, (shortSpoke+longSpoke)/2);
+
+            ms = {[m m], [m m], [m m], [m m], [m m]};
+        end
+    end
+end