annotate +grid/Staggered1d.m @ 1259:99f92bfc1157 feature/poroelastic

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