5#ifndef VA_TRIPLE_DECOMPOSITION_H
6#define VA_TRIPLE_DECOMPOSITION_H
38VA_DEVICE_FUN
void valib_get_brf(VA_DEVICE_ADDR VA_REAL *A,
int *num_intervals,
44 int ialpha, ibeta, igamma;
48 extern __shared__ VA_REAL s_data[];
49 VA_REAL *Q = &s_data[0];
56 VA_REAL alpha, beta, gamma;
60 VA_REAL goal_function;
63 VA_REAL stepSize = VA_PI / (VA_REAL) *num_intervals;
75 for (ialpha = 0; ialpha < *num_intervals + 1; ialpha++) {
76 alpha = ialpha*stepSize;
78 sincos(alpha, &sina, &cosa);
83 for (ibeta = 0; ibeta < *num_intervals + 1; ibeta++) {
84 beta = ibeta*stepSize;
86 sincos(beta, &sinb, &cosb);
91 for (igamma = 0; igamma < *num_intervals / 2 + 1; igamma++) {
92 gamma = igamma*stepSize;
94 sincos(gamma, &sing, &cosg);
103 if (threadIdx.x == 0) {
117 goal_function = fabs(SO[1]*SO[3])
122 if (goal_function > *goal_brf) {
127 *goal_brf = goal_function;
192 VA_DEVICE_ADDR VA_REAL *A,
194 VA_DEVICE_ADDR VA_REAL *residual_vorticity_strain,
195 VA_DEVICE_ADDR VA_REAL *shear_vorticity_strain,
196 VA_DEVICE_ADDR VA_REAL *alpha,
197 VA_DEVICE_ADDR VA_REAL *beta,
198 VA_DEVICE_ADDR VA_REAL *gamma
204 VA_REAL alpha_brf, beta_brf, gamma_brf;
215 valib_get_brf(A, num_intervals, &alpha_brf, &beta_brf, &gamma_brf, &goal_brf);
223 sincos(alpha_brf, &sina, &cosa);
224 sincos(beta_brf, &sinb, &cosb);
225 sincos(gamma_brf, &sing, &cosg);
227 sina = sin(alpha_brf);
228 cosa = cos(alpha_brf);
229 sinb = sin(beta_brf);
230 cosb = cos(beta_brf);
231 sing = sin(gamma_brf);
232 cosg = cos(gamma_brf);
244 for (i = 0; i < 3; i++) {
245 residual_vorticity_strain[i*3+i] = QAQT[i*3+i];
248 aux =
valib_min(fabs(QAQT[3]), fabs(QAQT[1]));
249 residual_vorticity_strain[3] =
valib_sign(aux, QAQT[3]);
250 residual_vorticity_strain[1] =
valib_sign(aux, QAQT[1]);
252 aux =
valib_min(fabs(QAQT[6]), fabs(QAQT[2]));
253 residual_vorticity_strain[6] =
valib_sign(aux, QAQT[6]);
254 residual_vorticity_strain[2] =
valib_sign(aux, QAQT[2]);
256 aux =
valib_min(fabs(QAQT[7]), fabs(QAQT[5]));
257 residual_vorticity_strain[7] =
valib_sign(aux, QAQT[7]);
258 residual_vorticity_strain[5] =
valib_sign(aux, QAQT[5]);
261 for (i = 0; i < 9; i++) {
262 shear_vorticity_strain[i] = QAQT[i] - residual_vorticity_strain[i];
326 VA_DEVICE_ADDR VA_REAL *A,
328 VA_DEVICE_ADDR VA_REAL *residual_vorticity,
329 VA_DEVICE_ADDR VA_REAL *residual_strain,
330 VA_DEVICE_ADDR VA_REAL *shear)
332 VA_REAL residual_vorticity_strain[9];
333 VA_REAL shear_vorticity_strain[9];
334 VA_REAL alpha_brf, beta_brf, gamma_brf;
338 residual_vorticity_strain,
339 shear_vorticity_strain,
340 &alpha_brf, &beta_brf, &gamma_brf);
344 *residual_vorticity = sqrt(
352 *residual_strain = sqrt(
367 +
valib_square(shear_vorticity_strain[3]-shear_vorticity_strain[1])
368 +
valib_square(shear_vorticity_strain[6]-shear_vorticity_strain[2])
369 +
valib_square(shear_vorticity_strain[7]-shear_vorticity_strain[5])
371 +
valib_square(shear_vorticity_strain[3]+shear_vorticity_strain[1])
372 +
valib_square(shear_vorticity_strain[6]+shear_vorticity_strain[2])
373 +
valib_square(shear_vorticity_strain[7]+shear_vorticity_strain[5])
436 VA_DEVICE_ADDR VA_REAL *A,
438 VA_DEVICE_ADDR VA_REAL *residual_vorticity,
439 VA_DEVICE_ADDR VA_REAL *residual_strain,
440 VA_DEVICE_ADDR VA_REAL *shear)
442 VA_REAL residual_vorticity_strain[9];
443 VA_REAL shear_vorticity_strain[9];
444 VA_REAL alpha_brf, beta_brf, gamma_brf;
448 residual_vorticity_strain,
449 shear_vorticity_strain,
450 &alpha_brf, &beta_brf, &gamma_brf);
453 residual_vorticity[0] = 2. * residual_vorticity_strain[5];
454 residual_vorticity[1] = -2. * residual_vorticity_strain[2];
455 residual_vorticity[2] = 2. * residual_vorticity_strain[1];
459 if (residual_strain != NULL) {
460 *residual_strain = sqrt(
477 +
valib_square(shear_vorticity_strain[3]-shear_vorticity_strain[1])
478 +
valib_square(shear_vorticity_strain[6]-shear_vorticity_strain[2])
479 +
valib_square(shear_vorticity_strain[7]-shear_vorticity_strain[5])
481 +
valib_square(shear_vorticity_strain[3]+shear_vorticity_strain[1])
482 +
valib_square(shear_vorticity_strain[6]+shear_vorticity_strain[2])
483 +
valib_square(shear_vorticity_strain[7]+shear_vorticity_strain[5])
546 VA_DEVICE_ADDR VA_REAL *A,
int *num_intervals,
547 VA_DEVICE_ADDR VA_REAL *residual_vorticity,
548 VA_DEVICE_ADDR VA_REAL *residual_strain,
549 VA_DEVICE_ADDR VA_REAL *shear_vorticity,
550 VA_DEVICE_ADDR VA_REAL *shear_strain)
552 VA_REAL residual_vorticity_strain[9];
553 VA_REAL shear_vorticity_strain[9];
554 VA_REAL alpha_brf, beta_brf, gamma_brf;
558 residual_vorticity_strain,
559 shear_vorticity_strain,
560 &alpha_brf, &beta_brf, &gamma_brf);
564 *residual_vorticity = sqrt(
572 *residual_strain = sqrt(
581 *shear_vorticity = sqrt(
588 *shear_strain = sqrt(
657 VA_DEVICE_ADDR VA_REAL *A,
659 VA_DEVICE_ADDR VA_REAL *residual_vorticity,
660 VA_DEVICE_ADDR VA_REAL *residual_strain,
661 VA_DEVICE_ADDR VA_REAL *shear,
662 VA_DEVICE_ADDR VA_REAL *alpha,
663 VA_DEVICE_ADDR VA_REAL *beta,
664 VA_DEVICE_ADDR VA_REAL *gamma
667 VA_REAL residual_vorticity_strain[9];
668 VA_REAL shear_vorticity_strain[9];
669 VA_REAL alpha_brf, beta_brf, gamma_brf;
673 residual_vorticity_strain,
674 shear_vorticity_strain,
675 &alpha_brf, &beta_brf, &gamma_brf);
684 *residual_vorticity = sqrt(
692 *residual_strain = sqrt(
707 +
valib_square(shear_vorticity_strain[3]-shear_vorticity_strain[1])
708 +
valib_square(shear_vorticity_strain[6]-shear_vorticity_strain[2])
709 +
valib_square(shear_vorticity_strain[7]-shear_vorticity_strain[5])
711 +
valib_square(shear_vorticity_strain[3]+shear_vorticity_strain[1])
712 +
valib_square(shear_vorticity_strain[6]+shear_vorticity_strain[2])
713 +
valib_square(shear_vorticity_strain[7]+shear_vorticity_strain[5])
VA_DEVICE_FUN void valib_triple_decomposition_4norms(VA_DEVICE_ADDR VA_REAL *A, int *num_intervals, VA_DEVICE_ADDR VA_REAL *residual_vorticity, VA_DEVICE_ADDR VA_REAL *residual_strain, VA_DEVICE_ADDR VA_REAL *shear_vorticity, VA_DEVICE_ADDR VA_REAL *shear_strain)
Triple Decomposition Method (TDM, a.k.a. residual vorticity and residual strain rate) ,...
VA_DEVICE_FUN void valib_triple_decomposition(VA_DEVICE_ADDR VA_REAL *A, int *num_intervals, VA_DEVICE_ADDR VA_REAL *residual_vorticity, VA_DEVICE_ADDR VA_REAL *residual_strain, VA_DEVICE_ADDR VA_REAL *shear)
Triple Decomposition Method (TDM, a.k.a. residual vorticity and residual strain rate) ,...
VA_DEVICE_FUN void valib_triple_decomposition_with_angles(VA_DEVICE_ADDR VA_REAL *A, int *num_intervals, VA_DEVICE_ADDR VA_REAL *residual_vorticity, VA_DEVICE_ADDR VA_REAL *residual_strain, VA_DEVICE_ADDR VA_REAL *shear, VA_DEVICE_ADDR VA_REAL *alpha, VA_DEVICE_ADDR VA_REAL *beta, VA_DEVICE_ADDR VA_REAL *gamma)
Triple Decomposition Method (TDM, a.k.a. residual vorticity and residual strain rate) ,...
VA_DEVICE_FUN void valib_residual_vorticity(VA_DEVICE_ADDR VA_REAL *A, int *num_intervals, VA_DEVICE_ADDR VA_REAL *residual_vorticity, VA_DEVICE_ADDR VA_REAL *residual_strain, VA_DEVICE_ADDR VA_REAL *shear)
Triple Decomposition Method (TDM, a.k.a. residual vorticity and residual strain rate) ,...
VA_DEVICE_FUN void valib_tatt3(VA_REAL *A, VA_REAL *T, VA_REAL *TATT)
VA_DEVICE_FUN void valib_ttat3(VA_REAL *A, VA_REAL *T, VA_REAL *TTAT)
VA_DEVICE_FUN void valib_get_brf(VA_DEVICE_ADDR VA_REAL *A, int *num_intervals, VA_REAL *alpha_brf, VA_REAL *beta_brf, VA_REAL *gamma_brf, VA_REAL *goal_brf)
VA_DEVICE_FUN VA_REAL valib_min(VA_REAL a, VA_REAL b)
VA_DEVICE_FUN void valib_sym_antisym3(VA_REAL *A)
VA_DEVICE_FUN void valib_mat_copy3(VA_REAL *A, VA_REAL *B)
VA_DEVICE_FUN VA_REAL valib_square(VA_REAL a)
VA_DEVICE_FUN VA_REAL valib_sign(VA_REAL a, VA_REAL b)
VA_DEVICE_FUN void valib_constructQ3(VA_REAL sina, VA_REAL cosa, VA_REAL sinb, VA_REAL cosb, VA_REAL sing, VA_REAL cosg, VA_REAL *Q)
VA_DEVICE_FUN void valib_triple_decomposition_base(VA_DEVICE_ADDR VA_REAL *A, int *num_intervals, VA_DEVICE_ADDR VA_REAL *residual_vorticity_strain, VA_DEVICE_ADDR VA_REAL *shear_vorticity_strain, VA_DEVICE_ADDR VA_REAL *alpha, VA_DEVICE_ADDR VA_REAL *beta, VA_DEVICE_ADDR VA_REAL *gamma)
Triple Decomposition Method (TDM, a.k.a. residual vorticity and residual strain rate) ,...