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[])