annotate +scheme/Hypsyst3dCurve.m @ 1037:2d7ba44340d0 feature/burgers1d

Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Fri, 18 Jan 2019 09:02:02 +0100
parents 706d1c2b4199
children 0652b34f9f27
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
1 classdef Hypsyst3dCurve < scheme.Scheme
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
2 properties
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
3 m % Number of points in each direction, possibly a vector
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
4 n %size of system
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
5 h % Grid spacing
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
6 X, Y, Z% Values of x and y for each grid point
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
7 Yx, Zx, Xy, Zy, Xz, Yz %Grid values for boundary surfaces
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
8
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
9 xi,eta,zeta
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
10 Xi, Eta, Zeta
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
11
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
12 Eta_xi, Zeta_xi, Xi_eta, Zeta_eta, Xi_zeta, Eta_zeta % Metric terms
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
13 X_xi, X_eta, X_zeta,Y_xi,Y_eta,Y_zeta,Z_xi,Z_eta,Z_zeta % Metric terms
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
14
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
15 order % Order accuracy for the approximation
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
16
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
17 D % non-stabalized scheme operator
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
18 Aevaluated, Bevaluated, Cevaluated, Eevaluated % Numeric Coeffiecient matrices
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
19 Ahat, Bhat, Chat % Symbolic Transformed Coefficient matrices
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
20 A, B, C, E % Symbolic coeffiecient matrices
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
21
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
22 J, Ji % JAcobian and inverse Jacobian
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
23
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
24 H % Discrete norm
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
25 % Norms in the x, y and z directions
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
26 Hxii,Hetai,Hzetai, Hzi % Kroneckerd norms. 1'*Hx*v corresponds to integration in the x dir.
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
27 Hxi,Heta,Hzeta
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
28 I_xi,I_eta,I_zeta, I_N,onesN
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
29 e_w, e_e, e_s, e_n, e_b, e_t
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
30 index_w, index_e,index_s,index_n, index_b, index_t
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
31 params %parameters for the coeficient matrice
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
32 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
33
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
34
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
35 methods
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
36 function obj = Hypsyst3dCurve(m, order, A, B,C, E, params,ti,operator)
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
37 xilim ={0 1};
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
38 etalim = {0 1};
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
39 zetalim = {0 1};
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
40
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
41 if length(m) == 1
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
42 m = [m m m];
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
43 end
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
44 m_xi = m(1);
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
45 m_eta = m(2);
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
46 m_zeta = m(3);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
47 m_tot = m_xi*m_eta*m_zeta;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
48 obj.params = params;
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
49 obj.n = length(A(obj,0,0,0));
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
50
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
51 obj.m = m;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
52 obj.order = order;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
53 obj.onesN = ones(obj.n);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
54
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
55 switch operator
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
56 case 'upwind'
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
57 ops_xi = sbp.D1Upwind(m_xi,xilim,order);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
58 ops_eta = sbp.D1Upwind(m_eta,etalim,order);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
59 ops_zeta = sbp.D1Upwind(m_zeta,zetalim,order);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
60 case 'standard'
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
61 ops_xi = sbp.D2Standard(m_xi,xilim,order);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
62 ops_eta = sbp.D2Standard(m_eta,etalim,order);
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
63 ops_zeta = sbp.D2Standard(m_zeta,zetalim,order);
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
64 otherwise
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
65 error('Operator not available')
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
66 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
67
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
68 obj.xi = ops_xi.x;
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
69 obj.eta = ops_eta.x;
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
70 obj.zeta = ops_zeta.x;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
71
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
72 obj.Xi = kr(obj.xi,ones(m_eta,1),ones(m_zeta,1));
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
73 obj.Eta = kr(ones(m_xi,1),obj.eta,ones(m_zeta,1));
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
74 obj.Zeta = kr(ones(m_xi,1),ones(m_eta,1),obj.zeta);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
75
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
76
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
77 [X,Y,Z] = ti.map(obj.Xi,obj.Eta,obj.Zeta);
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
78 obj.X = X;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
79 obj.Y = Y;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
80 obj.Z = Z;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
81
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
82 I_n = eye(obj.n);
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
83 I_xi = speye(m_xi);
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
84 obj.I_xi = I_xi;
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
85 I_eta = speye(m_eta);
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
86 obj.I_eta = I_eta;
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
87 I_zeta = speye(m_zeta);
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
88 obj.I_zeta = I_zeta;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
89
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
90 I_N=kr(I_n,I_xi,I_eta,I_zeta);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
91
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
92 O_xi = ones(m_xi,1);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
93 O_eta = ones(m_eta,1);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
94 O_zeta = ones(m_zeta,1);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
95
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
96
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
97 obj.Hxi = ops_xi.H;
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
98 obj.Heta = ops_eta.H;
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
99 obj.Hzeta = ops_zeta.H;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
100 obj.h = [ops_xi.h ops_eta.h ops_zeta.h];
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
101
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
102 switch operator
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
103 case 'upwind'
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
104 D1_xi = kr((ops_xi.Dp+ops_xi.Dm)/2, I_eta,I_zeta);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
105 D1_eta = kr(I_xi, (ops_eta.Dp+ops_eta.Dm)/2,I_zeta);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
106 D1_zeta = kr(I_xi, I_eta,(ops_zeta.Dp+ops_zeta.Dm)/2);
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
107 otherwise
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
108 D1_xi = kr(ops_xi.D1, I_eta,I_zeta);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
109 D1_eta = kr(I_xi, ops_eta.D1,I_zeta);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
110 D1_zeta = kr(I_xi, I_eta,ops_zeta.D1);
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
111 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
112
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
113 obj.A = A;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
114 obj.B = B;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
115 obj.C = C;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
116
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
117 obj.X_xi = D1_xi*X;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
118 obj.X_eta = D1_eta*X;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
119 obj.X_zeta = D1_zeta*X;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
120 obj.Y_xi = D1_xi*Y;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
121 obj.Y_eta = D1_eta*Y;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
122 obj.Y_zeta = D1_zeta*Y;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
123 obj.Z_xi = D1_xi*Z;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
124 obj.Z_eta = D1_eta*Z;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
125 obj.Z_zeta = D1_zeta*Z;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
126
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
127 obj.Ahat = @transform_coefficient_matrix;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
128 obj.Bhat = @transform_coefficient_matrix;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
129 obj.Chat = @transform_coefficient_matrix;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
130 obj.E = @(obj,x,y,z,~,~,~,~,~,~)E(obj,x,y,z);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
131
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
132 obj.Aevaluated = obj.evaluateCoefficientMatrix(obj.Ahat,obj.X, obj.Y,obj.Z, obj.X_eta,obj.X_zeta,obj.Y_eta,obj.Y_zeta,obj.Z_eta,obj.Z_zeta);
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
133 obj.Bevaluated = obj.evaluateCoefficientMatrix(obj.Bhat,obj.X, obj.Y,obj.Z, obj.X_zeta,obj.X_xi,obj.Y_zeta,obj.Y_xi,obj.Z_zeta,obj.Z_xi);
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
134 obj.Cevaluated = obj.evaluateCoefficientMatrix(obj.Chat,obj.X,obj.Y,obj.Z, obj.X_xi,obj.X_eta,obj.Y_xi,obj.Y_eta,obj.Z_xi,obj.Z_eta);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
135
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
136 switch operator
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
137 case 'upwind'
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
138 clear D1_xi D1_eta D1_zeta
368
53abf04f5e4e Made some small changes.
Ylva Rydin <ylva.rydin@telia.com>
parents: 366
diff changeset
139 alphaA = max(abs(eig(obj.Ahat(obj,obj.X(end), obj.Y(end),obj.Z(end), obj.X_eta(end),obj.X_zeta(end),obj.Y_eta(end),obj.Y_zeta(end),obj.Z_eta(end),obj.Z_zeta(end)))));
53abf04f5e4e Made some small changes.
Ylva Rydin <ylva.rydin@telia.com>
parents: 366
diff changeset
140 alphaB = max(abs(eig(obj.Bhat(obj,obj.X(end), obj.Y(end),obj.Z(end), obj.X_zeta(end),obj.X_xi(end),obj.Y_zeta(end),obj.Y_xi(end),obj.Z_zeta(end),obj.Z_xi(end)))));
53abf04f5e4e Made some small changes.
Ylva Rydin <ylva.rydin@telia.com>
parents: 366
diff changeset
141 alphaC = max(abs(eig(obj.Chat(obj,obj.X(end), obj.Y(end),obj.Z(end), obj.X_xi(end),obj.X_eta(end),obj.Y_xi(end),obj.Y_eta(end),obj.Z_xi(end),obj.Z_eta(end)))));
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
142
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
143 Ap = (obj.Aevaluated+alphaA*I_N)/2;
355
69b078cf8072 Upwind doed not work in the non curve-linear case.
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
144 Dmxi = kr(I_n, ops_xi.Dm, I_eta,I_zeta);
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
145 diffSum = -Ap*Dmxi;
355
69b078cf8072 Upwind doed not work in the non curve-linear case.
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
146 clear Ap Dmxi
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
147
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
148 Am = (obj.Aevaluated-alphaA*I_N)/2;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
149
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
150 obj.Aevaluated = [];
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
151 Dpxi = kr(I_n, ops_xi.Dp, I_eta,I_zeta);
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
152 temp = Am*Dpxi;
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
153 diffSum = diffSum-temp;
355
69b078cf8072 Upwind doed not work in the non curve-linear case.
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
154 clear Am Dpxi
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
155
355
69b078cf8072 Upwind doed not work in the non curve-linear case.
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
156 Bp = (obj.Bevaluated+alphaB*I_N)/2;
69b078cf8072 Upwind doed not work in the non curve-linear case.
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
157 Dmeta = kr(I_n, I_xi, ops_eta.Dm,I_zeta);
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
158 temp = Bp*Dmeta;
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
159 diffSum = diffSum-temp;
355
69b078cf8072 Upwind doed not work in the non curve-linear case.
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
160 clear Bp Dmeta
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
161
355
69b078cf8072 Upwind doed not work in the non curve-linear case.
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
162 Bm = (obj.Bevaluated-alphaB*I_N)/2;
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
163 obj.Bevaluated = [];
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
164 Dpeta = kr(I_n, I_xi, ops_eta.Dp,I_zeta);
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
165 temp = Bm*Dpeta;
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
166 diffSum = diffSum-temp;
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
167 clear Bm Dpeta
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
168
355
69b078cf8072 Upwind doed not work in the non curve-linear case.
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
169 Cp = (obj.Cevaluated+alphaC*I_N)/2;
69b078cf8072 Upwind doed not work in the non curve-linear case.
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
170 Dmzeta = kr(I_n, I_xi, I_eta,ops_zeta.Dm);
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
171 temp = Cp*Dmzeta;
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
172 diffSum = diffSum-temp;
355
69b078cf8072 Upwind doed not work in the non curve-linear case.
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
173 clear Cp Dmzeta
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
174
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
175 Cm = (obj.Cevaluated-alphaC*I_N)/2;
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
176 clear I_N
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
177 obj.Cevaluated = [];
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
178 Dpzeta = kr(I_n, I_xi, I_eta,ops_zeta.Dp);
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
179 temp = Cm*Dpzeta;
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
180 diffSum = diffSum-temp;
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
181 clear Cm Dpzeta temp
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
182
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
183 obj.J = obj.X_xi.*obj.Y_eta.*obj.Z_zeta...
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
184 +obj.X_zeta.*obj.Y_xi.*obj.Z_eta...
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
185 +obj.X_eta.*obj.Y_zeta.*obj.Z_xi...
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
186 -obj.X_xi.*obj.Y_zeta.*obj.Z_eta...
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
187 -obj.X_eta.*obj.Y_xi.*obj.Z_zeta...
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
188 -obj.X_zeta.*obj.Y_eta.*obj.Z_xi;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
189
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
190 obj.Ji = kr(I_n,spdiags(1./obj.J,0,m_tot,m_tot));
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
191 obj.Eevaluated = obj.evaluateCoefficientMatrix(obj.E, obj.X, obj.Y,obj.Z,[],[],[],[],[],[]);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
192
355
69b078cf8072 Upwind doed not work in the non curve-linear case.
Ylva Rydin <ylva.rydin@telia.com>
parents: 354
diff changeset
193 obj.D = obj.Ji*diffSum-obj.Eevaluated;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
194
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
195 case 'standard'
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
196 D1_xi = kr(I_n,D1_xi);
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
197 D1_eta = kr(I_n,D1_eta);
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
198 D1_zeta = kr(I_n,D1_zeta);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
199
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
200 obj.J = obj.X_xi.*obj.Y_eta.*obj.Z_zeta...
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
201 +obj.X_zeta.*obj.Y_xi.*obj.Z_eta...
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
202 +obj.X_eta.*obj.Y_zeta.*obj.Z_xi...
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
203 -obj.X_xi.*obj.Y_zeta.*obj.Z_eta...
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
204 -obj.X_eta.*obj.Y_xi.*obj.Z_zeta...
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
205 -obj.X_zeta.*obj.Y_eta.*obj.Z_xi;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
206
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
207 obj.Ji = kr(I_n,spdiags(1./obj.J,0,m_tot,m_tot));
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
208 obj.Eevaluated = obj.evaluateCoefficientMatrix(obj.E, obj.X, obj.Y,obj.Z,[],[],[],[],[],[]);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
209
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
210 obj.D = obj.Ji*(-obj.Aevaluated*D1_xi-obj.Bevaluated*D1_eta -obj.Cevaluated*D1_zeta)-obj.Eevaluated;
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
211 otherwise
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
212 error('Operator not supported')
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
213 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
214
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
215 obj.Hxii = kr(I_n, ops_xi.HI, I_eta,I_zeta);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
216 obj.Hetai = kr(I_n, I_xi, ops_eta.HI,I_zeta);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
217 obj.Hzetai = kr(I_n, I_xi,I_eta, ops_zeta.HI);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
218
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
219 obj.index_w = (kr(ops_xi.e_l, O_eta,O_zeta)==1);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
220 obj.index_e = (kr(ops_xi.e_r, O_eta,O_zeta)==1);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
221 obj.index_s = (kr(O_xi, ops_eta.e_l,O_zeta)==1);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
222 obj.index_n = (kr(O_xi, ops_eta.e_r,O_zeta)==1);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
223 obj.index_b = (kr(O_xi, O_eta, ops_zeta.e_l)==1);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
224 obj.index_t = (kr(O_xi, O_eta, ops_zeta.e_r)==1);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
225
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
226 obj.e_w = kr(I_n, ops_xi.e_l, I_eta,I_zeta);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
227 obj.e_e = kr(I_n, ops_xi.e_r, I_eta,I_zeta);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
228 obj.e_s = kr(I_n, I_xi, ops_eta.e_l,I_zeta);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
229 obj.e_n = kr(I_n, I_xi, ops_eta.e_r,I_zeta);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
230 obj.e_b = kr(I_n, I_xi, I_eta, ops_zeta.e_l);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
231 obj.e_t = kr(I_n, I_xi, I_eta, ops_zeta.e_r);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
232
366
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
233 obj.Eta_xi = kr(obj.eta,ones(m_xi,1));
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
234 obj.Zeta_xi = kr(ones(m_eta,1),obj.zeta);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
235 obj.Xi_eta = kr(obj.xi,ones(m_zeta,1));
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
236 obj.Zeta_eta = kr(ones(m_xi,1),obj.zeta);
7ada2db63268 Tried to speed up the matrix set-up a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 355
diff changeset
237 obj.Xi_zeta = kr(obj.xi,ones(m_eta,1));
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
238 obj.Eta_zeta = kr(ones(m_zeta,1),obj.eta);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
239 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
240
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
241 function [ret] = transform_coefficient_matrix(obj,x,y,z,x_1,x_2,y_1,y_2,z_1,z_2)
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
242 ret = obj.A(obj,x,y,z).*(y_1.*z_2-z_1.*y_2);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
243 ret = ret+obj.B(obj,x,y,z).*(x_2.*z_1-x_1.*z_2);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
244 ret = ret+obj.C(obj,x,y,z).*(x_1.*y_2-x_2.*y_1);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
245 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
246
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
247
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
248 % Closure functions return the opertors applied to the own doamin to close the boundary
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
249 % Penalty functions return the opertors to force the solution. In the case of an interface it returns the operator applied to the other doamin.
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
250 % boundary is a string specifying the boundary e.g. 'l','r' or 'e','w','n','s'.
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
251 % type is a string specifying the type of boundary condition if there are several.
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
252 % data is a function returning the data that should be applied at the boundary.
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
253 function [closure, penalty] = boundary_condition(obj,boundary,type,L)
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
254 default_arg('type','char');
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
255 BM = boundary_matrices(obj,boundary);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
256
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
257 switch type
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
258 case{'c','char'}
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
259 [closure,penalty] = boundary_condition_char(obj,BM);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
260 case{'general'}
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
261 [closure,penalty] = boundary_condition_general(obj,BM,boundary,L);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
262 otherwise
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
263 error('No such boundary condition')
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
264 end
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
265 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
266
946
706d1c2b4199 Raname opts to type in a bunch of interface methods
Jonatan Werpers <jonatan@werpers.com>
parents: 910
diff changeset
267 function [closure, penalty] = interface(obj, boundary, neighbour_scheme, neighbour_boundary, type)
706d1c2b4199 Raname opts to type in a bunch of interface methods
Jonatan Werpers <jonatan@werpers.com>
parents: 910
diff changeset
268 error('Not implemented');
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
269 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
270
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
271 function N = size(obj)
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
272 N = obj.m;
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
273 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
274
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
275 % Evaluates the symbolic Coeffiecient matrix mat
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
276 function [ret] = evaluateCoefficientMatrix(obj,mat, X, Y, Z , x_1 , x_2 , y_1 , y_2 , z_1 , z_2)
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
277 params = obj.params;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
278 side = max(length(X),length(Y));
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
279 if isa(mat,'function_handle')
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
280 [rows,cols] = size(mat(obj,0,0,0,0,0,0,0,0,0));
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
281 x_1 = kr(obj.onesN,x_1);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
282 x_2 = kr(obj.onesN,x_2);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
283 y_1 = kr(obj.onesN,y_1);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
284 y_2 = kr(obj.onesN,y_2);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
285 z_1 = kr(obj.onesN,z_1);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
286 z_2 = kr(obj.onesN,z_2);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
287 matVec = mat(obj,X',Y',Z',x_1',x_2',y_1',y_2',z_1',z_2');
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
288 matVec = sparse(matVec);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
289 else
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
290 matVec = mat;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
291 [rows,cols] = size(matVec);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
292 side = max(length(X),length(Y));
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
293 cols = cols/side;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
294 end
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
295 matVec(abs(matVec)<10^(-10)) = 0;
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
296 ret = cell(rows,cols);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
297
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
298 for ii = 1:rows
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
299 for jj = 1:cols
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
300 ret{ii,jj} = diag(matVec(ii,(jj-1)*side+1:jj*side));
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
301 end
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
302 end
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
303 ret = cell2mat(ret);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
304 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
305
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
306 function [BM] = boundary_matrices(obj,boundary)
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
307 params = obj.params;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
308 BM.boundary = boundary;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
309 switch boundary
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
310 case {'w','W','west'}
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
311 BM.e_ = obj.e_w;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
312 mat = obj.Ahat;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
313 BM.boundpos = 'l';
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
314 BM.Hi = obj.Hxii;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
315 BM.index = obj.index_w;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
316 BM.x_1 = obj.X_eta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
317 BM.x_2 = obj.X_zeta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
318 BM.y_1 = obj.Y_eta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
319 BM.y_2 = obj.Y_zeta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
320 BM.z_1 = obj.Z_eta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
321 BM.z_2 = obj.Z_zeta(BM.index);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
322 case {'e','E','east'}
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
323 BM.e_ = obj.e_e;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
324 mat = obj.Ahat;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
325 BM.boundpos = 'r';
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
326 BM.Hi = obj.Hxii;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
327 BM.index = obj.index_e;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
328 BM.x_1 = obj.X_eta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
329 BM.x_2 = obj.X_zeta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
330 BM.y_1 = obj.Y_eta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
331 BM.y_2 = obj.Y_zeta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
332 BM.z_1 = obj.Z_eta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
333 BM.z_2 = obj.Z_zeta(BM.index);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
334 case {'s','S','south'}
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
335 BM.e_ = obj.e_s;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
336 mat = obj.Bhat;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
337 BM.boundpos = 'l';
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
338 BM.Hi = obj.Hetai;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
339 BM.index = obj.index_s;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
340 BM.x_1 = obj.X_zeta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
341 BM.x_2 = obj.X_xi(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
342 BM.y_1 = obj.Y_zeta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
343 BM.y_2 = obj.Y_xi(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
344 BM.z_1 = obj.Z_zeta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
345 BM.z_2 = obj.Z_xi(BM.index);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
346 case {'n','N','north'}
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
347 BM.e_ = obj.e_n;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
348 mat = obj.Bhat;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
349 BM.boundpos = 'r';
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
350 BM.Hi = obj.Hetai;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
351 BM.index = obj.index_n;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
352 BM.x_1 = obj.X_zeta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
353 BM.x_2 = obj.X_xi(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
354 BM.y_1 = obj.Y_zeta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
355 BM.y_2 = obj.Y_xi(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
356 BM.z_1 = obj.Z_zeta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
357 BM.z_2 = obj.Z_xi(BM.index);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
358 case{'b','B','Bottom'}
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
359 BM.e_ = obj.e_b;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
360 mat = obj.Chat;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
361 BM.boundpos = 'l';
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
362 BM.Hi = obj.Hzetai;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
363 BM.index = obj.index_b;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
364 BM.x_1 = obj.X_xi(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
365 BM.x_2 = obj.X_eta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
366 BM.y_1 = obj.Y_xi(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
367 BM.y_2 = obj.Y_eta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
368 BM.z_1 = obj.Z_xi(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
369 BM.z_2 = obj.Z_eta(BM.index);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
370 case{'t','T','Top'}
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
371 BM.e_ = obj.e_t;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
372 mat = obj.Chat;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
373 BM.boundpos = 'r';
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
374 BM.Hi = obj.Hzetai;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
375 BM.index = obj.index_t;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
376 BM.x_1 = obj.X_xi(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
377 BM.x_2 = obj.X_eta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
378 BM.y_1 = obj.Y_xi(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
379 BM.y_2 = obj.Y_eta(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
380 BM.z_1 = obj.Z_xi(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
381 BM.z_2 = obj.Z_eta(BM.index);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
382 end
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
383 [BM.V,BM.Vi,BM.D,signVec] = obj.matrixDiag(mat,obj.X(BM.index),obj.Y(BM.index),obj.Z(BM.index),...
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
384 BM.x_1,BM.x_2,BM.y_1,BM.y_2,BM.z_1,BM.z_2);
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
385 BM.side = sum(BM.index);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
386 BM.pos = signVec(1); BM.zeroval=signVec(2); BM.neg=signVec(3);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
387 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
388
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
389 % Characteristic boundary condition
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
390 function [closure, penalty] = boundary_condition_char(obj,BM)
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
391 side = BM.side;
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
392 pos = BM.pos;
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
393 neg = BM.neg;
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
394 zeroval = BM.zeroval;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
395 V = BM.V;
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
396 Vi = BM.Vi;
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
397 Hi = BM.Hi;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
398 D = BM.D;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
399 e_ = BM.e_;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
400
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
401 switch BM.boundpos
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
402 case {'l'}
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
403 tau = sparse(obj.n*side,pos);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
404 Vi_plus = Vi(1:pos,:);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
405 tau(1:pos,:) = -abs(D(1:pos,1:pos));
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
406 closure = Hi*e_*V*tau*Vi_plus*e_';
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
407 penalty = -Hi*e_*V*tau*Vi_plus;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
408 case {'r'}
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
409 tau = sparse(obj.n*side,neg);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
410 tau((pos+zeroval)+1:obj.n*side,:) = -abs(D((pos+zeroval)+1:obj.n*side,(pos+zeroval)+1:obj.n*side));
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
411 Vi_minus = Vi((pos+zeroval)+1:obj.n*side,:);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
412 closure = Hi*e_*V*tau*Vi_minus*e_';
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
413 penalty = -Hi*e_*V*tau*Vi_minus;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
414 end
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
415 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
416
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
417 % General boundary condition in the form Lu=g(x)
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
418 function [closure,penalty] = boundary_condition_general(obj,BM,boundary,L)
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
419 side = BM.side;
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
420 pos = BM.pos;
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
421 neg = BM.neg;
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
422 zeroval = BM.zeroval;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
423 V = BM.V;
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
424 Vi = BM.Vi;
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
425 Hi = BM.Hi;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
426 D = BM.D;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
427 e_ = BM.e_;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
428 index = BM.index;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
429
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
430 switch BM.boundary
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
431 case{'b','B','bottom'}
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
432 Ji_vec = diag(obj.Ji);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
433 Ji = diag(Ji_vec(index));
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
434 Zeta_x = Ji*(obj.Y_xi(index).*obj.Z_eta(index)-obj.Z_xi(index).*obj.Y_eta(index));
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
435 Zeta_y = Ji*(obj.X_eta(index).*obj.Z_xi(index)-obj.X_xi(index).*obj.Z_eta(index));
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
436 Zeta_z = Ji*(obj.X_xi(index).*obj.Y_eta(index)-obj.Y_xi(index).*obj.X_eta(index));
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
437
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
438 L = obj.evaluateCoefficientMatrix(L,Zeta_x,Zeta_y,Zeta_z,[],[],[],[],[],[]);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
439 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
440
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
441 switch BM.boundpos
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
442 case {'l'}
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
443 tau = sparse(obj.n*side,pos);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
444 Vi_plus = Vi(1:pos,:);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
445 Vi_minus = Vi(pos+zeroval+1:obj.n*side,:);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
446 V_plus = V(:,1:pos);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
447 V_minus = V(:,(pos+zeroval)+1:obj.n*side);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
448
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
449 tau(1:pos,:) = -abs(D(1:pos,1:pos));
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
450 R = -inv(L*V_plus)*(L*V_minus);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
451 closure = Hi*e_*V*tau*(Vi_plus-R*Vi_minus)*e_';
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
452 penalty = -Hi*e_*V*tau*inv(L*V_plus)*L;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
453 case {'r'}
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
454 tau = sparse(obj.n*side,neg);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
455 tau((pos+zeroval)+1:obj.n*side,:) = -abs(D((pos+zeroval)+1:obj.n*side,(pos+zeroval)+1:obj.n*side));
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
456 Vi_plus = Vi(1:pos,:);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
457 Vi_minus = Vi((pos+zeroval)+1:obj.n*side,:);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
458
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
459 V_plus = V(:,1:pos);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
460 V_minus = V(:,(pos+zeroval)+1:obj.n*side);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
461 R = -inv(L*V_minus)*(L*V_plus);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
462 closure = Hi*e_*V*tau*(Vi_minus-R*Vi_plus)*e_';
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
463 penalty = -Hi*e_*V*tau*inv(L*V_minus)*L;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
464 end
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
465 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
466
369
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
467 % Function that diagonalizes a symbolic matrix A as A=V*D*Vi
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
468 % D is a diagonal matrix with the eigenvalues on A on the diagonal sorted by their sign
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
469 % [d+ ]
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
470 % D = [ d0 ]
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
471 % [ d-]
9d1fc984f40d Added some comments and cleaned up the code a little
Ylva Rydin <ylva.rydin@telia.com>
parents: 368
diff changeset
472 % signVec is a vector specifying the number of possitive, zero and negative eigenvalues of D
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
473 function [V,Vi, D,signVec] = matrixDiag(obj,mat,x,y,z,x_1,x_2,y_1,y_2,z_1,z_2)
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
474 params = obj.params;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
475 eps = 10^(-10);
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
476 if(sum(abs(x_1))>eps)
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
477 syms x_1s
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
478 else
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
479 x_1s = 0;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
480 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
481
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
482 if(sum(abs(x_2))>eps)
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
483 syms x_2s;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
484 else
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
485 x_2s = 0;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
486 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
487
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
488
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
489 if(sum(abs(y_1))>eps)
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
490 syms y_1s
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
491 else
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
492 y_1s = 0;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
493 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
494
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
495 if(sum(abs(y_2))>eps)
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
496 syms y_2s;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
497 else
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
498 y_2s = 0;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
499 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
500
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
501 if(sum(abs(z_1))>eps)
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
502 syms z_1s
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
503 else
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
504 z_1s = 0;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
505 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
506
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
507 if(sum(abs(z_2))>eps)
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
508 syms z_2s;
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
509 else
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
510 z_2s = 0;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
511 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
512
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
513 syms xs ys zs
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
514 [V, D] = eig(mat(obj,xs,ys,zs,x_1s,x_2s,y_1s,y_2s,z_1s,z_2s));
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
515 Vi = inv(V);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
516 xs = x;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
517 ys = y;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
518 zs = z;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
519 x_1s = x_1;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
520 x_2s = x_2;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
521 y_1s = y_1;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
522 y_2s = y_2;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
523 z_1s = z_1;
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
524 z_2s = z_2;
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
525
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
526 side = max(length(x),length(y));
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
527 Dret = zeros(obj.n,side*obj.n);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
528 Vret = zeros(obj.n,side*obj.n);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
529 Viret = zeros(obj.n,side*obj.n);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
530
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
531 for ii=1:obj.n
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
532 for jj=1:obj.n
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
533 Dret(jj,(ii-1)*side+1:side*ii) = eval(D(jj,ii));
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
534 Vret(jj,(ii-1)*side+1:side*ii) = eval(V(jj,ii));
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
535 Viret(jj,(ii-1)*side+1:side*ii) = eval(Vi(jj,ii));
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
536 end
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
537 end
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
538
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
539 D = sparse(Dret);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
540 V = sparse(Vret);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
541 Vi = sparse(Viret);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
542 V = obj.evaluateCoefficientMatrix(V,x,y,z,x_1,x_2,y_1,y_2,z_1,z_2);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
543 D = obj.evaluateCoefficientMatrix(D,x,y,z,x_1,x_2,y_1,y_2,z_1,z_2);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
544 Vi = obj.evaluateCoefficientMatrix(Vi,x,y,z,x_1,x_2,y_1,y_2,z_1,z_2);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
545 DD = diag(D);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
546
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
547 poseig = (DD>0);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
548 zeroeig = (DD==0);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
549 negeig = (DD<0);
905
459eeb99130f Include type as (optional) input parameter in the interface method of all schemes.
Martin Almquist <malmquist@stanford.edu>
parents: 369
diff changeset
550
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
551 D = diag([DD(poseig); DD(zeroeig); DD(negeig)]);
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
552 V = [V(:,poseig) V(:,zeroeig) V(:,negeig)];
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
553 Vi = [Vi(poseig,:); Vi(zeroeig,:); Vi(negeig,:)];
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
554 signVec = [sum(poseig),sum(zeroeig),sum(negeig)];
350
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
555 end
5d5652fe826a A commit before I try resolving the performance issues
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
556 end
354
dbac99d2c318 Removed inv(Vi) to save time
Ylva Rydin <ylva.rydin@telia.com>
parents: 351
diff changeset
557 end