comparison +multiblock/DiffOp.m @ 971:e54c2f54dbfe feature/getBoundaryOperator

Merge with feature/poroelastic. Use only the changes made to multiblock.DiffOp and scheme.Elastic2dVariable. DiffOp.getBoundaryOperator/Quadrature now use scheme methods instead of propeties.
author Martin Almquist <malmquist@stanford.edu>
date Tue, 25 Dec 2018 07:50:07 +0100
parents adae8063ea2f
children
comparison
equal deleted inserted replaced
957:2412f407749a 971:e54c2f54dbfe
127 ops = sparse2cell(op, obj.NNN); 127 ops = sparse2cell(op, obj.NNN);
128 end 128 end
129 129
130 % Get a boundary operator specified by opName for the given boundary/BoundaryGroup 130 % Get a boundary operator specified by opName for the given boundary/BoundaryGroup
131 function op = getBoundaryOperator(obj, opName, boundary) 131 function op = getBoundaryOperator(obj, opName, boundary)
132 blockmatrixDiv = obj.blockmatrixDiv{1};
133
132 switch class(boundary) 134 switch class(boundary)
133 case 'cell' 135 case 'cell'
134 localOpName = [opName '_' boundary{2}];
135 blockId = boundary{1}; 136 blockId = boundary{1};
136 localOp = obj.diffOps{blockId}.(localOpName); 137 localOp = obj.diffOps{blockId}.getBoundaryOperator(opName, boundary{2});
137 138
138 div = {obj.blockmatrixDiv{1}, size(localOp,2)}; 139 div = {blockmatrixDiv, size(localOp,2)};
139 blockOp = blockmatrix.zero(div); 140 blockOp = blockmatrix.zero(div);
140 blockOp{blockId,1} = localOp; 141 blockOp{blockId,1} = localOp;
141 op = blockmatrix.toMatrix(blockOp); 142 op = blockmatrix.toMatrix(blockOp);
142 return 143 return
143 case 'multiblock.BoundaryGroup' 144 case 'multiblock.BoundaryGroup'
144 op = sparse(size(obj.D,1),0); 145 op = sparse(sum(blockmatrixDiv),0);
145 for i = 1:length(boundary) 146 for i = 1:length(boundary)
146 op = [op, obj.getBoundaryOperator(opName, boundary{i})]; 147 op = [op, obj.getBoundaryOperator(opName, boundary{i})];
147 end 148 end
148 otherwise 149 otherwise
149 error('Unknown boundary indentifier') 150 error('Unknown boundary indentifier')
150 end 151 end
151 end 152 end
152 153
154 % Get square matrix that integrates the solution restricted to a boundary
153 function op = getBoundaryQuadrature(obj, boundary) 155 function op = getBoundaryQuadrature(obj, boundary)
154 opName = 'H';
155 switch class(boundary) 156 switch class(boundary)
156 case 'cell' 157 case 'cell'
157 localOpName = [opName '_' boundary{2}];
158 blockId = boundary{1}; 158 blockId = boundary{1};
159 op = obj.diffOps{blockId}.(localOpName); 159 op = obj.diffOps{blockId}.getBoundaryQuadrature(boundary{2});
160
161 return 160 return
162 case 'multiblock.BoundaryGroup' 161 case 'multiblock.BoundaryGroup'
163 N = length(boundary); 162 N = length(boundary);
164 H_bm = cell(N,N); 163 H_bm = cell(N,N);
165 for i = 1:N 164 for i = 1:N