comparison +multiblock/multiblockgrid.m @ 0:48b6fb693025

Initial commit.
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 17 Sep 2015 10:12:50 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:48b6fb693025
1 % Creates a multi block square grid with defined boundary conditions.
2 % x,y defines the grid lines. Rember to think of the indexing as a matrix. Order matters!
3 % bc is a struct defining the boundary conditions on each side of the block.
4 % bc.w = {'dn',[function or value]}
5 function [block,conn,bound,ms] = multiblockgrid(x,y,mx,my,bc)
6 n = length(y)-1; % number of blocks in the y direction.
7 m = length(x)-1; % number of blocks in the x direction.
8 N = n*m; % number of blocks
9
10 if ~issorted(x)
11 error('The elements of x seem to be in the wrong order');
12 end
13 if ~issorted(flip(y))
14 error('The elements of y seem to be in the wrong order');
15 end
16 % y = sort(y,'descend');
17
18 % Dimensions of blocks and number of points
19 block = cell(n,m);
20 for i = 1:n
21 for j = 1:m
22 block{i,j} = {
23 {x(j),x(j+1)}, {y(i+1),y(i)};
24 };
25
26 ms{i,j} = [mx(i),my(j)];
27 end
28 end
29
30 % Interface couplings
31 conn = cell(N,N);
32 for i = 1:n
33 for j = 1:m
34 I = flat_index(n,i,j);
35 if i < n
36 J = flat_index(n,i+1,j);
37 conn{I,J} = {'s','n'};
38 end
39
40 if j < m
41 J = flat_index(n,i,j+1);
42 conn{I,J} = {'e','w'};
43 end
44 end
45 end
46
47
48 % Boundary conditions
49 bound = cell(n,m);
50 for i = 1:n
51 if isfield(bc,'w')
52 bound{i,1}.w = bc.w;
53 end
54
55 if isfield(bc,'e')
56 bound{i,n}.e = bc.e;
57 end
58 end
59
60 for j = 1:m
61 if isfield(bc,'n')
62 bound{1,j}.n = bc.n;
63 end
64
65 if isfield(bc,'s')
66 bound{m,j}.s = bc.s;
67 end
68 end
69 end
70