43 #if defined(DEBUG) && !defined(NDEBUG) 96 const short int n_iter = (k > n-
k) ? n-k : k;
97 for (
short int j = 1; j <= n_iter; j++, n--) {
100 else if (ret % j == 0)
191 v[0] = xb[0] - xa[0];
192 v[1] = xb[1] - xa[1];
193 v[2] = xb[2] - xa[2];
195 return sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);
215 return ((xb[0] - xa[0])*xc[0]+(xb[1] - xa[1])*xc[1]+(xb[2] - xa[2])*xc[2]);
238 return (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);
256 cs_real_t uv = u[0]*v[0] + u[1]*v[1] + u[2]*v[2];
274 return sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);
290 cs_real_t v2 = v[0]*v[0] + v[1]*v[1] + v[2]*v[2];
312 vout[0] = inv_norm * vin[0];
313 vout[1] = inv_norm * vin[1];
314 vout[2] = inv_norm * vin[2];
333 mv[0] = m[0][0]*v[0] + m[0][1]*v[1] + m[0][2]*v[2];
334 mv[1] = m[1][0]*v[0] + m[1][1]*v[1] + m[1][2]*v[2];
335 mv[2] = m[2][0]*v[0] + m[2][1]*v[1] + m[2][2]*v[2];
354 mv[0] = m[0][0]*v[0] + m[1][0]*v[1] + m[2][0]*v[2];
355 mv[1] = m[0][1]*v[0] + m[1][1]*v[1] + m[2][1]*v[2];
356 mv[2] = m[0][2]*v[0] + m[1][2]*v[1] + m[2][2]*v[2];
376 mv[0] = m[0] * v[0] + m[3] * v[1] + m[5] * v[2];
377 mv[1] = m[3] * v[0] + m[1] * v[1] + m[4] * v[2];
378 mv[2] = m[5] * v[0] + m[4] * v[1] + m[2] * v[2];
398 mv[0] += m[0] * v[0] + m[3] * v[1] + m[5] * v[2];
399 mv[1] += m[3] * v[0] + m[1] * v[1] + m[4] * v[2];
400 mv[2] += m[5] * v[0] + m[4] * v[1] + m[2] * v[2];
419 for (
int i = 0; i < 6; i++) {
420 for (
int j = 0; j < 6; j++)
421 mv[i] = m[i][j] * v[j];
441 for (
int i = 0; i < 6; i++) {
442 for (
int j = 0; j < 6; j++)
443 mv[i] += m[i][j] * v[j];
460 const cs_real_t com0 = m[1][1]*m[2][2] - m[2][1]*m[1][2];
461 const cs_real_t com1 = m[2][1]*m[0][2] - m[0][1]*m[2][2];
462 const cs_real_t com2 = m[0][1]*m[1][2] - m[1][1]*m[0][2];
464 return m[0][0]*com0 + m[1][0]*com1 + m[2][0]*com2;
480 const cs_real_t com0 = m[1]*m[2] - m[4]*m[4];
481 const cs_real_t com1 = m[4]*m[5] - m[3]*m[2];
482 const cs_real_t com2 = m[3]*m[4] - m[1]*m[5];
484 return m[0]*com0 + m[3]*com1 + m[5]*com2;
498 #if defined(__INTEL_COMPILER) 499 #pragma optimization_level 0 507 uv[0] = u[1]*v[2] - u[2]*v[1];
508 uv[1] = u[2]*v[0] - u[0]*v[2];
509 uv[2] = u[0]*v[1] - u[1]*v[0];
525 out[0][0] = in[1][1]*in[2][2] - in[2][1]*in[1][2];
526 out[0][1] = in[2][1]*in[0][2] - in[0][1]*in[2][2];
527 out[0][2] = in[0][1]*in[1][2] - in[1][1]*in[0][2];
529 out[1][0] = in[2][0]*in[1][2] - in[1][0]*in[2][2];
530 out[1][1] = in[0][0]*in[2][2] - in[2][0]*in[0][2];
531 out[1][2] = in[1][0]*in[0][2] - in[0][0]*in[1][2];
533 out[2][0] = in[1][0]*in[2][1] - in[2][0]*in[1][1];
534 out[2][1] = in[2][0]*in[0][1] - in[0][0]*in[2][1];
535 out[2][2] = in[0][0]*in[1][1] - in[1][0]*in[0][1];
537 const double det = in[0][0]*out[0][0]+in[1][0]*out[0][1]+in[2][0]*out[0][2];
538 const double invdet = 1/det;
540 out[0][0] *= invdet, out[0][1] *= invdet, out[0][2] *= invdet;
541 out[1][0] *= invdet, out[1][1] *= invdet, out[1][2] *= invdet;
542 out[2][0] *= invdet, out[2][1] *= invdet, out[2][2] *= invdet;
556 cs_real_t a00 = a[1][1]*a[2][2] - a[2][1]*a[1][2];
557 cs_real_t a01 = a[2][1]*a[0][2] - a[0][1]*a[2][2];
558 cs_real_t a02 = a[0][1]*a[1][2] - a[1][1]*a[0][2];
559 cs_real_t a10 = a[2][0]*a[1][2] - a[1][0]*a[2][2];
560 cs_real_t a11 = a[0][0]*a[2][2] - a[2][0]*a[0][2];
561 cs_real_t a12 = a[1][0]*a[0][2] - a[0][0]*a[1][2];
562 cs_real_t a20 = a[1][0]*a[2][1] - a[2][0]*a[1][1];
563 cs_real_t a21 = a[2][0]*a[0][1] - a[0][0]*a[2][1];
564 cs_real_t a22 = a[0][0]*a[1][1] - a[1][0]*a[0][1];
566 double det_inv = 1. / (a[0][0]*a00 + a[1][0]*a01 + a[2][0]*a02);
568 a[0][0] = a00 * det_inv;
569 a[0][1] = a01 * det_inv;
570 a[0][2] = a02 * det_inv;
571 a[1][0] = a10 * det_inv;
572 a[1][1] = a11 * det_inv;
573 a[1][2] = a12 * det_inv;
574 a[2][0] = a20 * det_inv;
575 a[2][1] = a21 * det_inv;
576 a[2][2] = a22 * det_inv;
591 cs_real_t a00 = a[1][1]*a[2][2] - a[2][1]*a[1][2];
592 cs_real_t a01 = a[2][1]*a[0][2] - a[0][1]*a[2][2];
593 cs_real_t a02 = a[0][1]*a[1][2] - a[1][1]*a[0][2];
594 cs_real_t a11 = a[0][0]*a[2][2] - a[2][0]*a[0][2];
595 cs_real_t a12 = a[1][0]*a[0][2] - a[0][0]*a[1][2];
596 cs_real_t a22 = a[0][0]*a[1][1] - a[1][0]*a[0][1];
598 double det_inv = 1. / (a[0][0]*a00 + a[1][0]*a01 + a[2][0]*a02);
600 a[0][0] = a00 * det_inv;
601 a[0][1] = a01 * det_inv;
602 a[0][2] = a02 * det_inv;
603 a[1][0] = a01 * det_inv;
604 a[1][1] = a11 * det_inv;
605 a[1][2] = a12 * det_inv;
606 a[2][0] = a02 * det_inv;
607 a[2][1] = a12 * det_inv;
608 a[2][2] = a22 * det_inv;
629 sout[0] = s[1]*s[2] - s[4]*s[4];
630 sout[1] = s[0]*s[2] - s[5]*s[5];
631 sout[2] = s[0]*s[1] - s[3]*s[3];
632 sout[3] = s[4]*s[5] - s[3]*s[2];
633 sout[4] = s[3]*s[5] - s[0]*s[4];
634 sout[5] = s[3]*s[4] - s[1]*s[5];
636 detinv = 1. / (s[0]*sout[0] + s[3]*sout[3] + s[5]*sout[5]);
667 sout[0] = s1[0]*s2[0] + s1[3]*s2[3] + s1[5]*s2[5];
669 sout[1] = s1[3]*s2[3] + s1[1]*s2[1] + s1[4]*s2[4];
671 sout[2] = s1[5]*s2[5] + s1[4]*s2[4] + s1[2]*s2[2];
673 sout[3] = s1[0]*s2[3] + s1[3]*s2[1] + s1[5]*s2[4];
675 sout[4] = s1[3]*s2[5] + s1[1]*s2[4] + s1[4]*s2[2];
677 sout[5] = s1[0]*s2[5] + s1[3]*s2[4] + s1[5]*s2[2];
695 int iindex[6], jindex[6];
697 tens2vect[0][0] = 0; tens2vect[0][1] = 3; tens2vect[0][2] = 5;
698 tens2vect[1][0] = 3; tens2vect[1][1] = 1; tens2vect[1][2] = 4;
699 tens2vect[2][0] = 5; tens2vect[2][1] = 4; tens2vect[2][2] = 2;
701 iindex[0] = 0; iindex[1] = 1; iindex[2] = 2;
702 iindex[3] = 0; iindex[4] = 1; iindex[5] = 0;
704 jindex[0] = 0; jindex[1] = 1; jindex[2] = 2;
705 jindex[3] = 1; jindex[4] = 2; jindex[5] = 2;
711 for (
int i = 0; i < 6; i++) {
714 for (
int k = 0;
k < 3;
k++) {
715 int ik = tens2vect[
k][ii];
716 int jk = tens2vect[
k][jj];
718 sout[
ik][i] += s[
k][jj];
720 sout[jk][i] += s[
k][ii];
748 _sout[0][0] = s1[0]*s2[0] + s1[3]*s2[3] + s1[5]*s2[5];
750 _sout[1][1] = s1[3]*s2[3] + s1[1]*s2[1] + s1[4]*s2[4];
752 _sout[2][2] = s1[5]*s2[5] + s1[4]*s2[4] + s1[2]*s2[2];
754 _sout[0][1] = s1[0]*s2[3] + s1[3]*s2[1] + s1[5]*s2[4];
756 _sout[1][0] = s2[0]*s1[3] + s2[3]*s1[1] + s2[5]*s1[4];
758 _sout[1][2] = s1[3]*s2[5] + s1[1]*s2[4] + s1[4]*s2[2];
760 _sout[2][1] = s2[3]*s1[5] + s2[1]*s1[4] + s2[4]*s1[2];
762 _sout[0][2] = s1[0]*s2[5] + s1[3]*s2[4] + s1[5]*s2[2];
764 _sout[2][0] = s2[0]*s1[5] + s2[3]*s1[4] + s2[5]*s1[2];
766 sout[0][0] = _sout[0][0]*s3[0] + _sout[0][1]*s3[3] + _sout[0][2]*s3[5];
768 sout[1][1] = _sout[1][0]*s3[3] + _sout[1][1]*s3[1] + _sout[1][2]*s3[4];
770 sout[2][2] = _sout[2][0]*s3[5] + _sout[2][1]*s3[4] + _sout[2][2]*s3[2];
772 sout[0][1] = _sout[0][0]*s3[3] + _sout[0][1]*s3[1] + _sout[0][2]*s3[4];
774 sout[1][0] = s3[0]*_sout[1][0] + s3[3]*_sout[1][1] + s3[5]*_sout[1][2];
776 sout[1][2] = _sout[1][0]*s3[5] + _sout[1][1]*s3[4] + _sout[1][2]*s3[2];
778 sout[2][1] = s3[3]*_sout[2][0] + s3[1]*_sout[2][1] + s3[4]*_sout[2][2];
780 sout[0][2] = _sout[0][0]*s3[5] + _sout[0][1]*s3[4] + _sout[0][2]*s3[2];
782 sout[2][0] = s3[0]*_sout[2][0] + s3[3]*_sout[2][1] + s3[5]*_sout[2][2];
static void cs_math_sym_33_inv_cramer(const cs_real_t s[6], cs_real_t sout[restrict 6])
Compute the inverse of a symmetric matrix using Cramer's rule.
Definition: cs_math.h:624
Definition: cs_field_pointer.h:70
integer, save ik
Definition: numvar.f90:75
static cs_real_t cs_math_3_distance_dot_product(const cs_real_t xa[3], const cs_real_t xb[3], const cs_real_t xc[3])
Compute .
Definition: cs_math.h:211
#define restrict
Definition: cs_defs.h:122
static cs_real_t cs_math_3_dot_product(const cs_real_t u[3], const cs_real_t v[3])
Compute the dot product of two vectors of 3 real values.
Definition: cs_math.h:253
const cs_real_t cs_math_onesix
cs_real_t cs_real_6_t[6]
vector of 6 floating-point values
Definition: cs_defs.h:311
static void cs_math_3_normalise(const cs_real_t vin[3], cs_real_t vout[restrict 3])
Normalize a vector of 3 real values.
Definition: cs_math.h:305
const cs_real_t cs_math_big_r
static void cs_math_sym_33_3_product_add(const cs_real_t m[6], const cs_real_t v[3], cs_real_t mv[restrict 3])
Compute the product of a symmetric matrix of 3x3 real values by a vector of 3 real values and add it ...
Definition: cs_math.h:394
static void cs_math_66_6_product(const cs_real_t m[6][6], const cs_real_t v[6], cs_real_t mv[restrict 6])
Compute the product of a matrix of 6x6 real values by a vector of 6 real values.
Definition: cs_math.h:415
static cs_real_t cs_math_pow3(cs_real_t x)
Compute the cube of a real value.
Definition: cs_math.h:152
static void cs_math_33_inv_cramer_in_place(cs_real_t a[3][3])
Inverse a 3x3 matrix in place, using Cramer's rule.
Definition: cs_math.h:554
static void cs_math_33_3_product(const cs_real_t m[3][3], const cs_real_t v[3], cs_real_3_t mv)
Compute the product of a matrix of 3x3 real values by a vector of 3 real values.
Definition: cs_math.h:329
const cs_real_t cs_math_pi
#define BEGIN_C_DECLS
Definition: cs_defs.h:453
void cs_math_fw_and_bw_lu(const cs_real_t a_lu[], const int n, cs_real_t x[], const cs_real_t b[])
Block Jacobi utilities. Compute forward and backward to solve an LU P*P system.
Definition: cs_math.c:536
const cs_real_t cs_math_epzero
static cs_real_t cs_math_sym_33_determinant(const cs_real_6_t m)
Compute the determinant of a 3x3 symmetric matrix.
Definition: cs_math.h:478
static cs_real_t cs_math_3_distance(const cs_real_t xa[3], const cs_real_t xb[3])
Compute the (euclidean) distance between two points xa and xb in a cartesian coordinate system of dim...
Definition: cs_math.h:186
void cs_math_33_eigen(const cs_real_t m[3][3], cs_real_t *eig_ratio, cs_real_t *eig_max)
Compute max/min eigenvalues ratio and max. eigenvalue of a 3x3 symmetric matrix with non-symmetric st...
Definition: cs_math.c:299
static void cs_math_sym_33_double_product(const cs_real_t s1[6], const cs_real_t s2[6], const cs_real_t s3[6], cs_real_t sout[restrict 3][3])
Compute the product of three symmetric matrices.
Definition: cs_math.h:740
double cs_real_t
Floating-point value.
Definition: cs_defs.h:297
Definition: cs_field_pointer.h:68
static cs_real_t cs_math_3_square_norm(const cs_real_t v[3])
Compute the square norm of a vector of 3 real values.
Definition: cs_math.h:288
static cs_real_t cs_math_sq(cs_real_t x)
Compute the square of a real value.
Definition: cs_math.h:120
double cs_math_surftri(const cs_real_t xv[3], const cs_real_t xe[3], const cs_real_t xf[3])
Compute the area of the convex_hull generated by 3 points. This corresponds to the computation of the...
Definition: cs_math.c:419
double precision, dimension(:,:,:), allocatable v
Definition: atimbr.f90:114
static void cs_math_sym_33_product(const cs_real_t s1[6], const cs_real_t s2[6], cs_real_t sout[restrict 6])
Compute the product of two symmetric matrices. Warning: this is valid if and only if s1 and s2 commut...
Definition: cs_math.h:662
static void cs_math_66_6_product_add(const cs_real_t m[6][6], const cs_real_t v[6], cs_real_t mv[restrict 6])
Compute the product of a matrix of 6x6 real values by a vector of 6 real values and add it to the vec...
Definition: cs_math.h:437
double cs_math_get_machine_epsilon(void)
Get the value related to the machine precision.
Definition: cs_math.c:194
const cs_real_t cs_math_onetwelve
static void cs_math_33_inv_cramer_sym_in_place(cs_real_t a[3][3])
Inverse a 3x3 symmetric matrix (with non-symmetric storage) in place, using Cramer's rule...
Definition: cs_math.h:589
void cs_math_set_machine_epsilon(void)
Compute the value related to the machine precision.
Definition: cs_math.c:173
static cs_real_t cs_math_pow2(cs_real_t x)
Compute the square of a real value.
Definition: cs_math.h:136
double precision, save a
Definition: cs_fuel_incl.f90:146
double cs_math_voltet(const cs_real_t xv[3], const cs_real_t xe[3], const cs_real_t xf[3], const cs_real_t xc[3])
Compute the volume of the convex_hull generated by 4 points. This is equivalent to the computation of...
Definition: cs_math.c:449
void cs_math_sym_33_eigen(const cs_real_t m[6], cs_real_t eig_vals[3])
Compute all eigenvalues of a 3x3 symmetric matrix with symmetric storage.
Definition: cs_math.c:214
static cs_real_t cs_math_33_determinant(const cs_real_t m[3][3])
Compute the determinant of a 3x3 matrix.
Definition: cs_math.h:458
static cs_real_t cs_math_3_norm(const cs_real_t v[3])
Compute the euclidean norm of a vector of dimension 3.
Definition: cs_math.h:272
static void cs_math_33_inv_cramer(const cs_real_t in[3][3], cs_real_t out[3][3])
Inverse a 3x3 matrix.
Definition: cs_math.h:522
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition: cs_defs.h:309
static void cs_math_3_cross_product(const cs_real_t u[3], const cs_real_t v[3], cs_real_t uv[restrict 3])
Compute the cross product of two vectors of 3 real values.
Definition: cs_math.h:503
const cs_real_t cs_math_zero_threshold
const cs_real_t cs_math_onethird
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:293
static cs_real_t cs_math_pow4(cs_real_t x)
Compute the 4-th power of a real value.
Definition: cs_math.h:168
static int cs_math_binom(short int n, short int k)
Computes the binomial coefficient of n and k.
Definition: cs_math.h:90
static cs_real_t cs_math_3_square_distance(const cs_real_t xa[3], const cs_real_t xb[3])
Compute the squared distance between two points xa and xb in a cartesian coordinate system of dimensi...
Definition: cs_math.h:231
#define END_C_DECLS
Definition: cs_defs.h:454
static void cs_math_33t_3_product(const cs_real_t m[3][3], const cs_real_t v[3], cs_real_3_t mv)
Compute the product of the transpose of a matrix of 3x3 real values by a vector of 3 real values...
Definition: cs_math.h:350
cs_real_t cs_real_33_t[3][3]
3x3 matrix of floating-point values
Definition: cs_defs.h:315
static void cs_math_sym_33_3_product(const cs_real_t m[6], const cs_real_t v[3], cs_real_t mv[restrict 3])
Compute the product of a symmetric matrix of 3x3 real values by a vector of 3 real values...
Definition: cs_math.h:372
void cs_math_3_length_unitv(const cs_real_t xa[3], const cs_real_t xb[3], cs_real_t *len, cs_real_3_t unitv)
Compute the length (euclidien norm) between two points xa and xb in a cartesian coordinate system of ...
Definition: cs_math.c:386
const cs_real_t cs_math_infinite_r
void cs_math_fact_lu(cs_lnum_t n_blocks, const int b_size, const cs_real_t *a, cs_real_t *a_lu)
Compute LU factorization of an array of dense matrices of identical size.
Definition: cs_math.c:478
static void cs_math_reduce_sym_prod_33_to_66(const cs_real_t s[3][3], cs_real_t sout[restrict 6][6])
Compute a 6x6 matrix A, equivalent to a 3x3 matrix s, such as: A*R_6 = R*s^t + s*R.
Definition: cs_math.h:691
double precision, save b
Definition: cs_fuel_incl.f90:146