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