Mercurial > repos > public > sbplib
annotate +scheme/Elastic2dVariable.m @ 1056:b4fa176b4287 feature/poroelastic
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Fri, 25 Jan 2019 15:15:44 -0800 |
parents | 1c334842bf23 |
children | ff274c7404cc |
rev | line source |
---|---|
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
1 classdef Elastic2dVariable < scheme.Scheme |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
2 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
3 % Discretizes the elastic wave equation: |
813
b374a8aa9246
Correct interface penalty strength in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
795
diff
changeset
|
4 % rho u_{i,tt} = di lambda dj u_j + dj mu di u_j + dj mu dj u_i |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
5 % opSet should be cell array of opSets, one per dimension. This |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
6 % is useful if we have periodic BC in one direction. |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
7 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
8 properties |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
9 m % Number of points in each direction, possibly a vector |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
10 h % Grid spacing |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
11 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
12 grid |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
13 dim |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
14 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
15 order % Order of accuracy for the approximation |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
16 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
17 % Diagonal matrices for varible coefficients |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
18 LAMBDA % Variable coefficient, related to dilation |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
19 MU % Shear modulus, variable coefficient |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
20 RHO, RHOi % Density, variable |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
21 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
22 D % Total operator |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
23 D1 % First derivatives |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
24 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
25 % Second derivatives |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
26 D2_lambda |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
27 D2_mu |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
28 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
29 % Traction operators used for BC |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
30 T_l, T_r |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
31 tau_l, tau_r |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
32 |
855
5751262b323b
Add 1D quadrature matrices as property in Elastic2dVariable.
Martin Almquist <malmquist@stanford.edu>
parents:
795
diff
changeset
|
33 H, Hi, H_1D % Inner products |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
34 e_l, e_r |
813
b374a8aa9246
Correct interface penalty strength in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
795
diff
changeset
|
35 |
b374a8aa9246
Correct interface penalty strength in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
795
diff
changeset
|
36 |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
37 d1_l, d1_r % Normal derivatives at the boundary |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
38 E % E{i}^T picks out component i |
813
b374a8aa9246
Correct interface penalty strength in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
795
diff
changeset
|
39 |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
40 H_boundary % Boundary inner products |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
41 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
42 % Kroneckered norms and coefficients |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
43 RHOi_kron |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
44 Hi_kron |
861
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
45 |
882
14fee299ada2
In Elastic2dVariable: Improve notation for borrowing constants. Update interface constant to match corrected derivation. Tests ok.
Martin Almquist <malmquist@stanford.edu>
parents:
861
diff
changeset
|
46 % Borrowing constants of the form gamma*h, where gamma is a dimensionless constant. |
14fee299ada2
In Elastic2dVariable: Improve notation for borrowing constants. Update interface constant to match corrected derivation. Tests ok.
Martin Almquist <malmquist@stanford.edu>
parents:
861
diff
changeset
|
47 theta_R % Borrowing (d1- D1)^2 from R |
14fee299ada2
In Elastic2dVariable: Improve notation for borrowing constants. Update interface constant to match corrected derivation. Tests ok.
Martin Almquist <malmquist@stanford.edu>
parents:
861
diff
changeset
|
48 theta_H % First entry in norm matrix |
14fee299ada2
In Elastic2dVariable: Improve notation for borrowing constants. Update interface constant to match corrected derivation. Tests ok.
Martin Almquist <malmquist@stanford.edu>
parents:
861
diff
changeset
|
49 theta_M % Borrowing d1^2 from M. |
14fee299ada2
In Elastic2dVariable: Improve notation for borrowing constants. Update interface constant to match corrected derivation. Tests ok.
Martin Almquist <malmquist@stanford.edu>
parents:
861
diff
changeset
|
50 |
861
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
51 % Structures used for adjoint optimization |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
52 B |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
53 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
54 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
55 methods |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
56 |
861
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
57 % The coefficients can either be function handles or grid functions |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
58 function obj = Elastic2dVariable(g ,order, lambda, mu, rho, opSet) |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
59 default_arg('opSet',{@sbp.D2Variable, @sbp.D2Variable}); |
861
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
60 default_arg('lambda', @(x,y) 0*x+1); |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
61 default_arg('mu', @(x,y) 0*x+1); |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
62 default_arg('rho', @(x,y) 0*x+1); |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
63 dim = 2; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
64 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
65 assert(isa(g, 'grid.Cartesian')) |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
66 |
861
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
67 if isa(lambda, 'function_handle') |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
68 lambda = grid.evalOn(g, lambda); |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
69 end |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
70 if isa(mu, 'function_handle') |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
71 mu = grid.evalOn(g, mu); |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
72 end |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
73 if isa(rho, 'function_handle') |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
74 rho = grid.evalOn(g, rho); |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
75 end |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
76 |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
77 m = g.size(); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
78 m_tot = g.N(); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
79 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
80 h = g.scaling(); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
81 lim = g.lim; |
729
aa8cf3851de8
Update multiblock.DiffOp to work for systems.
Martin Almquist <malmquist@stanford.edu>
parents:
727
diff
changeset
|
82 if isempty(lim) |
aa8cf3851de8
Update multiblock.DiffOp to work for systems.
Martin Almquist <malmquist@stanford.edu>
parents:
727
diff
changeset
|
83 x = g.x; |
aa8cf3851de8
Update multiblock.DiffOp to work for systems.
Martin Almquist <malmquist@stanford.edu>
parents:
727
diff
changeset
|
84 lim = cell(length(x),1); |
aa8cf3851de8
Update multiblock.DiffOp to work for systems.
Martin Almquist <malmquist@stanford.edu>
parents:
727
diff
changeset
|
85 for i = 1:length(x) |
aa8cf3851de8
Update multiblock.DiffOp to work for systems.
Martin Almquist <malmquist@stanford.edu>
parents:
727
diff
changeset
|
86 lim{i} = {min(x{i}), max(x{i})}; |
aa8cf3851de8
Update multiblock.DiffOp to work for systems.
Martin Almquist <malmquist@stanford.edu>
parents:
727
diff
changeset
|
87 end |
aa8cf3851de8
Update multiblock.DiffOp to work for systems.
Martin Almquist <malmquist@stanford.edu>
parents:
727
diff
changeset
|
88 end |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
89 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
90 % 1D operators |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
91 ops = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
92 for i = 1:dim |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
93 ops{i} = opSet{i}(m(i), lim{i}, order); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
94 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
95 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
96 % Borrowing constants |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
97 for i = 1:dim |
882
14fee299ada2
In Elastic2dVariable: Improve notation for borrowing constants. Update interface constant to match corrected derivation. Tests ok.
Martin Almquist <malmquist@stanford.edu>
parents:
861
diff
changeset
|
98 obj.theta_R{i} = h(i)*ops{i}.borrowing.R.delta_D; |
14fee299ada2
In Elastic2dVariable: Improve notation for borrowing constants. Update interface constant to match corrected derivation. Tests ok.
Martin Almquist <malmquist@stanford.edu>
parents:
861
diff
changeset
|
99 obj.theta_H{i} = h(i)*ops{i}.borrowing.H11; |
14fee299ada2
In Elastic2dVariable: Improve notation for borrowing constants. Update interface constant to match corrected derivation. Tests ok.
Martin Almquist <malmquist@stanford.edu>
parents:
861
diff
changeset
|
100 obj.theta_M{i} = h(i)*ops{i}.borrowing.M.d1; |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
101 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
102 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
103 I = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
104 D1 = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
105 D2 = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
106 H = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
107 Hi = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
108 e_l = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
109 e_r = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
110 d1_l = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
111 d1_r = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
112 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
113 for i = 1:dim |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
114 I{i} = speye(m(i)); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
115 D1{i} = ops{i}.D1; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
116 D2{i} = ops{i}.D2; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
117 H{i} = ops{i}.H; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
118 Hi{i} = ops{i}.HI; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
119 e_l{i} = ops{i}.e_l; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
120 e_r{i} = ops{i}.e_r; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
121 d1_l{i} = ops{i}.d1_l; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
122 d1_r{i} = ops{i}.d1_r; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
123 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
124 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
125 %====== Assemble full operators ======== |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
126 LAMBDA = spdiag(lambda); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
127 obj.LAMBDA = LAMBDA; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
128 MU = spdiag(mu); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
129 obj.MU = MU; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
130 RHO = spdiag(rho); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
131 obj.RHO = RHO; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
132 obj.RHOi = inv(RHO); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
133 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
134 obj.D1 = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
135 obj.D2_lambda = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
136 obj.D2_mu = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
137 obj.e_l = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
138 obj.e_r = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
139 obj.d1_l = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
140 obj.d1_r = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
141 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
142 % D1 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
143 obj.D1{1} = kron(D1{1},I{2}); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
144 obj.D1{2} = kron(I{1},D1{2}); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
145 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
146 % Boundary operators |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
147 obj.e_l{1} = kron(e_l{1},I{2}); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
148 obj.e_l{2} = kron(I{1},e_l{2}); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
149 obj.e_r{1} = kron(e_r{1},I{2}); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
150 obj.e_r{2} = kron(I{1},e_r{2}); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
151 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
152 obj.d1_l{1} = kron(d1_l{1},I{2}); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
153 obj.d1_l{2} = kron(I{1},d1_l{2}); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
154 obj.d1_r{1} = kron(d1_r{1},I{2}); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
155 obj.d1_r{2} = kron(I{1},d1_r{2}); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
156 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
157 % D2 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
158 for i = 1:dim |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
159 obj.D2_lambda{i} = sparse(m_tot); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
160 obj.D2_mu{i} = sparse(m_tot); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
161 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
162 ind = grid.funcToMatrix(g, 1:m_tot); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
163 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
164 for i = 1:m(2) |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
165 D_lambda = D2{1}(lambda(ind(:,i))); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
166 D_mu = D2{1}(mu(ind(:,i))); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
167 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
168 p = ind(:,i); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
169 obj.D2_lambda{1}(p,p) = D_lambda; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
170 obj.D2_mu{1}(p,p) = D_mu; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
171 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
172 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
173 for i = 1:m(1) |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
174 D_lambda = D2{2}(lambda(ind(i,:))); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
175 D_mu = D2{2}(mu(ind(i,:))); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
176 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
177 p = ind(i,:); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
178 obj.D2_lambda{2}(p,p) = D_lambda; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
179 obj.D2_mu{2}(p,p) = D_mu; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
180 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
181 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
182 % Quadratures |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
183 obj.H = kron(H{1},H{2}); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
184 obj.Hi = inv(obj.H); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
185 obj.H_boundary = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
186 obj.H_boundary{1} = H{2}; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
187 obj.H_boundary{2} = H{1}; |
855
5751262b323b
Add 1D quadrature matrices as property in Elastic2dVariable.
Martin Almquist <malmquist@stanford.edu>
parents:
795
diff
changeset
|
188 obj.H_1D = {H{1}, H{2}}; |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
189 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
190 % E{i}^T picks out component i. |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
191 E = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
192 I = speye(m_tot,m_tot); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
193 for i = 1:dim |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
194 e = sparse(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
195 e(i) = 1; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
196 E{i} = kron(I,e); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
197 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
198 obj.E = E; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
199 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
200 % Differentiation matrix D (without SAT) |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
201 D2_lambda = obj.D2_lambda; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
202 D2_mu = obj.D2_mu; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
203 D1 = obj.D1; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
204 D = sparse(dim*m_tot,dim*m_tot); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
205 d = @kroneckerDelta; % Kronecker delta |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
206 db = @(i,j) 1-d(i,j); % Logical not of Kronecker delta |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
207 for i = 1:dim |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
208 for j = 1:dim |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
209 D = D + E{i}*inv(RHO)*( d(i,j)*D2_lambda{i}*E{j}' +... |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
210 db(i,j)*D1{i}*LAMBDA*D1{j}*E{j}' ... |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
211 ); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
212 D = D + E{i}*inv(RHO)*( d(i,j)*D2_mu{i}*E{j}' +... |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
213 db(i,j)*D1{j}*MU*D1{i}*E{j}' + ... |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
214 D2_mu{j}*E{i}' ... |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
215 ); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
216 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
217 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
218 obj.D = D; |
861
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
219 %=========================================%' |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
220 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
221 % Numerical traction operators for BC. |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
222 % Because d1 =/= e0^T*D1, the numerical tractions are different |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
223 % at every boundary. |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
224 T_l = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
225 T_r = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
226 tau_l = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
227 tau_r = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
228 % tau^{j}_i = sum_k T^{j}_{ik} u_k |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
229 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
230 d1_l = obj.d1_l; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
231 d1_r = obj.d1_r; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
232 e_l = obj.e_l; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
233 e_r = obj.e_r; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
234 D1 = obj.D1; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
235 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
236 % Loop over boundaries |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
237 for j = 1:dim |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
238 T_l{j} = cell(dim,dim); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
239 T_r{j} = cell(dim,dim); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
240 tau_l{j} = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
241 tau_r{j} = cell(dim,1); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
242 |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
243 LAMBDA_l = e_l{j}'*LAMBDA*e_l{j}; |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
244 LAMBDA_r = e_r{j}'*LAMBDA*e_r{j}; |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
245 MU_l = e_l{j}'*MU*e_l{j}; |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
246 MU_r = e_r{j}'*MU*e_r{j}; |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
247 |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
248 [~, n_l] = size(e_l{j}); |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
249 [~, n_r] = size(e_r{j}); |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
250 |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
251 % Loop over components |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
252 for i = 1:dim |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
253 tau_l{j}{i} = sparse(n_l, dim*m_tot); |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
254 tau_r{j}{i} = sparse(n_r, dim*m_tot); |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
255 for k = 1:dim |
813
b374a8aa9246
Correct interface penalty strength in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
795
diff
changeset
|
256 T_l{j}{i,k} = ... |
966
4a85cff53107
Fix bug in Elastic2dVariable that caused crash for m_x neq m_y
Martin Almquist <malmquist@stanford.edu>
parents:
965
diff
changeset
|
257 -d(i,j)*LAMBDA_l*(d(i,k)*d1_l{j}' + db(i,k)*e_l{j}'*D1{k})... |
4a85cff53107
Fix bug in Elastic2dVariable that caused crash for m_x neq m_y
Martin Almquist <malmquist@stanford.edu>
parents:
965
diff
changeset
|
258 -d(j,k)*MU_l*(d(i,j)*d1_l{j}' + db(i,j)*e_l{j}'*D1{i})... |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
259 -d(i,k)*MU_l*d1_l{j}'; |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
260 |
813
b374a8aa9246
Correct interface penalty strength in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
795
diff
changeset
|
261 T_r{j}{i,k} = ... |
966
4a85cff53107
Fix bug in Elastic2dVariable that caused crash for m_x neq m_y
Martin Almquist <malmquist@stanford.edu>
parents:
965
diff
changeset
|
262 d(i,j)*LAMBDA_r*(d(i,k)*d1_r{j}' + db(i,k)*e_r{j}'*D1{k})... |
4a85cff53107
Fix bug in Elastic2dVariable that caused crash for m_x neq m_y
Martin Almquist <malmquist@stanford.edu>
parents:
965
diff
changeset
|
263 +d(j,k)*MU_r*(d(i,j)*d1_r{j}' + db(i,j)*e_r{j}'*D1{i})... |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
264 +d(i,k)*MU_r*d1_r{j}'; |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
265 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
266 tau_l{j}{i} = tau_l{j}{i} + T_l{j}{i,k}*E{k}'; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
267 tau_r{j}{i} = tau_r{j}{i} + T_r{j}{i,k}*E{k}'; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
268 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
269 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
270 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
271 end |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
272 |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
273 % Transpose T and tau to match boundary operator convention |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
274 for i = 1:dim |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
275 for j = 1:dim |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
276 tau_l{i}{j} = transpose(tau_l{i}{j}); |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
277 tau_r{i}{j} = transpose(tau_r{i}{j}); |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
278 for k = 1:dim |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
279 T_l{i}{j,k} = transpose(T_l{i}{j,k}); |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
280 T_r{i}{j,k} = transpose(T_r{i}{j,k}); |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
281 end |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
282 end |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
283 end |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
284 |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
285 obj.T_l = T_l; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
286 obj.T_r = T_r; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
287 obj.tau_l = tau_l; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
288 obj.tau_r = tau_r; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
289 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
290 % Kroneckered norms and coefficients |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
291 I_dim = speye(dim); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
292 obj.RHOi_kron = kron(obj.RHOi, I_dim); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
293 obj.Hi_kron = kron(obj.Hi, I_dim); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
294 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
295 % Misc. |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
296 obj.m = m; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
297 obj.h = h; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
298 obj.order = order; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
299 obj.grid = g; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
300 obj.dim = dim; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
301 |
965
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
302 % B, used for adjoint optimization |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
303 B = cell(dim, 1); |
861
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
304 for i = 1:dim |
965
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
305 B{i} = cell(m_tot, 1); |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
306 end |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
307 |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
308 for i = 1:dim |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
309 for j = 1:m_tot |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
310 B{i}{j} = sparse(m_tot, m_tot); |
861
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
311 end |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
312 end |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
313 |
965
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
314 ind = grid.funcToMatrix(g, 1:m_tot); |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
315 |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
316 % Direction 1 |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
317 for k = 1:m(1) |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
318 c = sparse(m(1),1); |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
319 c(k) = 1; |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
320 [~, B_1D] = ops{1}.D2(c); |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
321 for l = 1:m(2) |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
322 p = ind(:,l); |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
323 B{1}{(k-1)*m(2) + l}(p, p) = B_1D; |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
324 end |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
325 end |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
326 |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
327 % Direction 2 |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
328 for k = 1:m(2) |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
329 c = sparse(m(2),1); |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
330 c(k) = 1; |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
331 [~, B_1D] = ops{2}.D2(c); |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
332 for l = 1:m(1) |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
333 p = ind(l,:); |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
334 B{2}{(l-1)*m(2) + k}(p, p) = B_1D; |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
335 end |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
336 end |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
337 |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
338 obj.B = B; |
db3411264b96
Remove use of tensor library in B assembly
Martin Almquist <malmquist@stanford.edu>
parents:
963
diff
changeset
|
339 |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
340 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
341 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
342 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
343 % Closure functions return the operators applied to the own domain to close the boundary |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
344 % Penalty functions return the operators to force the solution. In the case of an interface it returns the operator applied to the other doamin. |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
345 % boundary is a string specifying the boundary e.g. 'l','r' or 'e','w','n','s'. |
795
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
346 % bc is a cell array of component and bc type, e.g. {1, 'd'} for Dirichlet condition |
1056
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
347 % on the first component. Can also be e.g. |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
348 % {'normal', 'd'} or {'tangential', 't'} for conditions on |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
349 % tangential/normal component. |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
350 % data is a function returning the data that should be applied at the boundary. |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
351 % neighbour_scheme is an instance of Scheme that should be interfaced to. |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
352 % neighbour_boundary is a string specifying which boundary to interface to. |
795
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
353 function [closure, penalty] = boundary_condition(obj, boundary, bc, tuning) |
738
aa4ef495f1fd
Set Dirichlet tuning as parameter in BC function in Elastic2dVariable.
Martin Almquist <malmquist@stanford.edu>
parents:
734
diff
changeset
|
354 default_arg('tuning', 1.2); |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
355 |
795
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
356 assert( iscell(bc), 'The BC type must be a 2x1 cell array' ); |
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
357 comp = bc{1}; |
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
358 type = bc{2}; |
1056
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
359 if ischar(comp) |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
360 comp = obj.getComponent(comp, boundary); |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
361 end |
729
aa8cf3851de8
Update multiblock.DiffOp to work for systems.
Martin Almquist <malmquist@stanford.edu>
parents:
727
diff
changeset
|
362 |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
363 % j is the coordinate direction of the boundary |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
364 j = obj.get_boundary_number(boundary); |
970
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
365 [e, T, tau, H_gamma] = obj.getBoundaryOperator({'e','T','tau','H'}, boundary); |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
366 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
367 E = obj.E; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
368 Hi = obj.Hi; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
369 LAMBDA = obj.LAMBDA; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
370 MU = obj.MU; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
371 RHOi = obj.RHOi; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
372 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
373 dim = obj.dim; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
374 m_tot = obj.grid.N(); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
375 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
376 % Preallocate |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
377 closure = sparse(dim*m_tot, dim*m_tot); |
795
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
378 penalty = sparse(dim*m_tot, m_tot/obj.m(j)); |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
379 |
795
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
380 k = comp; |
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
381 switch type |
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
382 |
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
383 % Dirichlet boundary condition |
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
384 case {'D','d','dirichlet','Dirichlet'} |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
385 |
970
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
386 alpha = obj.getBoundaryOperator('alpha', boundary); |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
387 |
795
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
388 % Loop over components that Dirichlet penalties end up on |
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
389 for i = 1:dim |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
390 C = transpose(T{k,i}); |
974
1c334842bf23
Extract tuning from alpha.
Martin Almquist <malmquist@stanford.edu>
parents:
973
diff
changeset
|
391 A = -tuning*e*transpose(alpha{i,k}); |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
392 B = A + e*C; |
813
b374a8aa9246
Correct interface penalty strength in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
795
diff
changeset
|
393 closure = closure + E{i}*RHOi*Hi*B'*e*H_gamma*(e'*E{k}' ); |
795
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
394 penalty = penalty - E{i}*RHOi*Hi*B'*e*H_gamma; |
813
b374a8aa9246
Correct interface penalty strength in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
795
diff
changeset
|
395 end |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
396 |
795
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
397 % Free boundary condition |
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
398 case {'F','f','Free','free','traction','Traction','t','T'} |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
399 closure = closure - E{k}*RHOi*Hi*e*H_gamma*tau{k}'; |
795
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
400 penalty = penalty + E{k}*RHOi*Hi*e*H_gamma; |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
401 |
795
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
402 % Unknown boundary condition |
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
403 otherwise |
1f6b2fb69225
Revert bcSetup and update bc functions in elastic schemes to be compatible.
Martin Almquist <malmquist@stanford.edu>
parents:
738
diff
changeset
|
404 error('No such boundary condition: type = %s',type); |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
405 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
406 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
407 |
960
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
408 % type Struct that specifies the interface coupling. |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
409 % Fields: |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
410 % -- tuning: penalty strength, defaults to 1.2 |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
411 % -- interpolation: type of interpolation, default 'none' |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
412 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary,type) |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
413 |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
414 defaultType.tuning = 1.2; |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
415 defaultType.interpolation = 'none'; |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
416 default_struct('type', defaultType); |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
417 |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
418 switch type.interpolation |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
419 case {'none', ''} |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
420 [closure, penalty] = interfaceStandard(obj,boundary,neighbour_scheme,neighbour_boundary,type); |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
421 case {'op','OP'} |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
422 [closure, penalty] = interfaceNonConforming(obj,boundary,neighbour_scheme,neighbour_boundary,type); |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
423 otherwise |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
424 error('Unknown type of interpolation: %s ', type.interpolation); |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
425 end |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
426 end |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
427 |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
428 function [closure, penalty] = interfaceStandard(obj,boundary,neighbour_scheme,neighbour_boundary,type) |
963
c75ddd568fcc
Turn alpha into a boundary operator. Add properties H_w etc for getBoundaryQuadrature to work.
Martin Almquist <malmquist@stanford.edu>
parents:
961
diff
changeset
|
429 tuning = type.tuning; |
c75ddd568fcc
Turn alpha into a boundary operator. Add properties H_w etc for getBoundaryQuadrature to work.
Martin Almquist <malmquist@stanford.edu>
parents:
961
diff
changeset
|
430 |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
431 % u denotes the solution in the own domain |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
432 % v denotes the solution in the neighbour domain |
727
6d5953fc090e
First implementation of elastic interface
Martin Almquist <malmquist@stanford.edu>
parents:
726
diff
changeset
|
433 % Operators without subscripts are from the own domain. |
6d5953fc090e
First implementation of elastic interface
Martin Almquist <malmquist@stanford.edu>
parents:
726
diff
changeset
|
434 |
6d5953fc090e
First implementation of elastic interface
Martin Almquist <malmquist@stanford.edu>
parents:
726
diff
changeset
|
435 % Get boundary operators |
972
104f0af001e0
Clean up Elastic2dVariable.interfaceStandard
Martin Almquist <malmquist@stanford.edu>
parents:
970
diff
changeset
|
436 [e, tau] = obj.getBoundaryOperator({'e_tot','tau_tot'}, boundary); |
104f0af001e0
Clean up Elastic2dVariable.interfaceStandard
Martin Almquist <malmquist@stanford.edu>
parents:
970
diff
changeset
|
437 [e_v, tau_v] = neighbour_scheme.getBoundaryOperator({'e_tot','tau_tot'}, neighbour_boundary); |
104f0af001e0
Clean up Elastic2dVariable.interfaceStandard
Martin Almquist <malmquist@stanford.edu>
parents:
970
diff
changeset
|
438 H_gamma = obj.getBoundaryQuadrature(boundary); |
727
6d5953fc090e
First implementation of elastic interface
Martin Almquist <malmquist@stanford.edu>
parents:
726
diff
changeset
|
439 |
6d5953fc090e
First implementation of elastic interface
Martin Almquist <malmquist@stanford.edu>
parents:
726
diff
changeset
|
440 % Operators and quantities that correspond to the own domain only |
972
104f0af001e0
Clean up Elastic2dVariable.interfaceStandard
Martin Almquist <malmquist@stanford.edu>
parents:
970
diff
changeset
|
441 Hi = obj.Hi_kron; |
104f0af001e0
Clean up Elastic2dVariable.interfaceStandard
Martin Almquist <malmquist@stanford.edu>
parents:
970
diff
changeset
|
442 RHOi = obj.RHOi_kron; |
727
6d5953fc090e
First implementation of elastic interface
Martin Almquist <malmquist@stanford.edu>
parents:
726
diff
changeset
|
443 |
972
104f0af001e0
Clean up Elastic2dVariable.interfaceStandard
Martin Almquist <malmquist@stanford.edu>
parents:
970
diff
changeset
|
444 % Penalty strength operators |
974
1c334842bf23
Extract tuning from alpha.
Martin Almquist <malmquist@stanford.edu>
parents:
973
diff
changeset
|
445 alpha_u = 1/4*tuning*obj.getBoundaryOperator('alpha_tot', boundary); |
1c334842bf23
Extract tuning from alpha.
Martin Almquist <malmquist@stanford.edu>
parents:
973
diff
changeset
|
446 alpha_v = 1/4*tuning*neighbour_scheme.getBoundaryOperator('alpha_tot', neighbour_boundary); |
727
6d5953fc090e
First implementation of elastic interface
Martin Almquist <malmquist@stanford.edu>
parents:
726
diff
changeset
|
447 |
972
104f0af001e0
Clean up Elastic2dVariable.interfaceStandard
Martin Almquist <malmquist@stanford.edu>
parents:
970
diff
changeset
|
448 closure = -RHOi*Hi*e*H_gamma*(alpha_u' + alpha_v'*e_v*e'); |
104f0af001e0
Clean up Elastic2dVariable.interfaceStandard
Martin Almquist <malmquist@stanford.edu>
parents:
970
diff
changeset
|
449 penalty = RHOi*Hi*e*H_gamma*(alpha_u'*e*e_v' + alpha_v'); |
727
6d5953fc090e
First implementation of elastic interface
Martin Almquist <malmquist@stanford.edu>
parents:
726
diff
changeset
|
450 |
972
104f0af001e0
Clean up Elastic2dVariable.interfaceStandard
Martin Almquist <malmquist@stanford.edu>
parents:
970
diff
changeset
|
451 closure = closure - 1/2*RHOi*Hi*e*H_gamma*tau'; |
104f0af001e0
Clean up Elastic2dVariable.interfaceStandard
Martin Almquist <malmquist@stanford.edu>
parents:
970
diff
changeset
|
452 penalty = penalty - 1/2*RHOi*Hi*e*H_gamma*tau_v'; |
727
6d5953fc090e
First implementation of elastic interface
Martin Almquist <malmquist@stanford.edu>
parents:
726
diff
changeset
|
453 |
972
104f0af001e0
Clean up Elastic2dVariable.interfaceStandard
Martin Almquist <malmquist@stanford.edu>
parents:
970
diff
changeset
|
454 closure = closure + 1/2*RHOi*Hi*tau*H_gamma*e'; |
104f0af001e0
Clean up Elastic2dVariable.interfaceStandard
Martin Almquist <malmquist@stanford.edu>
parents:
970
diff
changeset
|
455 penalty = penalty - 1/2*RHOi*Hi*tau*H_gamma*e_v'; |
727
6d5953fc090e
First implementation of elastic interface
Martin Almquist <malmquist@stanford.edu>
parents:
726
diff
changeset
|
456 |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
457 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
458 |
960
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
459 function [closure, penalty] = interfaceNonConforming(obj,boundary,neighbour_scheme,neighbour_boundary,type) |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
460 error('Non-conforming interfaces not implemented yet.'); |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
461 end |
ac566f3dc9b3
Add type to Elastic2dVariable.interface
Martin Almquist <malmquist@stanford.edu>
parents:
959
diff
changeset
|
462 |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
463 % Returns the coordinate number and outward normal component for the boundary specified by the string boundary. |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
464 function [j, nj] = get_boundary_number(obj, boundary) |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
465 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
466 switch boundary |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
467 case {'w','W','west','West', 'e', 'E', 'east', 'East'} |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
468 j = 1; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
469 case {'s','S','south','South', 'n', 'N', 'north', 'North'} |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
470 j = 2; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
471 otherwise |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
472 error('No such boundary: boundary = %s',boundary); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
473 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
474 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
475 switch boundary |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
476 case {'w','W','west','West','s','S','south','South'} |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
477 nj = -1; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
478 case {'e', 'E', 'east', 'East','n', 'N', 'north', 'North'} |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
479 nj = 1; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
480 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
481 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
482 |
1056
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
483 % Returns the component number that is the tangential/normal component |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
484 % at the specified boundary |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
485 function comp = getComponent(obj, comp_str, boundary) |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
486 assertIsMember(comp_str, {'normal', 'tangential'}); |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
487 assertIsMember(boundary, {'w', 'e', 's', 'n'}); |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
488 |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
489 switch boundary |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
490 case {'w', 'e'} |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
491 switch comp_str |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
492 case 'normal' |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
493 comp = 1; |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
494 case 'tangential' |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
495 comp = 2; |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
496 end |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
497 case {'s', 'n'} |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
498 switch comp_str |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
499 case 'normal' |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
500 comp = 2; |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
501 case 'tangential' |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
502 comp = 1; |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
503 end |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
504 end |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
505 end |
b4fa176b4287
Elastic2dVariable: boundary condition type can now be a string, normal or tangential, as well as component number.
Martin Almquist <malmquist@stanford.edu>
parents:
974
diff
changeset
|
506 |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
507 % Returns the boundary operator op for the boundary specified by the string boundary. |
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
508 % op: may be a cell array of strings |
970
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
509 % Only operators with name *_tot can be used with multiblock.DiffOp.getBoundaryOperator() |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
510 function [varargout] = getBoundaryOperator(obj, op, boundary) |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
511 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
512 switch boundary |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
513 case {'w','W','west','West', 'e', 'E', 'east', 'East'} |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
514 j = 1; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
515 case {'s','S','south','South', 'n', 'N', 'north', 'North'} |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
516 j = 2; |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
517 otherwise |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
518 error('No such boundary: boundary = %s',boundary); |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
519 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
520 |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
521 if ~iscell(op) |
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
522 op = {op}; |
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
523 end |
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
524 |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
525 for k = 1:length(op) |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
526 switch op{k} |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
527 case 'e' |
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
528 switch boundary |
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
529 case {'w','W','west','West','s','S','south','South'} |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
530 varargout{k} = obj.e_l{j}; |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
531 case {'e', 'E', 'east', 'East','n', 'N', 'north', 'North'} |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
532 varargout{k} = obj.e_r{j}; |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
533 end |
970
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
534 |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
535 case 'e_tot' |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
536 e = obj.getBoundaryOperator('e', boundary); |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
537 I_dim = speye(obj.dim, obj.dim); |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
538 varargout{k} = kron(e, I_dim); |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
539 |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
540 case 'd' |
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
541 switch boundary |
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
542 case {'w','W','west','West','s','S','south','South'} |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
543 varargout{k} = obj.d1_l{j}; |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
544 case {'e', 'E', 'east', 'East','n', 'N', 'north', 'North'} |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
545 varargout{k} = obj.d1_r{j}; |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
546 end |
970
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
547 |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
548 case 'T' |
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
549 switch boundary |
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
550 case {'w','W','west','West','s','S','south','South'} |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
551 varargout{k} = obj.T_l{j}; |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
552 case {'e', 'E', 'east', 'East','n', 'N', 'north', 'North'} |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
553 varargout{k} = obj.T_r{j}; |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
554 end |
970
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
555 |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
556 case 'tau' |
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
557 switch boundary |
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
558 case {'w','W','west','West','s','S','south','South'} |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
559 varargout{k} = obj.tau_l{j}; |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
560 case {'e', 'E', 'east', 'East','n', 'N', 'north', 'North'} |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
561 varargout{k} = obj.tau_r{j}; |
855
5751262b323b
Add 1D quadrature matrices as property in Elastic2dVariable.
Martin Almquist <malmquist@stanford.edu>
parents:
795
diff
changeset
|
562 end |
970
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
563 |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
564 case 'tau_tot' |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
565 [e, tau] = obj.getBoundaryOperator({'e', 'tau'}, boundary); |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
566 |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
567 I_dim = speye(obj.dim, obj.dim); |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
568 e_tot = kron(e, I_dim); |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
569 E = obj.E; |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
570 tau_tot = (e_tot'*E{1}*e*tau{1}')'; |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
571 for i = 2:obj.dim |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
572 tau_tot = tau_tot + (e_tot'*E{i}*e*tau{i}')'; |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
573 end |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
574 varargout{k} = tau_tot; |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
575 |
963
c75ddd568fcc
Turn alpha into a boundary operator. Add properties H_w etc for getBoundaryQuadrature to work.
Martin Almquist <malmquist@stanford.edu>
parents:
961
diff
changeset
|
576 case 'H' |
c75ddd568fcc
Turn alpha into a boundary operator. Add properties H_w etc for getBoundaryQuadrature to work.
Martin Almquist <malmquist@stanford.edu>
parents:
961
diff
changeset
|
577 varargout{k} = obj.H_boundary{j}; |
970
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
578 |
861
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
579 case 'alpha' |
882
14fee299ada2
In Elastic2dVariable: Improve notation for borrowing constants. Update interface constant to match corrected derivation. Tests ok.
Martin Almquist <malmquist@stanford.edu>
parents:
861
diff
changeset
|
580 % alpha = alpha(i,j) is the penalty strength for displacement BC. |
970
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
581 e = obj.getBoundaryOperator('e', boundary); |
963
c75ddd568fcc
Turn alpha into a boundary operator. Add properties H_w etc for getBoundaryQuadrature to work.
Martin Almquist <malmquist@stanford.edu>
parents:
961
diff
changeset
|
582 |
861
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
583 LAMBDA = obj.LAMBDA; |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
584 MU = obj.MU; |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
585 |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
586 dim = obj.dim; |
919
e30aaa4a3e09
Bugfix in Elastic2dVariable.get_boundary_ops
Martin Almquist <malmquist@stanford.edu>
parents:
882
diff
changeset
|
587 theta_R = obj.theta_R{j}; |
e30aaa4a3e09
Bugfix in Elastic2dVariable.get_boundary_ops
Martin Almquist <malmquist@stanford.edu>
parents:
882
diff
changeset
|
588 theta_H = obj.theta_H{j}; |
e30aaa4a3e09
Bugfix in Elastic2dVariable.get_boundary_ops
Martin Almquist <malmquist@stanford.edu>
parents:
882
diff
changeset
|
589 theta_M = obj.theta_M{j}; |
861
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
590 |
919
e30aaa4a3e09
Bugfix in Elastic2dVariable.get_boundary_ops
Martin Almquist <malmquist@stanford.edu>
parents:
882
diff
changeset
|
591 a_lambda = dim/theta_H + 1/theta_R; |
e30aaa4a3e09
Bugfix in Elastic2dVariable.get_boundary_ops
Martin Almquist <malmquist@stanford.edu>
parents:
882
diff
changeset
|
592 a_mu_i = 2/theta_M; |
e30aaa4a3e09
Bugfix in Elastic2dVariable.get_boundary_ops
Martin Almquist <malmquist@stanford.edu>
parents:
882
diff
changeset
|
593 a_mu_ij = 2/theta_H + 1/theta_R; |
861
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
594 |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
595 d = @kroneckerDelta; % Kronecker delta |
607c631f175e
Small changes to Elastic2dVariable to facilitate adjoing gradient computation.
Martin Almquist <malmquist@stanford.edu>
parents:
855
diff
changeset
|
596 db = @(i,j) 1-d(i,j); % Logical not of Kronecker delta |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
597 alpha = cell(obj.dim, obj.dim); |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
598 |
974
1c334842bf23
Extract tuning from alpha.
Martin Almquist <malmquist@stanford.edu>
parents:
973
diff
changeset
|
599 alpha_func = @(i,j) d(i,j)* a_lambda*LAMBDA ... |
1c334842bf23
Extract tuning from alpha.
Martin Almquist <malmquist@stanford.edu>
parents:
973
diff
changeset
|
600 + d(i,j)* a_mu_i*MU ... |
1c334842bf23
Extract tuning from alpha.
Martin Almquist <malmquist@stanford.edu>
parents:
973
diff
changeset
|
601 + db(i,j)*a_mu_ij*MU; |
959
c226fb8c2b8a
Bugfix in Elastic2dVariable.getBoundaryOps, alpha. Adjoint FD conv works now!
Martin Almquist <malmquist@stanford.edu>
parents:
958
diff
changeset
|
602 for i = 1:obj.dim |
c226fb8c2b8a
Bugfix in Elastic2dVariable.getBoundaryOps, alpha. Adjoint FD conv works now!
Martin Almquist <malmquist@stanford.edu>
parents:
958
diff
changeset
|
603 for l = 1:obj.dim |
963
c75ddd568fcc
Turn alpha into a boundary operator. Add properties H_w etc for getBoundaryQuadrature to work.
Martin Almquist <malmquist@stanford.edu>
parents:
961
diff
changeset
|
604 alpha{i,l} = d(i,l)*alpha_func(i,j)*e; |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
605 end |
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
606 end |
919
e30aaa4a3e09
Bugfix in Elastic2dVariable.get_boundary_ops
Martin Almquist <malmquist@stanford.edu>
parents:
882
diff
changeset
|
607 |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
608 varargout{k} = alpha; |
970
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
609 |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
610 case 'alpha_tot' |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
611 % alpha = alpha(i,j) is the penalty strength for displacement BC. |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
612 [e, e_tot, alpha] = obj.getBoundaryOperator({'e', 'e_tot', 'alpha'}, boundary); |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
613 E = obj.E; |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
614 [m, n] = size(alpha{1,1}); |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
615 alpha_tot = sparse(m*obj.dim, n*obj.dim); |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
616 for i = 1:obj.dim |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
617 for l = 1:obj.dim |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
618 alpha_tot = alpha_tot + (e_tot'*E{i}*e*alpha{i,l}'*E{l}')'; |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
619 end |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
620 end |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
621 varargout{k} = alpha_tot; |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
622 |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
623 otherwise |
958
72cd29107a9a
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
Martin Almquist <malmquist@stanford.edu>
parents:
919
diff
changeset
|
624 error(['No such operator: operator = ' op{k}]); |
726
37d5d69b1a0d
Refactor BC code in Elastic2dVariable
Martin Almquist <malmquist@stanford.edu>
parents:
689
diff
changeset
|
625 end |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
626 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
627 |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
628 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
629 |
970
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
630 function H = getBoundaryQuadrature(obj, boundary) |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
631 switch boundary |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
632 case {'w','W','west','West', 'e', 'E', 'east', 'East'} |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
633 j = 1; |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
634 case {'s','S','south','South', 'n', 'N', 'north', 'North'} |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
635 j = 2; |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
636 otherwise |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
637 error('No such boundary: boundary = %s',boundary); |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
638 end |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
639 H = obj.H_boundary{j}; |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
640 I_dim = speye(obj.dim, obj.dim); |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
641 H = kron(H, I_dim); |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
642 end |
23d9ca6755be
Add getBoundaryQuadrature in Elastic2dVariable. Rename get_boundary_operator -> getBoundaryOperator. Add operators in getBoundaryOperator, with full size so that they work with multiblock.DiffOp.getBoundaryOperator.
Martin Almquist <malmquist@stanford.edu>
parents:
968
diff
changeset
|
643 |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
644 function N = size(obj) |
734
eebe24a636c7
Make Elastic2dVariable.size account for components.
Martin Almquist <malmquist@stanford.edu>
parents:
730
diff
changeset
|
645 N = obj.dim*prod(obj.m); |
687
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
646 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
647 end |
e8fc3aa1faf6
Rename elastic scheme.
Martin Almquist <malmquist@stanford.edu>
parents:
diff
changeset
|
648 end |