@@ -134,6 +134,9 @@ function run_iso2mesh_test(tests)
134
134
test_iso2mesh(' elemvolume' , @savejson , unique(round_to_digits(elemvolume(no , el ), 6 )), ' [0.083333]' );
135
135
test_iso2mesh(' surfvolume' , @savejson , surfvolume(no , fc ), ' [1]' );
136
136
test_iso2mesh(' insurface' , @savejson , insurface(no , fc , [1.5 , - 0.9 , 2.1 ; 1 , 0 , 2 ; - 1 , 0 2 ; 1.2 , - 0 , 2.5 ])' , ' [1,1,0,1]' );
137
+
138
+ [no1 , fc1 ] = highordertet(no , el );
139
+ test_iso2mesh(' highordertet' , @savejson , fc1 , ' [[1,7,3,10,8,14],[15,21,17,24,22,28],[2,3,7,11,13,14],[16,17,21,25,27,28],[1,5,7,9,10,22],[15,19,21,23,24,32],[4,7,5,17,15,22],[18,21,19,31,29,32],[2,7,6,13,12,25],[16,21,20,27,26,33],[4,6,7,16,17,25],[18,20,21,30,31,33]]' );
137
140
end
138
141
139
142
%%
@@ -204,4 +207,72 @@ function run_iso2mesh_test(tests)
204
207
test_iso2mesh(' meshrefine elem sizefield node' , @savejson , size(no1 ) - size(no ), ' [34,0]' );
205
208
test_iso2mesh(' meshrefine elem sizefield elem' , @savejson , size(el1 ) - size(el ), ' [105,0]' );
206
209
test_iso2mesh(' meshrefine elem sizefield face' , @savejson , size(fc1 ) - size(fc ), ' [64,1]' );
210
+
211
+ [no , el ] = meshgrid5(1 : 2 , - 1 : 0 , 2 : 0.5 : 3 );
212
+ [no , el ] = removeisolatednode(no , volface(el ));
213
+ no1 = sms(no , el , 10 );
214
+ [no2 , el2 ] = s2m(no1 , el , 1 , 100 );
215
+ test_iso2mesh(' sms laplacianhc' , @savejson , sum(elemvolume(no2 , el2(: , 1 : 4 ))) > 0.8 , ' [true]' );
216
+
217
+ no1 = sms(no , el , 10 , 0.5 , ' laplacian' );
218
+ [no2 , el2 ] = s2m(no1 , el , 1 , 100 );
219
+ test_iso2mesh(' sms laplacian' , @savejson , sum(elemvolume(no2 , el2(: , 1 : 4 ))) < 0.1 , ' [true]' );
220
+
221
+ no1 = sms(no , el , 10 , 0.5 , ' lowpass' );
222
+ [no2 , el2 ] = s2m(no1 , el , 1 , 100 );
223
+ test_iso2mesh(' sms lowpass' , @savejson , sum(elemvolume(no2 , el2(: , 1 : 4 ))) > 0.55 , ' [true]' );
224
+ end
225
+
226
+ %%
227
+ if (ismember(' boolean' , tests ))
228
+ [no1 , el1 ] = meshgrid5(1 : 2 , 1 : 2 , 1 : 2 );
229
+ el1 = volface(el1 );
230
+ [no1 , el1 ] = removeisolatednode(no1 , el1 );
231
+ [no2 , el2 ] = meshgrid6(1.7 : 4 , 1.7 : 4 , 1.7 : 4 );
232
+ el2 = volface(el2 );
233
+ [no2 , el2 ] = removeisolatednode(no2 , el2 );
234
+
235
+ [no3 , el3 ] = surfboolean(no1 , el1 , ' and' , no2 , el2 );
236
+ [no3 , el3 ] = meshcheckrepair(no3 , el3 , ' dup' , ' tolerance' , 1e-4 );
237
+ [node , elem ] = s2m(no3 , el3 , 1 , 100 );
238
+
239
+ test_iso2mesh(' surfboolean and' , @savejson , round_to_digits(sum(elemvolume(node , elem(: , 1 : 4 ))), 5 ), ' [0.027]' );
240
+
241
+ [no3 , el3 ] = surfboolean(no1 , el1 , ' or' , no2 , el2 );
242
+ [no3 , el3 ] = meshcheckrepair(no3 , el3 , ' dup' , ' tolerance' , 1e-4 );
243
+ [node , elem ] = s2m(no3 , el3 , 1 , 100 );
244
+ test_iso2mesh(' surfboolean or' , @savejson , round(sum(elemvolume(node , elem(: , 1 : 4 ))) * 1000 ), ' [8973]' );
245
+
246
+ [no3 , el3 ] = surfboolean(no1 , el1 , ' diff' , no2 , el2 );
247
+ [no3 , el3 ] = meshcheckrepair(no3 , el3 , ' dup' , ' tolerance' , 1e-4 );
248
+ [node , elem ] = s2m(no3 , el3 , 1 , 100 );
249
+ test_iso2mesh(' surfboolean diff' , @savejson , round_to_digits(sum(elemvolume(node , elem(: , 1 : 4 ))), 5 ), ' [0.973]' );
250
+
251
+ [no3 , el3 ] = surfboolean(no1 , el1 , ' first' , no2 , el2 );
252
+ [no3 , el3 ] = meshcheckrepair(no3 , el3 , ' dup' , ' tolerance' , 1e-4 );
253
+ [node , elem ] = s2m(no3 , el3 , 1 , 100 , ' tetgen' , [1.5 , 1.5 , 1.5 ]);
254
+ test_iso2mesh(' surfboolean first region 1' , @savejson , round_to_digits(sum(elemvolume(node , elem(elem(: , 5 ) == 1 , 1 : 4 ))), 5 ), ' [0.973]' );
255
+ test_iso2mesh(' surfboolean first region 0' , @savejson , round_to_digits(sum(elemvolume(node , elem(elem(: , 5 ) == 0 , 1 : 4 ))), 5 ), ' [0.027]' );
256
+
257
+ [no3 , el3 ] = surfboolean(no1 , el1 , ' second' , no2 , el2 );
258
+ [no3 , el3 ] = meshcheckrepair(no3 , el3 , ' dup' , ' tolerance' , 1e-4 );
259
+ [node , elem ] = s2m(no3 , el3 , 1 , 100 , ' tetgen' , [2.6 , 2.6 , 2.6 ]);
260
+ test_iso2mesh(' surfboolean second region 1' , @savejson , round_to_digits(sum(elemvolume(node , elem(elem(: , 5 ) == 1 , 1 : 4 ))), 5 ), ' [7.973]' );
261
+ test_iso2mesh(' surfboolean second region 0' , @savejson , round_to_digits(sum(elemvolume(node , elem(elem(: , 5 ) == 0 , 1 : 4 ))), 5 ), ' [0.027]' );
262
+
263
+ [no3 , el3 ] = surfboolean(no1 , el1 , ' resolve' , no2 , el2 );
264
+ [no3 , el3 ] = meshcheckrepair(no3 , el3 , ' dup' , ' tolerance' , 1e-4 );
265
+ [node , elem ] = s2m(no3 , el3 , 1 , 100 , ' tetgen' , [1.5 , 1.5 , 1.5 ; 2.6 , 2.6 , 2.6 ]);
266
+ test_iso2mesh(' surfboolean resolve region 0' , @savejson , round_to_digits(sum(elemvolume(node , elem(elem(: , 5 ) == 0 , 1 : 4 ))), 5 ), ' [0.027]' );
267
+ test_iso2mesh(' surfboolean resolve region 1' , @savejson , round_to_digits(sum(elemvolume(node , elem(elem(: , 5 ) == 1 , 1 : 4 ))), 5 ), ' [0.973]' );
268
+ test_iso2mesh(' surfboolean resolve region 2' , @savejson , round_to_digits(sum(elemvolume(node , elem(elem(: , 5 ) == 2 , 1 : 4 ))), 5 ), ' [7.973]' );
269
+ test_iso2mesh(' surfboolean self intersecting test' , @savejson , surfboolean(no1 , el1 , ' self' , no2 , el2 ), ' [1]' );
270
+
271
+ [no3 , el3 ] = meshgrid5(1 : 0.4 : 1.4 , 1 : 0.4 : 1.4 , 1 : 0.4 : 1.4 );
272
+ el3 = volface(el3 );
273
+ [no3 , el3 ] = removeisolatednode(no3 , el3 );
274
+
275
+ [no4 , el4 ] = surfboolean(no1 , el1 , ' separate' , no3 , el3 );
276
+ [node , elem ] = s2m(no4 , el4 , 1 , 100 , ' tetgen' , [1.5 , 1.5 , 1.5 ]);
277
+ test_iso2mesh(' surfboolean resolve region 2' , @savejson , unique(elem(: , 5 ))' , ' [0,1]' );
207
278
end
0 commit comments