annotate +scheme/Elastic2dVariableAnisotropicIncompatible.m @ 1346:464e6f65c2c6 feature/poroelastic

Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
author Martin Almquist <martin.almquist@it.uu.se>
date Tue, 30 Apr 2024 14:18:47 +0200
parents 14f44e81e1e3
children ac54767ae1fb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1345
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
1 classdef Elastic2dVariableAnisotropicIncompatible < scheme.Scheme
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
2
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
3 % Discretizes the elastic wave equation:
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
4 % rho u_{i,tt} = dj C_{ijkl} dk u_j
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
5 % opSet should be cell array of opSets, one per dimension. This
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
6 % is useful if we have periodic BC in one direction.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
7 % Assumes fully compatible operators
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
8
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
9 properties
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
10 m % Number of points in each direction, possibly a vector
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
11 h % Grid spacing
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
12
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
13 grid
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
14 dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
15
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
16 order % Order of accuracy for the approximation
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
17
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
18 % Diagonal matrices for variable coefficients
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
19 RHO, RHOi, RHOi_kron % Density
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
20 C % Elastic stiffness tensor
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
21
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
22 D % Total operator
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
23 D1 % First derivatives
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
24 % D2 % Second derivatives
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
25
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
26 % Boundary operators in cell format, used for BC
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
27 T_w, T_e, T_s, T_n
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
28
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
29 % Traction operators
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
30 tau_w, tau_e, tau_s, tau_n % Return vector field
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
31 tau1_w, tau1_e, tau1_s, tau1_n % Return scalar field
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
32 tau2_w, tau2_e, tau2_s, tau2_n % Return scalar field
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
33
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
34 % Inner products
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
35 H, Hi, Hi_kron, H_1D
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
36
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
37 % Boundary inner products (for scalar field)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
38 H_w, H_e, H_s, H_n
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
39
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
40 % Boundary restriction operators
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
41 e_w, e_e, e_s, e_n % Act on vector field, return vector field at boundary
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
42 e1_w, e1_e, e1_s, e1_n % Act on vector field, return scalar field at boundary
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
43 e2_w, e2_e, e2_s, e2_n % Act on vector field, return scalar field at boundary
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
44 e_scalar_w, e_scalar_e, e_scalar_s, e_scalar_n; % Act on scalar field, return scalar field
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
45
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
46 % E{i}^T picks out component i
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
47 E
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
48
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
49 % Borrowing constants of the form gamma*h, where gamma is a dimensionless constant.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
50 h11 % First entry in norm matrix
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
51 theta_R % Borrowing from R
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
52
1346
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
53 nBP_R % Number of boundary points in R, related to borrowing from R.
1345
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
54 e_shifted_scalar_w, e_shifted_scalar_e, e_shifted_scalar_s, e_shifted_scalar_n; % Act on scalar field, return scalar field
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
55
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
56 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
57
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
58 methods
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
59
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
60 % The coefficients can either be function handles or grid functions
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
61 function obj = Elastic2dVariableAnisotropicIncompatible(g, order, rho, C, opSet, optFlag)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
62 default_arg('rho', @(x,y) 0*x+1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
63 default_arg('opSet',{@sbp.D2Variable, @sbp.D2Variable});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
64 dim = 2;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
65
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
66 C_default = cell(dim,dim,dim,dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
67 for i = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
68 for j = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
69 for k = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
70 for l = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
71 C_default{i,j,k,l} = @(x,y) 0*x + 1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
72 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
73 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
74 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
75 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
76 default_arg('C', C_default);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
77 assert(isa(g, 'grid.Cartesian'))
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
78
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
79 if isa(rho, 'function_handle')
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
80 rho = grid.evalOn(g, rho);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
81 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
82
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
83 C_mat = cell(dim,dim,dim,dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
84 for i = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
85 for j = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
86 for k = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
87 for l = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
88 if isa(C{i,j,k,l}, 'function_handle')
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
89 C{i,j,k,l} = grid.evalOn(g, C{i,j,k,l});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
90 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
91 C_mat{i,j,k,l} = spdiag(C{i,j,k,l});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
92 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
93 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
94 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
95 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
96 obj.C = C_mat;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
97
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
98 m = g.size();
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
99 m_tot = g.N();
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
100 lim = g.lim;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
101 if isempty(lim)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
102 x = g.x;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
103 lim = cell(length(x),1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
104 for i = 1:length(x)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
105 lim{i} = {min(x{i}), max(x{i})};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
106 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
107 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
108
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
109 % 1D operators
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
110 ops = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
111 h = zeros(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
112 for i = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
113 ops{i} = opSet{i}(m(i), lim{i}, order);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
114 h(i) = ops{i}.h;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
115 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
116
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
117 % Borrowing constants
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
118 for i = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
119 obj.h11{i} = h(i)*ops{i}.borrowing.H11;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
120 obj.theta_R{i} = h(i)*ops{i}.borrowing.R.delta_D;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
121 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
122
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
123 switch order
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
124 case 2
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
125 width = 3;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
126 nBP = 2;
1346
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
127 nBP_R = 2;
1345
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
128 case 4
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
129 width = 5;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
130 nBP = 6;
1346
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
131 nBP_R = 4;
1345
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
132 case 6
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
133 width = 7;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
134 nBP = 9;
1346
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
135 nBP_R = 7;
1345
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
136 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
137
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
138 I = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
139 D1 = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
140 D2 = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
141 H = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
142 Hi = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
143 e_0 = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
144 e_m = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
145 d1_0 = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
146 d1_m = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
147
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
148 for i = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
149 I{i} = speye(m(i));
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
150 D1{i} = ops{i}.D1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
151 D2{i} = ops{i}.D2;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
152 H{i} = ops{i}.H;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
153 Hi{i} = ops{i}.HI;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
154 e_0{i} = ops{i}.e_l;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
155 e_m{i} = ops{i}.e_r;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
156 d1_0{i} = ops{i}.d1_l;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
157 d1_m{i} = ops{i}.d1_r;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
158 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
159
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
160 %====== Assemble full operators ========
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
161 I_dim = speye(dim, dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
162 RHO = spdiag(rho);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
163 obj.RHO = RHO;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
164 obj.RHOi = inv(RHO);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
165 obj.RHOi_kron = kron(obj.RHOi, I_dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
166
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
167 obj.D1 = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
168 D2_temp = cell(dim,dim,dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
169
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
170 % D1
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
171 obj.D1{1} = kron(D1{1},I{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
172 obj.D1{2} = kron(I{1},D1{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
173
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
174 % Boundary restriction operators
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
175 e_l = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
176 e_r = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
177 e_l{1} = kron(e_0{1}, I{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
178 e_l{2} = kron(I{1}, e_0{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
179 e_r{1} = kron(e_m{1}, I{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
180 e_r{2} = kron(I{1}, e_m{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
181
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
182 e_scalar_w = e_l{1};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
183 e_scalar_e = e_r{1};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
184 e_scalar_s = e_l{2};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
185 e_scalar_n = e_r{2};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
186
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
187 e_w = kron(e_scalar_w, I_dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
188 e_e = kron(e_scalar_e, I_dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
189 e_s = kron(e_scalar_s, I_dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
190 e_n = kron(e_scalar_n, I_dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
191
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
192 % Boundary restriction, shifted up to nBP-1 points
1346
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
193 e_shifted_scalar_w = cell(nBP_R, 1);
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
194 e_shifted_scalar_e = cell(nBP_R, 1);
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
195 e_shifted_scalar_s = cell(nBP_R, 1);
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
196 e_shifted_scalar_n = cell(nBP_R, 1);
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
197 for i = 1:nBP_R-1
1345
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
198 e_0_nBP = {0*e_0{1}, 0*e_0{2}};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
199 e_m_nBP = {0*e_m{1}, 0*e_m{2}};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
200 e_0_nBP{1}(i) = 1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
201 e_0_nBP{2}(i) = 1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
202 e_m_nBP{1}(end+1-i) = 1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
203 e_m_nBP{2}(end+1-i) = 1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
204 e_shifted_scalar_w{i} = kron(e_0_nBP{1}, I{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
205 e_shifted_scalar_s{i} = kron(I{1}, e_0_nBP{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
206 e_shifted_scalar_e{i} = kron(e_m_nBP{1}, I{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
207 e_shifted_scalar_n{i} = kron(I{1}, e_m_nBP{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
208 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
209
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
210 % Boundary derivatives
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
211 d1_l = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
212 d1_r = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
213 d1_l{1} = kron(d1_0{1}, I{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
214 d1_l{2} = kron(I{1}, d1_0{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
215 d1_r{1} = kron(d1_m{1}, I{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
216 d1_r{2} = kron(I{1}, d1_m{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
217
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
218 % E{i}^T picks out component i.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
219 E = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
220 I = speye(m_tot,m_tot);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
221 for i = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
222 e = sparse(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
223 e(i) = 1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
224 E{i} = kron(I,e);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
225 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
226 obj.E = E;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
227
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
228 e1_w = (e_scalar_w'*E{1}')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
229 e1_e = (e_scalar_e'*E{1}')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
230 e1_s = (e_scalar_s'*E{1}')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
231 e1_n = (e_scalar_n'*E{1}')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
232
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
233 e2_w = (e_scalar_w'*E{2}')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
234 e2_e = (e_scalar_e'*E{2}')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
235 e2_s = (e_scalar_s'*E{2}')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
236 e2_n = (e_scalar_n'*E{2}')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
237
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
238 % D2
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
239 for j = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
240 for k = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
241 for l = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
242 D2_temp{j,k,l} = spalloc(m_tot, m_tot, width*m_tot);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
243 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
244 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
245 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
246 ind = grid.funcToMatrix(g, 1:m_tot);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
247
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
248 k = 1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
249 for r = 1:m(2)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
250 p = ind(:,r);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
251 for j = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
252 for l = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
253 coeff = C{k,j,k,l};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
254 D_kk = D2{1}(coeff(p));
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
255 D2_temp{j,k,l}(p,p) = D_kk;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
256 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
257 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
258 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
259
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
260 k = 2;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
261 for r = 1:m(1)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
262 p = ind(r,:);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
263 for j = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
264 for l = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
265 coeff = C{k,j,k,l};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
266 D_kk = D2{2}(coeff(p));
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
267 D2_temp{j,k,l}(p,p) = D_kk;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
268 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
269 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
270 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
271
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
272 % Quadratures
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
273 obj.H = kron(H{1},H{2});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
274 obj.Hi = inv(obj.H);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
275 obj.H_w = H{2};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
276 obj.H_e = H{2};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
277 obj.H_s = H{1};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
278 obj.H_n = H{1};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
279 obj.H_1D = {H{1}, H{2}};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
280
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
281 % Differentiation matrix D (without SAT)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
282 D1 = obj.D1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
283 D = sparse(dim*m_tot,dim*m_tot);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
284 for i = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
285 for j = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
286 for k = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
287 for l = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
288 if i == k
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
289 D = D + E{j}*D2_temp{j,k,l}*E{l}';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
290 D2_temp{j,k,l} = [];
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
291 else
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
292 D = D + E{j}*(D1{i})*C_mat{i,j,k,l}*D1{k}*E{l}';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
293 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
294 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
295 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
296 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
297 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
298 clear D2_temp;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
299 D = obj.RHOi_kron*D;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
300 obj.D = D;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
301 clear D;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
302 %=========================================%'
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
303
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
304 % Numerical traction operators for BC.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
305 %
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
306 % Formula at boundary j: % tau^{j}_i = sum_l T^{j}_{il} u_l
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
307 %
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
308 T_l = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
309 T_r = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
310 tau_l = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
311 tau_r = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
312
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
313 D1 = obj.D1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
314
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
315 d = @kroneckerDelta; % Kronecker delta
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
316 db = @(i,j) 1-d(i,j); % Logical not of Kronecker delta
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
317
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
318 % Boundary j
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
319 for j = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
320 T_l{j} = cell(dim,dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
321 T_r{j} = cell(dim,dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
322 tau_l{j} = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
323 tau_r{j} = cell(dim,1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
324
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
325 [~, n_l] = size(e_l{j});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
326 [~, n_r] = size(e_r{j});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
327
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
328 % Traction component i
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
329 for i = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
330 tau_l{j}{i} = sparse(dim*m_tot, n_l);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
331 tau_r{j}{i} = sparse(dim*m_tot, n_r);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
332
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
333 % Displacement component l
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
334 for l = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
335 T_l{j}{i,l} = sparse(m_tot, n_l);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
336 T_r{j}{i,l} = sparse(m_tot, n_r);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
337
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
338 % Derivative direction k
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
339 for k = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
340 T_l{j}{i,l} = T_l{j}{i,l} ...
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
341 - d(j,k)*(e_l{j}'*C_mat{j,i,k,l}*e_l{j}*d1_l{k}')'...
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
342 - db(j,k)*(e_l{j}'*C_mat{j,i,k,l}*D1{k})';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
343 T_r{j}{i,l} = T_r{j}{i,l} ...
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
344 + d(j,k)*(e_r{j}'*C_mat{j,i,k,l}*e_r{j}*d1_r{k}')'...
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
345 + db(j,k)*(e_r{j}'*C_mat{j,i,k,l}*D1{k})';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
346 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
347 tau_l{j}{i} = tau_l{j}{i} + (T_l{j}{i,l}'*E{l}')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
348 tau_r{j}{i} = tau_r{j}{i} + (T_r{j}{i,l}'*E{l}')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
349 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
350 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
351 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
352
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
353 % Traction tensors, T_ij
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
354 obj.T_w = T_l{1};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
355 obj.T_e = T_r{1};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
356 obj.T_s = T_l{2};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
357 obj.T_n = T_r{2};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
358
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
359 % Restriction operators
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
360 obj.e_w = e_w;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
361 obj.e_e = e_e;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
362 obj.e_s = e_s;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
363 obj.e_n = e_n;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
364
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
365 obj.e1_w = e1_w;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
366 obj.e1_e = e1_e;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
367 obj.e1_s = e1_s;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
368 obj.e1_n = e1_n;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
369
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
370 obj.e2_w = e2_w;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
371 obj.e2_e = e2_e;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
372 obj.e2_s = e2_s;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
373 obj.e2_n = e2_n;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
374
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
375 obj.e_scalar_w = e_scalar_w;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
376 obj.e_scalar_e = e_scalar_e;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
377 obj.e_scalar_s = e_scalar_s;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
378 obj.e_scalar_n = e_scalar_n;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
379
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
380
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
381 obj.e_shifted_scalar_w = e_shifted_scalar_w;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
382 obj.e_shifted_scalar_e = e_shifted_scalar_e;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
383 obj.e_shifted_scalar_s = e_shifted_scalar_s;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
384 obj.e_shifted_scalar_n = e_shifted_scalar_n;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
385
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
386 % First component of traction
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
387 obj.tau1_w = tau_l{1}{1};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
388 obj.tau1_e = tau_r{1}{1};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
389 obj.tau1_s = tau_l{2}{1};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
390 obj.tau1_n = tau_r{2}{1};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
391
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
392 % Second component of traction
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
393 obj.tau2_w = tau_l{1}{2};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
394 obj.tau2_e = tau_r{1}{2};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
395 obj.tau2_s = tau_l{2}{2};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
396 obj.tau2_n = tau_r{2}{2};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
397
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
398 % Traction vectors
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
399 obj.tau_w = (e_w'*e1_w*obj.tau1_w')' + (e_w'*e2_w*obj.tau2_w')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
400 obj.tau_e = (e_e'*e1_e*obj.tau1_e')' + (e_e'*e2_e*obj.tau2_e')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
401 obj.tau_s = (e_s'*e1_s*obj.tau1_s')' + (e_s'*e2_s*obj.tau2_s')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
402 obj.tau_n = (e_n'*e1_n*obj.tau1_n')' + (e_n'*e2_n*obj.tau2_n')';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
403
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
404 % Kroneckered norms and coefficients
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
405 obj.Hi_kron = kron(obj.Hi, I_dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
406
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
407 % Misc.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
408 obj.m = m;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
409 obj.h = h;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
410 obj.order = order;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
411 obj.grid = g;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
412 obj.dim = dim;
1346
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
413 obj.nBP_R = nBP_R;
1345
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
414
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
415 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
416
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
417
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
418 % Closure functions return the operators applied to the own domain to close the boundary
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
419 % Penalty functions return the operators to force the solution. In the case of an interface it returns the operator applied to the other doamin.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
420 % boundary is a string specifying the boundary e.g. 'l','r' or 'e','w','n','s'.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
421 % bc is a cell array of component and bc type, e.g. {1, 'd'} for Dirichlet condition
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
422 % on the first component. Can also be e.g.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
423 % {'normal', 'd'} or {'tangential', 't'} for conditions on
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
424 % tangential/normal component.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
425 % data is a function returning the data that should be applied at the boundary.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
426 % neighbour_scheme is an instance of Scheme that should be interfaced to.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
427 % neighbour_boundary is a string specifying which boundary to interface to.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
428
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
429 % For displacement bc:
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
430 % bc = {comp, 'd', dComps},
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
431 % where
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
432 % dComps = vector of components with displacement BC. Default: 1:dim.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
433 % In this way, we can specify one BC at a time even though the SATs depend on all BC.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
434 function [closure, penalty] = boundary_condition(obj, boundary, bc, tuning)
1346
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
435 default_arg('tuning', 1.2);
1345
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
436
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
437 assert( iscell(bc), 'The BC type must be a 2x1 or 3x1 cell array' );
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
438 comp = bc{1};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
439 type = bc{2};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
440 if ischar(comp)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
441 comp = obj.getComponent(comp, boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
442 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
443
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
444 e = obj.getBoundaryOperatorForScalarField('e', boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
445 tau = obj.getBoundaryOperator(['tau' num2str(comp)], boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
446 T = obj.getBoundaryTractionOperator(boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
447 [h11, th_R] = obj.getBorrowing(boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
448 H_gamma = obj.getBoundaryQuadratureForScalarField(boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
449 nu = obj.getNormal(boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
450
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
451 E = obj.E;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
452 Hi = obj.Hi;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
453 RHOi = obj.RHOi;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
454 C = obj.C;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
455
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
456 dim = obj.dim;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
457 m_tot = obj.grid.N();
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
458
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
459 % Preallocate
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
460 [~, col] = size(tau);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
461 closure = sparse(dim*m_tot, dim*m_tot);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
462 penalty = sparse(dim*m_tot, col);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
463
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
464 j = comp;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
465 switch type
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
466
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
467 % Dirichlet boundary condition
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
468 case {'D','d','dirichlet','Dirichlet','displacement','Displacement'}
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
469
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
470 if numel(bc) >= 3
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
471 dComps = bc{3};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
472 else
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
473 dComps = 1:dim;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
474 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
475
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
476 % Loops over components that Dirichlet penalties end up on
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
477 % Y: symmetrizing part of penalty
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
478 % Z: symmetric part of penalty
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
479 % X = Y + Z.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
480
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
481 % Nonsymmetric part goes on all components to
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
482 % yield traction in discrete energy rate
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
483 for i = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
484 Y = T{j,i}';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
485 X = e*Y;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
486 closure = closure + E{i}*RHOi*Hi*X'*e*H_gamma*(e'*E{j}' );
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
487 penalty = penalty - E{i}*RHOi*Hi*X'*e*H_gamma;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
488 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
489
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
490 % Symmetric part only required on components with displacement BC.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
491 % (Otherwise it's not symmetric.)
1346
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
492 beta_vec = obj.computeBorrowingFromC(boundary);
1345
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
493 beta_inv = e*spdiag(1./beta_vec)*e';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
494
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
495 % Compensate at corners
1346
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
496 [~, N] = size(e);
1345
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
497 corner_weight = ones(N, 1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
498 corner_weight(1) = 2;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
499 corner_weight(end) = 2;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
500 corner_weight = e*spdiag(corner_weight)*e';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
501
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
502
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
503 % 2. Build Z.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
504 j = comp;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
505 for i = dComps
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
506 Z = sparse(m_tot, m_tot);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
507 for l = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
508 for k = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
509 Z = Z + nu(l)*C{l,i,k,j}*nu(k);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
510 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
511 end
1346
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
512 Z = -tuning*(corner_weight/h11 + beta_inv/th_R)*Z;
1345
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
513 X = Z;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
514 closure = closure + E{i}*RHOi*Hi*X'*e*H_gamma*(e'*E{j}' );
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
515 penalty = penalty - E{i}*RHOi*Hi*X'*e*H_gamma;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
516 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
517
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
518 % Free boundary condition
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
519 case {'F','f','Free','free','traction','Traction','t','T'}
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
520 closure = closure - E{j}*RHOi*Hi*e*H_gamma*tau';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
521 penalty = penalty + E{j}*RHOi*Hi*e*H_gamma;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
522
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
523 % Unknown boundary condition
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
524 otherwise
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
525 error('No such boundary condition: type = %s',type);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
526 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
527 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
528
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
529 % type Struct that specifies the interface coupling.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
530 % Fields:
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
531 % -- tuning: penalty strength, defaults to 1.0
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
532 % -- interpolation: type of interpolation, default 'none'
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
533 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary,type)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
534
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
535 defaultType.tuning = 1.0;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
536 defaultType.interpolation = 'none';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
537 default_struct('type', defaultType);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
538
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
539 switch type.interpolation
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
540 case {'none', ''}
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
541 [closure, penalty] = interfaceStandard(obj,boundary,neighbour_scheme,neighbour_boundary,type);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
542 case {'op','OP'}
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
543 [closure, penalty] = interfaceNonConforming(obj,boundary,neighbour_scheme,neighbour_boundary,type);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
544 otherwise
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
545 error('Unknown type of interpolation: %s ', type.interpolation);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
546 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
547 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
548
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
549 function [closure, penalty] = interfaceStandard(obj,boundary,neighbour_scheme,neighbour_boundary,type)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
550 tuning = type.tuning;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
551
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
552 % u denotes the solution in the own domain
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
553 % v denotes the solution in the neighbour domain
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
554
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
555 u = obj;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
556 v = neighbour_scheme;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
557
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
558 % Operators, u side
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
559 e_u = u.getBoundaryOperatorForScalarField('e', boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
560 tau_u = u.getBoundaryOperator('tau', boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
561 h11_u = u.getBorrowing(boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
562 nu_u = u.getNormal(boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
563
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
564 E_u = u.E;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
565 C_u = u.C;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
566 m_tot_u = u.grid.N();
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
567
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
568 % Operators, v side
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
569 e_v = v.getBoundaryOperatorForScalarField('e', neighbour_boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
570 tau_v = v.getBoundaryOperator('tau', neighbour_boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
571 h11_v = v.getBorrowing(neighbour_boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
572 nu_v = v.getNormal(neighbour_boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
573
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
574 E_v = v.E;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
575 C_v = v.C;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
576 m_tot_v = v.grid.N();
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
577
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
578 % Fix {'e', 's'}, {'w', 'n'}, and {'x','x'} couplings
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
579 flipFlag = false;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
580 e_v_flip = e_v;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
581 if (strcmp(boundary,'s') && strcmp(neighbour_boundary,'e')) || ...
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
582 (strcmp(boundary,'e') && strcmp(neighbour_boundary,'s')) || ...
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
583 (strcmp(boundary,'w') && strcmp(neighbour_boundary,'n')) || ...
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
584 (strcmp(boundary,'n') && strcmp(neighbour_boundary,'w')) || ...
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
585 (strcmp(boundary,'s') && strcmp(neighbour_boundary,'s')) || ...
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
586 (strcmp(boundary,'n') && strcmp(neighbour_boundary,'n')) || ...
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
587 (strcmp(boundary,'w') && strcmp(neighbour_boundary,'w')) || ...
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
588 (strcmp(boundary,'e') && strcmp(neighbour_boundary,'e'))
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
589
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
590 flipFlag = true;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
591 e_v_flip = fliplr(e_v);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
592
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
593 t1 = tau_v(:,1:2:end-1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
594 t2 = tau_v(:,2:2:end);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
595
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
596 t1 = fliplr(t1);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
597 t2 = fliplr(t2);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
598
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
599 tau_v(:,1:2:end-1) = t1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
600 tau_v(:,2:2:end) = t2;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
601 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
602
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
603 % Operators that are only required for own domain
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
604 Hi = u.Hi_kron;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
605 RHOi = u.RHOi_kron;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
606 e_kron = u.getBoundaryOperator('e', boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
607 T_u = u.getBoundaryTractionOperator(boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
608
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
609 % Shared operators
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
610 H_gamma = u.getBoundaryQuadratureForScalarField(boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
611 H_gamma_kron = u.getBoundaryQuadrature(boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
612 dim = u.dim;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
613
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
614 % Preallocate
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
615 [~, m_int] = size(H_gamma);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
616 closure = sparse(dim*m_tot_u, dim*m_tot_u);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
617 penalty = sparse(dim*m_tot_u, dim*m_tot_v);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
618
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
619 % ---- Continuity of displacement ------
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
620
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
621 % Y: symmetrizing part of penalty
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
622 % Z: symmetric part of penalty
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
623 % X = Y + Z.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
624
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
625 % Loop over components to couple across interface
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
626 for j = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
627
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
628 % Loop over components that penalties end up on
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
629 for i = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
630 Y = 1/2*T_u{j,i}';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
631 Z_u = sparse(m_int, m_int);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
632 Z_v = sparse(m_int, m_int);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
633 for l = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
634 for k = 1:dim
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
635 Z_u = Z_u + e_u'*nu_u(l)*C_u{l,i,k,j}*nu_u(k)*e_u;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
636 Z_v = Z_v + e_v'*nu_v(l)*C_v{l,i,k,j}*nu_v(k)*e_v;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
637 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
638 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
639
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
640 if flipFlag
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
641 Z_v = rot90(Z_v,2);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
642 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
643
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
644 Z = -tuning*dim*( 1/(4*h11_u)*Z_u + 1/(4*h11_v)*Z_v );
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
645 X = Y + Z*e_u';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
646 closure = closure + E_u{i}*X'*H_gamma*e_u'*E_u{j}';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
647 penalty = penalty - E_u{i}*X'*H_gamma*e_v_flip'*E_v{j}';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
648
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
649 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
650 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
651
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
652 % ---- Continuity of traction ------
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
653 closure = closure - 1/2*e_kron*H_gamma_kron*tau_u';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
654 penalty = penalty - 1/2*e_kron*H_gamma_kron*tau_v';
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
655
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
656 % ---- Multiply by inverse of density x quadraure ----
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
657 closure = RHOi*Hi*closure;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
658 penalty = RHOi*Hi*penalty;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
659
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
660 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
661
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
662 function [closure, penalty] = interfaceNonConforming(obj,boundary,neighbour_scheme,neighbour_boundary,type)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
663 error('Non-conforming interfaces not implemented yet.');
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
664 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
665
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
666 % Computes the largest beta such that C_b - beta*C_s >= 0, using bisection.
1346
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
667 function beta = borrowingBisection(obj, C_b, C_s)
1345
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
668 tol = 1e-8;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
669 beta_min = 0;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
670 beta_max = 1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
671 beta = 0.5;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
672 err = (beta_max - beta_min)/2;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
673 while err > tol
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
674 if min(eig(C_b - beta*C_s)) < -1e-14
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
675 % Tried to borrow too much. Reduce beta.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
676 beta_max = beta;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
677 beta = (beta_min + beta)/2;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
678 else
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
679 % Increase beta
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
680 beta_min = beta;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
681 beta = (beta_max + beta)/2;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
682 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
683 err = err/2;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
684 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
685 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
686
1346
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
687 % Computes largest beta such that C_bJbL_boundary - \beta*C_bJbL_i >= 0, i = 0, 1, ..., nBP.
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
688 function beta = computeBorrowingFromC(obj, boundary)
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
689
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
690 e = obj.getBoundaryOperatorForScalarField('e', boundary);
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
691 e_sh = obj.getBoundaryOperatorForScalarField('e_shifted', boundary);
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
692 dim = obj.dim;
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
693
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
694 [~, N] = size(e);
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
695 beta = ones(N, 1);
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
696 b = obj.getComponent('normal', boundary);
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
697 C_boundary = cell(dim, dim, dim, dim);
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
698 for i = 1:dim
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
699 for j = 1:dim
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
700 for k = 1:dim
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
701 for l = 1:dim
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
702 C_boundary{i,j,k,l} = e'*obj.C{i,j,k,l}*e ;
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
703 end
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
704 end
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
705 end
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
706 end
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
707
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
708 % Loop over shift inward from boundary
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
709 for m = 1:obj.nBP_R-1
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
710 C_shifted = cell(dim, dim, dim, dim);
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
711 for i = 1:dim
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
712 for j = 1:dim
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
713 for k = 1:dim
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
714 for l = 1:dim
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
715 C_shifted{i,j,k,l} = e_sh{m}'*obj.C{i,j,k,l}*e_sh{m};
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
716 end
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
717 end
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
718 end
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
719 end
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
720
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
721 % Loop along boundary
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
722 for i = 1:N
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
723 C_boundary_mat = [C_boundary{b,1,b,1}(i,i), C_boundary{b,1,b,2}(i,i); ...
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
724 C_boundary{b,2,b,1}(i,i), C_boundary{b,2,b,2}(i,i)];
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
725
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
726 C_shifted_mat = [C_shifted{b,1,b,1}(i,i), C_shifted{b,1,b,2}(i,i); ...
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
727 C_shifted{b,2,b,1}(i,i), C_shifted{b,2,b,2}(i,i)];
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
728
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
729 beta_i = obj.borrowingBisection(C_boundary_mat, C_shifted_mat);
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
730 beta(i) = min(beta(i), beta_i);
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
731 end
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
732 end
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
733 if min(beta) < 1e-10
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
734 disp('WARNING! No borrowing from C seems to be possible.')
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
735 disp(['min(beta) = ' num2str(min(beta))])
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
736 end
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
737 end
464e6f65c2c6 Refactor computation of borrowing from C. Update to correct number of boundary points for borrowing from R.
Martin Almquist <martin.almquist@it.uu.se>
parents: 1345
diff changeset
738
1345
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
739 % Returns the component number that is the tangential/normal component
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
740 % at the specified boundary
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
741 function comp = getComponent(obj, comp_str, boundary)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
742 assertIsMember(comp_str, {'normal', 'tangential'});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
743 assertIsMember(boundary, {'w', 'e', 's', 'n'});
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
744
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
745 switch boundary
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
746 case {'w', 'e'}
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
747 switch comp_str
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
748 case 'normal'
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
749 comp = 1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
750 case 'tangential'
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
751 comp = 2;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
752 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
753 case {'s', 'n'}
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
754 switch comp_str
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
755 case 'normal'
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
756 comp = 2;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
757 case 'tangential'
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
758 comp = 1;
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
759 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
760 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
761 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
762
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
763 % Returns h11 for the boundary specified by the string boundary.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
764 % op -- string
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
765 function [h11, theta_R] = getBorrowing(obj, boundary)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
766 assertIsMember(boundary, {'w', 'e', 's', 'n'})
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
767
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
768 switch boundary
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
769 case {'w','e'}
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
770 h11 = obj.h11{1};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
771 theta_R = obj.theta_R{1};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
772 case {'s', 'n'}
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
773 h11 = obj.h11{2};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
774 theta_R = obj.theta_R{2};
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
775 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
776 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
777
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
778 % Returns the outward unit normal vector for the boundary specified by the string boundary.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
779 function nu = getNormal(obj, boundary)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
780 assertIsMember(boundary, {'w', 'e', 's', 'n'})
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
781
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
782 switch boundary
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
783 case 'w'
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
784 nu = [-1,0];
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
785 case 'e'
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
786 nu = [1,0];
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
787 case 's'
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
788 nu = [0,-1];
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
789 case 'n'
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
790 nu = [0,1];
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
791 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
792 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
793
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
794 % Returns the boundary operator op for the boundary specified by the string boundary.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
795 % op -- string
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
796 function o = getBoundaryOperator(obj, op, boundary)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
797 assertIsMember(boundary, {'w', 'e', 's', 'n'})
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
798 assertIsMember(op, {'e', 'e1', 'e2', 'tau', 'tau1', 'tau2'})
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
799
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
800 switch op
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
801 case {'e', 'e1', 'e2', 'tau', 'tau1', 'tau2'}
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
802 o = obj.([op, '_', boundary]);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
803 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
804
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
805 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
806
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
807 % Returns the boundary operator op for the boundary specified by the string boundary.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
808 % op -- string
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
809 function o = getBoundaryOperatorForScalarField(obj, op, boundary)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
810 assertIsMember(boundary, {'w', 'e', 's', 'n'})
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
811 assertIsMember(op, {'e', 'e_shifted'})
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
812
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
813 switch op
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
814
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
815 case 'e'
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
816 o = obj.(['e_scalar', '_', boundary]);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
817 case 'e_shifted'
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
818 o = obj.(['e_shifted_scalar', '_', boundary]);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
819 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
820
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
821 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
822
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
823 % Returns the boundary operator T_ij (cell format) for the boundary specified by the string boundary.
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
824 % Formula: tau_i = T_ij u_j
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
825 % op -- string
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
826 function T = getBoundaryTractionOperator(obj, boundary)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
827 assertIsMember(boundary, {'w', 'e', 's', 'n'})
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
828
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
829 T = obj.(['T', '_', boundary]);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
830 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
831
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
832 % Returns square boundary quadrature matrix, of dimension
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
833 % corresponding to the number of boundary unknowns
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
834 %
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
835 % boundary -- string
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
836 function H = getBoundaryQuadrature(obj, boundary)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
837 assertIsMember(boundary, {'w', 'e', 's', 'n'})
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
838
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
839 H = obj.getBoundaryQuadratureForScalarField(boundary);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
840 I_dim = speye(obj.dim, obj.dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
841 H = kron(H, I_dim);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
842 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
843
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
844 % Returns square boundary quadrature matrix, of dimension
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
845 % corresponding to the number of boundary grid points
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
846 %
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
847 % boundary -- string
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
848 function H_b = getBoundaryQuadratureForScalarField(obj, boundary)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
849 assertIsMember(boundary, {'w', 'e', 's', 'n'})
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
850
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
851 H_b = obj.(['H_', boundary]);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
852 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
853
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
854 function N = size(obj)
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
855 N = obj.dim*prod(obj.m);
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
856 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
857 end
14f44e81e1e3 Add scheme for Elastic2dVariable, not fully compatible.
Martin Almquist <martin.almquist@it.uu.se>
parents:
diff changeset
858 end