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