function [M] = upscale(M_2h) % This function interpolates a staggered coarse grid and creates a staggered fine % grid. We transfer the result for the U,V grid points to the finer grid. s = size(M_2h); rows = s(1) ; cols = s(2); new_rows = (rows - 1)*2 + 1; new_cols = (cols - 1)*2 + 1; M = zeros([new_rows,new_cols]); %=========================================== % Transfer the U M(4:4:new_rows-1,1:4:new_cols) = M_2h(2:2:rows-1,1:2:cols); % Interpolate I for i = 2:4:new_rows -2 for j= 1:4:new_cols if (i == 2) M(i,j) = .5*(M(i+2,j)); else M(i,j) = .5*(M(i-2,j) + M(i+2,j)); end end end % Interpolate II for i=2:2:new_rows-1 for j=3:4:new_cols-2 M(i,j) = .5*(M(i,j-2) + M(i,j+2)); end end %=========================================== % Transfer the V M(1:4:new_rows,4:4:new_cols-1) = M_2h(1:2:rows,2:2:cols-1); % Interpolate I for i=1:4:new_rows for j=2:4:new_cols-2 if (j == 2) M(i,j) = .5*M(i,j+2); else M(i,j) = .5*(M(i,j-2) + M(i,j+2)); end end end %Interpolate 2 for i=3:4:new_rows-2 for j=2:2:new_cols M(i,j) = .5*(M(i-2,j) + M(i+2,j)); end end