From 5ab9e5d5277da5b7d380459354a3c8b1269db8c8 Mon Sep 17 00:00:00 2001 From: "lisa.pizzo" Date: Tue, 13 Jan 2026 20:01:21 +0100 Subject: [PATCH] . --- Sheet6/flux_jump.m | 10 ++++++++++ Sheet6/h_adapt.m | 10 ++++++++++ Sheet6/r_adapt.m | 11 +++++++++++ 3 files changed, 31 insertions(+) create mode 100644 Sheet6/flux_jump.m create mode 100644 Sheet6/h_adapt.m create mode 100644 Sheet6/r_adapt.m diff --git a/Sheet6/flux_jump.m b/Sheet6/flux_jump.m new file mode 100644 index 0000000..7e12564 --- /dev/null +++ b/Sheet6/flux_jump.m @@ -0,0 +1,10 @@ +function eta = flux_jump(x,u,lambda) +N = length(x); +eta = zeros(N,1); + +for j = 2:N-1 + ul = (u(j)-u(j-1))/(x(j)-x(j-1)); %left derivative + ur = (u(j+1)-u(j))/(x(j+1)-x(j)); %right derivative + eta(j) = abs(lambda(x(j))*ur - lambda(x(j))*ul); %error indicator +end +end diff --git a/Sheet6/h_adapt.m b/Sheet6/h_adapt.m new file mode 100644 index 0000000..5b760a0 --- /dev/null +++ b/Sheet6/h_adapt.m @@ -0,0 +1,10 @@ +function xnew = h_adapt(x,eta,theta) %eta is local error +xnew = x(1); +for i = 1:length(x)-1 + if eta(i) > theta*max(eta) %if local error is large, inster a midpoint + xnew = [xnew, (x(i)+x(i+1))/2]; + end + xnew = [xnew, x(i+1)]; %if local error is small, keep the element unchanged +end +xnew = unique(xnew); +end diff --git a/Sheet6/r_adapt.m b/Sheet6/r_adapt.m new file mode 100644 index 0000000..bab7ee1 --- /dev/null +++ b/Sheet6/r_adapt.m @@ -0,0 +1,11 @@ +function xnew = r_adapt(x,eta_elem) +N = length(x); +w = abs(eta_elem) + 1e-10; %error based monitor function +s = zeros(N,1); +for i = 2:N + s(i) = s(i-1) + w(i-1); %cumulative sum +end +s = s / s(end); % normalize to [0,1] +s_new = linspace(0,1,N)'; +xnew = interp1(s, x, s_new, 'linear'); +end