comparison +scheme/Schrodinger2dCurve.m @ 707:0de70ec8bf60 feature/quantumTriangles

merge with feature/optim
author Ylva Rydin <ylva.rydin@telia.com>
date Fri, 10 Nov 2017 14:22:56 +0100
parents e89715fe6a6e
children acb58769610e
comparison
equal deleted inserted replaced
696:7c16b5af8d98 707:0de70ec8bf60
36 36
37 a11, a12, a22 37 a11, a12, a22
38 m_tot, m_u, m_v 38 m_tot, m_u, m_v
39 p 39 p
40 Ji, J 40 Ji, J
41 Hamiltonian
41 end 42 end
42 43
43 methods 44 methods
44 function obj = Schrodinger2dCurve(g ,order, opSet,p) 45 function obj = Schrodinger2dCurve(g ,order, opSet,p)
45 default_arg('opSet',@sbp.D2Variable); 46 default_arg('opSet',@sbp.D2Variable);
65 I_u = speye(obj.m_u); 66 I_u = speye(obj.m_u);
66 I_v = speye(obj.m_v); 67 I_v = speye(obj.m_v);
67 68
68 obj.D1_u = ops_u.D1; 69 obj.D1_u = ops_u.D1;
69 obj.D2_u = ops_u.D2; 70 obj.D2_u = ops_u.D2;
70 71
71 H_u = ops_u.H; 72 H_u = ops_u.H;
72 Hi_u = ops_u.HI; 73 Hi_u = ops_u.HI;
73 e_l_u = ops_u.e_l; 74 e_l_u = ops_u.e_l;
74 e_r_u = ops_u.e_r; 75 e_r_u = ops_u.e_r;
75 d1_l_u = ops_u.d1_l; 76 d1_l_u = ops_u.d1_l;
113 114
114 obj.m = m; 115 obj.m = m;
115 obj.h = [h_u h_v]; 116 obj.h = [h_u h_v];
116 obj.order = order; 117 obj.order = order;
117 obj.D = @(t)obj.d_fun(t); 118 obj.D = @(t)obj.d_fun(t);
119 obj.Hamiltonian = @(t)obj.h_fun(t);
118 obj.variable_update(0); 120 obj.variable_update(0);
119 end 121 end
120 122
121 function [D] = d_fun(obj,t) 123 function [D,n] = d_fun(obj,t)
122 % obj.update_vairables(t); In driscretization? 124 % obj.update_vairables(t); In driscretization?
123 % D = obj.Ji*(-1/2*(obj.b1*obj.Du-obj.b1_u+obj.Du*obj.b1) - 125 % D = obj.Ji*(-1/2*(obj.b1*obj.Du-obj.b1_u+obj.Du*obj.b1) -
124 % 1/2*(obj.b2*obj.Dv - obj.b2_v +obj.Dv*obj.b2) + 126 % 1/2*(obj.b2*obj.Dv - obj.b2_v +obj.Dv*obj.b2) +
125 % 1i*obj.c^2*(obj.DUU + obj.DUV + obj.DVU + obj.DVV)); (ols 127 % 1i*obj.c^2*(obj.DUU + obj.DUV + obj.DVU + obj.DVV)); (ols
126 % not skew sym disc 128 % not skew sym disc
127 129
128 D = sqrt(obj.Ji)*(-1/2*(obj.b1*obj.Du + obj.Du*obj.b1) - 1/2*(obj.b2*obj.Dv + obj.Dv*obj.b2) + 1i*obj.c^2*(obj.DUU + obj.DUV + obj.DVU + obj.DVV))*sqrt(obj.Ji); 130 D = sqrt(obj.Ji)*(-1/2*(obj.b1*obj.Du + obj.Du*obj.b1) - 1/2*(obj.b2*obj.Dv + obj.Dv*obj.b2) + 1i*obj.c^2*(obj.DUU + obj.DUV + obj.DVU + obj.DVV))*sqrt(obj.Ji);
129 end 131 end
130 132
133 function [Hamiltonian] = h_fun(obj,t)
134 Hamiltonian = -sqrt(obj.Ji)*(obj.c^2*(obj.DUU + obj.DUV + obj.DVU + obj.DVV))*sqrt(obj.Ji);
135 end
131 136
132 function [D ]= variable_update(obj,t) 137 function [D ]= variable_update(obj,t)
133 % Metric derivatives 138 % Metric derivatives
134 if(obj.t_up == t) 139 if(obj.t_up == t)
135 return 140 return
202 % boundary is a string specifying the boundary e.g. 'l','r' or 'e','w','n','s'. 207 % boundary is a string specifying the boundary e.g. 'l','r' or 'e','w','n','s'.
203 % type is a string specifying the type of boundary condition if there are several. 208 % type is a string specifying the type of boundary condition if there are several.
204 % data is a function returning the data that should be applied at the boundary. 209 % data is a function returning the data that should be applied at the boundary.
205 % neighbour_scheme is an instance of Scheme that should be interfaced to. 210 % neighbour_scheme is an instance of Scheme that should be interfaced to.
206 % neighbour_boundary is a string specifying which boundary to interface to. 211 % neighbour_boundary is a string specifying which boundary to interface to.
207 function [closure, penalty] = boundary_condition(obj, boundary,~) 212 function [closure, penalty,closureHamiltonian,penaltyHamiltonian] = boundary_condition(obj, boundary,~)
208 [e, d_n, d_t, coeff_t, coeff_n s, halfnorm_inv_n, halfnorm_inv_t, halfnorm_t,g] = obj.get_boundary_ops(boundary); 213 [e, d_n, d_t, coeff_t, coeff_n s, halfnorm_inv_n, halfnorm_inv_t, halfnorm_t,g] = obj.get_boundary_ops(boundary);
209 214
210 a_t = @(t) spdiag(coeff_t(t)); 215 a_t = @(t) spdiag(coeff_t(t));
211 a_n = @(t) spdiag(coeff_n(t)); 216 a_n = @(t) spdiag(coeff_n(t));
212 217
219 penalty_parameter_1 = @(t) 1*1i*halfnorm_inv_n*halfnorm_inv_t*F(t)*e'*halfnorm_t*e; 224 penalty_parameter_1 = @(t) 1*1i*halfnorm_inv_n*halfnorm_inv_t*F(t)*e'*halfnorm_t*e;
220 penalty_parameter_2 = @(t) halfnorm_inv_n*e*tau2(t); 225 penalty_parameter_2 = @(t) halfnorm_inv_n*e*tau2(t);
221 226
222 closure = @(t) sqrt(obj.Ji)*(obj.c^2 * penalty_parameter_1(t)*e' + penalty_parameter_2(t)*e')*sqrt(obj.Ji); 227 closure = @(t) sqrt(obj.Ji)*(obj.c^2 * penalty_parameter_1(t)*e' + penalty_parameter_2(t)*e')*sqrt(obj.Ji);
223 penalty = @(t) -sqrt(obj.Ji)*(obj.c^2 * penalty_parameter_1(t)*e' + penalty_parameter_2(t)*e')*sqrt(obj.Ji); 228 penalty = @(t) -sqrt(obj.Ji)*(obj.c^2 * penalty_parameter_1(t)*e' + penalty_parameter_2(t)*e')*sqrt(obj.Ji);
229
230 closureHamiltonian = @(t) 1i*sqrt(obj.Ji)*(obj.c^2 * penalty_parameter_1(t)*e')*sqrt(obj.Ji);
231 penaltyHamiltonian = @(t) -1i*sqrt(obj.Ji)*(obj.c^2 * penalty_parameter_1(t)*e')*sqrt(obj.Ji);
224 232
225 end 233 end
226 234
227 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary) 235 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary)
228 % u denotes the solution in the own domain 236 % u denotes the solution in the own domain