1#ifndef __CS_BOUNDARY_CONDITIONS_SET_COEFFS_H__
2#define __CS_BOUNDARY_CONDITIONS_SET_COEFFS_H__
230 for (
size_t i = 0; i < 3; i++) {
231 a[f_id][i] = -qimpv[i] / fmax(hint, 1.e-300);
234 b[f_id][0][0] = 1., b[f_id][0][1] = 0., b[f_id][0][2] = 0.;
235 b[f_id][1][0] = 0., b[f_id][1][1] = 1., b[f_id][1][2] = 0.;
236 b[f_id][2][0] = 0., b[f_id][2][1] = 0., b[f_id][2][2] = 1.;
240 for (
size_t i = 0; i < 3; i++) {
241 af[f_id][i] = qimpv[i];
243 for (
size_t j = 0; j < 3; j++)
270 cs_real_t m[6] = {0., 0., 0., 0., 0., 0.};
271 m[0] = hint[1]*hint[2] - hint[4]*hint[4];
272 m[1] = hint[0]*hint[2] - hint[5]*hint[5];
273 m[2] = hint[0]*hint[1] - hint[3]*hint[3];
274 m[3] = hint[4]*hint[5] - hint[3]*hint[2];
275 m[4] = hint[3]*hint[5] - hint[0]*hint[4];
276 m[5] = hint[3]*hint[4] - hint[1]*hint[5];
278 cs_real_t invdet = 1./(hint[0]*m[0] + hint[3]*m[3] + hint[5]*m[5]);
280 cs_real_t invh[6] = {0., 0., 0., 0., 0., 0.};
281 invh[0] = m[0] * invdet;
282 invh[1] = m[1] * invdet;
283 invh[2] = m[2] * invdet;
284 invh[3] = m[3] * invdet;
285 invh[4] = m[4] * invdet;
286 invh[5] = m[5] * invdet;
290 for (
int isou = 0; isou < 3; isou++)
291 a[f_id][isou] = -a[f_id][isou];
293 b[f_id][0][0] = 1.0, b[f_id][0][1] = 0.0, b[f_id][0][2] = 0.0;
294 b[f_id][1][0] = 0.0, b[f_id][1][1] = 1.0, b[f_id][1][2] = 0.0;
295 b[f_id][2][0] = 0.0, b[f_id][2][1] = 0.0, b[f_id][2][2] = 1.0;
297 for (
int isou = 0; isou < 3; isou++) {
300 af[f_id][isou] = qimpv[isou];
301 for (
int jsou = 0; jsou < 3; jsou++)
302 bf[f_id][isou][jsou] = 0.0;
324 for (
int isou = 0; isou < 6; isou++) {
328 for (
int jsou = 0; jsou < 6; jsou++) {
336 af[isou] = qimpts[isou];
337 for (
int jsou = 0; jsou < 6; jsou++)
338 bf[isou][jsou] = 0.0;
375 af[f_id] = -hint*pimp;
382 a[f_id] = hext*pimp/(hint + hext);
383 b[f_id] = hint /(hint + hext);
387 af[f_id] = -heq*pimp;
419 for (
int isou = 0; isou < 3; isou++) {
423 a[f_id][isou] = pimpv[isou];
424 for (
int jsou = 0; jsou < 3; jsou++)
425 b[f_id][isou][jsou] = 0.;
428 af[f_id][isou] = -hint*pimpv[isou];
430 bf[f_id][0][0] = hint, bf[f_id][0][1] = 0., bf[f_id][0][2] = 0.;
431 bf[f_id][1][0] = 0., bf[f_id][1][1] = hint, bf[f_id][1][2] = 0.;
432 bf[f_id][2][0] = 0., bf[f_id][2][1] = 0., bf[f_id][2][2] = hint;
437 const cs_real_t val = hint/(hint + hextv[isou]);
441 a[f_id][isou] = hextv[isou]*pimpv[isou]/(hint + hextv[isou]);
443 b[f_id][0][0] = val, b[f_id][0][1] = 0., b[f_id][0][2] = 0.;
444 b[f_id][1][0] = 0., b[f_id][1][1] = val, b[f_id][1][2] = 0.;
445 b[f_id][2][0] = 0., b[f_id][2][1] = 0., b[f_id][2][2] = val;
448 af[f_id][isou] = -heq*pimpv[isou];
450 bf[f_id][0][0] = heq, bf[f_id][0][1] = 0., bf[f_id][0][2] = 0.;
451 bf[f_id][1][0] = 0., bf[f_id][1][1] = heq, bf[f_id][1][2] = 0.;
452 bf[f_id][2][0] = 0., bf[f_id][2][1] = 0., bf[f_id][2][2] = heq;
507 for (
int isou = 0; isou < 3; isou++) {
509 a[f_id][isou] = pimpv[isou];
510 for (
int jsou = 0; jsou < 3; jsou++)
511 b[f_id][isou][jsou] = 0.;
516 _(
" %s: hextv not set for component %d."),
523 for (
int isou = 0; isou < 3; isou++)
524 af[f_id][isou] = -af[f_id][isou];
526 bf[f_id][0][0] = hintt[0];
527 bf[f_id][1][1] = hintt[1];
528 bf[f_id][2][2] = hintt[2];
529 bf[f_id][0][1] = hintt[3];
530 bf[f_id][1][0] = hintt[3];
531 bf[f_id][1][2] = hintt[4];
532 bf[f_id][2][1] = hintt[4];
533 bf[f_id][0][2] = hintt[5];
534 bf[f_id][2][0] = hintt[5];
558 for (
int isou = 0; isou < 6; isou++) {
562 a[isou] = pimpts[isou];
563 for (
int jsou = 0; jsou < 6; jsou++)
567 af[isou] = -hint * pimpts[isou];
568 for (
int jsou = 0; jsou < 6; jsou++) {
570 bf[isou][jsou] = hint;
578 const cs_real_t heq = hint * hextts[isou] / (hint + hextts[isou]);
581 a[isou] = hextts[isou] * pimpts[isou] / (hint + hextts[isou]);
582 for (
int jsou = 0; jsou < 6; jsou++) {
584 b[isou][jsou] = hint / (hint + hextts[isou]);
590 af[isou] = -heq * pimpts[isou];
591 for (
int jsou = 0; jsou < 6; jsou++) {
593 bf[isou][jsou] = heq;
628 for (
int isou = 0; isou < 3; isou++) {
631 a[f_id][isou] = - qimpv[isou]/
cs_math_fmax(hint, 1.e-300);
633 for (
int jsou = 0; jsou < 3; jsou++) {
635 a[f_id][isou] = a[f_id][isou] + normal[isou]*normal[jsou]
636 * (pimpv[jsou] + qimpv[jsou] /
cs_math_fmax(hint, 1.e-300));
639 b[f_id][isou][jsou] = 1.0 - normal[isou] * normal[jsou];
641 b[f_id][isou][jsou] = - normal[isou] * normal[jsou];
645 af[f_id][isou] = qimpv[isou];
647 for (
int jsou = 0; jsou < 3; jsou++){
649 af[f_id][isou] = af[f_id][isou] - normal[isou]*normal[jsou]
650 * (hint * pimpv[jsou] + qimpv[jsou]);
652 bf[f_id][isou][jsou] = hint * normal[isou] * normal[jsou];
708 for (
int isou = 0; isou < 3; isou++) {
712 a[f_id][isou] = pimpv[isou];
713 for (
int jsou = 0; jsou < 3; jsou++) {
715 a[f_id][isou] = a[f_id][isou] - normal[isou]*normal[jsou]
716 * (pimpv[jsou] + qimpv[jsou] /
cs_math_fmax(hint, 1.e-300));
718 b[f_id][isou][jsou] = normal[isou] * normal[jsou];
723 af[f_id][isou] = -hint*pimpv[isou];
724 for (
int jsou = 0; jsou < 3; jsou++) {
726 af[f_id][isou] = af[f_id][isou] + normal[isou]*normal[jsou]
727 * (qimpv[jsou] + pimpv[jsou] * hint);
730 bf[f_id][isou][jsou] = hint * (1.0 - normal[isou] * normal[jsou]);
732 bf[f_id][isou][jsou] = - hint * normal[isou] * normal[jsou];
786 for (
int isou = 0; isou < 3; isou++) {
789 for (
int jsou = 0; jsou < 3; jsou ++) {
791 b[f_id][isou][jsou] = cflv[isou] / (1.0 + cflv[isou]);
793 b[f_id][isou][jsou] = 0.0;
795 a[f_id][isou] = pimpv[isou] * (1.0 - b[f_id][isou][isou]);
798 af[f_id][isou] = -hint * a[f_id][isou];
799 for (
int jsou = 0; jsou < 3; jsou++) {
801 bf[f_id][isou][jsou] = hint * (1.0 - b[f_id][isou][jsou]);
803 bf[f_id][isou][jsou] = 0.0;
829 for (
int isou = 0; isou < 6; isou++) {
832 for (
int jsou = 0; jsou < 6; jsou++) {
834 b[isou][jsou] = cflts[isou] / (1.0 + cflts[isou]);
838 a[isou] = (1.0 - b[isou][isou]) * pimpts[isou];
841 af[isou] = -hint*a[isou];
842 for (
int jsou = 0; jsou < 6; jsou++) {
844 bf[isou][jsou] = hint * (1.0 - b[isou][jsou]);
846 bf[isou][jsou] = 0.0;
877 for(
int isou = 0; isou < 3; isou++) {
880 for (
int jsou = 0; jsou < 3; jsou++) {
882 b[f_id][isou][jsou] = cflv[isou]/(1.0+cflv[isou]);
884 b[f_id][isou][jsou] = 0.0;
886 a[f_id][isou] = (1.0-b[f_id][isou][isou])*pimpv[isou];
892 for (
int isou = 0; isou < 3; isou++)
893 af[f_id][isou] = -af[f_id][isou];
895 bf[f_id][0][0] = hintt[0]*(1.0 - b[f_id][0][0]);
896 bf[f_id][1][1] = hintt[1]*(1.0 - b[f_id][1][1]);
897 bf[f_id][2][2] = hintt[2]*(1.0 - b[f_id][2][2]);
898 bf[f_id][0][1] = hintt[3]*(1.0 - b[f_id][0][0]);
899 bf[f_id][1][0] = hintt[3]*(1.0 - b[f_id][0][0]);
900 bf[f_id][1][2] = hintt[4]*(1.0 - b[f_id][1][1]);
901 bf[f_id][2][1] = hintt[4]*(1.0 - b[f_id][1][1]);
902 bf[f_id][0][2] = hintt[5]*(1.0 - b[f_id][2][2]);
903 bf[f_id][2][0] = hintt[5]*(1.0 - b[f_id][2][2]);
936 af[f_id] = -hint * a[f_id];
937 bf[f_id] = hint * (1. - b[f_id]);
1096 for (
int isou = 0; isou < 3; isou++) {
1099 a[f_id][isou] = pimpv[isou];
1100 for (
int jsou = 0; jsou < 3; jsou++)
1101 b[f_id][isou][jsou] = 0.0;
1104 af[f_id][isou] = qimpv[isou];
1105 for (
int jsou = 0; jsou < 3; jsou++)
1106 bf[f_id][isou][jsou] = 0.0;
1131 for (
int isou = 0; isou < 6; isou++) {
1136 a[isou] = pimpts[isou];
1137 for (
int jsou = 0; jsou < 6; jsou++)
1138 b[isou][jsou] = 0.0;
1141 af[isou] = qimpts[isou];
1142 for (
int jsou = 0; jsou < 6; jsou++)
1143 bf[isou][jsou] = 0.0;
1178template <cs_lnum_t str
ide>
1181 (cs_dispatch_context &ctx,
1204template <cs_lnum_t str
ide>
1207 (cs_dispatch_context &ctx,
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.cpp:193
void cs_boundary_conditions_ensure_bc_coeff_face_values_allocated(cs_field_bc_coeffs_t *bc_coeffs, cs_lnum_t n_b_faces, cs_lnum_t dim, cs_alloc_mode_t amode, bool limiter)
Allocate BC coefficients face values if needed.
Definition cs_boundary_conditions_set_coeffs.cpp:4485
void cs_boundary_conditions_update_bc_coeff_face_values(cs_dispatch_context &ctx, cs_field_t *f, const cs_field_bc_coeffs_t *bc_coeffs, const int inc, const cs_equation_param_t *eqp, const cs_real_t pvar[][stride], cs_real_t val_ip[][stride], cs_real_t val_f[][stride], cs_real_t val_f_lim[][stride], cs_real_t val_f_d[][stride], cs_real_t val_f_d_lim[][stride])
Update face value for gradient and diffusion when solving in increments.
Definition cs_boundary_conditions_set_coeffs.cpp:4138
void cs_boundary_conditions_set_generalized_sym_vector_aniso(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t pimpv[3], const cs_real_t qimpv[3], const cs_real_t hint[6], const cs_nreal_t normal[3])
Set generalized BC for an anisotropic symmetric vector for a given face.
Definition cs_boundary_conditions_set_coeffs.cpp:3956
static void cs_boundary_conditions_set_dirichlet_vector(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t pimpv[3], cs_real_t hint, const cs_real_t hextv[3])
Set Dirichlet BC for a vector for a given face.
Definition cs_boundary_conditions_set_coeffs.h:407
static void cs_boundary_conditions_set_neumann_scalar_hmg(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs)
Set homogeneous Neumann BC for a scalar for a given face.
Definition cs_boundary_conditions_set_coeffs.h:189
static void cs_boundary_conditions_set_affine_function_conv_neumann_diff_scalar(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, cs_real_t pinf, cs_real_t ratio, cs_real_t dimp)
Set Neumann BC for the convection operator, imposed flux for diffusion.
Definition cs_boundary_conditions_set_coeffs.h:988
static void cs_boundary_conditions_set_dirichlet_conv_neumann_diff_scalar(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, cs_real_t pimp, cs_real_t dimp)
Imposed value for the convection operator, imposed flux for diffusion, for a scalar.
Definition cs_boundary_conditions_set_coeffs.h:1053
static void cs_boundary_conditions_set_dirichlet_scalar(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, cs_real_t pimp, cs_real_t hint, cs_real_t hext)
Set Dirichlet BC for a scalar for a given face.
Definition cs_boundary_conditions_set_coeffs.h:356
static void cs_boundary_conditions_set_dirichlet_conv_neumann_diff_vector(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t pimpv[3], const cs_real_t qimpv[3])
Imposed value for the convection operator, imposed flux for diffusion, for a vector.
Definition cs_boundary_conditions_set_coeffs.h:1086
static void cs_boundary_conditions_set_convective_outlet_tensor(cs_real_t a[6], cs_real_t af[6], cs_real_t b[6][6], cs_real_t bf[6][6], const cs_real_t pimpts[6], const cs_real_t cflts[6], cs_real_t hint)
Set convective outlet BC for a tensor for a given face.
Definition cs_boundary_conditions_set_coeffs.h:821
void cs_boundary_conditions_set_convective_outlet_scalar(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, cs_real_t pimp, cs_real_t cfl, cs_real_t hint)
Set convective oulet boundary condition for a scalar.
Definition cs_boundary_conditions_set_coeffs.cpp:3920
static void cs_boundary_conditions_set_neumann_vector(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t qimpv[3], cs_real_t hint)
Set Neumann BC for a scalar for a given face.
Definition cs_boundary_conditions_set_coeffs.h:218
void cs_boundary_conditions_set_coeffs_init(void)
Initialization of boundary condition arrays.
Definition cs_boundary_conditions_set_coeffs.cpp:3768
static void cs_boundary_conditions_set_neumann_vector_aniso(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t qimpv[3], const cs_real_t hint[6])
Set neumann BC for an anisotropic vector for a given face.
Definition cs_boundary_conditions_set_coeffs.h:260
static void cs_boundary_conditions_set_dirichlet_conv_neumann_diff_tensor(cs_real_t a[6], cs_real_t af[6], cs_real_t b[6][6], cs_real_t bf[6][6], const cs_real_t pimpts[6], const cs_real_t qimpts[6])
Imposed value for the convection operator, imposed flux for diffusion, for a tensor.
Definition cs_boundary_conditions_set_coeffs.h:1124
static void cs_boundary_conditions_set_affine_function_scalar(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, cs_real_t pinf, cs_real_t ratio, cs_real_t hint)
Set BC for an affine scalar function for a given face.
Definition cs_boundary_conditions_set_coeffs.h:920
static void cs_boundary_conditions_set_convective_outlet_vector_aniso(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t pimpv[3], const cs_real_t cflv[3], const cs_real_t hintt[6])
Set convective outlet BC for an anisotropic vector for a given face.
Definition cs_boundary_conditions_set_coeffs.h:865
void cs_boundary_conditions_set_coeffs(int nvar, int iterns, int isvhb, int itrale, int italim, int itrfin, int ineefl, int itrfup, int isostd[], cs_real_t visvdr[], cs_real_t hbord[], cs_real_t theipb[], int nftcdt)
Translation of the boundary conditions given by the user in a form that fits to the solver.
Definition cs_boundary_conditions_set_coeffs.cpp:866
static void cs_boundary_conditions_set_dirichlet_vector_aniso(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t pimpv[3], const cs_real_t hintt[6], const cs_real_t hextv[3])
Set Dirichlet BC for a vector for a given face with left anisotropic diffusion.
Definition cs_boundary_conditions_set_coeffs.h:494
static void cs_boundary_conditions_set_generalized_dirichlet_vector(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t pimpv[3], const cs_real_t qimpv[3], cs_real_t hint, const cs_nreal_t normal[3])
Set generalized Dirichlet BC for a vector for a given face.
Definition cs_boundary_conditions_set_coeffs.h:696
static void cs_boundary_conditions_set_generalized_sym_vector(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t pimpv[3], const cs_real_t qimpv[3], cs_real_t hint, const cs_nreal_t normal[3])
Set generalized BC for a symmetric vector for a given face.
Definition cs_boundary_conditions_set_coeffs.h:616
static void cs_boundary_conditions_set_convective_outlet_vector(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t pimpv[3], const cs_real_t cflv[3], cs_real_t hint)
Set convective outlet BC for a vector for a given face.
Definition cs_boundary_conditions_set_coeffs.h:775
static void cs_boundary_conditions_set_neumann_conv_h_neumann_diff_scalar(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, cs_real_t dimp, cs_real_t hint)
Set Neumann BC for the convection operator, zero flux for diffusion.
Definition cs_boundary_conditions_set_coeffs.h:953
static void cs_boundary_conditions_set_total_flux(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, cs_real_t hext, cs_real_t dimp)
Set total flux as a Robin condition.
Definition cs_boundary_conditions_set_coeffs.h:1020
static void cs_boundary_conditions_set_dirichlet_tensor(cs_real_t a[6], cs_real_t af[6], cs_real_t b[6][6], cs_real_t bf[6][6], const cs_real_t pimpts[6], cs_real_t hint, const cs_real_t hextts[6])
Set Dirichlet BC for a tensor for a given face.
Definition cs_boundary_conditions_set_coeffs.h:550
static void cs_boundary_conditions_set_neumann_tensor(cs_real_t a[6], cs_real_t af[6], cs_real_t b[6][6], cs_real_t bf[6][6], const cs_real_t qimpts[6], cs_real_t hint)
Set Neumann boundary conditions for a tensor for a given face.
Definition cs_boundary_conditions_set_coeffs.h:317
static void cs_boundary_conditions_set_neumann_scalar(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, cs_real_t qimp, cs_real_t hint)
Set Neumann BC for a scalar for a given face.
Definition cs_boundary_conditions_set_coeffs.h:160
void cs_boundary_conditions_set_generalized_dirichlet_vector_aniso(cs_lnum_t f_id, cs_field_bc_coeffs_t *bc_coeffs, const cs_real_t pimpv[3], const cs_real_t qimpv[3], const cs_real_t hint[6], const cs_nreal_t normal[3])
Set generalized Dirichlet BC for an anisotropic vector for a given face.
Definition cs_boundary_conditions_set_coeffs.cpp:4039
cs_real_t cs_real_33_t[3][3]
3x3 matrix of floating-point values
Definition cs_defs.h:368
#define BEGIN_C_DECLS
Definition cs_defs.h:542
#define _(String)
Definition cs_defs.h:67
double cs_real_t
Floating-point value.
Definition cs_defs.h:342
#define END_C_DECLS
Definition cs_defs.h:543
double cs_nreal_t
Definition cs_defs.h:346
int cs_lnum_t
local mesh entity id
Definition cs_defs.h:335
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition cs_defs.h:359
const cs_real_t cs_math_infinite_r
static CS_F_HOST_DEVICE void cs_math_sym_33_3_product(const cs_real_t m[6], const cs_real_t v[3], cs_real_t *restrict mv)
Compute the product of a symmetric matrix of 3x3 real values by a vector of 3 real values....
Definition cs_math.h:983
static CS_F_HOST_DEVICE cs_real_t cs_math_fmax(cs_real_t x, cs_real_t y)
Compute the max value of two real values.
Definition cs_math.h:503
cs_alloc_mode_t
Definition cs_mem.h:50
Set of parameters to handle an unsteady convection-diffusion-reaction equation with term sources.
Definition cs_equation_param.h:193
Field boundary condition descriptor (for variables)
Definition cs_field.h:121
cs_real_t * b
Definition cs_field.h:131
cs_real_t * a
Definition cs_field.h:130
cs_real_t * bf
Definition cs_field.h:133
cs_real_t * af
Definition cs_field.h:132
Field descriptor.
Definition cs_field.h:158