437{
438 double a[4],
b[4], c[4], da[4], db[4], dc[4],
439 d2a[4], d2b[4], d2c[4];
441 d2bcP[4], dbdcP[4], bd2cP[4], bdcP[4];
445
449#define P(i,j,k) coefs[(ix+(i))*xs+(iy+(j))*ys+(iz+(k))]
450 cP[ 0] = (
P(0,0,0)*c[0]+
P(0,0,1)*c[1]+
P(0,0,2)*c[2]+
P(0,0,3)*c[3]);
451 cP[ 1] = (
P(0,1,0)*c[0]+
P(0,1,1)*c[1]+
P(0,1,2)*c[2]+
P(0,1,3)*c[3]);
452 cP[ 2] = (
P(0,2,0)*c[0]+
P(0,2,1)*c[1]+
P(0,2,2)*c[2]+
P(0,2,3)*c[3]);
453 cP[ 3] = (
P(0,3,0)*c[0]+
P(0,3,1)*c[1]+
P(0,3,2)*c[2]+
P(0,3,3)*c[3]);
454 cP[ 4] = (
P(1,0,0)*c[0]+
P(1,0,1)*c[1]+
P(1,0,2)*c[2]+
P(1,0,3)*c[3]);
455 cP[ 5] = (
P(1,1,0)*c[0]+
P(1,1,1)*c[1]+
P(1,1,2)*c[2]+
P(1,1,3)*c[3]);
456 cP[ 6] = (
P(1,2,0)*c[0]+
P(1,2,1)*c[1]+
P(1,2,2)*c[2]+
P(1,2,3)*c[3]);
457 cP[ 7] = (
P(1,3,0)*c[0]+
P(1,3,1)*c[1]+
P(1,3,2)*c[2]+
P(1,3,3)*c[3]);
458 cP[ 8] = (
P(2,0,0)*c[0]+
P(2,0,1)*c[1]+
P(2,0,2)*c[2]+
P(2,0,3)*c[3]);
459 cP[ 9] = (
P(2,1,0)*c[0]+
P(2,1,1)*c[1]+
P(2,1,2)*c[2]+
P(2,1,3)*c[3]);
460 cP[10] = (
P(2,2,0)*c[0]+
P(2,2,1)*c[1]+
P(2,2,2)*c[2]+
P(2,2,3)*c[3]);
461 cP[11] = (
P(2,3,0)*c[0]+
P(2,3,1)*c[1]+
P(2,3,2)*c[2]+
P(2,3,3)*c[3]);
462 cP[12] = (
P(3,0,0)*c[0]+
P(3,0,1)*c[1]+
P(3,0,2)*c[2]+
P(3,0,3)*c[3]);
463 cP[13] = (
P(3,1,0)*c[0]+
P(3,1,1)*c[1]+
P(3,1,2)*c[2]+
P(3,1,3)*c[3]);
464 cP[14] = (
P(3,2,0)*c[0]+
P(3,2,1)*c[1]+
P(3,2,2)*c[2]+
P(3,2,3)*c[3]);
465 cP[15] = (
P(3,3,0)*c[0]+
P(3,3,1)*c[1]+
P(3,3,2)*c[2]+
P(3,3,3)*c[3]);
466
467 dcP[ 0] = (
P(0,0,0)*dc[0]+
P(0,0,1)*dc[1]+
P(0,0,2)*dc[2]+
P(0,0,3)*dc[3]);
468 dcP[ 1] = (
P(0,1,0)*dc[0]+
P(0,1,1)*dc[1]+
P(0,1,2)*dc[2]+
P(0,1,3)*dc[3]);
469 dcP[ 2] = (
P(0,2,0)*dc[0]+
P(0,2,1)*dc[1]+
P(0,2,2)*dc[2]+
P(0,2,3)*dc[3]);
470 dcP[ 3] = (
P(0,3,0)*dc[0]+
P(0,3,1)*dc[1]+
P(0,3,2)*dc[2]+
P(0,3,3)*dc[3]);
471 dcP[ 4] = (
P(1,0,0)*dc[0]+
P(1,0,1)*dc[1]+
P(1,0,2)*dc[2]+
P(1,0,3)*dc[3]);
472 dcP[ 5] = (
P(1,1,0)*dc[0]+
P(1,1,1)*dc[1]+
P(1,1,2)*dc[2]+
P(1,1,3)*dc[3]);
473 dcP[ 6] = (
P(1,2,0)*dc[0]+
P(1,2,1)*dc[1]+
P(1,2,2)*dc[2]+
P(1,2,3)*dc[3]);
474 dcP[ 7] = (
P(1,3,0)*dc[0]+
P(1,3,1)*dc[1]+
P(1,3,2)*dc[2]+
P(1,3,3)*dc[3]);
475 dcP[ 8] = (
P(2,0,0)*dc[0]+
P(2,0,1)*dc[1]+
P(2,0,2)*dc[2]+
P(2,0,3)*dc[3]);
476 dcP[ 9] = (
P(2,1,0)*dc[0]+
P(2,1,1)*dc[1]+
P(2,1,2)*dc[2]+
P(2,1,3)*dc[3]);
477 dcP[10] = (
P(2,2,0)*dc[0]+
P(2,2,1)*dc[1]+
P(2,2,2)*dc[2]+
P(2,2,3)*dc[3]);
478 dcP[11] = (
P(2,3,0)*dc[0]+
P(2,3,1)*dc[1]+
P(2,3,2)*dc[2]+
P(2,3,3)*dc[3]);
479 dcP[12] = (
P(3,0,0)*dc[0]+
P(3,0,1)*dc[1]+
P(3,0,2)*dc[2]+
P(3,0,3)*dc[3]);
480 dcP[13] = (
P(3,1,0)*dc[0]+
P(3,1,1)*dc[1]+
P(3,1,2)*dc[2]+
P(3,1,3)*dc[3]);
481 dcP[14] = (
P(3,2,0)*dc[0]+
P(3,2,1)*dc[1]+
P(3,2,2)*dc[2]+
P(3,2,3)*dc[3]);
482 dcP[15] = (
P(3,3,0)*dc[0]+
P(3,3,1)*dc[1]+
P(3,3,2)*dc[2]+
P(3,3,3)*dc[3]);
483
484 d2cP[ 0] = (
P(0,0,0)*d2c[0]+
P(0,0,1)*d2c[1]+
P(0,0,2)*d2c[2]+
P(0,0,3)*d2c[3]);
485 d2cP[ 1] = (
P(0,1,0)*d2c[0]+
P(0,1,1)*d2c[1]+
P(0,1,2)*d2c[2]+
P(0,1,3)*d2c[3]);
486 d2cP[ 2] = (
P(0,2,0)*d2c[0]+
P(0,2,1)*d2c[1]+
P(0,2,2)*d2c[2]+
P(0,2,3)*d2c[3]);
487 d2cP[ 3] = (
P(0,3,0)*d2c[0]+
P(0,3,1)*d2c[1]+
P(0,3,2)*d2c[2]+
P(0,3,3)*d2c[3]);
488 d2cP[ 4] = (
P(1,0,0)*d2c[0]+
P(1,0,1)*d2c[1]+
P(1,0,2)*d2c[2]+
P(1,0,3)*d2c[3]);
489 d2cP[ 5] = (
P(1,1,0)*d2c[0]+
P(1,1,1)*d2c[1]+
P(1,1,2)*d2c[2]+
P(1,1,3)*d2c[3]);
490 d2cP[ 6] = (
P(1,2,0)*d2c[0]+
P(1,2,1)*d2c[1]+
P(1,2,2)*d2c[2]+
P(1,2,3)*d2c[3]);
491 d2cP[ 7] = (
P(1,3,0)*d2c[0]+
P(1,3,1)*d2c[1]+
P(1,3,2)*d2c[2]+
P(1,3,3)*d2c[3]);
492 d2cP[ 8] = (
P(2,0,0)*d2c[0]+
P(2,0,1)*d2c[1]+
P(2,0,2)*d2c[2]+
P(2,0,3)*d2c[3]);
493 d2cP[ 9] = (
P(2,1,0)*d2c[0]+
P(2,1,1)*d2c[1]+
P(2,1,2)*d2c[2]+
P(2,1,3)*d2c[3]);
494 d2cP[10] = (
P(2,2,0)*d2c[0]+
P(2,2,1)*d2c[1]+
P(2,2,2)*d2c[2]+
P(2,2,3)*d2c[3]);
495 d2cP[11] = (
P(2,3,0)*d2c[0]+
P(2,3,1)*d2c[1]+
P(2,3,2)*d2c[2]+
P(2,3,3)*d2c[3]);
496 d2cP[12] = (
P(3,0,0)*d2c[0]+
P(3,0,1)*d2c[1]+
P(3,0,2)*d2c[2]+
P(3,0,3)*d2c[3]);
497 d2cP[13] = (
P(3,1,0)*d2c[0]+
P(3,1,1)*d2c[1]+
P(3,1,2)*d2c[2]+
P(3,1,3)*d2c[3]);
498 d2cP[14] = (
P(3,2,0)*d2c[0]+
P(3,2,1)*d2c[1]+
P(3,2,2)*d2c[2]+
P(3,2,3)*d2c[3]);
499 d2cP[15] = (
P(3,3,0)*d2c[0]+
P(3,3,1)*d2c[1]+
P(3,3,2)*d2c[2]+
P(3,3,3)*d2c[3]);
500
501 bcP[0] = (
b[0]*cP[ 0] +
b[1]*cP[ 1] +
b[2]*cP[ 2] +
b[3]*cP[ 3]);
502 bcP[1] = (
b[0]*cP[ 4] +
b[1]*cP[ 5] +
b[2]*cP[ 6] +
b[3]*cP[ 7]);
503 bcP[2] = (
b[0]*cP[ 8] +
b[1]*cP[ 9] +
b[2]*cP[10] +
b[3]*cP[11]);
504 bcP[3] = (
b[0]*cP[12] +
b[1]*cP[13] +
b[2]*cP[14] +
b[3]*cP[15]);
505
506 dbcP[0] = ( db[0]*cP[ 0] + db[1]*cP[ 1] + db[2]*cP[ 2] + db[3]*cP[ 3]);
507 dbcP[1] = ( db[0]*cP[ 4] + db[1]*cP[ 5] + db[2]*cP[ 6] + db[3]*cP[ 7]);
508 dbcP[2] = ( db[0]*cP[ 8] + db[1]*cP[ 9] + db[2]*cP[10] + db[3]*cP[11]);
509 dbcP[3] = ( db[0]*cP[12] + db[1]*cP[13] + db[2]*cP[14] + db[3]*cP[15]);
510
511 bdcP[0] = (
b[0]*dcP[ 0] +
b[1]*dcP[ 1] +
b[2]*dcP[ 2] +
b[3]*dcP[ 3]);
512 bdcP[1] = (
b[0]*dcP[ 4] +
b[1]*dcP[ 5] +
b[2]*dcP[ 6] +
b[3]*dcP[ 7]);
513 bdcP[2] = (
b[0]*dcP[ 8] +
b[1]*dcP[ 9] +
b[2]*dcP[10] +
b[3]*dcP[11]);
514 bdcP[3] = (
b[0]*dcP[12] +
b[1]*dcP[13] +
b[2]*dcP[14] +
b[3]*dcP[15]);
515
516 bd2cP[0] = (
b[0]*d2cP[ 0] +
b[1]*d2cP[ 1] +
b[2]*d2cP[ 2] +
b[3]*d2cP[ 3]);
517 bd2cP[1] = (
b[0]*d2cP[ 4] +
b[1]*d2cP[ 5] +
b[2]*d2cP[ 6] +
b[3]*d2cP[ 7]);
518 bd2cP[2] = (
b[0]*d2cP[ 8] +
b[1]*d2cP[ 9] +
b[2]*d2cP[10] +
b[3]*d2cP[11]);
519 bd2cP[3] = (
b[0]*d2cP[12] +
b[1]*d2cP[13] +
b[2]*d2cP[14] +
b[3]*d2cP[15]);
520
521 d2bcP[0] = ( d2b[0]*cP[ 0] + d2b[1]*cP[ 1] + d2b[2]*cP[ 2] + d2b[3]*cP[ 3]);
522 d2bcP[1] = ( d2b[0]*cP[ 4] + d2b[1]*cP[ 5] + d2b[2]*cP[ 6] + d2b[3]*cP[ 7]);
523 d2bcP[2] = ( d2b[0]*cP[ 8] + d2b[1]*cP[ 9] + d2b[2]*cP[10] + d2b[3]*cP[11]);
524 d2bcP[3] = ( d2b[0]*cP[12] + d2b[1]*cP[13] + d2b[2]*cP[14] + d2b[3]*cP[15]);
525
526 dbdcP[0] = ( db[0]*dcP[ 0] + db[1]*dcP[ 1] + db[2]*dcP[ 2] + db[3]*dcP[ 3]);
527 dbdcP[1] = ( db[0]*dcP[ 4] + db[1]*dcP[ 5] + db[2]*dcP[ 6] + db[3]*dcP[ 7]);
528 dbdcP[2] = ( db[0]*dcP[ 8] + db[1]*dcP[ 9] + db[2]*dcP[10] + db[3]*dcP[11]);
529 dbdcP[3] = ( db[0]*dcP[12] + db[1]*dcP[13] + db[2]*dcP[14] + db[3]*dcP[15]);
530
531 *val = a[0]*bcP[0] + a[1]*bcP[1] + a[2]*bcP[2] + a[3]*bcP[3];
532 grad[0] = (da[0] *bcP[0] + da[1]*bcP[1] + da[2]*bcP[2] + da[3]*bcP[3]);
533 grad[1] = (a[0]*dbcP[0] + a[1]*dbcP[1] + a[2]*dbcP[2] + a[3]*dbcP[3]);
534 grad[2] = (a[0]*bdcP[0] + a[1]*bdcP[1] + a[2]*bdcP[2] + a[3]*bdcP[3]);
535
536 hess[0] = (d2a[0]*bcP[0] + d2a[1]*bcP[1] + d2a[2]*bcP[2] + d2a[3]*bcP[3]);
537
538 hess[1] = (da[0]*dbcP[0] + da[1]*dbcP[1] + da[1]*dbcP[1] + da[1]*dbcP[1]);
539 hess[3] = hess[1];
540
541 hess[2] = (da[0]*bdcP[0] + da[1]*bdcP[1] + da[1]*bdcP[1] + da[1]*bdcP[1]);
542 hess[6] = hess[2];
543
544 hess[4] = (a[0]*d2bcP[0] + a[1]*d2bcP[1] + a[2]*d2bcP[2] + a[3]*d2bcP[3]);
545
546 hess[5] = (a[0]*dbdcP[0] + a[1]*dbdcP[1] + a[2]*dbdcP[2] + a[3]*dbdcP[3]);
547 hess[7] = hess[5];
548
549 hess[8] = (a[0]*bd2cP[0] + a[1]*bd2cP[1] + a[2]*bd2cP[2] + a[3]*bd2cP[3]);
550#undef P
551
552}