changeset 866:dda1caa55eaf bcSetupExperiment

Merge with feature/grids
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 26 Jul 2018 09:27:17 -0700
parents 1cc5a0d26453 (current diff) c7c622e26a53 (diff)
children d634d4deb263
files +multiblock/multiblockgrid.m +multiblock/stitchSchemes.m
diffstat 2 files changed, 0 insertions(+), 162 deletions(-) [+]
line wrap: on
line diff
--- a/+multiblock/multiblockgrid.m	Wed Jul 25 15:43:26 2018 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-% Creates a multi block square grid with defined boundary conditions.
-%   x,y defines the grid lines. Rember to think of the indexing as a matrix. Order matters!
-%   bc is a struct defining the boundary conditions on each side of the block.
-%       bc.w = {'dn',[function or value]}
-function [block,conn,bound,ms] = multiblockgrid(x,y,mx,my,bc)
-    n = length(y)-1; % number of blocks in the y direction.
-    m = length(x)-1; % number of blocks in the x direction.
-    N = n*m; % number of blocks
-
-    if ~issorted(x)
-        error('The elements of x seem to be in the wrong order');
-    end
-    if ~issorted(flip(y))
-        error('The elements of y seem to be in the wrong order');
-    end
-    % y = sort(y,'descend');
-
-    % Dimensions of blocks and number of points
-    block = cell(n,m);
-    for i = 1:n
-        for j = 1:m
-            block{i,j} = {
-                {x(j),x(j+1)}, {y(i+1),y(i)};
-            };
-
-            ms{i,j} = [mx(i),my(j)];
-        end
-    end
-
-    % Interface couplings
-    conn = cell(N,N);
-    for i = 1:n
-        for j = 1:m
-            I = flat_index(n,i,j);
-            if i < n
-                J = flat_index(n,i+1,j);
-                conn{I,J} = {'s','n'};
-            end
-
-            if j < m
-                J = flat_index(n,i,j+1);
-                conn{I,J} = {'e','w'};
-            end
-        end
-    end
-
-
-    % Boundary conditions
-    bound = cell(n,m);
-    for i = 1:n
-        if isfield(bc,'w')
-            bound{i,1}.w = bc.w;
-        end
-
-        if isfield(bc,'e')
-            bound{i,n}.e = bc.e;
-        end
-    end
-
-    for j = 1:m
-        if isfield(bc,'n')
-            bound{1,j}.n = bc.n;
-        end
-
-        if isfield(bc,'s')
-            bound{m,j}.s = bc.s;
-        end
-    end
-end
-
--- a/+multiblock/stitchSchemes.m	Wed Jul 25 15:43:26 2018 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-% Stitch schemes together given connection matrix and BC vector.
-%     schmHand  - function_handle to a Scheme constructor
-%     order     - order of accuracy
-%     schmParam - cell array of extra parameters sent to each Scheme stored as cell arrays
-%     blocks    - block definitions, On whatever form the scheme expects.
-%     ms        - grid points in each direction for each block. Ex {[10,10], [10, 20]}
-%     conn      - connection matrix
-%     bound     - boundary condition vector, array of structs with fields w,e,s,n
-%                 each field with a parameter array that is sent to schm.boundary_condition
-%
-% Output parameters are cell arrays and cell matrices.
-%
-% Ex: [schms, D, H] = stitchSchemes(schmHand, order, schmParam, blocks, ms, conn, bound)
-function [schms, D, H] = stitchSchemes(schmHand, order, schmParam, grids, conn, bound)
-    default_arg('schmParam',[]);
-
-    n_blocks = numel(grids);
-
-    % Creating Schemes
-    for i = 1:n_blocks
-        if isempty(schmParam);
-            schms{i} = schmHand(grids{i},order,[]);
-        elseif ~iscell(schmParam)
-            param = schmParam(i);
-            schms{i} = schmHand(grids{i},order,param);
-        else
-            param = schmParam{i};
-            if iscell(param)
-                schms{i} = schmHand(grids{i},order,param{:});
-            else
-                schms{i} = schmHand(grids{i},order,param);
-            end
-        end
-
-        % class(schmParam)
-        % class(ms)
-        % class(blocks)
-        % class(schmParam{i})
-        % class(ms)
-
-
-    end
-
-
-    % Total norm
-    H = cell(n_blocks,n_blocks);
-    for i = 1:n_blocks
-        H{i,i} = schms{i}.H;
-    end
-
-    %% Total system matrix
-
-    % Differentiation terms
-    D = cell(n_blocks,n_blocks);
-    for i = 1:n_blocks
-        D{i,i} = schms{i}.D;
-    end
-
-    % Boundary penalty terms
-    for i = 1:n_blocks
-        if ~isstruct(bound{i})
-            continue
-        end
-
-        fn = fieldnames(bound{i});
-        for j = 1:length(fn);
-            bc = bound{i}.(fn{j});
-            if isempty(bc)
-                continue
-            end
-
-            [closure, ~] = schms{i}.boundary_condition(fn{j},bc{:});
-            D{i,i} = D{i,i}+closure;
-        end
-    end
-
-    % Interface penalty terms
-    for i = 1:n_blocks
-        for j = 1:n_blocks
-            intf = conn{i,j};
-            if isempty(intf)
-                continue
-            end
-
-            [uu,uv,vv,vu] = schms{i}.interface_coupling(schms{i},intf{1},schms{j},intf{2});
-            D{i,i} = D{i,i} + uu;
-            D{i,j} = uv;
-            D{j,j} = D{j,j} + vv;
-            D{j,i} = vu;
-        end
-    end
-end
\ No newline at end of file