annotate +scheme/Elastic2dStaggeredAnisotropic.m @ 1267:e61083f178be feature/poroelastic

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