comparison +multiblock/DiffOp.m @ 903:703183ed8c8b feature/utux2D

Include interface type in multiblock.DiffOp, passed to all scheme.interface methods.
author Martin Almquist <malmquist@stanford.edu>
date Thu, 22 Nov 2018 22:01:58 -0800
parents c360bbecf260
children c0652621bd69
comparison
equal deleted inserted replaced
752:0be9b4d6737b 903:703183ed8c8b
8 8
9 blockmatrixDiv 9 blockmatrixDiv
10 end 10 end
11 11
12 methods 12 methods
13 function obj = DiffOp(doHand, grid, order, doParam) 13 function obj = DiffOp(doHand, grid, order, doParam, interfaceType)
14 % doHand -- may either be a function handle or a cell array of 14 % doHand -- may either be a function handle or a cell array of
15 % function handles for each grid. The function handle(s) 15 % function handles for each grid. The function handle(s)
16 % should be on the form do = doHand(grid, order, ...) 16 % should be on the form do = doHand(grid, order, ...)
17 % Additional parameters for each doHand may be provided in 17 % Additional parameters for each doHand may be provided in
18 % the doParam input. 18 % the doParam input.
22 % for each block. If it is a cell array with length equal 22 % for each block. If it is a cell array with length equal
23 % to the number of blocks then each element is sent to the 23 % to the number of blocks then each element is sent to the
24 % corresponding function handle as extra parameters: 24 % corresponding function handle as extra parameters:
25 % doHand(..., doParam{i}{:}) Otherwise doParam is sent as 25 % doHand(..., doParam{i}{:}) Otherwise doParam is sent as
26 % extra parameters to all doHand: doHand(..., doParam{:}) 26 % extra parameters to all doHand: doHand(..., doParam{:})
27 %
28 % interfaceType -- nBlocks x nBlocks cell array of types that specify
29 % that particular block-coupling is handled. (Could
30 % be non-conforming interface, etc.)
31 % Default: empty cell array.
27 default_arg('doParam', []) 32 default_arg('doParam', [])
28 33
29 [getHand, getParam] = parseInput(doHand, grid, doParam); 34 [getHand, getParam] = parseInput(doHand, grid, doParam);
30 35
31 nBlocks = grid.nBlocks(); 36 nBlocks = grid.nBlocks();
37 default_arg('interfaceType', cell(nBlocks, nBlocks));
32 38
33 obj.order = order; 39 obj.order = order;
34 40
35 % Create the diffOps for each block 41 % Create the diffOps for each block
36 obj.diffOps = cell(1, nBlocks); 42 obj.diffOps = cell(1, nBlocks);
64 intf = grid.connections{i,j}; 70 intf = grid.connections{i,j};
65 if isempty(intf) 71 if isempty(intf)
66 continue 72 continue
67 end 73 end
68 74
69 75 [ii, ij] = obj.diffOps{i}.interface(intf{1}, obj.diffOps{j}, intf{2}, interfaceType{i,j});
70 [ii, ij] = obj.diffOps{i}.interface(intf{1}, obj.diffOps{j}, intf{2});
71 D{i,i} = D{i,i} + ii; 76 D{i,i} = D{i,i} + ii;
72 D{i,j} = D{i,j} + ij; 77 D{i,j} = D{i,j} + ij;
73 78
74 [jj, ji] = obj.diffOps{j}.interface(intf{2}, obj.diffOps{i}, intf{1}); 79 [jj, ji] = obj.diffOps{j}.interface(intf{2}, obj.diffOps{i}, intf{1}, interfaceType{j,i});
75 D{j,j} = D{j,j} + jj; 80 D{j,j} = D{j,j} + jj;
76 D{j,i} = D{j,i} + ji; 81 D{j,i} = D{j,i} + ji;
77 end 82 end
78 end 83 end
79 obj.D = blockmatrix.toMatrix(D); 84 obj.D = blockmatrix.toMatrix(D);