annotate +scheme/Heat2dVariable.m @ 1339:bcdb14b05d03 feature/D2_boundary_opt

Fix comment
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Fri, 22 Jul 2022 16:31:18 +0200
parents 8d73fcdb07a5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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