view +blockmatrix/fromMatrix.m @ 1012:1e437c9e5132 feature/advectionRV

Create residual viscosity package +rv and generalize the ResidualViscosity class - Generalize residual viscosity, by passing user-defined flux and calculating the time derivative outside of the update. - Create separate RungekuttaRV specifically using interior RV updates - Separate the artifical dissipation operator from the scheme AdvectionRV1D so that the same scheme can be reused for creating the diff op used by the ResidualViscosity class
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Wed, 05 Dec 2018 13:44:10 +0100
parents 3974dccff55b
children
line wrap: on
line source

function bm = fromMatrix(A, div)
    d1 = div{1};
    d2 = div{2};
    [n, m] = size(A);
    if n ~= sum(d1) || m ~= sum(d2)
        error('blockmatrix:fromMatrix:NonMatchingDim','The dimensions in div does not sum to the dimensions in A.');
    end

    bm = cell(length(d1), length(d2));
    I = 1;
    for i = 1:length(d1)
        J = 1;
        for j = 1:length(d2)
            Asub = A(I:(I + d1(i)-1), J:(J + d2(j)-1));
            if nnz(Asub) == 0
                bm{i,j} = sparse(d1(i), d2(j));
            else
                bm{i,j} = Asub;
            end
            J = J + d2(j);
        end
        I = I + d1(i);
    end
end