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