00001 #include <stdlib.h>
00002 #include "ordering.h"
00003
00004
00005
00006
00007
00008
00009
00010
00011 void linbar_endpoints (long *nodes)
00012 {
00013 nodes[0]=0;
00014 nodes[1]=1;
00015 }
00016
00017
00018
00019
00020
00021
00022
00023
00024 void quadbar_endpoints (long *nodes)
00025 {
00026 nodes[0]=0;
00027 nodes[1]=1;
00028 }
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 void lintriangle_edgnod (long *edgenod,long edg)
00040 {
00041 if (edg==0){
00042 edgenod[0]=0;
00043 edgenod[1]=1;
00044 }
00045 if (edg==1){
00046 edgenod[0]=1;
00047 edgenod[1]=2;
00048 }
00049 if (edg==2){
00050 edgenod[0]=2;
00051 edgenod[1]=0;
00052 }
00053 }
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 void quadtriangle_edgnod (long *edgenod,long edg)
00066 {
00067 if (edg==0){
00068 edgenod[0]=0; edgenod[1]=1; edgenod[2]=3;
00069 }
00070 if (edg==1){
00071 edgenod[0]=1; edgenod[1]=2; edgenod[2]=4;
00072 }
00073 if (edg==2){
00074 edgenod[0]=2; edgenod[1]=0; edgenod[2]=5;
00075 }
00076 }
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088 void linquadrilat_edgnod (long *edgenod,long edg)
00089 {
00090 if (edg==0){
00091 edgenod[0]=0;
00092 edgenod[1]=1;
00093 }
00094 if (edg==1){
00095 edgenod[0]=1;
00096 edgenod[1]=2;
00097 }
00098 if (edg==2){
00099 edgenod[0]=2;
00100 edgenod[1]=3;
00101 }
00102 if (edg==3){
00103 edgenod[0]=3;
00104 edgenod[1]=0;
00105 }
00106 }
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119 void quadquadrilat_edgnod (long *edgenod,long edg)
00120 {
00121 if (edg==0){
00122 edgenod[0]=0;
00123 edgenod[1]=1;
00124 edgenod[2]=4;
00125 }
00126 if (edg==1){
00127 edgenod[0]=1;
00128 edgenod[1]=2;
00129 edgenod[2]=5;
00130 }
00131 if (edg==2){
00132 edgenod[0]=2;
00133 edgenod[1]=3;
00134 edgenod[2]=6;
00135 }
00136 if (edg==3){
00137 edgenod[0]=3;
00138 edgenod[1]=0;
00139 edgenod[2]=7;
00140 }
00141 }
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153 void lintetrahedral_edgnod(long *edgenod,long edg)
00154 {
00155 if (edg==0){
00156 edgenod[0]=0; edgenod[1]=1;
00157 }
00158 if (edg==1){
00159 edgenod[0]=1; edgenod[1]=2;
00160 }
00161 if (edg==2){
00162 edgenod[0]=2; edgenod[1]=0;
00163 }
00164 if (edg==3){
00165 edgenod[0]=1; edgenod[1]=3;
00166 }
00167 if (edg==4){
00168 edgenod[0]=3; edgenod[1]=2;
00169 }
00170 if (edg==5){
00171 edgenod[0]=3; edgenod[1]=0;
00172 }
00173
00174 }
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188 void quadtetrahedral_edgnod(long *edgenod,long edg)
00189 {
00190
00191 if (edg==0){
00192 edgenod[0]=0; edgenod[1]=1; edgenod[2]=4;
00193 }
00194 if (edg==1){
00195 edgenod[0]=1; edgenod[1]=2; edgenod[2]=5;
00196 }
00197 if (edg==2){
00198 edgenod[0]=2; edgenod[1]=0; edgenod[2]=6;
00199 }
00200 if (edg==3){
00201 edgenod[0]=1; edgenod[1]=3; edgenod[2]=8;
00202 }
00203 if (edg==4){
00204 edgenod[0]=3; edgenod[1]=2; edgenod[2]=9;
00205 }
00206 if (edg==5){
00207 edgenod[0]=3; edgenod[1]=0; edgenod[2]=7;
00208 }
00209
00210 }
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223 void linhexahedral_edgnod(long *edgenod,long edg)
00224 {
00225
00226 if (edg==0){
00227 edgenod[0]=0; edgenod[1]=1;
00228 }
00229 if (edg==1){
00230 edgenod[0]=1; edgenod[1]=2;
00231 }
00232 if (edg==2){
00233 edgenod[0]=2; edgenod[1]=3;
00234 }
00235 if (edg==3){
00236 edgenod[0]=3; edgenod[1]=0;
00237 }
00238 if (edg==4){
00239 edgenod[0]=0; edgenod[1]=4;
00240 }
00241 if (edg==5){
00242 edgenod[0]=1; edgenod[1]=5;
00243 }
00244 if (edg==6){
00245 edgenod[0]=2; edgenod[1]=6;
00246 }
00247 if (edg==7){
00248 edgenod[0]=3; edgenod[1]=7;
00249 }
00250 if (edg==8){
00251 edgenod[0]=4; edgenod[1]=5;
00252 }
00253 if (edg==9){
00254 edgenod[0]=5; edgenod[1]=6;
00255 }
00256 if (edg==10){
00257 edgenod[0]=6; edgenod[1]=7;
00258 }
00259 if (edg==11){
00260 edgenod[0]=7; edgenod[1]=4;
00261 }
00262
00263 }
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276 void quadhexahedral_edgnod (long *edgenod,long edg)
00277 {
00278 if (edg==0){
00279 edgenod[0]=0; edgenod[1]=1; edgenod[2]= 8;
00280 }
00281 if (edg==1){
00282 edgenod[0]=1; edgenod[1]=2; edgenod[2]= 9;
00283 }
00284 if (edg==2){
00285 edgenod[0]=2; edgenod[1]=3; edgenod[2]= 10;
00286 }
00287 if (edg==3){
00288 edgenod[0]=3; edgenod[1]=0; edgenod[2]= 11;
00289 }
00290 if (edg==4){
00291 edgenod[0]=0; edgenod[1]=4; edgenod[2]= 12;
00292 }
00293 if (edg==5){
00294 edgenod[0]=1; edgenod[1]=5; edgenod[2]= 13;
00295 }
00296 if (edg==6){
00297 edgenod[0]=2; edgenod[1]=6; edgenod[2]= 14;
00298 }
00299 if (edg==7){
00300 edgenod[0]=3; edgenod[1]=7; edgenod[2]= 15;
00301 }
00302 if (edg==8){
00303 edgenod[0]=4; edgenod[1]=5; edgenod[2]= 16;
00304 }
00305 if (edg==9){
00306 edgenod[0]=5; edgenod[1]=6; edgenod[2]= 17;
00307 }
00308 if (edg==10){
00309 edgenod[0]=6; edgenod[1]=7; edgenod[2]= 18;
00310 }
00311 if (edg==11){
00312 edgenod[0]=7; edgenod[1]=4; edgenod[2]= 19;
00313 }
00314 }
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325 void linhexahedral_surfnod (long *surfnod,long surf)
00326 {
00327 if (surf==0){
00328 surfnod[0]=0;
00329 surfnod[1]=3;
00330 surfnod[2]=7;
00331 surfnod[3]=4;
00332 }
00333 if (surf==1){
00334 surfnod[0]=1;
00335 surfnod[1]=0;
00336 surfnod[2]=4;
00337 surfnod[3]=5;
00338 }
00339 if (surf==2){
00340 surfnod[0]=2;
00341 surfnod[1]=1;
00342 surfnod[2]=5;
00343 surfnod[3]=6;
00344 }
00345 if (surf==3){
00346 surfnod[0]=3;
00347 surfnod[1]=2;
00348 surfnod[2]=6;
00349 surfnod[3]=7;
00350 }
00351 if (surf==4){
00352 surfnod[0]=0;
00353 surfnod[1]=1;
00354 surfnod[2]=2;
00355 surfnod[3]=3;
00356 }
00357 if (surf==5){
00358 surfnod[0]=4;
00359 surfnod[1]=5;
00360 surfnod[2]=6;
00361 surfnod[3]=7;
00362 }
00363
00364 }
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375 void quadhexahedral_surfnod (long *surfnod,long surf)
00376 {
00377 if (surf==0){
00378 surfnod[0]=0;
00379 surfnod[1]=3;
00380 surfnod[2]=7;
00381 surfnod[3]=4;
00382 surfnod[4]=11;
00383 surfnod[5]=15;
00384 surfnod[6]=19;
00385 surfnod[7]=12;
00386 }
00387 if (surf==1){
00388 surfnod[0]=1;
00389 surfnod[1]=0;
00390 surfnod[2]=4;
00391 surfnod[3]=5;
00392 surfnod[4]=8;
00393 surfnod[5]=12;
00394 surfnod[6]=16;
00395 surfnod[7]=13;
00396 }
00397 if (surf==2){
00398 surfnod[0]=2;
00399 surfnod[1]=1;
00400 surfnod[2]=5;
00401 surfnod[3]=6;
00402 surfnod[4]=9;
00403 surfnod[5]=13;
00404 surfnod[6]=17;
00405 surfnod[7]=14;
00406 }
00407 if (surf==3){
00408 surfnod[0]=3;
00409 surfnod[1]=2;
00410 surfnod[2]=6;
00411 surfnod[3]=7;
00412 surfnod[4]=10;
00413 surfnod[5]=14;
00414 surfnod[6]=18;
00415 surfnod[7]=15;
00416 }
00417 if (surf==4){
00418 surfnod[0]=0;
00419 surfnod[1]=1;
00420 surfnod[2]=2;
00421 surfnod[3]=3;
00422 surfnod[4]=8;
00423 surfnod[5]=9;
00424 surfnod[6]=10;
00425 surfnod[7]=11;
00426 }
00427 if (surf==5){
00428 surfnod[0]=4;
00429 surfnod[1]=5;
00430 surfnod[2]=6;
00431 surfnod[3]=7;
00432 surfnod[4]=16;
00433 surfnod[5]=17;
00434 surfnod[6]=18;
00435 surfnod[7]=19;
00436 }
00437
00438 }
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451 void lintetrahedral_surfnod (long *surfnod,long surf)
00452 {
00453 if (surf==0){
00454 surfnod[0]=2; surfnod[1]=1; surfnod[2]=3;
00455 }
00456 if (surf==1){
00457 surfnod[0]=0; surfnod[1]=2; surfnod[2]=3;
00458 }
00459 if (surf==2){
00460 surfnod[0]=1; surfnod[1]=0; surfnod[2]=3;
00461 }
00462 if (surf==3){
00463 surfnod[0]=0; surfnod[1]=1; surfnod[2]=2;
00464 }
00465 }
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478 void quadtetrahedral_surfnod (long *surfnod,long surf)
00479 {
00480 switch (surf)
00481 {
00482 case 0:
00483 surfnod[0]=2; surfnod[1]=1; surfnod[2]=3;
00484 surfnod[3]=5; surfnod[4]=8; surfnod[5]=9;
00485 break;
00486 case 1:
00487 surfnod[0]=0; surfnod[1]=2; surfnod[2]=3;
00488 surfnod[3]=6; surfnod[4]=9; surfnod[5]=7;
00489 break;
00490 case 2:
00491 surfnod[0]=1; surfnod[1]=0; surfnod[2]=3;
00492 surfnod[3]=4; surfnod[4]=7; surfnod[5]=8;
00493 break;
00494 case 3:
00495 surfnod[0]=0; surfnod[1]=1; surfnod[2]=2;
00496 surfnod[3]=4; surfnod[4]=5; surfnod[5]=6;
00497 break;
00498 default:
00499 print_err("unknown index of surface is required", __FILE__, __LINE__, __func__);
00500 abort();
00501 }
00502 }
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513 void nodcoord_bar (vector &xi)
00514 {
00515 xi[0] = -1.0;
00516 xi[1] = 1.0;
00517 }
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527 void nodcoord_planelt (vector &xi,vector &eta)
00528 {
00529 xi[0] = 1.0; eta[0] = 0.0;
00530 xi[1] = 0.0; eta[1] = 1.0;
00531 xi[2] = 0.0; eta[2] = 0.0;
00532 }
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543 void nodcoord_planelq (vector &xi,vector &eta)
00544 {
00545 xi[0] = 1.0; eta[0] = 1.0;
00546 xi[1] = -1.0; eta[1] = 1.0;
00547 xi[2] = -1.0; eta[2] = -1.0;
00548 xi[3] = 1.0; eta[3] = -1.0;
00549 }
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559 void nodcoord_planeqq (vector &xi,vector &eta)
00560 {
00561 xi[0] = 1.0; eta[0] = 1.0;
00562 xi[1] = -1.0; eta[1] = 1.0;
00563 xi[2] = -1.0; eta[2] = -1.0;
00564 xi[3] = 1.0; eta[3] = -1.0;
00565 xi[4] = 0.0; eta[4] = 1.0;
00566 xi[5] = -1.0; eta[5] = 0.0;
00567 xi[6] = 0.0; eta[6] = -1.0;
00568 xi[7] = 1.0; eta[7] = 0.0;
00569 }
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581 void nodcoord_lintet (vector &xi,vector &eta,vector &zeta)
00582 {
00583 xi[0] = 1.0; eta[0] = 0.0; zeta[0]=0.0;
00584 xi[1] = 0.0; eta[1] = 1.0; zeta[1]=0.0;
00585 xi[2] = 0.0; eta[2] = 0.0; zeta[2]=1.0;
00586 xi[3] = 0.0; eta[3] = 0.0; zeta[3]=0.0;
00587 }
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599 void nodcoord_quadtet (vector &xi,vector &eta,vector &zeta)
00600 {
00601 xi[0] = 1.0; eta[0] = 0.0; zeta[0] = 0.0;
00602 xi[1] = 0.0; eta[1] = 1.0; zeta[1] = 0.0;
00603 xi[2] = 0.0; eta[2] = 0.0; zeta[2] = 1.0;
00604 xi[3] = 0.0; eta[3] = 0.0; zeta[3] = 0.0;
00605 xi[4] = 0.5; eta[4] = 0.5; zeta[4] = 0.0;
00606 xi[5] = 0.0; eta[5] = 0.5; zeta[5] = 0.5;
00607 xi[6] = 0.5; eta[6] = 0.0; zeta[6] = 0.0;
00608 xi[7] = 0.5; eta[7] = 0.0; zeta[7] = 0.0;
00609 xi[8] = 0.0; eta[8] = 0.5; zeta[8] = 0.0;
00610 xi[9] = 0.0; eta[9] = 0.0; zeta[9] = 0.5;
00611 }
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621 void nodcoord_linhex (vector &xi,vector &eta,vector &zeta)
00622 {
00623 xi[0] = 1.0; eta[0] = 1.0; zeta[0] = 1.0;
00624 xi[1] = -1.0; eta[1] = 1.0; zeta[1] = 1.0;
00625 xi[2] = -1.0; eta[2] = -1.0; zeta[2] = 1.0;
00626 xi[3] = 1.0; eta[3] = -1.0; zeta[3] = 1.0;
00627 xi[4] = 1.0; eta[4] = 1.0; zeta[4] = -1.0;
00628 xi[5] = -1.0; eta[5] = 1.0; zeta[5] = -1.0;
00629 xi[6] = -1.0; eta[6] = -1.0; zeta[6] = -1.0;
00630 xi[7] = 1.0; eta[7] = -1.0; zeta[7] = -1.0;
00631 }
00632
00633
00634
00635
00636
00637
00638
00639
00640
00641 void nodcoord_quadhex (vector &xi,vector &eta,vector &zeta)
00642 {
00643 xi[0] = 1.0; eta[0] = 1.0; zeta[0] = 1.0;
00644 xi[1] = -1.0; eta[1] = 1.0; zeta[1] = 1.0;
00645 xi[2] = -1.0; eta[2] = -1.0; zeta[2] = 1.0;
00646 xi[3] = 1.0; eta[3] = -1.0; zeta[3] = 1.0;
00647 xi[4] = 1.0; eta[4] = 1.0; zeta[4] = -1.0;
00648 xi[5] = -1.0; eta[5] = 1.0; zeta[5] = -1.0;
00649 xi[6] = -1.0; eta[6] = -1.0; zeta[6] = -1.0;
00650 xi[7] = 1.0; eta[7] = -1.0; zeta[7] = -1.0;
00651 xi[8] = 1.0; eta[8] = 1.0; zeta[8] = 1.0;
00652 xi[9] = -1.0; eta[9] = 1.0; zeta[9] = 1.0;
00653 xi[10] = -1.0; eta[10] = -1.0; zeta[10] = 1.0;
00654 xi[11] = 1.0; eta[11] = -1.0; zeta[11] = 1.0;
00655 xi[12] = 1.0; eta[12] = 1.0; zeta[12] = -1.0;
00656 xi[13] = -1.0; eta[13] = 1.0; zeta[13] = -1.0;
00657 xi[14] = -1.0; eta[14] = -1.0; zeta[14] = -1.0;
00658 xi[15] = 1.0; eta[15] = -1.0; zeta[15] = -1.0;
00659 xi[16] = 1.0; eta[16] = 1.0; zeta[16] = 1.0;
00660 xi[17] = -1.0; eta[17] = 1.0; zeta[17] = 1.0;
00661 xi[18] = -1.0; eta[18] = -1.0; zeta[18] = 1.0;
00662 xi[19] = 1.0; eta[19] = -1.0; zeta[19] = 1.0;
00663 }
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676 void nodip_bar (long i,long n,ivector &ipnum)
00677 {
00678 ipnum[0]=i;
00679 ipnum[1]=i+n-1;
00680 }
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693 void nodip_planelq (long i,long n,ivector &ipnum)
00694 {
00695 ipnum[0]=i+n*(n-1)+n-1;
00696 ipnum[1]=i+n-1;
00697 ipnum[2]=i+0;
00698 ipnum[3]=i+n*(n-1);
00699 }
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713 void nodip_planelt (long i,long n,ivector &ipnum)
00714 {
00715 switch (n){
00716 case 1:{
00717 ipnum[0]=i;
00718 ipnum[1]=i;
00719 ipnum[2]=i;
00720 break;
00721 }
00722 case 3:{
00723 ipnum[0]=i;
00724 ipnum[1]=i+1;
00725 ipnum[2]=i+2;
00726 break;
00727 }
00728 default:{
00729 print_err("unknown order of numerical integration is required",__FILE__,__LINE__,__func__);
00730 }
00731 }
00732 }
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745 void nodip_lintet (long i,ivector &ipnum)
00746 {
00747 ipnum[0]=i;
00748 ipnum[1]=i;
00749 ipnum[2]=i;
00750 ipnum[3]=i;
00751 }
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764 void nodip_quadtet (long i,ivector &ipnum)
00765 {
00766 ipnum[0]=i+0;
00767 ipnum[1]=i+1;
00768 ipnum[2]=i+2;
00769 ipnum[3]=i+3;
00770 ipnum[4]=i+0;
00771 ipnum[5]=i+1;
00772 ipnum[6]=i+2;
00773 ipnum[7]=i+0;
00774 ipnum[8]=i+1;
00775 ipnum[9]=i+2;
00776 }
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790 void nodip_linhex (long i,long n,ivector &ipnum)
00791 {
00792 ipnum[0]=i+n*n*n-1;
00793 ipnum[1]=i+n*n-1;
00794 ipnum[2]=i+n-1;
00795 ipnum[3]=i+n*n*(n-1)+n-1;
00796 ipnum[4]=i+n*n*(n-1)+n*(n-1);
00797 ipnum[5]=i+n*(n-1);
00798 ipnum[6]=i+0;
00799 ipnum[7]=i+n*n*(n-1);
00800 }
00801
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813 void nodip_quadhex (long i,long n,ivector &ipnum)
00814 {
00815 ipnum[0]=i+n*n*n-1;
00816 ipnum[1]=i+n*n-1;
00817 ipnum[2]=i+n-1;
00818 ipnum[3]=i+n*n*(n-1)+n-1;
00819
00820 ipnum[4]=i+n*n*(n-1)+n*(n-1);
00821 ipnum[5]=i+n*(n-1);
00822 ipnum[6]=i;
00823 ipnum[7]=i+n*n*(n-1);
00824
00825 ipnum[8]=i+n*n+n*n-1;
00826 ipnum[9]=i+n+n-1;
00827 ipnum[10]=i+n*n+n-1;
00828 ipnum[11]=i+n*n*(n-1)+n+n-1;
00829
00830 ipnum[12]=i+n*n*(n-1)+n*(n-1)+1;
00831 ipnum[13]=i+n*(n-1)+1;
00832 ipnum[14]=i+1;
00833 ipnum[15]=i+n*n*(n-1)+1;
00834
00835 ipnum[16]=i+n*n+n*(n-1);
00836 ipnum[17]=i+n;
00837 ipnum[18]=i+n*n;
00838 ipnum[19]=i+n*n*(n-1)+n;
00839 }