annotate +grid/Staggered.m @ 1274:8aa0909125a4 feature/poroelastic

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