1 #ifndef __CS_QUADRATURE_H__ 2 #define __CS_QUADRATURE_H__ 252 gpts[0][0] = 0.5*(v1[0] + v2[0]);
253 gpts[0][1] = 0.5*(v1[1] + v2[1]);
254 gpts[0][2] = 0.5*(v1[2] + v2[2]);
416 gpts[0][0] = 0.25 * (v1[0] + v2[0] + v3[0] + v4[0]);
417 gpts[0][1] = 0.25 * (v1[1] + v2[1] + v3[1] + v4[1]);
418 gpts[0][2] = 0.25 * (v1[2] + v2[2] + v3[2] + v4[2]);
523 xg[0] = .5 * (v1[0] + v2[0]);
524 xg[1] = .5 * (v1[1] + v2[1]);
525 xg[2] = .5 * (v1[2] + v2[2]);
527 ana(tcur, 1, NULL, xg,
false, input, &evaluation);
529 *results += len * evaluation;
558 double evaluation[2], weights[2];
563 ana(tcur, 2, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
566 *results += weights[0] * evaluation[0] + weights[1] * evaluation[1];
595 double evaluation[3], weights[3];
600 ana(tcur, 3, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
602 *results += weights[0] * evaluation[0] + weights[1] * evaluation[1] +
603 weights[2] * evaluation[2];
642 ana(tcur, 1, NULL, xg,
false, input, &evaluation);
644 *results += area * evaluation;
675 double evaluation[3], weights[3];
680 ana(tcur, 3, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
683 *results += weights[0] * evaluation[0] + weights[1] * evaluation[1] +
684 weights[2] * evaluation[2];
715 double evaluation[4], weights[4];
720 ana(tcur, 4, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
722 *results += weights[0] * evaluation[0] + weights[1] * evaluation[1] +
723 weights[2] * evaluation[2] + weights[3] * evaluation[3];
753 double evaluation[3];
760 ana(tcur, 1, NULL, xg,
false, input, evaluation);
762 results[0] += area * evaluation[0];
763 results[1] += area * evaluation[1];
764 results[2] += area * evaluation[2];
795 double evaluation[3*3], weights[3];
800 ana(tcur, 3, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
802 for (
int p = 0;
p < 3;
p++) {
803 results[0] += weights[
p] * evaluation[3*
p ];
804 results[1] += weights[
p] * evaluation[3*
p+1];
805 results[2] += weights[
p] * evaluation[3*
p+2];
837 double evaluation[3*4], weights[4];
842 ana(tcur, 4, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
844 for (
int p = 0;
p < 4;
p++) {
845 results[0] += weights[
p] * evaluation[3*
p ];
846 results[1] += weights[
p] * evaluation[3*
p+1];
847 results[2] += weights[
p] * evaluation[3*
p+2];
879 double evaluation[9];
886 ana(tcur, 1, NULL, xg,
false, input, evaluation);
888 for (
short int ij = 0; ij < 9; ij++)
889 results[ij] += area * evaluation[ij];
920 double evaluation[9*3], weights[3];
925 ana(tcur, 3, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
927 for (
int p = 0;
p < 3;
p++) {
928 const double wp = weights[
p];
929 double *eval_p = evaluation + 9*
p;
930 for (
short int ij = 0; ij < 9; ij++)
931 results[ij] += wp * eval_p[ij];
963 double evaluation[9*4], weights[4];
968 ana(tcur, 4, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
970 for (
int p = 0;
p < 4;
p++) {
971 const double wp = weights[
p];
972 double *eval_p = evaluation + 9*
p;
973 for (
short int ij = 0; ij < 9; ij++)
974 results[ij] += wp * eval_p[ij];
1011 xg[0] = 0.25 * (v1[0] + v2[0] + v3[0] + v4[0]);
1012 xg[1] = 0.25 * (v1[1] + v2[1] + v3[1] + v4[1]);
1013 xg[2] = 0.25 * (v1[2] + v2[2] + v3[2] + v4[2]);
1015 ana(tcur, 1, NULL, xg,
false, input, &evaluation);
1017 *results += vol * evaluation;
1050 double evaluation[4], weights[4];
1055 ana(tcur, 4, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
1058 *results += weights[0] * evaluation[0] + weights[1] * evaluation[1] +
1059 weights[2] * evaluation[2] + weights[3] * evaluation[3];
1092 double evaluation[5], weights[5];
1097 ana(tcur, 5, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
1099 *results += weights[0] * evaluation[0] + weights[1] * evaluation[1] +
1100 weights[2] * evaluation[2] + weights[3] * evaluation[3] +
1101 weights[4] * evaluation[4];
1134 double evaluation[3];
1137 xg[0] = 0.25 * (v1[0] + v2[0] + v3[0] + v4[0]);
1138 xg[1] = 0.25 * (v1[1] + v2[1] + v3[1] + v4[1]);
1139 xg[2] = 0.25 * (v1[2] + v2[2] + v3[2] + v4[2]);
1141 ana(tcur, 1, NULL, xg,
false, input, evaluation);
1143 results[0] += vol * evaluation[0];
1144 results[1] += vol * evaluation[1];
1145 results[2] += vol * evaluation[2];
1178 double evaluation[3*4], weights[4];
1183 ana(tcur, 4, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
1185 for (
int p = 0;
p < 4;
p++) {
1186 results[0] += weights[
p] * evaluation[3*
p ];
1187 results[1] += weights[
p] * evaluation[3*
p+1];
1188 results[2] += weights[
p] * evaluation[3*
p+2];
1222 double evaluation[3*5], weights[5];
1227 ana(tcur, 5, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
1229 for (
int p = 0;
p < 5;
p++) {
1230 results[0] += weights[
p] * evaluation[3*
p ];
1231 results[1] += weights[
p] * evaluation[3*
p+1];
1232 results[2] += weights[
p] * evaluation[3*
p+2];
1266 double evaluation[9];
1269 xg[0] = 0.25 * (v1[0] + v2[0] + v3[0] + v4[0]);
1270 xg[1] = 0.25 * (v1[1] + v2[1] + v3[1] + v4[1]);
1271 xg[2] = 0.25 * (v1[2] + v2[2] + v3[2] + v4[2]);
1273 ana(tcur, 1, NULL, xg,
false, input, evaluation);
1275 for (
short int ij = 0; ij < 9; ij++)
1276 results[ij] += vol * evaluation[ij];
1309 double evaluation[9*4], weights[4];
1314 ana(tcur, 4, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
1316 for (
int p = 0;
p < 4;
p++) {
1317 const double wp = weights[
p];
1318 double *eval_p = evaluation + 9*
p;
1319 for (
short int ij = 0; ij < 9; ij++)
1320 results[ij] += wp * eval_p[ij];
1354 double evaluation[9*5], weights[5];
1359 ana(tcur, 5, NULL, (
const cs_real_t *)gauss_pts,
false, input, evaluation);
1361 for (
int p = 0;
p < 5;
p++) {
1362 const double wp = weights[
p];
1363 double *eval_p = evaluation + 9*
p;
1364 for (
short int ij = 0; ij < 9; ij++)
1365 results[ij] += wp * eval_p[ij];
1401 " %s: Invalid quadrature type\n", __func__);
1419 " %s: Invalid quadrature type\n", __func__);
1437 " %s: Invalid quadrature type\n", __func__);
1443 " %s: Invalid dimension value %d. Only 1, 3 and 9 are valid.\n",
1483 " %s: Invalid quadrature type\n", __func__);
1501 " %s: Invalid quadrature type\n", __func__);
1519 " %s: Invalid quadrature type\n", __func__);
1525 " %s: Invalid dimension value %d. Only 1, 3 and 9 are valid.\n",
void() cs_quadrature_tria_integral_t(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a triangle based on a specified quadrature rule and add it to results...
Definition: cs_quadrature.h:168
void cs_quadrature_tet_4pts(const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_real_3_t gpts[], double weights[])
Compute the quadrature in a tetrehedra. Exact for 2nd order polynomials (order 3).
Definition: cs_quadrature.c:349
static void cs_quadrature_tria_3pts_vect(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a triangle with a quadrature rule using 3 Gauss points and a unique weight ...
Definition: cs_quadrature.h:785
void cs_quadrature_tet_5pts(const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_real_3_t gpts[], double weights[])
Compute the quadrature in a tetrehedra. Exact for 3rd order polynomials (order 4).
Definition: cs_quadrature.c:389
void() cs_analytic_func_t(cs_real_t time, cs_lnum_t n_elts, const cs_lnum_t *elt_ids, const cs_real_t *coords, bool compact, void *input, cs_real_t *retval)
Generic function pointer for an analytic function elt_ids is optional. If not NULL, it enables to access in coords at the right location and the same thing to fill retval if compact is set to false.
Definition: cs_param.h:66
void() cs_quadrature_tetra_integral_t(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a tetrahedron based on a specified quadrature rule and add it to results...
Definition: cs_quadrature.h:195
size_t len
Definition: mei_scanner.c:569
static void cs_quadrature_tet_5pts_scal(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a tetrahedron with a quadrature rule using 5 Gauss points and 5 weights and...
Definition: cs_quadrature.h:1081
static void cs_quadrature_tria_4pts_tens(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a triangle with a quadrature rule using 4 Gauss points and 4 weights and ad...
Definition: cs_quadrature.h:953
static void cs_quadrature_tet_5pts_tens(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a tetrahedron with a quadrature rule using 5 Gauss points and 5 weights and...
Definition: cs_quadrature.h:1343
#define BEGIN_C_DECLS
Definition: cs_defs.h:461
Definition: cs_quadrature.h:55
static void cs_quadrature_edge_1pt_scal(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, double len, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over an edge with the mid-point rule and add it to results Case of a scalar-valu...
Definition: cs_quadrature.h:511
static void cs_quadrature_tet_4pts_scal(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a tetrahedron with a quadrature rule using 4 Gauss points and a unique weig...
Definition: cs_quadrature.h:1039
static void cs_quadrature_edge_3pts_scal(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, double len, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over an edge with a quadrature rule using 3 Gauss points and weights and add it ...
Definition: cs_quadrature.h:586
static void cs_quadrature_edge_2pts_scal(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, double len, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over an edge with a quadrature rule using 2 Gauss points and a unique weight and...
Definition: cs_quadrature.h:549
static void cs_quadrature_tet_4pts_tens(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a tetrahedron with a quadrature rule using 4 Gauss points and a unique weig...
Definition: cs_quadrature.h:1298
Definition: cs_field_pointer.h:67
void cs_quadrature_edge_3pts(const cs_real_3_t v1, const cs_real_3_t v2, double len, cs_real_3_t gpts[], double w[])
Compute quadrature points for an edge from v1 -> v2 (3 points) Exact for polynomial function up to or...
Definition: cs_quadrature.c:198
static void cs_quadrature_edge_1pt(const cs_real_3_t v1, const cs_real_3_t v2, double len, cs_real_3_t gpts[], double *w)
Compute quadrature points for an edge from v1 -> v2 (2 points) Exact for polynomial function up to or...
Definition: cs_quadrature.h:246
void cs_quadrature_edge_2pts(const cs_real_3_t v1, const cs_real_3_t v2, double len, cs_real_3_t gpts[], double *w)
Compute quadrature points for an edge from v1 -> v2 (2 points) Exact for polynomial function up to or...
Definition: cs_quadrature.h:58
void bft_error(const char *const file_name, const int line_num, const int sys_error_code, const char *const format,...)
Calls the error handler (set by bft_error_handler_set() or default).
Definition: bft_error.c:193
double cs_real_t
Floating-point value.
Definition: cs_defs.h:297
static void cs_quadrature_tria_3pts_scal(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a triangle with a quadrature rule using 3 Gauss points and a unique weight ...
Definition: cs_quadrature.h:665
Definition: cs_quadrature.h:57
void cs_quadrature_tria_3pts(const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_real_3_t gpts[], double *w)
Compute quadrature points for a triangle (3 points) Exact for polynomial function up to order 2...
const char * cs_quadrature_get_type_name(const cs_quadrature_type_t type)
Return th name associated to a type of quadrature.
Definition: cs_quadrature.c:147
static void cs_quadrature_tria_4pts_scal(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a triangle with a quadrature rule using 4 Gauss points and 4 weights and ad...
Definition: cs_quadrature.h:705
cs_quadrature_type_t
Definition: cs_quadrature.h:51
void cs_quadrature_tria_4pts(const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_real_3_t gpts[], double w[])
Compute quadrature points for a triangle (4 points) Exact for polynomial function up to order 3...
Definition: cs_quadrature.c:269
static cs_quadrature_tetra_integral_t * cs_quadrature_get_integral_function_tetra(short int dim, cs_quadrature_type_t qtype)
Retrieve the integral function according to the the quadrature type and the stride provided...
Definition: cs_quadrature.h:1464
void cs_quadrature_setup(void)
Compute constant weights for all quadratures used.
Definition: cs_quadrature.c:105
void() cs_quadrature_edge_integral_t(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, double len, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over an edge based on a specified quadrature rule and add it to results...
Definition: cs_quadrature.h:143
void() cs_quadrature_edge_t(const cs_real_3_t v1, const cs_real_3_t v2, double len, cs_real_3_t gpts[], double *weights)
Generic function pointer to compute the quadrature points for an edge from v1 -> v2.
Definition: cs_quadrature.h:76
static void cs_quadrature_tet_5pts_vect(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a tetrahedron with a quadrature rule using 5 Gauss points and 5 weights and...
Definition: cs_quadrature.h:1211
static void cs_quadrature_tria_1pt_scal(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a triangle using a barycentric quadrature rule and add it to results Case o...
Definition: cs_quadrature.h:625
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition: cs_defs.h:309
void() cs_quadrature_tet_t(const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_real_3_t gpts[], double weights[])
Generic function to compute the quadrature points in a tetrehedra.
Definition: cs_quadrature.h:119
static void cs_quadrature_tet_1pt_vect(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a tetrahedron using a barycentric quadrature rule and add it to results...
Definition: cs_quadrature.h:1123
static void cs_quadrature_tria_3pts_tens(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a triangle with a quadrature rule using 3 Gauss points and a unique weight ...
Definition: cs_quadrature.h:910
void cs_quadrature_tria_7pts(const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_real_3_t gpts[], double w[])
Compute quadrature points for a triangle (7 points) Exact for polynomial function up to order 5...
Definition: cs_quadrature.c:306
static void cs_quadrature_tet_1pt_scal(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a tetrahedron using a barycentric quadrature rule and add it to results...
Definition: cs_quadrature.h:997
static void cs_quadrature_tria_1pt(const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_real_3_t gpts[], double *w)
Compute quadrature points for a triangle (1 point) Exact for polynomial function up to order 1 (baryc...
Definition: cs_quadrature.h:313
const cs_real_t cs_math_onethird
static void cs_quadrature_tet_1pt_tens(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a tetrahedron using a barycentric quadrature rule and add it to results...
Definition: cs_quadrature.h:1255
#define END_C_DECLS
Definition: cs_defs.h:462
void cs_quadrature_tet_15pts(const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_real_3_t gpts[], double weights[])
Compute the quadrature in a tetrehedra. Exact for 5th order polynomials (order 6).
Definition: cs_quadrature.c:433
static void cs_quadrature_tria_1pt_tens(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a triangle using a barycentric quadrature rule and add it to results...
Definition: cs_quadrature.h:869
static void cs_quadrature_tria_4pts_vect(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a triangle with a quadrature rule using 4 Gauss points and 4 weights and ad...
Definition: cs_quadrature.h:827
void() cs_quadrature_tria_t(const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_real_3_t gpts[], double *weights)
Generic functoin pointer to compute the quadrature points for a triangle.
Definition: cs_quadrature.h:97
Definition: cs_quadrature.h:56
static void cs_quadrature_tet_1pt(const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_real_3_t gpts[], double weight[])
Compute the quadrature in a tetrehedra. Exact for 1st order polynomials (order 2).
Definition: cs_quadrature.h:408
Definition: cs_quadrature.h:53
static cs_quadrature_tria_integral_t * cs_quadrature_get_integral_function_tria(short int dim, cs_quadrature_type_t qtype)
Retrieve the integral function according to the the quadrature type and the stride provided...
Definition: cs_quadrature.h:1382
static void cs_quadrature_tria_1pt_vect(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, double area, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a triangle using a barycentric quadrature rule and add it to results Case o...
Definition: cs_quadrature.h:743
Definition: cs_quadrature.h:54
static void cs_quadrature_tet_4pts_vect(double tcur, const cs_real_3_t v1, const cs_real_3_t v2, const cs_real_3_t v3, const cs_real_3_t v4, double vol, cs_analytic_func_t *ana, void *input, double results[])
Compute the integral over a tetrahedron with a quadrature rule using 4 Gauss points and a unique weig...
Definition: cs_quadrature.h:1167