Mercurial > repos > public > sbplib
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 |