annotate +scheme/Elastic2dVariableAnisotropicIncompatible.m @ 1345:14f44e81e1e3 feature/poroelastic

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