00001 #include "basefun.h"
00002
00003
00004
00005
00006
00007
00008
00009
00010 void bf_lin_1d (double *n,double x)
00011 {
00012 n[0]=0.5*(1.0-x);
00013 n[1]=0.5*(1.0+x);
00014 }
00015
00016
00017
00018
00019
00020
00021 void dx_bf_lin_1d (double *n)
00022 {
00023 n[0]=-0.5;
00024 n[1]= 0.5;
00025 }
00026
00027
00028
00029
00030
00031
00032
00033 void bf_quad_1d (double *n,double x)
00034 {
00035 n[0]=x*(x-1.0)/2.0;
00036 n[1]=x*(1.0+x)/2.0;
00037 n[2]=1.0-x*x;
00038 }
00039
00040
00041
00042
00043
00044
00045
00046
00047 void dx_bf_quad_1d (double *n,double x)
00048 {
00049 n[0]=x-0.5;
00050 n[1]=x+0.5;
00051 n[2]=-2.0*x;
00052 }
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062 void dilat (double *n,double xi)
00063 {
00064 n[0] = 1.0-xi;
00065 n[1] = xi;
00066 }
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076 void der_dilat (double *n,double l)
00077 {
00078 n[0] = -1.0/l;
00079 n[1] = 1.0/l;
00080 }
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 void defl2D_fun (double *n,double xi,double l,double kappa)
00093 {
00094 n[0] = (2.0*xi*xi*xi - 3.0*xi*xi - 2.0*kappa*xi + 2.0*kappa+1.0)/(1.0+2.0*kappa);
00095 n[1] = (-1.0*xi*xi*xi + (2.0+kappa)*xi*xi - (kappa+1.0)*xi)*l/(1.0+2.0*kappa);
00096 n[2] = (-2.0*xi*xi*xi + 3.0*xi*xi + 2.0*kappa*xi)/(1.0+2.0*kappa);
00097 n[3] = (-1.0*xi*xi*xi + (1.0-kappa)*xi*xi + kappa*xi)*l/(1.0+2.0*kappa);
00098 }
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110 void der_defl2D_fun (double *n,double xi,double l,double kappa)
00111 {
00112 n[0] = (6.0*xi*xi - 6.0*xi - 2.0*kappa)/l/(1.0+2.0*kappa);
00113 n[1] = (-3.0*xi*xi + 2.0*(2.0+kappa)*xi - (kappa+1.0))/(1.0+2.0*kappa);
00114 n[2] = (-6.0*xi*xi + 6.0*xi + 2.0*kappa)/l/(1.0+2.0*kappa);
00115 n[3] = (-3.0*xi*xi + 2.0*(1.0-kappa)*xi + kappa)/(1.0+2.0*kappa);
00116 }
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128 void roty_fun (double *n,double xi,double l,double kappa)
00129 {
00130 n[0] = (-6.0*xi*xi + 6.0*xi)/l/(1.0+2.0*kappa);
00131 n[1] = (3.0*xi*xi - 2.0*(kappa+2.0)*xi + 1.0+2.0*kappa)/(1.0+2.0*kappa);
00132 n[2] = (6.0*xi*xi - 6.0*xi)/l/(1.0+2.0*kappa);
00133 n[3] = (3.0*xi*xi - 2.0*(1.0-kappa)*xi)/(1.0+2.0*kappa);
00134 }
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146 void der_roty_fun (double *n,double xi,double l,double kappa)
00147 {
00148 n[0] = (-12.0*xi + 6.0)/l/l/(1.0+2.0*kappa);
00149 n[1] = (6.0*xi - 2.0*(kappa+2.0))/l/(1.0+2.0*kappa);
00150 n[2] = (12.0*xi - 6.0)/l/l/(1.0+2.0*kappa);
00151 n[3] = (6.0*xi - 2.0*(1.0-kappa))/l/(1.0+2.0*kappa);
00152 }
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162 void a_coeff (double *a,double *x,double *y)
00163 {
00164 a[0]=x[1]*y[2]-x[2]*y[1];
00165 a[1]=x[2]*y[0]-x[0]*y[2];
00166 a[2]=x[0]*y[1]-x[1]*y[0];
00167 }
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178 void b_coeff (double *b,double *y)
00179 {
00180 b[0]=y[1]-y[2];
00181 b[1]=y[2]-y[0];
00182 b[2]=y[0]-y[1];
00183 }
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194 void c_coeff (double *c,double *x)
00195 {
00196 c[0]=x[2]-x[1];
00197 c[1]=x[0]-x[2];
00198 c[2]=x[1]-x[0];
00199 }
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211 void plsa (double *a,double *x,double *y,double det)
00212 {
00213 a[0]=(x[1]*y[2]-x[2]*y[1])/det;
00214 a[1]=(x[2]*y[0]-x[0]*y[2])/det;
00215 a[2]=(x[0]*y[1]-x[1]*y[0])/det;
00216 }
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228 void plsb (double *b,double *y,double det)
00229 {
00230 b[0]=(y[1]-y[2])/det;
00231 b[1]=(y[2]-y[0])/det;
00232 b[2]=(y[0]-y[1])/det;
00233 }
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245 void plsc (double *c,double *x,double det)
00246 {
00247 c[0]=(x[2]-x[1])/det;
00248 c[1]=(x[0]-x[2])/det;
00249 c[2]=(x[1]-x[0])/det;
00250 }
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260 void ac_bf_quad_3_2d (double *n,double *l)
00261 {
00262 n[0]=l[0]*(2.0*l[0]-1.0);
00263 n[1]=l[1]*(2.0*l[1]-1.0);
00264 n[2]=l[2]*(2.0*l[2]-1.0);
00265
00266 n[3]=l[0]*l[1]*4.0;
00267 n[4]=l[1]*l[2]*4.0;
00268 n[5]=l[2]*l[0]*4.0;
00269
00270
00271
00272
00273 }
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284 void ac_dx_bf_quad_3_2d (double *n,double *b,double *l)
00285 {
00286 n[0]=b[0]*(2.0*l[0]-1.0)+l[0]*2.0*b[0];
00287 n[1]=b[1]*(2.0*l[1]-1.0)+l[1]*2.0*b[1];
00288 n[2]=b[2]*(2.0*l[2]-1.0)+l[2]*2.0*b[2];
00289
00290 n[3]=(b[0]*l[1]+l[0]*b[1])*4.0;
00291 n[4]=(b[1]*l[2]+l[1]*b[2])*4.0;
00292 n[5]=(b[2]*l[0]+l[2]*b[0])*4.0;
00293
00294
00295
00296
00297 }
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308 void ac_dy_bf_quad_3_2d (double *n,double *c,double *l)
00309 {
00310 n[0]=c[0]*(2.0*l[0]-1.0)+l[0]*2.0*c[0];
00311 n[1]=c[1]*(2.0*l[1]-1.0)+l[1]*2.0*c[1];
00312 n[2]=c[2]*(2.0*l[2]-1.0)+l[2]*2.0*c[2];
00313
00314 n[3]=(c[0]*l[1]+l[0]*c[1])*4.0;
00315 n[4]=(c[1]*l[2]+l[1]*c[2])*4.0;
00316 n[5]=(c[2]*l[0]+l[2]*c[0])*4.0;
00317
00318
00319
00320
00321 }
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332 void bf_lin_3_2d (double *n,double x,double y)
00333 {
00334 n[0]=x;
00335 n[1]=y;
00336 n[2]=1.0-x-y;
00337 }
00338
00339
00340
00341
00342
00343
00344
00345
00346 void dx_bf_lin_3_2d (double *n)
00347 {
00348 n[0] = 1.0;
00349 n[1] = 0.0;
00350 n[2] = -1.0;
00351 }
00352
00353
00354
00355
00356
00357
00358
00359
00360 void dy_bf_lin_3_2d (double *n)
00361 {
00362 n[0] = 0.0;
00363 n[1] = 1.0;
00364 n[2] = -1.0;
00365 }
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375 void bf_quad_3_2d (double *n,double x,double y)
00376 {
00377 n[0]=x*(x-0.5)*2.0;
00378 n[1]=y*(y-0.5)*2.0;
00379 n[2]=(1.0-x-y)*(0.5-x-y)*2.0;
00380 n[3]=x*y*4.0;
00381 n[4]=y*(1.0-x-y)*4.0;
00382 n[5]=x*(1.0-x-y)*4.0;
00383 }
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393 void dx_bf_quad_3_2d (double *n,double x,double y)
00394 {
00395 n[0]=4.0*x-1.0;
00396 n[1]=0.0;
00397 n[2]=4.0*x+4.0*y-3.0;
00398 n[3]=4.0*y;
00399 n[4]=-4.0*y;
00400 n[5]=4.0-8.0*x-4.0*y;
00401 }
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411 void dy_bf_quad_3_2d (double *n,double x,double y)
00412 {
00413 n[0]=0.0;
00414 n[1]=4.0*y-1.0;
00415 n[2]=4.0*x+4.0*y-3.0;
00416 n[3]=4.0*x;
00417 n[4]=4.0-4.0*x-8.0*y;
00418 n[5]=-4.0*x;
00419 }
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429 void bf_lin_4_2d (double *n,double x,double y)
00430 {
00431 n[0]=0.25*(1.0+x)*(1.0+y);
00432 n[1]=0.25*(1.0-x)*(1.0+y);
00433 n[2]=0.25*(1.0-x)*(1.0-y);
00434 n[3]=0.25*(1.0+x)*(1.0-y);
00435 }
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445 void dx_bf_lin_4_2d (double *n,double y)
00446 {
00447 n[0]=0.25*(1.0+y);
00448 n[1]=0.25*(-1.0-y);
00449 n[2]=0.25*(-1.0+y);
00450 n[3]=0.25*(1.0-y);
00451 }
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461 void dy_bf_lin_4_2d (double *n,double x)
00462 {
00463 n[0]=0.25*(1.0+x);
00464 n[1]=0.25*(1.0-x);
00465 n[2]=0.25*(-1.0+x);
00466 n[3]=0.25*(-1.0-x);
00467 }
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477 void bf_quad_4_2d (double *n,double x,double y)
00478 {
00479 n[0]=0.25*(1.0+x)*(1.0+y)*(x+y-1.0);
00480 n[1]=0.25*(1.0-x)*(1.0+y)*(y-x-1.0);
00481 n[2]=0.25*(1.0-x)*(1.0-y)*(-x-y-1.0);
00482 n[3]=0.25*(1.0+x)*(1.0-y)*(x-y-1.0);
00483 n[4]=0.5*(1.0-x*x)*(1.0+y);
00484 n[5]=0.5*(1.0-x)*(1.0-y*y);
00485 n[6]=0.5*(1.0-x*x)*(1.0-y);
00486 n[7]=0.5*(1.0+x)*(1.0-y*y);
00487 }
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497 void dx_bf_quad_4_2d (double *n,double x,double y)
00498 {
00499 n[0]=0.25*(1.0+y)*(x+y-1.0)+0.25*(1.0+x)*(1.0+y);
00500 n[1]=0.25*(-1.0-y)*(y-x-1.0)-0.25*(1.0-x)*(1.0+y);
00501 n[2]=0.25*(-1.0+y)*(-x-y-1.0)-0.25*(1.0-x)*(1.0-y);
00502 n[3]=0.25*(1.0-y)*(x-y-1.0)+0.25*(1.0+x)*(1.0-y);
00503 n[4]=(1.0+y)*(-1.0)*x;
00504 n[5]=0.5*(y*y-1.0);
00505 n[6]=(y-1)*x;
00506 n[7]=0.5*(1.0-y*y);
00507 }
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517 void dy_bf_quad_4_2d (double *n,double x,double y)
00518 {
00519 n[0]=0.25*(1.0+x)*(x+y-1.0)+0.25*(1.0+x)*(1.0+y);
00520 n[1]=0.25*(1.0-x)*(y-x-1.0)+0.25*(1.0-x)*(1.0+y);
00521 n[2]=0.25*(1.0-x)*(x+y+1.0)-0.25*(1.0-x)*(1.0-y);
00522 n[3]=0.25*(1.0+x)*(y-x+1.0)-0.25*(1.0+x)*(1.0-y);
00523 n[4]=0.5*(1.0-x*x);
00524 n[5]=(x-1.0)*y;
00525 n[6]=0.5*(x*x-1.0);
00526 n[7]=(1.0+x)*(-1.0)*y;
00527 }
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538 void bf_rot_3_2d (double *n,double *l,double *b,double *c)
00539 {
00540 n[0] = l[0];
00541 n[1] = l[1];
00542 n[2] = l[2];
00543
00544 n[3] = (l[0]*l[1]*b[2] - l[2]*l[0]*b[1])/2.0;
00545 n[4] = (l[1]*l[2]*b[0] - l[0]*l[1]*b[2])/2.0;
00546 n[5] = (l[2]*l[0]*b[1] - l[1]*l[2]*b[0])/2.0;
00547
00548 n[6] = (l[0]*l[1]*c[2] - l[2]*l[0]*c[1])/2.0;
00549 n[7] = (l[1]*l[2]*c[0] - l[0]*l[1]*c[2])/2.0;
00550 n[8] = (l[2]*l[0]*c[1] - l[1]*l[2]*c[0])/2.0;
00551 }
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562 void dx_bf_rot_3_2d (double *n,double *l,double *b,double *c)
00563 {
00564 n[0] = b[0];
00565 n[1] = b[1];
00566 n[2] = b[2];
00567
00568 n[3] = (b[2]*l[1] - b[1]*l[2])*b[0]/2.0;
00569 n[4] = (b[0]*l[2] - b[2]*l[0])*b[1]/2.0;
00570 n[5] = (b[1]*l[0] - b[0]*l[1])*b[2]/2.0;
00571
00572 n[6] = (l[0]*(b[1]*c[2]-b[2]*c[1]) + b[0]*(c[2]*l[1]-c[1]*l[2]))/2.0;
00573 n[7] = (l[1]*(b[2]*c[0]-b[0]*c[2]) + b[1]*(c[0]*l[2]-c[2]*l[0]))/2.0;
00574 n[8] = (l[2]*(b[0]*c[1]-b[1]*c[0]) + b[2]*(c[1]*l[0]-c[0]*l[1]))/2.0;
00575 }
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586 void dy_bf_rot_3_2d (double *n,double *l,double *b,double *c)
00587 {
00588 n[0] = c[0];
00589 n[1] = c[1];
00590 n[2] = c[2];
00591
00592 n[3] = (l[0]*(c[1]*b[2]-c[2]*b[1]) + c[0]*(b[2]*l[1]-b[1]*l[2]))/2.0;
00593 n[4] = (l[1]*(c[2]*b[0]-c[0]*b[2]) + c[1]*(b[0]*l[2]-b[2]*l[0]))/2.0;
00594 n[5] = (l[2]*(c[0]*b[1]-c[1]*b[0]) + c[2]*(b[1]*l[0]-b[0]*l[1]))/2.0;
00595
00596 n[6] = (c[2]*l[1] - c[1]*l[2])*c[0]/2.0;
00597 n[7] = (c[0]*l[2] - c[2]*l[0])*c[1]/2.0;
00598 n[8] = (c[1]*l[0] - c[0]*l[1])*c[2]/2.0;
00599 }
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611 void bf_rot_4_2d (double *n,double x,double y,double *nx,double *ny,double *l)
00612 {
00613 n[0] = (1.0+x)*(1.0+y)/4.0;
00614 n[1] = (1.0-x)*(1.0+y)/4.0;
00615 n[2] = (1.0-x)*(1.0-y)/4.0;
00616 n[3] = (1.0+x)*(1.0-y)/4.0;
00617
00618 n[4] = ((1.0-y*y)*(1.0+x)*l[3]*nx[3]-(1.0-x*x)*(1.0+y)*l[0]*nx[0])/16.0;
00619 n[5] = ((1.0-x*x)*(1.0+y)*l[0]*nx[0]-(1.0-y*y)*(1.0-x)*l[1]*nx[1])/16.0;
00620 n[6] = ((1.0-y*y)*(1.0-x)*l[1]*nx[1]-(1.0-x*x)*(1.0-y)*l[2]*nx[2])/16.0;
00621 n[7] = ((1.0-x*x)*(1.0-y)*l[2]*nx[2]-(1.0-y*y)*(1.0+x)*l[3]*nx[3])/16.0;
00622
00623 n[8] = ((1.0-y*y)*(1.0+x)*l[3]*ny[3]-(1.0-x*x)*(1.0+y)*l[0]*ny[0])/16.0;
00624 n[9] = ((1.0-x*x)*(1.0+y)*l[0]*ny[0]-(1.0-y*y)*(1.0-x)*l[1]*ny[1])/16.0;
00625 n[10] = ((1.0-y*y)*(1.0-x)*l[1]*ny[1]-(1.0-x*x)*(1.0-y)*l[2]*ny[2])/16.0;
00626 n[11] = ((1.0-x*x)*(1.0-y)*l[2]*ny[2]-(1.0-y*y)*(1.0+x)*l[3]*ny[3])/16.0;
00627 }
00628
00629
00630
00631
00632
00633
00634
00635
00636
00637
00638
00639
00640 void dx_bf_rot_4_2d (double *n,double x,double y,double *nx,double *ny,double *l)
00641 {
00642 n[0] = (1.0+y)/4.0;
00643 n[1] = (1.0+y)/(-4.0);
00644 n[2] = (1.0-y)/(-4.0);
00645 n[3] = (1.0-y)/4.0;
00646
00647 n[4] = ( (1.0-y*y)*l[3]*nx[3] + 2.0*x*(1.0+y)*l[0]*nx[0])/16.0;
00648 n[5] = (-2.0*x*(1.0+y)*l[0]*nx[0] + (1.0-y*y)*l[1]*nx[1])/16.0;
00649 n[6] = (-1.0*(1.0-y*y)*l[1]*nx[1] + 2.0*x*(1.0-y)*l[2]*nx[2])/16.0;
00650 n[7] = (-2.0*x*(1.0-y)*l[2]*nx[2] - (1.0-y*y)*l[3]*nx[3])/16.0;
00651
00652 n[8] = ( (1.0-y*y)*l[3]*ny[3] + 2.0*x*(1.0+y)*l[0]*ny[0])/16.0;
00653 n[9] = (-2.0*x*(1.0+y)*l[0]*ny[0] + (1.0-y*y)*l[1]*ny[1])/16.0;
00654 n[10] = (-1.0*(1.0-y*y)*l[1]*ny[1] + 2.0*x*(1.0-y)*l[2]*ny[2])/16.0;
00655 n[11] = (-2.0*x*(1.0-y)*l[2]*ny[2] - (1.0-y*y)*l[3]*ny[3])/16.0;
00656 }
00657
00658
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669 void dy_bf_rot_4_2d (double *n,double x,double y,double *nx,double *ny,double *l)
00670 {
00671 n[0] = (1.0+x)/4.0;
00672 n[1] = (1.0-x)/4.0;
00673 n[2] = (1.0-x)/(-4.0);
00674 n[3] = (1.0+x)/(-4.0);
00675
00676 n[4] = (-2.0*y*(1.0+x)*l[3]*nx[3] - (1.0-x*x)*l[0]*nx[0])/16.0;
00677 n[5] = ( (1.0-x*x)*l[0]*nx[0] + 2.0*y*(1.0-x)*l[1]*nx[1])/16.0;
00678 n[6] = (-2.0*y*(1.0-x)*l[1]*nx[1] + (1.0-x*x)*l[2]*nx[2])/16.0;
00679 n[7] = (-1.0*(1.0-x*x)*l[2]*nx[2] + 2.0*y*(1.0+x)*l[3]*nx[3])/16.0;
00680
00681 n[8] = (-2.0*y*(1.0+x)*l[3]*ny[3] - (1.0-x*x)*l[0]*ny[0])/16.0;
00682 n[9] = ( (1.0-x*x)*l[0]*ny[0] + 2.0*y*(1.0-x)*l[1]*ny[1])/16.0;
00683 n[10] = (-2.0*y*(1.0-x)*l[1]*ny[1] + (1.0-x*x)*l[2]*ny[2])/16.0;
00684 n[11] = (-1.0*(1.0-x*x)*l[2]*ny[2] + 2.0*y*(1.0+x)*l[3]*ny[3])/16.0;
00685 }
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697 void bf_cct (double *n,double *l,double *sx,double *sy)
00698 {
00699 n[0]=l[0];
00700 n[1]=(l[0]*l[1]*sy[0]-l[2]*l[0]*sy[2])/2.0;
00701 n[2]=(l[2]*l[0]*sx[2]-l[0]*l[1]*sx[0])/2.0;
00702
00703 n[3]=l[1];
00704 n[4]=(l[1]*l[2]*sy[1]-l[0]*l[1]*sy[0])/2.0;
00705 n[5]=(l[0]*l[1]*sx[0]-l[1]*l[2]*sx[1])/2.0;
00706
00707 n[6]=l[2];
00708 n[7]=(l[2]*l[0]*sy[2]-l[1]*l[2]*sy[1])/2.0;
00709 n[8]=(l[1]*l[2]*sx[1]-l[2]*l[0]*sx[2])/2.0;
00710 }
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723 void dx_cct (double *n,double *l,double *b,double *sx,double *sy)
00724 {
00725 n[0]=b[0];
00726 n[1]=((b[0]*l[1]+l[0]*b[1])*sy[0]-(b[2]*l[0]+l[2]*b[0])*sy[2])/2.0;
00727 n[2]=((b[2]*l[0]+l[2]*b[0])*sx[2]-(b[0]*l[1]+l[0]*b[1])*sx[0])/2.0;
00728
00729 n[3]=b[1];
00730 n[4]=((b[1]*l[2]+l[1]*b[2])*sy[1]-(b[0]*l[1]+l[0]*b[1])*sy[0])/2.0;
00731 n[5]=((b[0]*l[1]+l[0]*b[1])*sx[0]-(b[1]*l[2]+l[1]*b[2])*sx[1])/2.0;
00732
00733 n[6]=b[2];
00734 n[7]=((b[2]*l[0]+l[2]*b[0])*sy[2]-(b[1]*l[2]+l[1]*b[2])*sy[1])/2.0;
00735 n[8]=((b[1]*l[2]+l[1]*b[2])*sx[1]-(b[2]*l[0]+l[2]*b[0])*sx[2])/2.0;
00736 }
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749 void dy_cct (double *n,double *l,double *c,double *sx,double *sy)
00750 {
00751 n[0]=c[0];
00752 n[1]=((c[0]*l[1]+l[0]*c[1])*sy[0]-(c[2]*l[0]+l[2]*c[0])*sy[2])/2.0;
00753 n[2]=((c[2]*l[0]+l[2]*c[0])*sx[2]-(c[0]*l[1]+l[0]*c[1])*sx[0])/2.0;
00754
00755 n[3]=c[1];
00756 n[4]=((c[1]*l[2]+l[1]*c[2])*sy[1]-(c[0]*l[1]+l[0]*c[1])*sy[0])/2.0;
00757 n[5]=((c[0]*l[1]+l[0]*c[1])*sx[0]-(c[1]*l[2]+l[1]*c[2])*sx[1])/2.0;
00758
00759 n[6]=c[2];
00760 n[7]=((c[2]*l[0]+l[2]*c[0])*sy[2]-(c[1]*l[2]+l[1]*c[2])*sy[1])/2.0;
00761 n[8]=((c[1]*l[2]+l[1]*c[2])*sx[1]-(c[2]*l[0]+l[2]*c[0])*sx[2])/2.0;
00762 }
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774 void a_coeff_3d (double *a,double *x,double *y,double *z,double v)
00775 {
00776 a[0] = x[1]*(y[1]*(z[3]-z[2])+y[2]*(z[1]-z[3])+y[3]*(z[2]-z[1]));
00777 a[0]+= y[1]*(z[1]*(x[3]-x[2])+z[2]*(x[1]-x[3])+z[3]*(x[2]-x[1]));
00778 a[0]+= z[1]*(x[1]*(y[3]-y[2])+x[2]*(y[1]-y[3])+x[3]*(y[2]-y[1]));
00779 a[0]/=6.0*v;
00780
00781 a[1] = x[2]*(y[2]*(z[0]-z[3])+y[3]*(z[2]-z[0])+y[0]*(z[3]-z[2]));
00782 a[1]+= y[2]*(z[2]*(x[0]-x[3])+z[3]*(x[2]-x[0])+z[0]*(x[3]-x[2]));
00783 a[1]+= z[2]*(x[2]*(y[0]-y[3])+x[3]*(y[2]-y[0])+x[0]*(y[3]-y[2]));
00784 a[1]/=6.0*v;
00785
00786 a[2] = x[3]*(y[3]*(z[1]-z[0])+y[0]*(z[3]-z[1])+y[1]*(z[0]-z[3]));
00787 a[2]+= y[3]*(z[3]*(x[1]-x[0])+z[0]*(x[3]-x[1])+z[1]*(x[0]-x[3]));
00788 a[2]+= z[3]*(x[3]*(y[1]-y[0])+x[0]*(y[3]-y[1])+x[1]*(y[0]-y[3]));
00789 a[2]/=6.0*v;
00790
00791 a[3] = x[0]*(y[0]*(z[2]-z[1])+y[1]*(z[0]-z[2])+y[2]*(z[1]-z[0]));
00792 a[3]+= y[0]*(z[0]*(x[2]-x[1])+z[1]*(x[0]-x[2])+z[2]*(x[1]-x[0]));
00793 a[3]+= z[0]*(x[0]*(y[2]-y[1])+x[1]*(y[0]-y[2])+x[2]*(y[1]-y[0]));
00794 a[3]/=6.0*v;
00795 }
00796
00797
00798
00799
00800
00801
00802
00803
00804
00805
00806
00807 void b_coeff_3d (double *b,double *y,double *z,double v)
00808 {
00809
00810 b[0]=-((y[2]-y[1])*(z[3]-z[1])-(y[3]-y[1])*(z[2]-z[1]))/6.0/v;
00811 b[1]=((y[3]-y[2])*(z[0]-z[2])-(y[0]-y[2])*(z[3]-z[2]))/6.0/v;
00812 b[2]=-((y[0]-y[3])*(z[1]-z[3])-(y[1]-y[3])*(z[0]-z[3]))/6.0/v;
00813 b[3]=((y[1]-y[0])*(z[2]-z[0])-(y[2]-y[0])*(z[1]-z[0]))/6.0/v;
00814
00815
00816
00817
00818
00819
00820 }
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832 void c_coeff_3d (double *c,double *x,double *z,double v)
00833 {
00834
00835 c[0]=-((x[3]-x[1])*(z[2]-z[1])-(x[2]-x[1])*(z[3]-z[1]))/6.0/v;
00836 c[1]=((x[0]-x[2])*(z[3]-z[2])-(x[3]-x[2])*(z[0]-z[2]))/6.0/v;
00837 c[2]=-((x[1]-x[3])*(z[0]-z[3])-(x[0]-x[3])*(z[1]-z[3]))/6.0/v;
00838 c[3]=((x[2]-x[0])*(z[1]-z[0])-(x[1]-x[0])*(z[2]-z[0]))/6.0/v;
00839
00840
00841
00842
00843
00844
00845 }
00846
00847
00848
00849
00850
00851
00852
00853
00854
00855
00856
00857 void d_coeff_3d (double *d,double *x,double *y,double v)
00858 {
00859
00860 d[0]=-((x[2]-x[1])*(y[3]-y[1])-(x[3]-x[1])*(y[2]-y[1]))/6.0/v;
00861 d[1]=((x[3]-x[2])*(y[0]-y[2])-(x[0]-x[2])*(y[3]-y[2]))/6.0/v;
00862 d[2]=-((x[0]-x[3])*(y[1]-y[3])-(x[1]-x[3])*(y[0]-y[3]))/6.0/v;
00863 d[3]=((x[1]-x[0])*(y[2]-y[0])-(x[2]-x[0])*(y[1]-y[0]))/6.0/v;
00864
00865
00866
00867
00868
00869
00870 }
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881 void vola_3d (double *a,double *x,double *y,double *z,double det)
00882 {
00883 a[0]=(x[1]*(y[2]*z[3]-y[3]*z[2]) + x[2]*(y[3]*z[1]-y[1]*z[3]) + x[3]*(y[1]*z[2]-y[2]*z[1]))/det;
00884 a[1]=(x[0]*(y[3]*z[2]-y[2]*z[3]) + x[2]*(y[0]*z[3]-y[3]*z[0]) + x[3]*(y[2]*z[0]-y[0]*z[2]))/det;
00885 a[2]=(x[0]*(y[1]*z[3]-y[3]*z[1]) + x[1]*(y[3]*z[0]-y[0]*z[3]) + x[3]*(y[0]*z[1]-y[1]*z[0]))/det;
00886 a[3]=(x[0]*(y[2]*z[1]-y[1]*z[2]) + x[1]*(y[0]*z[2]-y[2]*z[0]) + x[2]*(y[1]*z[0]-y[0]*z[1]))/det;
00887 }
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899 void volb_3d (double *b,double *y,double *z,double det)
00900 {
00901 b[0]=(y[1]*(z[3]-z[2]) + y[2]*(z[1]-z[3]) + y[3]*(z[2]-z[1]))/det;
00902 b[1]=(y[0]*(z[2]-z[3]) + y[2]*(z[3]-z[0]) + y[3]*(z[0]-z[2]))/det;
00903 b[2]=(y[0]*(z[3]-z[1]) + y[1]*(z[0]-z[3]) + y[3]*(z[1]-z[0]))/det;
00904 b[3]=(y[0]*(z[1]-z[2]) + y[1]*(z[2]-z[0]) + y[2]*(z[0]-z[1]))/det;
00905 }
00906
00907
00908
00909
00910
00911
00912
00913
00914
00915
00916
00917 void volc_3d (double *c,double *x,double *z,double det)
00918 {
00919 c[0]=(x[1]*(z[2]-z[3]) + x[2]*(z[3]-z[1]) + x[3]*(z[1]-z[2]))/det;
00920 c[1]=(x[0]*(z[3]-z[2]) + x[2]*(z[0]-z[3]) + x[3]*(z[2]-z[0]))/det;
00921 c[2]=(x[0]*(z[1]-z[3]) + x[1]*(z[3]-z[0]) + x[3]*(z[0]-z[1]))/det;
00922 c[3]=(x[0]*(z[2]-z[1]) + x[1]*(z[0]-z[2]) + x[2]*(z[1]-z[0]))/det;
00923 }
00924
00925
00926
00927
00928
00929
00930
00931
00932
00933 void vold_3d (double *d,double *x,double *y,double det)
00934 {
00935 d[0]=(x[1]*(y[3]-y[2]) + x[2]*(y[1]-y[3]) + x[3]*(y[2]-y[1]))/det;
00936 d[1]=(x[0]*(y[2]-y[3]) + x[2]*(y[3]-y[0]) + x[3]*(y[0]-y[2]))/det;
00937 d[2]=(x[0]*(y[3]-y[1]) + x[1]*(y[0]-y[3]) + x[3]*(y[1]-y[0]))/det;
00938 d[3]=(x[0]*(y[1]-y[2]) + x[1]*(y[2]-y[0]) + x[2]*(y[0]-y[1]))/det;
00939 }
00940
00941
00942
00943
00944
00945
00946
00947
00948
00949 void bf_lin_tet (double *n,double x,double y,double z)
00950 {
00951 n[0]=x;
00952 n[1]=y;
00953 n[2]=z;
00954 n[3]=1.0-x-y-z;
00955 }
00956
00957
00958
00959 void dx_bf_lin_tet (double *n)
00960 {
00961 n[0]=1.0;
00962 n[1]=0.0;
00963 n[2]=0.0;
00964 n[3]=-1.0;
00965 }
00966
00967
00968
00969 void dy_bf_lin_tet (double *n)
00970 {
00971 n[0]=0.0;
00972 n[1]=1.0;
00973 n[2]=0.0;
00974 n[3]=-1.0;
00975 }
00976
00977
00978
00979 void dz_bf_lin_tet (double *n)
00980 {
00981 n[0]=0.0;
00982 n[1]=0.0;
00983 n[2]=1.0;
00984 n[3]=-1.0;
00985 }
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996 void bf_quad_tet(double *n,double x,double y,double z)
00997 {
00998 n[0]=x*(x-0.5)*2.0;
00999 n[1]=y*(y-0.5)*2.0;
01000 n[2]=z*(z-0.5)*2.0;
01001 n[3]=(1.0-x-y-z)*(0.5-x-y-z)*2.0;
01002 n[4]=x*y*4.0;
01003 n[5]=y*z*4.0;
01004 n[6]=x*z*4.0;
01005 n[7]=x*(1.0-x-y-z)*4.0;
01006 n[8]=y*(1.0-x-y-z)*4.0;
01007 n[9]=z*(1.0-x-y-z)*4.0;
01008 }
01009
01010
01011
01012
01013
01014
01015
01016
01017
01018
01019 void dx_bf_quad_tet(double *n,double x,double y,double z)
01020 {
01021 n[0] = 4.0*x-1.0;
01022 n[1] = 0.0;
01023 n[2] = 0.0;
01024 n[3] = 4.0*(x+y+z)-3.0;
01025
01026 n[4] = 4.0*y;
01027 n[5] = 0.0;
01028 n[6] = 4.0*z;
01029
01030 n[7] = 4.0*(1.0-2.0*x-y-z);
01031 n[8] = -4.0*y;
01032 n[9] = -4.0*z;
01033 }
01034
01035
01036
01037
01038
01039
01040
01041
01042
01043
01044 void dy_bf_quad_tet(double *n,double x,double y,double z)
01045 {
01046 n[0] = 0.0;
01047 n[1] = 4.0*y-1.0;
01048 n[2] = 0.0;
01049 n[3] = 4.0*(x+y+z)-3.0;
01050
01051 n[4] = 4.0*x;
01052 n[5] = 4.0*z;
01053 n[6] = 0.0;
01054
01055 n[7] = -4.0*x;
01056 n[8] = 4.0*(1.0-x-2.0*y-z);
01057 n[9] = -4.0*z;
01058 }
01059
01060
01061
01062
01063
01064
01065
01066
01067
01068
01069 void dz_bf_quad_tet (double *n,double x,double y,double z)
01070 {
01071 n[0] = 0.0;
01072 n[1] = 0.0;
01073 n[2] = 4.0*z-1.0;
01074 n[3] = 4.0*(x+y+z)-3.0;
01075
01076 n[4] = 0.0;
01077 n[5] = 4.0*y;
01078 n[6] = 4.0*x;
01079
01080 n[7] = -4.0*x;
01081 n[8] = -4.0*y;
01082 n[9] = 4.0*(1.0-x-y-2.0*z);
01083 }
01084
01085
01086
01087
01088
01089
01090
01091
01092
01093
01094
01095 void bf_lin_wed_3d (double *n,double x,double y,double z)
01096 {
01097 n[0]=x*(1.0+z)/2.0;
01098 n[1]=y*(1.0+z)/2.0;
01099 n[2]=(1.0-x-y)*(1.0+z)/2.0;
01100 n[3]=x*(1.0-z)/2.0;
01101 n[4]=y*(1.0-z)/2.0;
01102 n[5]=(1.0-x-y)*(1.0-z)/2.0;
01103 }
01104
01105
01106
01107
01108
01109
01110
01111
01112
01113 void dx_bf_lin_wed_3d (double *n,double z)
01114 {
01115 n[0]=(1.0+z)/2.0;
01116 n[1]=0.0;
01117 n[2]=-1.0*(1.0+z)/2.0;
01118 n[3]=(1.0-z)/2.0;
01119 n[4]=0.0;
01120 n[5]=-1.0*(1.0-z)/2.0;
01121 }
01122
01123
01124
01125
01126
01127
01128
01129
01130
01131 void dy_bf_lin_wed_3d (double *n,double z)
01132 {
01133 n[0]=0.0;
01134 n[1]=(1.0+z)/2.0;
01135 n[2]=-1.0*(1.0+z)/2.0;
01136 n[3]=0.0;
01137 n[4]=(1.0-z)/2.0;
01138 n[5]=-1.0*(1.0-z)/2.0;
01139 }
01140
01141
01142
01143
01144
01145
01146
01147
01148
01149 void dz_bf_lin_wed_3d (double *n,double x,double y)
01150 {
01151 n[0]=x/2.0;
01152 n[1]=y/2.0;
01153 n[2]=(1.0-x-y)/2.0;
01154 n[3]=x/(-2.0);
01155 n[4]=y/(-2.0);
01156 n[5]=(1.0-x-y)/(-2.0);
01157 }
01158
01159
01160
01161
01162
01163
01164
01165
01166
01167
01168
01169
01170
01171
01172 void bf_quad_wed_3d (double *n,double x,double y,double z)
01173 {
01174 n[0] = x*(x-0.5)*(1.0+z)*z;
01175 n[1] = y*(y-0.5)*(1.0+z)*z;
01176 n[2] = (1.0-x-y)*(0.5-x-y)*(1.0+z)*z;
01177 n[3] = x*(x-0.5)*(z-1.0)*z;
01178 n[4] = y*(y-0.5)*(z-1.0)*z;
01179 n[5] = (1.0-x-y)*(0.5-x-y)*(z-1.0)*z;
01180 n[6] = 2.0*x*y*(1.0+z);
01181 n[7] = 2.0*y*(1.0-x-y)*(1.0+z);
01182 n[8] = 2.0*x*(1.0-x-y)*(1.0+z);
01183 n[9] = x*(1.0-z*z);
01184 n[10] = y*(1.0-z*z);
01185 n[11] = (1.0-x-y)*(1.0-z*z);
01186 n[12] = 2.0*x*y*(1.0-z);
01187 n[13] = 2.0*y*(1.0-x-y)*(1.0-z);
01188 n[14] = 2.0*x*(1.0-x-y)*(1.0-z);
01189 }
01190
01191
01192
01193
01194
01195
01196
01197
01198
01199 void dx_bf_quad_wed_3d (double *n,double x,double y,double z)
01200 {
01201 n[0] = (2.0*x-0.5)*(1.0+z)*z;
01202 n[1] = 0.0;
01203 n[2] = (2.0*x+2.0*y-1.5)*(1.0+z)*z;
01204 n[3] = (2.0*x-0.5)*(z-1.0)*z;
01205 n[4] = 0.0;
01206 n[5] = (2.0*x+2.0*y-1.5)*(z-1.0)*z;
01207 n[6] = 2.0*y*(1.0+z);
01208 n[7] = -2.0*y*(1.0+z);
01209 n[8] = (2.0-4.0*x-2.0*y)*(1.0+z);
01210 n[9] = (1.0-z*z);
01211 n[10] = 0.0;
01212 n[11] = z*z-1.0;
01213 n[12] = 2.0*y*(1.0-z);
01214 n[13] = 2.0*y*(z-1.0);
01215 n[14] = (2.0-4.0*x-2.0*y)*(1.0-z);
01216 }
01217
01218
01219
01220
01221
01222
01223
01224
01225
01226 void dy_bf_quad_wed_3d (double *n,double x,double y,double z)
01227 {
01228 n[0] = 0.0;
01229 n[1] = (2.0*y-0.5)*(1.0+z)*z;
01230 n[2] = (2.0*x+2.0*y-1.5)*(1.0+z)*z;
01231 n[3] = 0.0;
01232 n[4] = (2.0*y-0.5)*(z-1.0)*z;
01233 n[5] = (2.0*x+2.0*y-1.5)*(z-1.0)*z;
01234 n[6] = 2.0*x*(1.0+z);
01235 n[7] = (2.0-2.0*x-4.0*y)*(1.0+z);
01236 n[8] = -2.0*x*(1.0+z);
01237 n[9] = 0.0;
01238 n[10] = 1.0-z*z;
01239 n[11] = z*z-1.0;
01240 n[12] = 2.0*x*(1.0-z);
01241 n[13] = (2.0-2.0*x-4.0*y)*(1.0-z);
01242 n[14] = 2.0*x*(z-1.0);
01243 }
01244
01245
01246
01247
01248
01249
01250
01251
01252
01253 void dz_bf_quad_wed_3d (double *n,double x,double y,double z)
01254 {
01255 n[0] = x*(x-0.5)*(1.0+2.0*z);
01256 n[1] = y*(y-0.5)*(1.0+2.0*z);
01257 n[2] = (1.0-x-y)*(0.5-x-y)*(1.0+2.0*z);
01258 n[3] = x*(x-0.5)*(2.0*z-1.0);
01259 n[4] = y*(y-0.5)*(2.0*z-1.0);
01260 n[5] = (1.0-x-y)*(0.5-x-y)*(2.0*z-1.0);
01261 n[6] = 2.0*x*y;
01262 n[7] = 2.0*y*(1.0-x-y);
01263 n[8] = 2.0*x*(1.0-x-y);
01264 n[9] = -2.0*x*z;
01265 n[10] = -2.0*y*z;
01266 n[11] = -2.0*z*(1.0-x-y);
01267 n[12] = -2.0*x*y;
01268 n[13] = -2.0*y*(1.0-x-y);
01269 n[14] = -2.0*x*(1.0-x-y);
01270 }
01271
01272
01273
01274
01275
01276
01277
01278
01279
01280
01281
01282
01283
01284 void bf_lin_hex_3d (double *n,double x,double y,double z)
01285 {
01286 n[0]=(1.0+x)*(1.0+y)*(1.0+z)/8.0;
01287 n[1]=(1.0-x)*(1.0+y)*(1.0+z)/8.0;
01288 n[2]=(1.0-x)*(1.0-y)*(1.0+z)/8.0;
01289 n[3]=(1.0+x)*(1.0-y)*(1.0+z)/8.0;
01290 n[4]=(1.0+x)*(1.0+y)*(1.0-z)/8.0;
01291 n[5]=(1.0-x)*(1.0+y)*(1.0-z)/8.0;
01292 n[6]=(1.0-x)*(1.0-y)*(1.0-z)/8.0;
01293 n[7]=(1.0+x)*(1.0-y)*(1.0-z)/8.0;
01294 }
01295
01296
01297
01298
01299
01300
01301
01302 void dx_bf_lin_hex_3d (double *n,double y,double z)
01303 {
01304 n[0]=(1.0+y)*(1.0+z)/8.0;
01305 n[1]=(1.0+y)*(1.0+z)/(-8.0);
01306 n[2]=(1.0-y)*(1.0+z)/(-8.0);
01307 n[3]=(1.0-y)*(1.0+z)/8.0;
01308 n[4]=(1.0+y)*(1.0-z)/8.0;
01309 n[5]=(1.0+y)*(1.0-z)/(-8.0);
01310 n[6]=(1.0-y)*(1.0-z)/(-8.0);
01311 n[7]=(1.0-y)*(1.0-z)/8.0;
01312 }
01313
01314
01315
01316
01317
01318
01319
01320
01321
01322 void dy_bf_lin_hex_3d (double *n,double x,double z)
01323 {
01324 n[0]=(1.0+x)*(1.0+z)/8.0;
01325 n[1]=(1.0-x)*(1.0+z)/8.0;
01326 n[2]=(1.0-x)*(1.0+z)/(-8.0);
01327 n[3]=(1.0+x)*(1.0+z)/(-8.0);
01328 n[4]=(1.0+x)*(1.0-z)/8.0;
01329 n[5]=(1.0-x)*(1.0-z)/8.0;
01330 n[6]=(1.0-x)*(1.0-z)/(-8.0);
01331 n[7]=(1.0+x)*(1.0-z)/(-8.0);
01332 }
01333
01334
01335
01336
01337
01338
01339
01340
01341
01342 void dz_bf_lin_hex_3d (double *n,double x,double y)
01343 {
01344 n[0]=(1.0+x)*(1.0+y)/8.0;
01345 n[1]=(1.0-x)*(1.0+y)/8.0;
01346 n[2]=(1.0-x)*(1.0-y)/8.0;
01347 n[3]=(1.0+x)*(1.0-y)/8.0;
01348 n[4]=(1.0+x)*(1.0+y)/(-8.0);
01349 n[5]=(1.0-x)*(1.0+y)/(-8.0);
01350 n[6]=(1.0-x)*(1.0-y)/(-8.0);
01351 n[7]=(1.0+x)*(1.0-y)/(-8.0);
01352 }
01353
01354
01355
01356
01357
01358
01359
01360
01361
01362 void bf_quad_hex_3d (double *n,double x,double y,double z)
01363 {
01364 n[0] = (1.0+x)*(1.0+y)*(1.0+z)*(x+y+z-2.0)/8.0;
01365 n[1] = (1.0-x)*(1.0+y)*(1.0+z)*(y-x+z-2.0)/8.0;
01366 n[2] = (1.0-x)*(1.0-y)*(1.0+z)*(z-x-y-2.0)/8.0;
01367 n[3] = (1.0+x)*(1.0-y)*(1.0+z)*(x-y+z-2.0)/8.0;
01368
01369 n[4] = (1.0+x)*(1.0+y)*(1.0-z)*(x+y-z-2.0)/8.0;
01370 n[5] = (1.0-x)*(1.0+y)*(1.0-z)*(y-x-z-2.0)/8.0;
01371 n[6] = (1.0-x)*(1.0-y)*(1.0-z)*(x+y+z+2.0)/(-8.0);
01372 n[7] = (1.0+x)*(1.0-y)*(1.0-z)*(x-y-z-2.0)/8.0;
01373
01374 n[8] = (1.0-x*x)*(1.0+y)*(1.0+z)/4.0;
01375 n[9] = (1.0-y*y)*(1.0-x)*(1.0+z)/4.0;
01376 n[10] = (1.0-x*x)*(1.0-y)*(1.0+z)/4.0;
01377 n[11] = (1.0-y*y)*(1.0+x)*(1.0+z)/4.0;
01378
01379 n[12] = (1.0+x)*(1.0+y)*(1.0-z*z)/4.0;
01380 n[13] = (1.0-x)*(1.0+y)*(1.0-z*z)/4.0;
01381 n[14] = (1.0-x)*(1.0-y)*(1.0-z*z)/4.0;
01382 n[15] = (1.0+x)*(1.0-y)*(1.0-z*z)/4.0;
01383
01384 n[16] = (1.0-x*x)*(1.0+y)*(1.0-z)/4.0;
01385 n[17] = (1.0-y*y)*(1.0-x)*(1.0-z)/4.0;
01386 n[18] = (1.0-x*x)*(1.0-y)*(1.0-z)/4.0;
01387 n[19] = (1.0-y*y)*(1.0+x)*(1.0-z)/4.0;
01388 }
01389
01390
01391
01392
01393
01394
01395
01396
01397
01398 void dx_bf_quad_hex_3d (double *n,double x,double y,double z)
01399 {
01400 n[0] = ((1.0+y)*(1.0+z)*(x+y+z-2.0) + (1.0+x)*(1.0+y)*(1.0+z))/8.0;
01401 n[1] = ((1.0+y)*(1.0+z)*(y-x+z-2.0) + (1.0-x)*(1.0+y)*(1.0+z))/(-8.0);
01402 n[2] = ((1.0-y)*(1.0+z)*(z-x-y-2.0) + (1.0-x)*(1.0-y)*(1.0+z))/(-8.0);
01403 n[3] = ((1.0-y)*(1.0+z)*(x-y+z-2.0) + (1.0+x)*(1.0-y)*(1.0+z))/8.0;
01404
01405 n[4] = ((1.0+y)*(1.0-z)*(x+y-z-2.0) + (1.0+x)*(1.0+y)*(1.0-z))/8.0;
01406 n[5] = ((1.0+y)*(1.0-z)*(y-x-z-2.0) + (1.0-x)*(1.0+y)*(1.0-z))/(-8.0);
01407 n[6] = ((1.0-y)*(1.0-z)*(x+y+z+2.0) - (1.0-x)*(1.0-y)*(1.0-z))/8.0;
01408 n[7] = ((1.0-y)*(1.0-z)*(x-y-z-2.0) + (1.0+x)*(1.0-y)*(1.0-z))/8.0;
01409
01410 n[8] = x*(1.0+y)*(1.0+z)/(-2.0);
01411 n[9] = (1.0-y*y)*(1.0+z)/(-4.0);
01412 n[10] = x*(1.0-y)*(1.0+z)/(-2.0);
01413 n[11] = (1.0-y*y)*(1.0+z)/4.0;
01414
01415 n[12] = (1.0+y)*(1.0-z*z)/4.0;
01416 n[13] = (1.0+y)*(1.0-z*z)/(-4.0);
01417 n[14] = (1.0-y)*(1.0-z*z)/(-4.0);
01418 n[15] = (1.0-y)*(1.0-z*z)/4.0;
01419
01420 n[16] = x*(1.0+y)*(1.0-z)/(-2.0);
01421 n[17] = (1.0-y*y)*(1.0-z)/(-4.0);
01422 n[18] = x*(1.0-y)*(1.0-z)/(-2.0);
01423 n[19] = (1.0-y*y)*(1.0-z)/4.0;
01424 }
01425
01426
01427
01428
01429
01430
01431
01432
01433
01434 void dy_bf_quad_hex_3d (double *n,double x,double y,double z)
01435 {
01436 n[0] = ((1.0+x)*(1.0+z)*(x+y+z-2.0) + (1.0+x)*(1.0+y)*(1.0+z))/8.0;
01437 n[1] = ((1.0-x)*(1.0+z)*(y-x+z-2.0) + (1.0-x)*(1.0+y)*(1.0+z))/8.0;
01438 n[2] = ((1.0-x)*(1.0+z)*(z-x-y-2.0) + (1.0-x)*(1.0-y)*(1.0+z))/(-8.0);
01439 n[3] = ((1.0+x)*(1.0+z)*(x-y+z-2.0) + (1.0+x)*(1.0-y)*(1.0+z))/(-8.0);
01440
01441 n[4] = ((1.0+x)*(1.0-z)*(x+y-z-2.0) + (1.0+x)*(1.0+y)*(1.0-z))/8.0;
01442 n[5] = ((1.0-x)*(1.0-z)*(y-x-z-2.0) + (1.0-x)*(1.0+y)*(1.0-z))/8.0;
01443 n[6] = ((1.0-x)*(1.0-z)*(x+y+z+2.0) - (1.0-x)*(1.0-y)*(1.0-z))/8.0;
01444 n[7] = ((1.0+x)*(1.0-z)*(x-y-z-2.0) + (1.0+x)*(1.0-y)*(1.0-z))/(-8.0);
01445
01446 n[8] = (1.0-x*x)*(1.0+z)/4.0;
01447 n[9] = y*(1.0-x)*(1.0+z)/(-2.0);
01448 n[10] = (1.0-x*x)*(1.0+z)/(-4.0);
01449 n[11] = y*(1.0+x)*(1.0+z)/(-2.0);
01450
01451 n[12] = (1.0+x)*(1.0-z*z)/4.0;
01452 n[13] = (1.0-x)*(1.0-z*z)/4.0;
01453 n[14] = (1.0-x)*(1.0-z*z)/(-4.0);
01454 n[15] = (1.0+x)*(1.0-z*z)/(-4.0);
01455
01456 n[16] = (1.0-x*x)*(1.0-z)/4.0;
01457 n[17] = y*(1.0-x)*(1.0-z)/(-2.0);
01458 n[18] = (1.0-x*x)*(1.0-z)/(-4.0);
01459 n[19] = y*(1.0+x)*(1.0-z)/(-2.0);
01460 }
01461
01462
01463
01464
01465
01466
01467
01468 void dz_bf_quad_hex_3d (double *n,double x,double y,double z)
01469 {
01470 n[0] = ((1.0+x)*(1.0+y)*(x+y+z-2.0) + (1.0+x)*(1.0+y)*(1.0+z))/8.0;
01471 n[1] = ((1.0-x)*(1.0+y)*(y-x+z-2.0) + (1.0-x)*(1.0+y)*(1.0+z))/8.0;
01472 n[2] = ((1.0-x)*(1.0-y)*(z-x-y-2.0) + (1.0-x)*(1.0-y)*(1.0+z))/8.0;
01473 n[3] = ((1.0+x)*(1.0-y)*(x-y+z-2.0) + (1.0+x)*(1.0-y)*(1.0+z))/8.0;
01474
01475 n[4] = ((1.0+x)*(1.0+y)*(x+y-z-2.0) + (1.0+x)*(1.0+y)*(1.0-z))/(-8.0);
01476 n[5] = ((1.0-x)*(1.0+y)*(y-x-z-2.0) + (1.0-x)*(1.0+y)*(1.0-z))/(-8.0);
01477 n[6] = ((1.0-x)*(1.0-y)*(x+y+z+2.0) - (1.0-x)*(1.0-y)*(1.0-z))/8.0;
01478 n[7] = ((1.0+x)*(1.0-y)*(x-y-z-2.0) + (1.0+x)*(1.0-y)*(1.0-z))/(-8.0);
01479
01480 n[8] = (1.0-x*x)*(1.0+y)/4.0;
01481 n[9] = (1.0-y*y)*(1.0-x)/4.0;
01482 n[10] = (1.0-x*x)*(1.0-y)/4.0;
01483 n[11] = (1.0-y*y)*(1.0+x)/4.0;
01484
01485 n[12] = (1.0+x)*(1.0+y)*z/(-2.0);
01486 n[13] = (1.0-x)*(1.0+y)*z/(-2.0);
01487 n[14] = (1.0-x)*(1.0-y)*z/(-2.0);
01488 n[15] = (1.0+x)*(1.0-y)*z/(-2.0);
01489
01490 n[16] = (1.0-x*x)*(1.0+y)/(-4.0);
01491 n[17] = (1.0-y*y)*(1.0-x)/(-4.0);
01492 n[18] = (1.0-x*x)*(1.0-y)/(-4.0);
01493 n[19] = (1.0-y*y)*(1.0+x)/(-4.0);
01494 }
01495
01496
01497 void bf_quad_hexrot_3d (double *n,double x,double y,double z)
01498 {
01499
01500 n[0] = (1.0-x*x)*(1.0+y)*(1.0+z)/4.0;
01501 n[1] = (1.0-y*y)*(1.0-x)*(1.0+z)/4.0;
01502 n[2] = (1.0-x*x)*(1.0-y)*(1.0+z)/4.0;
01503 n[3] = (1.0-y*y)*(1.0+x)*(1.0+z)/4.0;
01504
01505 n[4] = (1.0+x)*(1.0+y)*(1.0-z*z)/4.0;
01506 n[5] = (1.0-x)*(1.0+y)*(1.0-z*z)/4.0;
01507 n[6] = (1.0-x)*(1.0-y)*(1.0-z*z)/4.0;
01508 n[7] = (1.0+x)*(1.0-y)*(1.0-z*z)/4.0;
01509
01510 n[8] = (1.0-x*x)*(1.0+y)*(1.0-z)/4.0;
01511 n[9] = (1.0-y*y)*(1.0-x)*(1.0-z)/4.0;
01512 n[10] = (1.0-x*x)*(1.0-y)*(1.0-z)/4.0;
01513 n[11] = (1.0-y*y)*(1.0+x)*(1.0-z)/4.0;
01514 }
01515
01516 void dx_bf_quad_hexrot_3d (double *n,double x,double y,double z)
01517 {
01518
01519
01520 n[0] = x*(1.0+y)*(1.0+z)/(-2.0);
01521 n[1] = (1.0-y*y)*(1.0+z)/(-4.0);
01522 n[2] = x*(1.0-y)*(1.0+z)/(-2.0);
01523 n[3] = (1.0-y*y)*(1.0+z)/4.0;
01524
01525 n[4] = (1.0+y)*(1.0-z*z)/4.0;
01526 n[5] = (1.0+y)*(1.0-z*z)/(-4.0);
01527 n[6] = (1.0-y)*(1.0-z*z)/(-4.0);
01528 n[7] = (1.0-y)*(1.0-z*z)/4.0;
01529
01530 n[8] = x*(1.0+y)*(1.0-z)/(-2.0);
01531 n[9] = (1.0-y*y)*(1.0-z)/(-4.0);
01532 n[10] = x*(1.0-y)*(1.0-z)/(-2.0);
01533 n[11] = (1.0-y*y)*(1.0-z)/4.0;
01534 }
01535 void dy_bf_quad_hexrot_3d (double *n,double x,double y,double z)
01536 {
01537
01538
01539 n[0] = (1.0-x*x)*(1.0+z)/4.0;
01540 n[1] = y*(1.0-x)*(1.0+z)/(-2.0);
01541 n[2] = (1.0-x*x)*(1.0+z)/(-4.0);
01542 n[3] = y*(1.0+x)*(1.0+z)/(-2.0);
01543
01544 n[4] = (1.0+x)*(1.0-z*z)/4.0;
01545 n[5] = (1.0-x)*(1.0-z*z)/4.0;
01546 n[6] = (1.0-x)*(1.0-z*z)/(-4.0);
01547 n[7] = (1.0+x)*(1.0-z*z)/(-4.0);
01548
01549 n[8] = (1.0-x*x)*(1.0-z)/4.0;
01550 n[9] = y*(1.0-x)*(1.0-z)/(-2.0);
01551 n[10] = (1.0-x*x)*(1.0-z)/(-4.0);
01552 n[11] = y*(1.0+x)*(1.0-z)/(-2.0);
01553
01554 }
01555 void dz_bf_quad_hexrot_3d (double *n,double x,double y,double z)
01556 {
01557
01558
01559 n[0] = (1.0-x*x)*(1.0+y)/4.0;
01560 n[1] = (1.0-y*y)*(1.0-x)/4.0;
01561 n[2] = (1.0-x*x)*(1.0-y)/4.0;
01562 n[3] = (1.0-y*y)*(1.0+x)/4.0;
01563
01564 n[4] = (1.0+x)*(1.0+y)*z/(-2.0);
01565 n[5] = (1.0-x)*(1.0+y)*z/(-2.0);
01566 n[6] = (1.0-x)*(1.0-y)*z/(-2.0);
01567 n[7] = (1.0+x)*(1.0-y)*z/(-2.0);
01568
01569 n[8] = (1.0-x*x)*(1.0+y)/(-4.0);
01570 n[9] = (1.0-y*y)*(1.0-x)/(-4.0);
01571 n[10] = (1.0-x*x)*(1.0-y)/(-4.0);
01572 n[11] = (1.0-y*y)*(1.0+x)/(-4.0);
01573 }