Mercurial > repos > public > sbplib
annotate +scheme/Heat2dVariable.m @ 1198:2924b3a9b921 feature/d2_compatible
Add OpSet for fully compatible D2Variable, created from regular D2Variable by replacing d1 by first row of D1. Formal reduction by one order of accuracy at the boundary point.
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Fri, 16 Aug 2019 14:30:28 -0700 |
parents | 8d73fcdb07a5 |
children |
rev | line source |
---|---|
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
1 classdef Heat2dVariable < scheme.Scheme |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
2 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
3 % Discretizes the Laplacian with variable coefficent, |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
4 % In the Heat equation way (i.e., the discretization matrix is not necessarily |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
5 % symmetric) |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
6 % u_t = div * (kappa * grad u ) |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
7 % opSet should be cell array of opSets, one per dimension. This |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
8 % is useful if we have periodic BC in one direction. |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
9 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
10 properties |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
11 m % Number of points in each direction, possibly a vector |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
12 h % Grid spacing |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
13 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
14 grid |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
15 dim |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
16 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
17 order % Order of accuracy for the approximation |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
18 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
19 % Diagonal matrix for variable coefficients |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
20 KAPPA % Variable coefficient |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
21 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
22 D % Total operator |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
23 D1 % First derivatives |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
24 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
25 % Second derivatives |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
26 D2_kappa |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
27 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
28 H, Hi % Inner products |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
29 e_l, e_r |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
30 d1_l, d1_r % Normal derivatives at the boundary |
725
e9e15d64f9f9
Implement symmetric Dirichlet BC with variable tuning parameter in Heat2D scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
724
diff
changeset
|
31 alpha % Vector of borrowing constants |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
32 |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
33 H_boundary % Boundary inner products |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
34 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
35 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
36 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
37 methods |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
38 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
39 function obj = Heat2dVariable(g ,order, kappa_fun, opSet) |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
40 default_arg('opSet',{@sbp.D2Variable, @sbp.D2Variable}); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
41 default_arg('kappa_fun', @(x,y) 0*x+1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
42 dim = 2; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
43 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
44 assert(isa(g, 'grid.Cartesian')) |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
45 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
46 kappa = grid.evalOn(g, kappa_fun); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
47 m = g.size(); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
48 m_tot = g.N(); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
49 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
50 h = g.scaling(); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
51 lim = g.lim; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
52 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
53 % 1D operators |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
54 ops = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
55 for i = 1:dim |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
56 ops{i} = opSet{i}(m(i), lim{i}, order); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
57 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
58 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
59 I = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
60 D1 = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
61 D2 = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
62 H = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
63 Hi = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
64 e_l = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
65 e_r = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
66 d1_l = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
67 d1_r = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
68 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
69 for i = 1:dim |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
70 I{i} = speye(m(i)); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
71 D1{i} = ops{i}.D1; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
72 D2{i} = ops{i}.D2; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
73 H{i} = ops{i}.H; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
74 Hi{i} = ops{i}.HI; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
75 e_l{i} = ops{i}.e_l; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
76 e_r{i} = ops{i}.e_r; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
77 d1_l{i} = ops{i}.d1_l; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
78 d1_r{i} = ops{i}.d1_r; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
79 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
80 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
81 %====== Assemble full operators ======== |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
82 KAPPA = spdiag(kappa); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
83 obj.KAPPA = KAPPA; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
84 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
85 obj.D1 = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
86 obj.D2_kappa = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
87 obj.e_l = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
88 obj.e_r = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
89 obj.d1_l = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
90 obj.d1_r = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
91 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
92 % D1 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
93 obj.D1{1} = kron(D1{1},I{2}); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
94 obj.D1{2} = kron(I{1},D1{2}); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
95 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
96 % Boundary operators |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
97 obj.e_l{1} = kron(e_l{1},I{2}); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
98 obj.e_l{2} = kron(I{1},e_l{2}); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
99 obj.e_r{1} = kron(e_r{1},I{2}); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
100 obj.e_r{2} = kron(I{1},e_r{2}); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
101 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
102 obj.d1_l{1} = kron(d1_l{1},I{2}); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
103 obj.d1_l{2} = kron(I{1},d1_l{2}); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
104 obj.d1_r{1} = kron(d1_r{1},I{2}); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
105 obj.d1_r{2} = kron(I{1},d1_r{2}); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
106 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
107 % D2 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
108 for i = 1:dim |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
109 obj.D2_kappa{i} = sparse(m_tot); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
110 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
111 ind = grid.funcToMatrix(g, 1:m_tot); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
112 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
113 for i = 1:m(2) |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
114 D_kappa = D2{1}(kappa(ind(:,i))); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
115 p = ind(:,i); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
116 obj.D2_kappa{1}(p,p) = D_kappa; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
117 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
118 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
119 for i = 1:m(1) |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
120 D_kappa = D2{2}(kappa(ind(i,:))); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
121 p = ind(i,:); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
122 obj.D2_kappa{2}(p,p) = D_kappa; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
123 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
124 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
125 % Quadratures |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
126 obj.H = kron(H{1},H{2}); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
127 obj.Hi = inv(obj.H); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
128 obj.H_boundary = cell(dim,1); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
129 obj.H_boundary{1} = H{2}; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
130 obj.H_boundary{2} = H{1}; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
131 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
132 % Differentiation matrix D (without SAT) |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
133 D2_kappa = obj.D2_kappa; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
134 D1 = obj.D1; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
135 D = sparse(m_tot,m_tot); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
136 for i = 1:dim |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
137 D = D + D2_kappa{i}; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
138 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
139 obj.D = D; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
140 %=========================================% |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
141 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
142 % Misc. |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
143 obj.m = m; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
144 obj.h = h; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
145 obj.order = order; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
146 obj.grid = g; |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
147 obj.dim = dim; |
725
e9e15d64f9f9
Implement symmetric Dirichlet BC with variable tuning parameter in Heat2D scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
724
diff
changeset
|
148 obj.alpha = [ops{1}.borrowing.M.d1, ops{2}.borrowing.M.d1]; |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
149 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
150 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
151 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
152 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
153 % Closure functions return the operators applied to the own domain to close the boundary |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
154 % Penalty functions return the operators to force the solution. In the case of an interface it returns the operator applied to the other doamin. |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
155 % boundary is a string specifying the boundary e.g. 'l','r' or 'e','w','n','s'. |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
156 % type is a string specifying the type of boundary condition. |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
157 % data is a function returning the data that should be applied at the boundary. |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
158 % neighbour_scheme is an instance of Scheme that should be interfaced to. |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
159 % neighbour_boundary is a string specifying which boundary to interface to. |
725
e9e15d64f9f9
Implement symmetric Dirichlet BC with variable tuning parameter in Heat2D scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
724
diff
changeset
|
160 function [closure, penalty] = boundary_condition(obj, boundary, type, symmetric, tuning) |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
161 default_arg('type','Neumann'); |
725
e9e15d64f9f9
Implement symmetric Dirichlet BC with variable tuning parameter in Heat2D scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
724
diff
changeset
|
162 default_arg('symmetric', false); |
e9e15d64f9f9
Implement symmetric Dirichlet BC with variable tuning parameter in Heat2D scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
724
diff
changeset
|
163 default_arg('tuning',1.2); |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
164 |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
165 % nj: outward unit normal component. |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
166 % nj = -1 for west, south, bottom boundaries |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
167 % nj = 1 for east, north, top boundaries |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
168 nj = obj.getBoundarySign(boundary); |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
169 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
170 Hi = obj.Hi; |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
171 [e, d] = obj.getBoundaryOperator({'e', 'd'}, boundary); |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
172 H_gamma = obj.getBoundaryQuadrature(boundary); |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
173 alpha = obj.getBoundaryBorrowing(boundary); |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
174 |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
175 KAPPA = obj.KAPPA; |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
176 kappa_gamma = e'*KAPPA*e; |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
177 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
178 switch type |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
179 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
180 % Dirichlet boundary condition |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
181 case {'D','d','dirichlet','Dirichlet'} |
725
e9e15d64f9f9
Implement symmetric Dirichlet BC with variable tuning parameter in Heat2D scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
724
diff
changeset
|
182 |
e9e15d64f9f9
Implement symmetric Dirichlet BC with variable tuning parameter in Heat2D scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
724
diff
changeset
|
183 if ~symmetric |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
184 closure = -nj*Hi*d*kappa_gamma*H_gamma*(e' ); |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
185 penalty = nj*Hi*d*kappa_gamma*H_gamma; |
725
e9e15d64f9f9
Implement symmetric Dirichlet BC with variable tuning parameter in Heat2D scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
724
diff
changeset
|
186 else |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
187 closure = nj*Hi*d*kappa_gamma*H_gamma*(e' )... |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
188 -tuning*2/alpha*Hi*e*kappa_gamma*H_gamma*(e' ) ; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
189 penalty = -nj*Hi*d*kappa_gamma*H_gamma ... |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
190 +tuning*2/alpha*Hi*e*kappa_gamma*H_gamma; |
725
e9e15d64f9f9
Implement symmetric Dirichlet BC with variable tuning parameter in Heat2D scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
724
diff
changeset
|
191 end |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
192 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
193 % Free boundary condition |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
194 case {'N','n','neumann','Neumann'} |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
195 closure = -nj*Hi*e*kappa_gamma*H_gamma*(d' ); |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
196 penalty = Hi*e*kappa_gamma*H_gamma; |
724
a9e8c9d71307
Modify penalty for Neumann in Head2d so that data is for normal derivative and not u_x or u_y.
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
197 % penalty is for normal derivative and not for derivative, hence the sign. |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
198 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
199 % Unknown boundary condition |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
200 otherwise |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
201 error('No such boundary condition: type = %s',type); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
202 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
203 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
204 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
205 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary) |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
206 % u denotes the solution in the own domain |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
207 % v denotes the solution in the neighbour domain |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
208 error('Interface not implemented'); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
209 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
210 |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
211 % Returns the boundary operator op for the boundary specified by the string boundary. |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
212 % op -- string or a cell array of strings |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
213 % boundary -- string |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
214 function varargout = getBoundaryOperator(obj, op, boundary) |
1042
8d73fcdb07a5
Add asserts to boundary identifier inputs
Jonatan Werpers <jonatan@werpers.com>
parents:
997
diff
changeset
|
215 assertIsMember(boundary, {'w', 'e', 's', 'n'}) |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
216 |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
217 if ~iscell(op) |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
218 op = {op}; |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
219 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
220 |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
221 for i = 1:numel(op) |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
222 switch op{i} |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
223 case 'e' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
224 switch boundary |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
225 case 'w' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
226 e = obj.e_l{1}; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
227 case 'e' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
228 e = obj.e_r{1}; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
229 case 's' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
230 e = obj.e_l{2}; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
231 case 'n' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
232 e = obj.e_r{2}; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
233 end |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
234 varargout{i} = e; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
235 |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
236 case 'd' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
237 switch boundary |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
238 case 'w' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
239 d = obj.d1_l{1}; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
240 case 'e' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
241 d = obj.d1_r{1}; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
242 case 's' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
243 d = obj.d1_l{2}; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
244 case 'n' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
245 d = obj.d1_r{2}; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
246 end |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
247 varargout{i} = d; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
248 end |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
249 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
250 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
251 |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
252 % Returns square boundary quadrature matrix, of dimension |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
253 % corresponding to the number of boundary points |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
254 % |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
255 % boundary -- string |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
256 function H_b = getBoundaryQuadrature(obj, boundary) |
1042
8d73fcdb07a5
Add asserts to boundary identifier inputs
Jonatan Werpers <jonatan@werpers.com>
parents:
997
diff
changeset
|
257 assertIsMember(boundary, {'w', 'e', 's', 'n'}) |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
258 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
259 switch boundary |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
260 case 'w' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
261 H_b = obj.H_boundary{1}; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
262 case 'e' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
263 H_b = obj.H_boundary{1}; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
264 case 's' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
265 H_b = obj.H_boundary{2}; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
266 case 'n' |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
267 H_b = obj.H_boundary{2}; |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
268 end |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
269 end |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
270 |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
271 % Returns the boundary sign. The right boundary is considered the positive boundary |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
272 % boundary -- string |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
273 function s = getBoundarySign(obj, boundary) |
1042
8d73fcdb07a5
Add asserts to boundary identifier inputs
Jonatan Werpers <jonatan@werpers.com>
parents:
997
diff
changeset
|
274 assertIsMember(boundary, {'w', 'e', 's', 'n'}) |
8d73fcdb07a5
Add asserts to boundary identifier inputs
Jonatan Werpers <jonatan@werpers.com>
parents:
997
diff
changeset
|
275 |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
276 switch boundary |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
277 case {'e','n'} |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
278 s = 1; |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
279 case {'w','s'} |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
280 s = -1; |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
281 end |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
282 end |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
283 |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
284 % Returns borrowing constant gamma*h |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
285 % boundary -- string |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
286 function gamm = getBoundaryBorrowing(obj, boundary) |
1042
8d73fcdb07a5
Add asserts to boundary identifier inputs
Jonatan Werpers <jonatan@werpers.com>
parents:
997
diff
changeset
|
287 assertIsMember(boundary, {'w', 'e', 's', 'n'}) |
8d73fcdb07a5
Add asserts to boundary identifier inputs
Jonatan Werpers <jonatan@werpers.com>
parents:
997
diff
changeset
|
288 |
997
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
289 switch boundary |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
290 case {'w','e'} |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
291 gamm = obj.h(1)*obj.alpha(1); |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
292 case {'s','n'} |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
293 gamm = obj.h(2)*obj.alpha(2); |
78db023a7fe3
Add getBoundaryOperator method to all 2d schemes, except obsolete Wave2dCurve and ElastiCurve, which needs a big makeover.
Martin Almquist <malmquist@stanford.edu>
parents:
943
diff
changeset
|
294 end |
688
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
295 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
296 |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
297 function N = size(obj) |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
298 N = prod(obj.m); |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
299 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
300 end |
eb2f9233acc3
Add scheme Heat2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
301 end |