annotate diracDiscrCurve.m @ 1238:dea852e85b77 feature/dirac_discr

Merge with refactorization of computing source indices
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Tue, 19 Nov 2019 16:06:03 -0800
parents 8a456f6e54cc
children 1fbd93f24bed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1230
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
1 function d = diracDiscrCurve(x_s, g, m_order, s_order, order, opSet)
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
2 % 2-dimensional delta function for single-block curvilinear grid
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
3 % x_s: source point coordinate vector, e.g. [x, y] or [x, y, z].
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
4 % g: single-block grid containing the source
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
5 % m_order: Number of moment conditions
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
6 % s_order: Number of smoothness conditions
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
7 % order: Order of SBP derivative approximations
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
8 % opSet: Cell array of function handle to opSet generator
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
9
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
10 default_arg('order', m_order);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
11 default_arg('opSet', {@sbp.D2Variable, @sbp.D2Variable});
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
12
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
13 dim = length(x_s);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
14 assert(dim == 2, 'diracDiscrCurve: Only implemented for 2d.');
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
15 assert(isa(g, 'grid.Curvilinear'));
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
16
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
17 m = g.size();
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
18 m_u = m(1);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
19 m_v = m(2);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
20 ops_u = opSet{1}(m_u, {0, 1}, order);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
21 ops_v = opSet{2}(m_v, {0, 1}, order);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
22 I_u = speye(m_u);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
23 I_v = speye(m_v);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
24
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
25 D1_u = ops_u.D1;
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
26 H_u = ops_u.H;
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
27
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
28 D1_v = ops_v.D1;
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
29 H_v = ops_v.H;
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
30
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
31 Du = kr(D1_u,I_v);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
32 Dv = kr(I_u,D1_v);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
33
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
34 u = ops_u.x;
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
35 v = ops_v.x;
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
36
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
37 % Compute Jacobian
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
38 coords = g.points();
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
39 x = coords(:,1);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
40 y = coords(:,2);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
41
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
42 x_u = Du*x;
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
43 x_v = Dv*x;
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
44 y_u = Du*y;
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
45 y_v = Dv*y;
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
46
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
47 J = x_u.*y_v - x_v.*y_u;
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
48
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
49 % Find approximate logical coordinates of point source
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
50 [U, V] = meshgrid(u, v);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
51 U_interp = scatteredInterpolant(coords, U(:));
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
52 V_interp = scatteredInterpolant(coords, V(:));
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
53 uS = U_interp(x_s);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
54 vS = V_interp(x_s);
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
55
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
56 d = (1./J).*diracDiscr([uS, vS], {u, v}, m_order, s_order, {H_u, H_v});
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
57
8a456f6e54cc Add diracDiscrCurve.m
Martin Almquist <malmquist@stanford.edu>
parents:
diff changeset
58 end