annotate +grid/Staggered1d.m @ 648:9e5dd0d3cf60 feature/d1_staggered

Bugfix right boundary in diracDiscr
author Martin Almquist <malmquist@stanford.edu>
date Tue, 14 Nov 2017 15:35:51 -0800
parents 4046b046c1f7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
640
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
1 classdef Staggered1d < grid.Structured
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
2 properties
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
3 grids % Cell array of grids
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
4 Ngrids % Number of grids
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
5 h % Interior grid spacing
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
6 d % Number of dimensions
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
7 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
8
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
9 methods
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
10
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
11 % Accepts multiple grids and combines them into a staggered grid
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
12 function obj = Staggered1d(varargin)
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
13
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
14 obj.d = 1;
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
15
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
16 obj.Ngrids = length(varargin);
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
17 obj.grids = cell(obj.Ngrids, 1);
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
18 for i = 1:obj.Ngrids
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
19 obj.grids{i} = varargin{i};
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
20 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
21
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
22 obj.h = [];
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
23 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
24
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
25 % N returns the total number of points
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
26 function o = N(obj)
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
27 o = 0;
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
28 for i=1:obj.Ngrids
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
29 o = o+obj.grids{i}.size();
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
30 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
31 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
32
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
33 % D returns the spatial dimension of the grid
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
34 function o = D(obj)
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
35 o = obj.d;
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
36 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
37
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
38 % size returns the number of points on the primal grid
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
39 function m = size(obj)
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
40 m = obj.grids{1}.size();
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
41 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
42
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
43 % points returns an n x 1 vector containing the coordinates for all points.
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
44 function X = points(obj)
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
45 X = [];
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
46 for i = 1:obj.Ngrids
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
47 X = [X; obj.grids{i}.points()];
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
48 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
49 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
50
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
51 % matrices returns a cell array with coordinates in matrix form.
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
52 % For 2d case these will have to be transposed to work with plotting routines.
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
53 function X = matrices(obj)
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
54
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
55 % There is no 1d matrix data type in matlab, handle special case
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
56 X{1} = reshape(obj.points(), [obj.m 1]);
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
57
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
58 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
59
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
60 function h = scaling(obj)
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
61 if isempty(obj.h)
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
62 error('grid:Staggered1d:NoScalingSet', 'No scaling set')
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
63 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
64
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
65 h = obj.h;
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
66 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
67
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
68 % Restricts the grid function gf on obj to the subgrid g.
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
69 % Only works for even multiples
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
70 function gf = restrictFunc(obj, gf, g)
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
71 error('grid:Staggered1d:NotImplemented','This method does not exist yet')
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
72 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
73
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
74 % Projects the grid function gf on obj to the grid g.
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
75 function gf = projectFunc(obj, gf, g)
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
76 error('grid:Staggered1d:NotImplemented','This method does not exist yet')
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
77 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
78
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
79 % Return the names of all boundaries in this grid.
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
80 function bs = getBoundaryNames(obj)
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
81 switch obj.D()
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
82 case 1
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
83 bs = {'l', 'r'};
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
84 case 2
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
85 bs = {'w', 'e', 's', 'n'};
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
86 case 3
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
87 bs = {'w', 'e', 's', 'n', 'd', 'u'};
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
88 otherwise
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
89 error('not implemented');
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
90 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
91 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
92
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
93 % Return coordinates for the given boundary
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
94 function X = getBoundary(obj, name)
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
95 % Use boundaries of first grid
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
96 X = obj.grids{1}.getBoundary(name);
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
97 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
98 end
4046b046c1f7 Add staggered grid class, Staggered<Structured.
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
99 end