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