Mercurial > repos > public > sbplib
comparison +multiblock/DiffOp.m @ 1062:e512714fb890 feature/laplace_curvilinear_test
Merge with feature/getBoundaryOp
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Mon, 14 Jan 2019 18:14:44 -0800 |
parents | a3accd2f1283 |
children | 9c8ed00732fd |
comparison
equal
deleted
inserted
replaced
988:a72038b1f709 | 1062:e512714fb890 |
---|---|
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 |
153 function op = getBoundaryQuadrature(obj, boundary) | 154 function op = getBoundaryQuadrature(obj, boundary) |
154 opName = 'H'; | |
155 switch class(boundary) | 155 switch class(boundary) |
156 case 'cell' | 156 case 'cell' |
157 localOpName = [opName '_' boundary{2}]; | |
158 blockId = boundary{1}; | 157 blockId = boundary{1}; |
159 op = obj.diffOps{blockId}.(localOpName); | 158 op = obj.diffOps{blockId}.getBoundaryQuadrature(boundary{2}); |
160 | |
161 return | 159 return |
162 case 'multiblock.BoundaryGroup' | 160 case 'multiblock.BoundaryGroup' |
163 N = length(boundary); | 161 N = length(boundary); |
164 H_bm = cell(N,N); | 162 H_bm = cell(N,N); |
165 for i = 1:N | 163 for i = 1:N |