changeset 645:a5307adc6177 feature/d1_staggered

Add diracDiscr.m. Noticed bug if source is on grid point.
author Martin Almquist <malmquist@stanford.edu>
date Tue, 14 Nov 2017 14:28:35 -0800
parents dc2918fb104d
children 0990765e3e4d
files diracDiscr.m
diffstat 1 files changed, 64 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/diracDiscr.m	Tue Nov 14 14:28:35 2017 -0800
@@ -0,0 +1,64 @@
+function ret = diracDiscr(x_0in , x , m_order, s_order, H)
+
+fnorm = diag(H);
+eta = abs(x-x_0in);
+h = x(2)-x(1);
+tot = m_order+s_order;
+S = [];
+M = [];
+poss = find(tot*h/2>eta);
+
+% Use first tot grid points
+if length(poss)<tot && eta(end)>eta(1)
+    index=1:tot;
+    pol=(x(1:tot)-x(1))/(x(tot)-x(1));
+    x_0=(x_0in-x(1))/(x(tot)-x(1));
+    norm=fnorm(1:tot)/h;
+
+% Use last tot grid points
+elseif length(poss)<tot && eta(end)<eta(1)
+    index = length(x)-tot:tot;
+    pol = (x(end-tot:end)-x(end-tot))/(x(end)-x(end-tot));
+    norm = fnorm(end-tot:end)/h;
+    x_0 = (x_0in-x(end-tot))/(x(end)-x(end-tot));
+
+% Interior
+else    
+    pol = (x(poss)-x(poss(1)))/(x(poss(end))-x(poss(1)));
+    x_0 = (x_0in-x(poss(1)))/(x(poss(end))-x(poss(1)));
+    norm = fnorm(poss)/h;
+    index = poss;
+end
+
+h_pol = pol(2)-pol(1);
+b = zeros(m_order+s_order,1);
+
+for i = 1:m_order
+    b(i,1) = x_0^(i-1);
+end
+
+for i = 1:(m_order+s_order)
+    for j = 1:m_order
+        M(j,i) = pol(i)^(j-1)*h_pol*norm(i);
+    end
+end
+
+for i = 1:(m_order+s_order)
+    for j = 1:s_order
+        S(j,i) = (-1)^(i-1)*pol(i)^(j-1);
+    end
+end
+
+
+A = [M;S];
+
+d = A\b;
+ret = x*0;
+ret(index) = d/h*h_pol;
+end
+
+
+
+
+
+