273{
274 int o;
275 int s;
276 int *suborder;
277 int suborder_num;
278 double *suborder_w;
279 double *suborder_xyz;
280
281
282
284
285 suborder_xyz = ( double * ) malloc ( 4 * suborder_num * sizeof ( double ) );
286 suborder_w = ( double * ) malloc ( suborder_num * sizeof ( double ) );
287
289
291
292
293
294 o = 0;
295
296 for ( s = 0; s < suborder_num; s++ )
297 {
298 if ( suborder[s] == 1 )
299 {
300 xyz[0+o*3] = suborder_xyz[0+s*4];
301 xyz[1+o*3] = suborder_xyz[1+s*4];
302 xyz[2+o*3] = suborder_xyz[2+s*4];
303 w[o] = suborder_w[s];
304 o = o + 1;
305 }
306
307
308
309
310
311
312
313
314 else if ( suborder[s] == 4 )
315 {
316 xyz[0+o*3] = suborder_xyz[0+s*4];
317 xyz[1+o*3] = suborder_xyz[1+s*4];
318 xyz[2+o*3] = suborder_xyz[2+s*4];
319 w[o] = suborder_w[s];
320 o = o + 1;
321
322 xyz[0+o*3] = suborder_xyz[0+s*4];
323 xyz[1+o*3] = suborder_xyz[1+s*4];
324 xyz[2+o*3] = suborder_xyz[3+s*4];
325 w[o] = suborder_w[s];
326 o = o + 1;
327
328 xyz[0+o*3] = suborder_xyz[0+s*4];
329 xyz[1+o*3] = suborder_xyz[3+s*4];
330 xyz[2+o*3] = suborder_xyz[1+s*4];
331 w[o] = suborder_w[s];
332 o = o + 1;
333
334 xyz[0+o*3] = suborder_xyz[3+s*4];
335 xyz[1+o*3] = suborder_xyz[0+s*4];
336 xyz[2+o*3] = suborder_xyz[1+s*4];
337 w[o] = suborder_w[s];
338 o = o + 1;
339 }
340
341
342
343
344
345
346
347
348
349
350 else if ( suborder[s] == 6 )
351 {
352 xyz[0+o*3] = suborder_xyz[0+s*4];
353 xyz[1+o*3] = suborder_xyz[1+s*4];
354 xyz[2+o*3] = suborder_xyz[2+s*4];
355 w[o] = suborder_w[s];
356 o = o + 1;
357
358 xyz[0+o*3] = suborder_xyz[0+s*4];
359 xyz[1+o*3] = suborder_xyz[2+s*4];
360 xyz[2+o*3] = suborder_xyz[1+s*4];
361 w[o] = suborder_w[s];
362 o = o + 1;
363
364 xyz[0+o*3] = suborder_xyz[0+s*4];
365 xyz[1+o*3] = suborder_xyz[2+s*4];
366 xyz[2+o*3] = suborder_xyz[3+s*4];
367 w[o] = suborder_w[s];
368 o = o + 1;
369
370 xyz[0+o*3] = suborder_xyz[2+s*4];
371 xyz[1+o*3] = suborder_xyz[0+s*4];
372 xyz[2+o*3] = suborder_xyz[1+s*4];
373 w[o] = suborder_w[s];
374 o = o + 1;
375
376 xyz[0+o*3] = suborder_xyz[2+s*4];
377 xyz[1+o*3] = suborder_xyz[0+s*4];
378 xyz[2+o*3] = suborder_xyz[3+s*4];
379 w[o] = suborder_w[s];
380 o = o + 1;
381
382 xyz[0+o*3] = suborder_xyz[2+s*4];
383 xyz[1+o*3] = suborder_xyz[3+s*4];
384 xyz[2+o*3] = suborder_xyz[0+s*4];
385 w[o] = suborder_w[s];
386 o = o + 1;
387 }
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404 else if ( suborder[s] == 12 )
405 {
406 xyz[0+o*3] = suborder_xyz[0+s*4];
407 xyz[1+o*3] = suborder_xyz[1+s*4];
408 xyz[2+o*3] = suborder_xyz[2+s*4];
409 w[o] = suborder_w[s];
410 o = o + 1;
411
412 xyz[0+o*3] = suborder_xyz[0+s*4];
413 xyz[1+o*3] = suborder_xyz[1+s*4];
414 xyz[2+o*3] = suborder_xyz[3+s*4];
415 w[o] = suborder_w[s];
416 o = o + 1;
417
418 xyz[0+o*3] = suborder_xyz[0+s*4];
419 xyz[1+o*3] = suborder_xyz[2+s*4];
420 xyz[2+o*3] = suborder_xyz[1+s*4];
421 w[o] = suborder_w[s];
422 o = o + 1;
423
424 xyz[0+o*3] = suborder_xyz[0+s*4];
425 xyz[1+o*3] = suborder_xyz[2+s*4];
426 xyz[2+o*3] = suborder_xyz[3+s*4];
427 w[o] = suborder_w[s];
428 o = o + 1;
429
430 xyz[0+o*3] = suborder_xyz[0+s*4];
431 xyz[1+o*3] = suborder_xyz[3+s*4];
432 xyz[2+o*3] = suborder_xyz[1+s*4];
433 w[o] = suborder_w[s];
434 o = o + 1;
435
436 xyz[0+o*3] = suborder_xyz[0+s*4];
437 xyz[1+o*3] = suborder_xyz[3+s*4];
438 xyz[2+o*3] = suborder_xyz[2+s*4];
439 w[o] = suborder_w[s];
440 o = o + 1;
441
442 xyz[0+o*3] = suborder_xyz[2+s*4];
443 xyz[1+o*3] = suborder_xyz[0+s*4];
444 xyz[2+o*3] = suborder_xyz[1+s*4];
445 w[o] = suborder_w[s];
446 o = o + 1;
447
448 xyz[0+o*3] = suborder_xyz[2+s*4];
449 xyz[1+o*3] = suborder_xyz[0+s*4];
450 xyz[2+o*3] = suborder_xyz[3+s*4];
451 w[o] = suborder_w[s];
452 o = o + 1;
453
454 xyz[0+o*3] = suborder_xyz[2+s*4];
455 xyz[1+o*3] = suborder_xyz[3+s*4];
456 xyz[2+o*3] = suborder_xyz[1+s*4];
457 w[o] = suborder_w[s];
458 o = o + 1;
459
460 xyz[0+o*3] = suborder_xyz[3+s*4];
461 xyz[1+o*3] = suborder_xyz[0+s*4];
462 xyz[2+o*3] = suborder_xyz[1+s*4];
463 w[o] = suborder_w[s];
464 o = o + 1;
465
466 xyz[0+o*3] = suborder_xyz[3+s*4];
467 xyz[1+o*3] = suborder_xyz[0+s*4];
468 xyz[2+o*3] = suborder_xyz[2+s*4];
469 w[o] = suborder_w[s];
470 o = o + 1;
471
472 xyz[0+o*3] = suborder_xyz[3+s*4];
473 xyz[1+o*3] = suborder_xyz[2+s*4];
474 xyz[2+o*3] = suborder_xyz[0+s*4];
475 w[o] = suborder_w[s];
476 o = o + 1;
477 }
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506 else if ( suborder[s] == 24 )
507 {
508 xyz[0+o*3] = suborder_xyz[0+s*4];
509 xyz[1+o*3] = suborder_xyz[1+s*4];
510 xyz[2+o*3] = suborder_xyz[2+s*4];
511 w[o] = suborder_w[s];
512 o = o + 1;
513
514 xyz[0+o*3] = suborder_xyz[0+s*4];
515 xyz[1+o*3] = suborder_xyz[1+s*4];
516 xyz[2+o*3] = suborder_xyz[3+s*4];
517 w[o] = suborder_w[s];
518 o = o + 1;
519
520 xyz[0+o*3] = suborder_xyz[0+s*4];
521 xyz[1+o*3] = suborder_xyz[2+s*4];
522 xyz[2+o*3] = suborder_xyz[1+s*4];
523 w[o] = suborder_w[s];
524 o = o + 1;
525
526 xyz[0+o*3] = suborder_xyz[0+s*4];
527 xyz[1+o*3] = suborder_xyz[2+s*4];
528 xyz[2+o*3] = suborder_xyz[3+s*4];
529 w[o] = suborder_w[s];
530 o = o + 1;
531
532 xyz[0+o*3] = suborder_xyz[0+s*4];
533 xyz[1+o*3] = suborder_xyz[3+s*4];
534 xyz[2+o*3] = suborder_xyz[1+s*4];
535 w[o] = suborder_w[s];
536 o = o + 1;
537
538 xyz[0+o*3] = suborder_xyz[0+s*4];
539 xyz[1+o*3] = suborder_xyz[3+s*4];
540 xyz[2+o*3] = suborder_xyz[2+s*4];
541 w[o] = suborder_w[s];
542 o = o + 1;
543
544 xyz[0+o*3] = suborder_xyz[1+s*4];
545 xyz[1+o*3] = suborder_xyz[0+s*4];
546 xyz[2+o*3] = suborder_xyz[3+s*4];
547 w[o] = suborder_w[s];
548 o = o + 1;
549
550 xyz[0+o*3] = suborder_xyz[1+s*4];
551 xyz[1+o*3] = suborder_xyz[0+s*4];
552 xyz[2+o*3] = suborder_xyz[4+s*4];
553 w[o] = suborder_w[s];
554 o = o + 1;
555
556 xyz[0+o*3] = suborder_xyz[1+s*4];
557 xyz[1+o*3] = suborder_xyz[2+s*4];
558 xyz[2+o*3] = suborder_xyz[0+s*4];
559 w[o] = suborder_w[s];
560 o = o + 1;
561
562 xyz[0+o*3] = suborder_xyz[1+s*4];
563 xyz[1+o*3] = suborder_xyz[2+s*4];
564 xyz[2+o*3] = suborder_xyz[3+s*4];
565 w[o] = suborder_w[s];
566 o = o + 1;
567
568 xyz[0+o*3] = suborder_xyz[1+s*4];
569 xyz[1+o*3] = suborder_xyz[3+s*4];
570 xyz[2+o*3] = suborder_xyz[0+s*4];
571 w[o] = suborder_w[s];
572 o = o + 1;
573
574 xyz[0+o*3] = suborder_xyz[1+s*4];
575 xyz[1+o*3] = suborder_xyz[3+s*4];
576 xyz[2+o*3] = suborder_xyz[2+s*4];
577 w[o] = suborder_w[s];
578 o = o + 1;
579
580 xyz[0+o*3] = suborder_xyz[2+s*4];
581 xyz[1+o*3] = suborder_xyz[0+s*4];
582 xyz[2+o*3] = suborder_xyz[1+s*4];
583 w[o] = suborder_w[s];
584 o = o + 1;
585
586 xyz[0+o*3] = suborder_xyz[2+s*4];
587 xyz[1+o*3] = suborder_xyz[0+s*4];
588 xyz[2+o*3] = suborder_xyz[3+s*4];
589 w[o] = suborder_w[s];
590 o = o + 1;
591
592 xyz[0+o*3] = suborder_xyz[2+s*4];
593 xyz[1+o*3] = suborder_xyz[1+s*4];
594 xyz[2+o*3] = suborder_xyz[0+s*4];
595 w[o] = suborder_w[s];
596 o = o + 1;
597
598 xyz[0+o*3] = suborder_xyz[2+s*4];
599 xyz[1+o*3] = suborder_xyz[1+s*4];
600 xyz[2+o*3] = suborder_xyz[3+s*4];
601 w[o] = suborder_w[s];
602 o = o + 1;
603
604 xyz[0+o*3] = suborder_xyz[2+s*4];
605 xyz[1+o*3] = suborder_xyz[3+s*4];
606 xyz[2+o*3] = suborder_xyz[0+s*4];
607 w[o] = suborder_w[s];
608 o = o + 1;
609
610 xyz[0+o*3] = suborder_xyz[2+s*4];
611 xyz[1+o*3] = suborder_xyz[3+s*4];
612 xyz[2+o*3] = suborder_xyz[1+s*4];
613 w[o] = suborder_w[s];
614 o = o + 1;
615
616 xyz[0+o*3] = suborder_xyz[3+s*4];
617 xyz[1+o*3] = suborder_xyz[0+s*4];
618 xyz[2+o*3] = suborder_xyz[1+s*4];
619 w[o] = suborder_w[s];
620 o = o + 1;
621
622 xyz[0+o*3] = suborder_xyz[3+s*4];
623 xyz[1+o*3] = suborder_xyz[0+s*4];
624 xyz[2+o*3] = suborder_xyz[2+s*4];
625 w[o] = suborder_w[s];
626 o = o + 1;
627
628 xyz[0+o*3] = suborder_xyz[3+s*4];
629 xyz[1+o*3] = suborder_xyz[1+s*4];
630 xyz[2+o*3] = suborder_xyz[0+s*4];
631 w[o] = suborder_w[s];
632 o = o + 1;
633
634 xyz[0+o*3] = suborder_xyz[3+s*4];
635 xyz[1+o*3] = suborder_xyz[1+s*4];
636 xyz[2+o*3] = suborder_xyz[2+s*4];
637 w[o] = suborder_w[s];
638 o = o + 1;
639
640 xyz[0+o*3] = suborder_xyz[3+s*4];
641 xyz[1+o*3] = suborder_xyz[2+s*4];
642 xyz[2+o*3] = suborder_xyz[0+s*4];
643 w[o] = suborder_w[s];
644 o = o + 1;
645
646 xyz[0+o*3] = suborder_xyz[3+s*4];
647 xyz[1+o*3] = suborder_xyz[2+s*4];
648 xyz[2+o*3] = suborder_xyz[1+s*4];
649 w[o] = suborder_w[s];
650 o = o + 1;
651 }
652 else
653 {
654 fprintf ( stderr, "\n" );
655 fprintf ( stderr, "TETRAHEDRON_NCC_RULE - Fatal error!\n" );
656 fprintf ( stderr, " Illegal SUBORDER(%d) = %d\n", s, suborder[s] );
657 exit ( 1 );
658 }
659 }
660
661 free ( suborder );
662 free ( suborder_xyz );
663 free ( suborder_w );
664
665 return;
666}
void tetrahedron_ncc_subrule(int rule, int suborder_num, double suborder_xyz[], double suborder_w[])