comparison +sbp/D1StaggeredUpwind.m @ 1261:a3f2c1781612 feature/poroelastic

Fix bug with incorrect grids returned by D1StaggeredUpwind
author Martin Almquist <malmquist@stanford.edu>
date Wed, 29 Apr 2020 21:02:05 -0700
parents 99f92bfc1157
children
comparison
equal deleted inserted replaced
1260:7fbee3de0ab2 1261:a3f2c1781612
8 % D1_dual takes FROM primal grid TO dual grid 8 % D1_dual takes FROM primal grid TO dual grid
9 9
10 D1_primal % SBP operator approximating first derivative 10 D1_primal % SBP operator approximating first derivative
11 D1_dual % SBP operator approximating first derivative 11 D1_dual % SBP operator approximating first derivative
12 12
13 Dplus_primal % Upwind operator on primal grid 13 Dplus_primal % Upwind operator on primal grid
14 Dminus_primal % Upwind operator on primal grid 14 Dminus_primal % Upwind operator on primal grid
15 Dplus_dual % Upwind operator on dual grid 15 Dplus_dual % Upwind operator on dual grid
16 Dminus_dual % Upwind operator on dual grid 16 Dminus_dual % Upwind operator on dual grid
17 17
18 H_primal % Norm matrix 18 H_primal % Norm matrix
19 H_dual % Norm matrix 19 H_dual % Norm matrix
20 H_primalI % H^-1 20 H_primalI % H^-1
21 H_dualI % H^-1 21 H_dualI % H^-1
34 end 34 end
35 35
36 methods 36 methods
37 function obj = D1StaggeredUpwind(m,lim,order) 37 function obj = D1StaggeredUpwind(m,lim,order)
38 38
39 x_l = lim{1}; 39 xl = lim{1};
40 x_r = lim{2}; 40 xr = lim{2};
41 L = x_r-x_l; 41 L = xr-xl;
42 h = L/(m-1);
42 43
43 m_primal = m; 44 m_primal = m;
44 m_dual = m+1; 45 m_dual = m+1;
45 46
46 switch order 47 switch order
47 case 2 48 case 2
48 [obj.x_primal, obj.x_dual, obj.H_primal, obj.H_dual,... 49 [~, ~, obj.H_primal, obj.H_dual,...
49 obj.H_primalI, obj.H_dualI,... 50 obj.H_primalI, obj.H_dualI,...
50 obj.D1_primal, obj.D1_dual, obj.Dplus_primal, obj.Dminus_primal,... 51 obj.D1_primal, obj.D1_dual, obj.Dplus_primal, obj.Dminus_primal,...
51 obj.Dplus_dual, obj.Dminus_dual] = sbp.implementations.d1_staggered_upwind_2(m, L); 52 obj.Dplus_dual, obj.Dminus_dual] = sbp.implementations.d1_staggered_upwind_2(m, L);
52 case 4 53 case 4
53 [obj.x_primal, obj.x_dual, obj.H_primal, obj.H_dual,... 54 [~, ~, obj.H_primal, obj.H_dual,...
54 obj.H_primalI, obj.H_dualI,... 55 obj.H_primalI, obj.H_dualI,...
55 obj.D1_primal, obj.D1_dual, obj.Dplus_primal, obj.Dminus_primal,... 56 obj.D1_primal, obj.D1_dual, obj.Dplus_primal, obj.Dminus_primal,...
56 obj.Dplus_dual, obj.Dminus_dual] = sbp.implementations.d1_staggered_upwind_4(m, L); 57 obj.Dplus_dual, obj.Dminus_dual] = sbp.implementations.d1_staggered_upwind_4(m, L);
57 case 6 58 case 6
58 [obj.x_primal, obj.x_dual, obj.H_primal, obj.H_dual,... 59 [~, ~, obj.H_primal, obj.H_dual,...
59 obj.H_primalI, obj.H_dualI,... 60 obj.H_primalI, obj.H_dualI,...
60 obj.D1_primal, obj.D1_dual, obj.Dplus_primal, obj.Dminus_primal,... 61 obj.D1_primal, obj.D1_dual, obj.Dplus_primal, obj.Dminus_primal,...
61 obj.Dplus_dual, obj.Dminus_dual] = sbp.implementations.d1_staggered_upwind_6(m, L); 62 obj.Dplus_dual, obj.Dminus_dual] = sbp.implementations.d1_staggered_upwind_6(m, L);
62 case 8 63 case 8
63 [obj.x_primal, obj.x_dual, obj.H_primal, obj.H_dual,... 64 [~, ~, obj.H_primal, obj.H_dual,...
64 obj.H_primalI, obj.H_dualI,... 65 obj.H_primalI, obj.H_dualI,...
65 obj.D1_primal, obj.D1_dual, obj.Dplus_primal, obj.Dminus_primal,... 66 obj.D1_primal, obj.D1_dual, obj.Dplus_primal, obj.Dminus_primal,...
66 obj.Dplus_dual, obj.Dminus_dual] = sbp.implementations.d1_staggered_upwind_8(m, L); 67 obj.Dplus_dual, obj.Dminus_dual] = sbp.implementations.d1_staggered_upwind_8(m, L);
67 otherwise 68 otherwise
68 error('Invalid operator order %d.',order); 69 error('Invalid operator order %d.',order);
69 end 70 end
70 71
71 obj.m = m; 72 obj.m = m;
72 obj.m_primal = m_primal; 73 obj.m_primal = m_primal;
73 obj.m_dual = m_dual; 74 obj.m_dual = m_dual;
74 obj.h = L/(m-1); 75 obj.h = h;
76
77 obj.x_primal = linspace(xl, xr, m)';
78 obj.x_dual = [xl, linspace(xl+h/2, xr-h/2, m-1), xr]';
75 79
76 obj.e_primal_l = sparse(m_primal,1); 80 obj.e_primal_l = sparse(m_primal,1);
77 obj.e_primal_r = sparse(m_primal,1); 81 obj.e_primal_r = sparse(m_primal,1);
78 obj.e_primal_l(1) = 1; 82 obj.e_primal_l(1) = 1;
79 obj.e_primal_r(m_primal) = 1; 83 obj.e_primal_r(m_primal) = 1;