0001 function [index_simp]=edge_refined_elem_mapper( mdl_coarse, mdl_dense)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 index_simp = eidors_obj('get-cache', mdl_dense, 'index_simp', mdl_coarse);
0013 if ~isempty(index_simp)
0014 eidors_msg('edge_refined_elem_mapper: using cached value', 2);
0015 return
0016 end
0017
0018 vtx_coarse = mdl_coarse.nodes;
0019 simp_coarse = mdl_coarse.elems;
0020 vtx_dense = mdl_dense.nodes;
0021 simp_dense = mdl_dense.elems;
0022
0023 eidors_msg('edge_refined_elem_mapper: lookup_bld',4);
0024 [lookup]=lookup_bld(simp_coarse,simp_dense);
0025
0026 eidors_msg('edge_refined_elem_mapper: center_of_simps',4);
0027 [center_simp_dense]=center_of_simps(simp_dense, vtx_dense);
0028
0029 eidors_msg('edge_refined_elem_mapper: midpoints',4);
0030 [vtx_midpoints_coarse]=midpoints(vtx_coarse,simp_coarse);
0031
0032 eidors_msg('edge_refined_elem_mapper: calc_h_refinement_centers',4);
0033 [center_h_refined_simps]=calc_h_refinement_centers(simp_coarse,vtx_coarse,vtx_midpoints_coarse);
0034
0035 eidors_msg('edge_refined_elem_mapper: calc_simp_index',4);
0036 [index_simp] = calc_simp_index(simp_dense,center_simp_dense,center_h_refined_simps,lookup);
0037
0038
0039 eidors_obj('set-cache', mdl_dense, 'index_simp', index_simp, mdl_coarse);
0040 eidors_msg('edge_refined_elem_mapper: setting cached value', 2);
0041
0042
0043 function [lookup]=lookup_bld(simp_coarse,simp_dense);
0044
0045
0046
0047
0048
0049
0050 a=size(simp_coarse,1);
0051 b=size(simp_dense,1);
0052
0053 lookup=zeros(b,1);
0054
0055 x=1;
0056 y=8;
0057
0058 for i=1:a;
0059
0060 for ii=x:y;
0061
0062 lookup(ii)=i;
0063
0064 ii=ii+1;
0065
0066 end
0067
0068 x=x+8;
0069 y=y+8;
0070
0071 end
0072
0073
0074 function [vtx_midpoints]=midpoints(vtx,simp);
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084 vtx_midpoints=zeros(size(simp,1),18);
0085
0086 for i=1:size(simp,1);
0087
0088
0089 x1=vtx(simp(i,1),1);
0090 y1=vtx(simp(i,1),2);
0091 z1=vtx(simp(i,1),3);
0092 x2=vtx(simp(i,2),1);
0093 y2=vtx(simp(i,2),2);
0094 z2=vtx(simp(i,2),3);
0095
0096
0097 x_mid=((x1+x2)/2);
0098 y_mid=((y1+y2)/2);
0099 z_mid=((z1+z2)/2);
0100
0101 vtx_midpoints(i,1)=x_mid;
0102 vtx_midpoints(i,2)=y_mid;
0103 vtx_midpoints(i,3)=z_mid;
0104
0105
0106 x1=vtx(simp(i,1),1);
0107 y1=vtx(simp(i,1),2);
0108 z1=vtx(simp(i,1),3);
0109 x2=vtx(simp(i,3),1);
0110 y2=vtx(simp(i,3),2);
0111 z2=vtx(simp(i,3),3);
0112
0113 x_mid=((x1+x2)/2);
0114 y_mid=((y1+y2)/2);
0115 z_mid=((z1+z2)/2);
0116
0117 vtx_midpoints(i,4)=x_mid;
0118 vtx_midpoints(i,5)=y_mid;
0119 vtx_midpoints(i,6)=z_mid;
0120
0121
0122 x1=vtx(simp(i,1),1);
0123 y1=vtx(simp(i,1),2);
0124 z1=vtx(simp(i,1),3);
0125 x2=vtx(simp(i,4),1);
0126 y2=vtx(simp(i,4),2);
0127 z2=vtx(simp(i,4),3);
0128
0129 x_mid=((x1+x2)/2);
0130 y_mid=((y1+y2)/2);
0131 z_mid=((z1+z2)/2);
0132
0133 vtx_midpoints(i,7)=x_mid;
0134 vtx_midpoints(i,8)=y_mid;
0135 vtx_midpoints(i,9)=z_mid;
0136
0137
0138 x1=vtx(simp(i,2),1);
0139 y1=vtx(simp(i,2),2);
0140 z1=vtx(simp(i,2),3);
0141 x2=vtx(simp(i,3),1);
0142 y2=vtx(simp(i,3),2);
0143 z2=vtx(simp(i,3),3);
0144
0145 x_mid=((x1+x2)/2);
0146 y_mid=((y1+y2)/2);
0147 z_mid=((z1+z2)/2);
0148
0149 vtx_midpoints(i,10)=x_mid;
0150 vtx_midpoints(i,11)=y_mid;
0151 vtx_midpoints(i,12)=z_mid;
0152
0153
0154
0155 x1=vtx(simp(i,2),1);
0156 y1=vtx(simp(i,2),2);
0157 z1=vtx(simp(i,2),3);
0158 x2=vtx(simp(i,4),1);
0159 y2=vtx(simp(i,4),2);
0160 z2=vtx(simp(i,4),3);
0161
0162 x_mid=((x1+x2)/2);
0163 y_mid=((y1+y2)/2);
0164 z_mid=((z1+z2)/2);
0165
0166 vtx_midpoints(i,13)=x_mid;
0167 vtx_midpoints(i,14)=y_mid;
0168 vtx_midpoints(i,15)=z_mid;
0169
0170
0171 x1=vtx(simp(i,3),1);
0172 y1=vtx(simp(i,3),2);
0173 z1=vtx(simp(i,3),3);
0174 x2=vtx(simp(i,4),1);
0175 y2=vtx(simp(i,4),2);
0176 z2=vtx(simp(i,4),3);
0177
0178 x_mid=((x1+x2)/2);
0179 y_mid=((y1+y2)/2);
0180 z_mid=((z1+z2)/2);
0181
0182 vtx_midpoints(i,16)=x_mid;
0183 vtx_midpoints(i,17)=y_mid;
0184 vtx_midpoints(i,18)=z_mid;
0185
0186 i=i+1;
0187
0188 end
0189
0190 function [center_h_refined_simps]=calc_h_refinement_centers(simp,vtx,vtx_midpoints);
0191
0192
0193
0194
0195
0196
0197
0198
0199 vtx_dave_1=[];
0200 vtx_dave_2=[];
0201 simp_dave=[1 5 6 7;2 5 8 9;3 6 8 10;4 7 9 10;5 6 7 9;5 6 8 9;6 7 9 10;6 8 9 10];
0202 center_simp_proximity=[];
0203
0204 for i=1:size(simp,1);
0205
0206 vtx_dave_1(1,1)=vtx(simp(i,1),1);
0207 vtx_dave_1(1,2)=vtx(simp(i,1),2);
0208 vtx_dave_1(1,3)=vtx(simp(i,1),3);
0209
0210 vtx_dave_1(2,1)=vtx(simp(i,2),1);
0211 vtx_dave_1(2,2)=vtx(simp(i,2),2);
0212 vtx_dave_1(2,3)=vtx(simp(i,2),3);
0213
0214 vtx_dave_1(3,1)=vtx(simp(i,3),1);
0215 vtx_dave_1(3,2)=vtx(simp(i,3),2);
0216 vtx_dave_1(3,3)=vtx(simp(i,3),3);
0217
0218 vtx_dave_1(4,1)=vtx(simp(i,4),1);
0219 vtx_dave_1(4,2)=vtx(simp(i,4),2);
0220 vtx_dave_1(4,3)=vtx(simp(i,4),3);
0221
0222 vtx_dave_2(1,1)=vtx_midpoints(i,1);
0223 vtx_dave_2(1,2)=vtx_midpoints(i,2);
0224 vtx_dave_2(1,3)=vtx_midpoints(i,3);
0225
0226 vtx_dave_2(2,1)=vtx_midpoints(i,4);
0227 vtx_dave_2(2,2)=vtx_midpoints(i,5);
0228 vtx_dave_2(2,3)=vtx_midpoints(i,6);
0229
0230 vtx_dave_2(3,1)=vtx_midpoints(i,7);
0231 vtx_dave_2(3,2)=vtx_midpoints(i,8);
0232 vtx_dave_2(3,3)=vtx_midpoints(i,9);
0233
0234 vtx_dave_2(4,1)=vtx_midpoints(i,10);
0235 vtx_dave_2(4,2)=vtx_midpoints(i,11);
0236 vtx_dave_2(4,3)=vtx_midpoints(i,12);
0237
0238 vtx_dave_2(5,1)=vtx_midpoints(i,13);
0239 vtx_dave_2(5,2)=vtx_midpoints(i,14);
0240 vtx_dave_2(5,3)=vtx_midpoints(i,15);
0241
0242 vtx_dave_2(6,1)=vtx_midpoints(i,16);
0243 vtx_dave_2(6,2)=vtx_midpoints(i,17);
0244 vtx_dave_2(6,3)=vtx_midpoints(i,18);
0245
0246 vtx_dave=[vtx_dave_1;vtx_dave_2];
0247
0248 [center_simp_dave]=center_of_simps(simp_dave,vtx_dave);
0249
0250 center_simp_proximity=[center_simp_proximity;center_simp_dave];
0251
0252 vtx_dave_1=[];
0253 vtx_dave_2=[];
0254
0255 i=i+1;
0256
0257 end
0258
0259 center_h_refined_simps=center_simp_proximity;
0260
0261
0262
0263 function [index_simp] = calc_simp_index(simp_dense,centre_simp_dense,center_h_refined_simps,lookup);
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274 dist_simp=zeros(size(simp_dense,1),1);
0275 index_simp=zeros(size(simp_dense,1),2);
0276 mat_dense=zeros(size(simp_dense,1),1);
0277
0278
0279
0280 h = waitbar(0,'Calculating Simplex Map');
0281
0282 for id=1:size(simp_dense,1);
0283
0284 waitbar(id/size(simp_dense,1))
0285
0286
0287 dx=centre_simp_dense(id,1)-center_h_refined_simps(:,1);
0288 dy=centre_simp_dense(id,2)-center_h_refined_simps(:,2);
0289 dz=centre_simp_dense(id,3)-center_h_refined_simps(:,3);
0290
0291 dist_simp=sqrt((dx.^2)+(dy.^2)+(dz.^2));
0292
0293
0294 [m,I]=min(dist_simp);
0295
0296 index_simp(id,1)=lookup(I);
0297
0298 index_simp(id,2)=m;
0299
0300 end
0301
0302 close(h)
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317