annotate +scheme/Schrodinger2dCurve.m @ 708:acb58769610e feature/quantumTriangles

fixed error in diffOp
author Ylva Rydin <ylva.rydin@telia.com>
date Tue, 21 Nov 2017 16:51:51 +0100
parents e89715fe6a6e
children f004b9e9d17a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
1 classdef Schrodinger2dCurve < scheme.Scheme
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
2 properties
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
3 m % Number of points in each direction, possibly a vector
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
4 h % Grid spacing
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
5
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
6 grid
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
7 xm, ym
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
8
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
9 order % Order accuracy for the approximation
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
10
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
11 D % non-stabalized scheme operator
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
12 M % Derivative norm
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
13 H % Discrete norm
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
14 Hi
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
15 H_u, H_v % Norms in the x and y directions
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
16 Hu,Hv % Kroneckerd norms. 1'*Hx*v corresponds to integration in the x dir.
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
17 Hi_u, Hi_v
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
18 Hiu, Hiv
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
19 D1_v, D1_u
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
20 D2_v, D2_u
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
21 Du, Dv
492
6b95a894cbd7 fixed a bug in the metric coefficients but something is wrong at the boundaries
Ylva Rydin <ylva.rydin@telia.com>
parents: 491
diff changeset
22 x,y
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
23 b1, b2
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
24 b1_u,b2_v
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
25 DU, DV, DUU, DUV, DVU, DVV
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
26
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
27 e_w, e_e, e_s, e_n
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
28 du_w, dv_w
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
29 du_e, dv_e
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
30 du_s, dv_s
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
31 du_n, dv_n
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
32 g_1, g_2
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
33 c
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
34 ind
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
35 t_up
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
36
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
37 a11, a12, a22
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
38 m_tot, m_u, m_v
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
39 p
518
4709f2329372 Added J to propertied
Ylva Rydin <ylva.rydin@telia.com>
parents: 517
diff changeset
40 Ji, J
698
0122cbe2e6d3 Add hamiltonian
Ylva Rydin <ylva.rydin@telia.com>
parents: 695
diff changeset
41 Hamiltonian
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
42 end
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
43
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
44 methods
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
45 function obj = Schrodinger2dCurve(g ,order, opSet,p)
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
46 default_arg('opSet',@sbp.D2Variable);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
47 default_arg('c', 1);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
48
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
49 obj.p=p;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
50 obj.c=1;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
51
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
52 m = g.size();
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
53 obj.m_u = m(1);
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
54 obj.m_v = m(2);
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
55 obj.m_tot = g.N();
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
56 obj.grid=g;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
57
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
58 h = g.scaling();
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
59 h_u = h(1);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
60 h_v = h(2);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
61
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
62 % Operators
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
63 ops_u = opSet(obj.m_u, {0, 1}, order);
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
64 ops_v = opSet(obj.m_v, {0, 1}, order);
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
65
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
66 I_u = speye(obj.m_u);
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
67 I_v = speye(obj.m_v);
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
68
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
69 obj.D1_u = ops_u.D1;
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
70 obj.D2_u = ops_u.D2;
698
0122cbe2e6d3 Add hamiltonian
Ylva Rydin <ylva.rydin@telia.com>
parents: 695
diff changeset
71
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
72 H_u = ops_u.H;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
73 Hi_u = ops_u.HI;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
74 e_l_u = ops_u.e_l;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
75 e_r_u = ops_u.e_r;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
76 d1_l_u = ops_u.d1_l;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
77 d1_r_u = ops_u.d1_r;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
78
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
79 obj.D1_v = ops_v.D1;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
80 obj.D2_v = ops_v.D2;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
81 H_v = ops_v.H;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
82 Hi_v = ops_v.HI;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
83 e_l_v = ops_v.e_l;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
84 e_r_v = ops_v.e_r;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
85 d1_l_v = ops_v.d1_l;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
86 d1_r_v = ops_v.d1_r;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
87
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
88 obj.Du = kr(obj.D1_u,I_v);
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
89 obj.Dv = kr(I_u,obj.D1_v);
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
90
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
91 obj.H = kr(H_u,H_v);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
92 obj.Hi = kr(Hi_u,Hi_v);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
93 obj.Hu = kr(H_u,I_v);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
94 obj.Hv = kr(I_u,H_v);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
95 obj.Hiu = kr(Hi_u,I_v);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
96 obj.Hiv = kr(I_u,Hi_v);
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
97
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
98 obj.e_w = kr(e_l_u,I_v);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
99 obj.e_e = kr(e_r_u,I_v);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
100 obj.e_s = kr(I_u,e_l_v);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
101 obj.e_n = kr(I_u,e_r_v);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
102 obj.du_w = kr(d1_l_u,I_v);
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
103 obj.dv_w = (obj.e_w'*obj.Dv)';
694
1157375c678a Add oposit jacobian to penalty term
Ylva Rydin <ylva.rydin@telia.com>
parents: 520
diff changeset
104 obj.du_e = kr(d1_r_u,I_v);
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
105 obj.dv_e = (obj.e_e'*obj.Dv)';
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
106 obj.du_s = (obj.e_s'*obj.Du)';
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
107 obj.dv_s = kr(I_u,d1_l_v);
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
108 obj.du_n = (obj.e_n'*obj.Du)';
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
109 obj.dv_n = kr(I_u,d1_r_v);
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
110
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
111 obj.DUU = sparse(obj.m_tot);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
112 obj.DVV = sparse(obj.m_tot);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
113 obj.ind = grid.funcToMatrix(obj.grid, 1:obj.m_tot);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
114
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
115 obj.m = m;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
116 obj.h = [h_u h_v];
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
117 obj.order = order;
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
118 obj.D = @(t)obj.d_fun(t);
698
0122cbe2e6d3 Add hamiltonian
Ylva Rydin <ylva.rydin@telia.com>
parents: 695
diff changeset
119 obj.Hamiltonian = @(t)obj.h_fun(t);
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
120 obj.variable_update(0);
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
121 end
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
122
698
0122cbe2e6d3 Add hamiltonian
Ylva Rydin <ylva.rydin@telia.com>
parents: 695
diff changeset
123 function [D,n] = d_fun(obj,t)
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
124 % obj.update_vairables(t); In driscretization?
515
ba92b27da5a0 Tried to make skewsym.
Ylva Rydin <ylva.rydin@telia.com>
parents: 500
diff changeset
125 % D = obj.Ji*(-1/2*(obj.b1*obj.Du-obj.b1_u+obj.Du*obj.b1) -
ba92b27da5a0 Tried to make skewsym.
Ylva Rydin <ylva.rydin@telia.com>
parents: 500
diff changeset
126 % 1/2*(obj.b2*obj.Dv - obj.b2_v +obj.Dv*obj.b2) +
ba92b27da5a0 Tried to make skewsym.
Ylva Rydin <ylva.rydin@telia.com>
parents: 500
diff changeset
127 % 1i*obj.c^2*(obj.DUU + obj.DUV + obj.DVU + obj.DVV)); (ols
ba92b27da5a0 Tried to make skewsym.
Ylva Rydin <ylva.rydin@telia.com>
parents: 500
diff changeset
128 % not skew sym disc
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
129
520
f235284e2eb1 changed sign in penalty parameter
Ylva Rydin <ylva.rydin@telia.com>
parents: 519
diff changeset
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);
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
131 end
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
132
701
e89715fe6a6e add imaginary part to closure in hamiltonian
Ylva Rydin <ylva.rydin@telia.com>
parents: 700
diff changeset
133 function [Hamiltonian] = h_fun(obj,t)
e89715fe6a6e add imaginary part to closure in hamiltonian
Ylva Rydin <ylva.rydin@telia.com>
parents: 700
diff changeset
134 Hamiltonian = -sqrt(obj.Ji)*(obj.c^2*(obj.DUU + obj.DUV + obj.DVU + obj.DVV))*sqrt(obj.Ji);
698
0122cbe2e6d3 Add hamiltonian
Ylva Rydin <ylva.rydin@telia.com>
parents: 695
diff changeset
135 end
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
136
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
137 function [D ]= variable_update(obj,t)
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
138 % Metric derivatives
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
139 if(obj.t_up == t)
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
140 return
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
141 else
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
142 ti = parametrization.Ti.points(obj.p{1}(t),obj.p{2}(t),obj.p{3}(t),obj.p{4}(t));
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
143 ti_tau = parametrization.Ti.points(obj.p{5}(t),obj.p{6}(t),obj.p{7}(t),obj.p{8}(t));
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
144 lcoords=points(obj.grid);
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
145 [obj.xm,obj.ym]= ti.map(lcoords(1:obj.m_v:end,1),lcoords(1:obj.m_v,2));
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
146 [x_tau,y_tau]= ti_tau.map(lcoords(1:obj.m_v:end,1),lcoords(1:obj.m_v,2));
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
147 x = reshape(obj.xm,obj.m_tot,1);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
148 y = reshape(obj.ym,obj.m_tot,1);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
149 obj.x = x;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
150 obj.y = y;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
151
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
152 x_tau = reshape(x_tau,obj.m_tot,1);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
153 y_tau = reshape(y_tau,obj.m_tot,1);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
154
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
155 x_u = obj.Du*x;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
156 x_v = obj.Dv*x;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
157 y_u = obj.Du*y;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
158 y_v = obj.Dv*y;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
159
500
83734c26b8e3 Small changes
Ylva Rydin <ylva.rydin@telia.com>
parents: 499
diff changeset
160 J = (x_u.*y_v - x_v.*y_u);
518
4709f2329372 Added J to propertied
Ylva Rydin <ylva.rydin@telia.com>
parents: 517
diff changeset
161 obj.J = spdiags(J, 0, obj.m_tot, obj.m_tot);
500
83734c26b8e3 Small changes
Ylva Rydin <ylva.rydin@telia.com>
parents: 499
diff changeset
162
83734c26b8e3 Small changes
Ylva Rydin <ylva.rydin@telia.com>
parents: 499
diff changeset
163 Ji = spdiags(1./J, 0, obj.m_tot, obj.m_tot);
83734c26b8e3 Small changes
Ylva Rydin <ylva.rydin@telia.com>
parents: 499
diff changeset
164 obj.Ji = Ji;
83734c26b8e3 Small changes
Ylva Rydin <ylva.rydin@telia.com>
parents: 499
diff changeset
165
83734c26b8e3 Small changes
Ylva Rydin <ylva.rydin@telia.com>
parents: 499
diff changeset
166 a11 = Ji* (x_v.^2 + y_v.^2);
83734c26b8e3 Small changes
Ylva Rydin <ylva.rydin@telia.com>
parents: 499
diff changeset
167 a12 = -Ji* (x_u.*x_v + y_u.*y_v);
83734c26b8e3 Small changes
Ylva Rydin <ylva.rydin@telia.com>
parents: 499
diff changeset
168 a22 = Ji* (x_u.^2 + y_u.^2);
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
169
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
170 obj.a11 = a11;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
171 obj.a12 = a12;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
172 obj.a22 = a22;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
173
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
174 % Assemble full operators
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
175 L_12 = spdiags(a12, 0, obj.m_tot, obj.m_tot);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
176 obj.DUV = obj.Du*L_12*obj.Dv;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
177 obj.DVU = obj.Dv*L_12*obj.Du;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
178
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
179
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
180 for i = 1:obj.m_v
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
181 D = obj.D2_u(a11(obj.ind(:,i)));
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
182 p = obj.ind(:,i);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
183 obj.DUU(p,p) = D;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
184 end
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
185
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
186 for i = 1:obj.m_u
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
187 D = obj.D2_v(a22(obj.ind(i,:)));
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
188 p = obj.ind(i,:);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
189 obj.DVV(p,p) = D;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
190 end
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
191
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
192 obj.g_1 = x_v.*y_tau-x_tau.*y_v;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
193 obj.g_2 = x_tau.*y_u - y_tau.*x_u;
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
194
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
195 obj.b1 = spdiags(obj.g_1, 0, obj.m_tot, obj.m_tot);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
196 obj.b2 = spdiags(obj.g_2, 0, obj.m_tot, obj.m_tot);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
197
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
198 obj.b1_u = spdiags(obj.Du*obj.g_1, 0, obj.m_tot, obj.m_tot);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
199 obj.b2_v = spdiags(obj.Dv*obj.g_2, 0, obj.m_tot, obj.m_tot);
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
200 obj.t_up=t;
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
201 end
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
202 end
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
203
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
204 % Closure functions return the opertors applied to the own doamin to close the boundary
516
afff85574ddb Changed the penalty on the first derivative penalty terms, did not solve the problem
Ylva Rydin <ylva.rydin@telia.com>
parents: 515
diff changeset
205
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
206 % Penalty functions return the opertors to force the solution. In the case of an interface it returns the operator applied to the other doamin.
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
207 % boundary is a string specifying the boundary e.g. 'l','r' or 'e','w','n','s'.
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
208 % type is a string specifying the type of boundary condition if there are several.
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
209 % data is a function returning the data that should be applied at the boundary.
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
210 % neighbour_scheme is an instance of Scheme that should be interfaced to.
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
211 % neighbour_boundary is a string specifying which boundary to interface to.
700
de7f665e1d00 add hamiltonian closures
Ylva Rydin <ylva.rydin@telia.com>
parents: 699
diff changeset
212 function [closure, penalty,closureHamiltonian,penaltyHamiltonian] = boundary_condition(obj, boundary,~)
499
f1465e6aeb26 Commit before changing branch
Ylva Rydin <ylva.rydin@telia.com>
parents: 498
diff changeset
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);
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
214 a_t = @(t) spdiag(coeff_t(t));
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
215 a_n = @(t) spdiag(coeff_n(t));
708
acb58769610e fixed error in diffOp
Ylva Rydin <ylva.rydin@telia.com>
parents: 701
diff changeset
216 boundary
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
217
499
f1465e6aeb26 Commit before changing branch
Ylva Rydin <ylva.rydin@telia.com>
parents: 498
diff changeset
218 F = @(t)(s * a_n(t)*d_n' + s * a_t(t) *d_t')';
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
219 tau1 = 1;
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
220 a = @(t)spdiag(g(t));
517
7a091a3527df sign change in SAT-TERM
Ylva Rydin <ylva.rydin@telia.com>
parents: 516
diff changeset
221 tau2 = @(t) (1*s*a(t))/2;
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
222
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
223 penalty_parameter_1 = @(t) 1*1i*halfnorm_inv_n*halfnorm_inv_t*F(t)*e'*halfnorm_t*e;
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
224 penalty_parameter_2 = @(t) halfnorm_inv_n*e*tau2(t);
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
225
515
ba92b27da5a0 Tried to make skewsym.
Ylva Rydin <ylva.rydin@telia.com>
parents: 500
diff changeset
226 closure = @(t) sqrt(obj.Ji)*(obj.c^2 * penalty_parameter_1(t)*e' + penalty_parameter_2(t)*e')*sqrt(obj.Ji);
520
f235284e2eb1 changed sign in penalty parameter
Ylva Rydin <ylva.rydin@telia.com>
parents: 519
diff changeset
227 penalty = @(t) -sqrt(obj.Ji)*(obj.c^2 * penalty_parameter_1(t)*e' + penalty_parameter_2(t)*e')*sqrt(obj.Ji);
700
de7f665e1d00 add hamiltonian closures
Ylva Rydin <ylva.rydin@telia.com>
parents: 699
diff changeset
228
701
e89715fe6a6e add imaginary part to closure in hamiltonian
Ylva Rydin <ylva.rydin@telia.com>
parents: 700
diff changeset
229 closureHamiltonian = @(t) 1i*sqrt(obj.Ji)*(obj.c^2 * penalty_parameter_1(t)*e')*sqrt(obj.Ji);
e89715fe6a6e add imaginary part to closure in hamiltonian
Ylva Rydin <ylva.rydin@telia.com>
parents: 700
diff changeset
230 penaltyHamiltonian = @(t) -1i*sqrt(obj.Ji)*(obj.c^2 * penalty_parameter_1(t)*e')*sqrt(obj.Ji);
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
231
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
232 end
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
233
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
234 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary)
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
235 % u denotes the solution in the own domain
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
236 % v denotes the solution in the neighbour domain
694
1157375c678a Add oposit jacobian to penalty term
Ylva Rydin <ylva.rydin@telia.com>
parents: 520
diff changeset
237 [e_u, d_n_u, d_t_u, coeff_t_u, coeff_n_u,s_u, halfnorm_inv_u_n, halfnorm_inv_u_t, halfnorm_u_t,gamm_u,Ji_u] = obj.get_boundary_ops(boundary);
1157375c678a Add oposit jacobian to penalty term
Ylva Rydin <ylva.rydin@telia.com>
parents: 520
diff changeset
238 [e_v, d_n_v, d_t_v, coeff_t_v, coeff_n_v s_v, halfnorm_inv_v_n, halfnorm_inv_v_t, halfnorm_v_t,gamm_v,Ji_v] = neighbour_scheme.get_boundary_ops(neighbour_boundary);
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
239
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
240 a_n_u = @(t) spdiag(coeff_n_u(t));
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
241 a_t_u = @(t) spdiag(coeff_t_u(t));
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
242 a_n_v = @(t) spdiag(coeff_n_v(t));
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
243 a_t_v = @(t) spdiag(coeff_t_v(t));
499
f1465e6aeb26 Commit before changing branch
Ylva Rydin <ylva.rydin@telia.com>
parents: 498
diff changeset
244
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
245
499
f1465e6aeb26 Commit before changing branch
Ylva Rydin <ylva.rydin@telia.com>
parents: 498
diff changeset
246 F_u = @(t)(a_n_u(t)*d_n_u' + a_t_u(t)*d_t_u')';
f1465e6aeb26 Commit before changing branch
Ylva Rydin <ylva.rydin@telia.com>
parents: 498
diff changeset
247 F_v = @(t)(a_n_v(t)*d_n_v' + a_t_v(t)*d_t_v')';
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
248
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
249 a = @(t)spdiag(gamm_u(t));
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
250
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
251 tau = s_u*1*1i/2;
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
252 sig = -s_u*1*1i/2;
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
253 gamm = @(t) (-s_u*a(t))/2;
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
254
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
255 penalty_parameter_1 = @(t) halfnorm_inv_u_n*(tau*halfnorm_inv_u_t*F_u(t)*e_u'*halfnorm_u_t*e_u);
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
256 penalty_parameter_2 = @(t) halfnorm_inv_u_n * e_u * (sig );
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
257 penalty_parameter_3 = @(t) halfnorm_inv_u_n * e_u * (gamm(t) );
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
258
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
259
708
acb58769610e fixed error in diffOp
Ylva Rydin <ylva.rydin@telia.com>
parents: 701
diff changeset
260 closure =@(t) sqrt(Ji_u)*obj.c^2 * ( penalty_parameter_1(t)*e_u'...
acb58769610e fixed error in diffOp
Ylva Rydin <ylva.rydin@telia.com>
parents: 701
diff changeset
261 + penalty_parameter_2(t)*F_u(t)' + penalty_parameter_3(t)*e_u')*sqrt(Ji_u);
acb58769610e fixed error in diffOp
Ylva Rydin <ylva.rydin@telia.com>
parents: 701
diff changeset
262 penalty =@(t) sqrt(Ji_u)*obj.c^2 * ( -penalty_parameter_1(t)*e_v'...
acb58769610e fixed error in diffOp
Ylva Rydin <ylva.rydin@telia.com>
parents: 701
diff changeset
263 - penalty_parameter_2(t)*F_v(t)' - penalty_parameter_3(t)*e_v')*sqrt(Ji_v);
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
264 end
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
265
497
4905446f165e Added 2D interface to shrodinger
Ylva Rydin <ylva.rydin@telia.com>
parents: 493
diff changeset
266
695
ba0d31ce4121 Changed jacobian at right side of the penalty term in 2D, seems like it is working
Ylva Rydin <ylva.rydin@telia.com>
parents: 694
diff changeset
267 function [e, d_n, d_t, coeff_t,coeff_n, s, halfnorm_inv_n, halfnorm_inv_t, halfnorm_t,g,Ji] = get_boundary_ops(obj, boundary)
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
268
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
269 % gridMatrix = zeros(obj.m(2),obj.m(1));
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
270 % gridMatrix(:) = 1:numel(gridMatrix);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
271
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
272 ind = grid.funcToMatrix(obj.grid, 1:prod(obj.m));
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
273
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
274 switch boundary
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
275 case 'w'
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
276 e = obj.e_w;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
277 d_n = obj.du_w;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
278 d_t = obj.dv_w;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
279 s = -1;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
280
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
281 I = ind(1,:);
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
282 coeff_t = @(t)obj.a12(I);
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
283 coeff_n =@(t) obj.a11(I);
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
284 g = @(t)obj.g_1(I);
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
285 case 'e'
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
286 e = obj.e_e;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
287 d_n = obj.du_e;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
288 d_t = obj.dv_e;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
289 s = 1;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
290
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
291 I = ind(end,:);
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
292 coeff_t = @(t)obj.a12(I);
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
293 coeff_n = @(t)obj.a11(I);
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
294 g = @(t)obj.g_1(I);
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
295 case 's'
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
296 e = obj.e_s;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
297 d_n = obj.dv_s;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
298 d_t = obj.du_s;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
299 s = -1;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
300
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
301 I = ind(:,1)';
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
302 coeff_t = @(t)obj.a12(I);
499
f1465e6aeb26 Commit before changing branch
Ylva Rydin <ylva.rydin@telia.com>
parents: 498
diff changeset
303 coeff_n = @(t)obj.a22(I);
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
304 g = @(t)obj.g_2(I);
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
305 case 'n'
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
306 e = obj.e_n;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
307 d_n = obj.dv_n;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
308 d_t = obj.du_n;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
309 s = 1;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
310
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
311 I = ind(:,end)';
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
312 coeff_t = @(t)obj.a12(I);
499
f1465e6aeb26 Commit before changing branch
Ylva Rydin <ylva.rydin@telia.com>
parents: 498
diff changeset
313 coeff_n = @(t)obj.a22(I);
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
314 g = @(t)obj.g_2(I);
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
315 otherwise
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
316 error('No such boundary: boundary = %s',boundary);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
317 end
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
318
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
319 switch boundary
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
320 case {'w','e'}
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
321 halfnorm_inv_n = obj.Hiu;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
322 halfnorm_inv_t = obj.Hiv;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
323 halfnorm_t = obj.Hv;
491
26125cfefe11 Schrodinger 2d runs without exploding with fixed coordinates
Ylva Rydin <ylva.rydin@telia.com>
parents: 490
diff changeset
324
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
325 case {'s','n'}
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
326 halfnorm_inv_n = obj.Hiv;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
327 halfnorm_inv_t = obj.Hiu;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
328 halfnorm_t = obj.Hu;
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
329 end
694
1157375c678a Add oposit jacobian to penalty term
Ylva Rydin <ylva.rydin@telia.com>
parents: 520
diff changeset
330 Ji = obj.Ji;
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
331 end
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
332
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
333 function N = size(obj)
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
334 N = prod(obj.m);
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
335 end
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
336 end
498
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
337 methods(Static)
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
338 % Calculates the matrcis need for the inteface coupling between boundary bound_u of scheme schm_u
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
339 % and bound_v of scheme schm_v.
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
340 % [uu, uv, vv, vu] = inteface_couplong(A,'r',B,'l')
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
341 function [uu, uv, vv, vu] = interface_coupling(schm_u,bound_u,schm_v,bound_v)
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
342 [uu,uv] = schm_u.interface(bound_u,schm_v,bound_v);
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
343 [vv,vu] = schm_v.interface(bound_v,schm_u,bound_u);
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
344 end
324c927d8b1d chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents: 497
diff changeset
345 end
490
b13d44271ead Schrodinger2dCurve Added
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
346 end