1#ifndef __CS_BOUNDARY_CONDITIONS_SET_COEFFS_H__
2#define __CS_BOUNDARY_CONDITIONS_SET_COEFFS_H__
232 for (
size_t i = 0; i < 3; i++) {
233 a[f_id][i] = -qimpv[i] /
fmax(hint, 1.e-300);
236 b[f_id][0][0] = 1., b[f_id][0][1] = 0., b[f_id][0][2] = 0.;
237 b[f_id][1][0] = 0., b[f_id][1][1] = 1., b[f_id][1][2] = 0.;
238 b[f_id][2][0] = 0., b[f_id][2][1] = 0., b[f_id][2][2] = 1.;
242 for (
size_t i = 0; i < 3; i++) {
243 af[f_id][i] = qimpv[i];
245 for (
size_t j = 0; j < 3; j++)
272 cs_real_t m[6] = {0., 0., 0., 0., 0., 0.};
273 m[0] = hint[1]*hint[2] - hint[4]*hint[4];
274 m[1] = hint[0]*hint[2] - hint[5]*hint[5];
275 m[2] = hint[0]*hint[1] - hint[3]*hint[3];
276 m[3] = hint[4]*hint[5] - hint[3]*hint[2];
277 m[4] = hint[3]*hint[5] - hint[0]*hint[4];
278 m[5] = hint[3]*hint[4] - hint[1]*hint[5];
280 cs_real_t invdet = 1./(hint[0]*m[0] + hint[3]*m[3] + hint[5]*m[5]);
282 cs_real_t invh[6] = {0., 0., 0., 0., 0., 0.};
283 invh[0] = m[0] * invdet;
284 invh[1] = m[1] * invdet;
285 invh[2] = m[2] * invdet;
286 invh[3] = m[3] * invdet;
287 invh[4] = m[4] * invdet;
288 invh[5] = m[5] * invdet;
292 for (
int isou = 0; isou < 3; isou++)
293 a[f_id][isou] = -a[f_id][isou];
295 b[f_id][0][0] = 1.0, b[f_id][0][1] = 0.0, b[f_id][0][2] = 0.0;
296 b[f_id][1][0] = 0.0, b[f_id][1][1] = 1.0, b[f_id][1][2] = 0.0;
297 b[f_id][2][0] = 0.0, b[f_id][2][1] = 0.0, b[f_id][2][2] = 1.0;
299 for (
int isou = 0; isou < 3; isou++) {
302 af[f_id][isou] = qimpv[isou];
303 for (
int jsou = 0; jsou < 3; jsou++)
304 bf[f_id][isou][jsou] = 0.0;
326 for (
int isou = 0; isou < 6; isou++) {
330 for (
int jsou = 0; jsou < 6; jsou++) {
338 af[isou] = qimpts[isou];
339 for (
int jsou = 0; jsou < 6; jsou++)
340 bf[isou][jsou] = 0.0;
377 af[f_id] = -hint*pimp;
384 a[f_id] = hext*pimp/(hint + hext);
385 b[f_id] = hint /(hint + hext);
389 af[f_id] = -heq*pimp;
421 for (
int isou = 0; isou < 3; isou++) {
425 a[f_id][isou] = pimpv[isou];
426 for (
int jsou = 0; jsou < 3; jsou++)
427 b[f_id][isou][jsou] = 0.;
430 af[f_id][isou] = -hint*pimpv[isou];
432 bf[f_id][0][0] = hint, bf[f_id][0][1] = 0., bf[f_id][0][2] = 0.;
433 bf[f_id][1][0] = 0., bf[f_id][1][1] = hint, bf[f_id][1][2] = 0.;
434 bf[f_id][2][0] = 0., bf[f_id][2][1] = 0., bf[f_id][2][2] = hint;
439 const cs_real_t val = hint/(hint + hextv[isou]);
443 a[f_id][isou] = hextv[isou]*pimpv[isou]/(hint + hextv[isou]);
445 b[f_id][0][0] = val, b[f_id][0][1] = 0., b[f_id][0][2] = 0.;
446 b[f_id][1][0] = 0., b[f_id][1][1] = val, b[f_id][1][2] = 0.;
447 b[f_id][2][0] = 0., b[f_id][2][1] = 0., b[f_id][2][2] = val;
450 af[f_id][isou] = -heq*pimpv[isou];
452 bf[f_id][0][0] = heq, bf[f_id][0][1] = 0., bf[f_id][0][2] = 0.;
453 bf[f_id][1][0] = 0., bf[f_id][1][1] = heq, bf[f_id][1][2] = 0.;
454 bf[f_id][2][0] = 0., bf[f_id][2][1] = 0., bf[f_id][2][2] = heq;
509 for (
int isou = 0; isou < 3; isou++) {
511 a[f_id][isou] = pimpv[isou];
512 for (
int jsou = 0; jsou < 3; jsou++)
513 b[f_id][isou][jsou] = 0.;
518 _(
" %s: hextv not set for component %d."),
525 for (
int isou = 0; isou < 3; isou++)
526 af[f_id][isou] = -af[f_id][isou];
528 bf[f_id][0][0] = hintt[0];
529 bf[f_id][1][1] = hintt[1];
530 bf[f_id][2][2] = hintt[2];
531 bf[f_id][0][1] = hintt[3];
532 bf[f_id][1][0] = hintt[3];
533 bf[f_id][1][2] = hintt[4];
534 bf[f_id][2][1] = hintt[4];
535 bf[f_id][0][2] = hintt[5];
536 bf[f_id][2][0] = hintt[5];
560 for (
int isou = 0; isou < 6; isou++) {
564 a[isou] = pimpts[isou];
565 for (
int jsou = 0; jsou < 6; jsou++)
569 af[isou] = -hint * pimpts[isou];
570 for (
int jsou = 0; jsou < 6; jsou++) {
572 bf[isou][jsou] = hint;
580 const cs_real_t heq = hint * hextts[isou] / (hint + hextts[isou]);
583 a[isou] = hextts[isou] * pimpts[isou] / (hint + hextts[isou]);
584 for (
int jsou = 0; jsou < 6; jsou++) {
586 b[isou][jsou] = hint / (hint + hextts[isou]);
592 af[isou] = -heq * pimpts[isou];
593 for (
int jsou = 0; jsou < 6; jsou++) {
595 bf[isou][jsou] = heq;
630 for (
int isou = 0; isou < 3; isou++) {
633 a[f_id][isou] = - qimpv[isou]/
cs_math_fmax(hint, 1.e-300);
635 for (
int jsou = 0; jsou < 3; jsou++) {
637 a[f_id][isou] = a[f_id][isou] + normal[isou]*normal[jsou]
638 * (pimpv[jsou] + qimpv[jsou] /
cs_math_fmax(hint, 1.e-300));
641 b[f_id][isou][jsou] = 1.0 - normal[isou] * normal[jsou];
643 b[f_id][isou][jsou] = - normal[isou] * normal[jsou];
647 af[f_id][isou] = qimpv[isou];
649 for (
int jsou = 0; jsou < 3; jsou++){
651 af[f_id][isou] = af[f_id][isou] - normal[isou]*normal[jsou]
652 * (hint * pimpv[jsou] + qimpv[jsou]);
654 bf[f_id][isou][jsou] = hint * normal[isou] * normal[jsou];
710 for (
int isou = 0; isou < 3; isou++) {
714 a[f_id][isou] = pimpv[isou];
715 for (
int jsou = 0; jsou < 3; jsou++) {
717 a[f_id][isou] = a[f_id][isou] - normal[isou]*normal[jsou]
718 * (pimpv[jsou] + qimpv[jsou] /
cs_math_fmax(hint, 1.e-300));
720 b[f_id][isou][jsou] = normal[isou] * normal[jsou];
725 af[f_id][isou] = -hint*pimpv[isou];
726 for (
int jsou = 0; jsou < 3; jsou++) {
728 af[f_id][isou] = af[f_id][isou] + normal[isou]*normal[jsou]
729 * (qimpv[jsou] + pimpv[jsou] * hint);
732 bf[f_id][isou][jsou] = hint * (1.0 - normal[isou] * normal[jsou]);
734 bf[f_id][isou][jsou] = - hint * normal[isou] * normal[jsou];
788 for (
int isou = 0; isou < 3; isou++) {
791 for (
int jsou = 0; jsou < 3; jsou ++) {
793 b[f_id][isou][jsou] = cflv[isou] / (1.0 + cflv[isou]);
795 b[f_id][isou][jsou] = 0.0;
797 a[f_id][isou] = pimpv[isou] * (1.0 - b[f_id][isou][isou]);
800 af[f_id][isou] = -hint * a[f_id][isou];
801 for (
int jsou = 0; jsou < 3; jsou++) {
803 bf[f_id][isou][jsou] = hint * (1.0 - b[f_id][isou][jsou]);
805 bf[f_id][isou][jsou] = 0.0;
831 for (
int isou = 0; isou < 6; isou++) {
834 for (
int jsou = 0; jsou < 6; jsou++) {
836 b[isou][jsou] = cflts[isou] / (1.0 + cflts[isou]);
840 a[isou] = (1.0 - b[isou][isou]) * pimpts[isou];
843 af[isou] = -hint*a[isou];
844 for (
int jsou = 0; jsou < 6; jsou++) {
846 bf[isou][jsou] = hint * (1.0 - b[isou][jsou]);
848 bf[isou][jsou] = 0.0;
879 for(
int isou = 0; isou < 3; isou++) {
882 for (
int jsou = 0; jsou < 3; jsou++) {
884 b[f_id][isou][jsou] = cflv[isou]/(1.0+cflv[isou]);
886 b[f_id][isou][jsou] = 0.0;
888 a[f_id][isou] = (1.0-b[f_id][isou][isou])*pimpv[isou];
894 for (
int isou = 0; isou < 3; isou++)
895 af[f_id][isou] = -af[f_id][isou];
897 bf[f_id][0][0] = hintt[0]*(1.0 - b[f_id][0][0]);
898 bf[f_id][1][1] = hintt[1]*(1.0 - b[f_id][1][1]);
899 bf[f_id][2][2] = hintt[2]*(1.0 - b[f_id][2][2]);
900 bf[f_id][0][1] = hintt[3]*(1.0 - b[f_id][0][0]);
901 bf[f_id][1][0] = hintt[3]*(1.0 - b[f_id][0][0]);
902 bf[f_id][1][2] = hintt[4]*(1.0 - b[f_id][1][1]);
903 bf[f_id][2][1] = hintt[4]*(1.0 - b[f_id][1][1]);
904 bf[f_id][0][2] = hintt[5]*(1.0 - b[f_id][2][2]);
905 bf[f_id][2][0] = hintt[5]*(1.0 - b[f_id][2][2]);
938 af[f_id] = -hint * a[f_id];
939 bf[f_id] = hint * (1. - b[f_id]);
1098 for (
int isou = 0; isou < 3; isou++) {
1101 a[f_id][isou] = pimpv[isou];
1102 for (
int jsou = 0; jsou < 3; jsou++)
1103 b[f_id][isou][jsou] = 0.0;
1106 af[f_id][isou] = qimpv[isou];
1107 for (
int jsou = 0; jsou < 3; jsou++)
1108 bf[f_id][isou][jsou] = 0.0;
1133 for (
int isou = 0; isou < 6; isou++) {
1138 a[isou] = pimpts[isou];
1139 for (
int jsou = 0; jsou < 6; jsou++)
1140 b[isou][jsou] = 0.0;
1143 af[isou] = qimpts[isou];
1144 for (
int jsou = 0; jsou < 6; jsou++)
1145 bf[isou][jsou] = 0.0;
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_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:3906
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:409
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:191
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:990
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:1055
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:358
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:1088
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:823
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:3870
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:220
void cs_boundary_conditions_set_coeffs_init(void)
Initialization of boundary condition arrays.
Definition: cs_boundary_conditions_set_coeffs.cpp:3714
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:262
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:1126
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:922
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:867
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:853
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:496
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:698
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:618
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:777
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:955
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:1022
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:552
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:319
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:162
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:3989
#define BEGIN_C_DECLS
Definition: cs_defs.h:542
double cs_real_t
Floating-point value.
Definition: cs_defs.h:342
#define _(String)
Definition: cs_defs.h:67
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition: cs_defs.h:359
#define END_C_DECLS
Definition: cs_defs.h:543
cs_real_t cs_real_33_t[3][3]
3x3 matrix of floating-point values
Definition: cs_defs.h:368
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:335
double cs_nreal_t
Definition: cs_defs.h:346
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
integer, save nvar
number of solved variables (must be lower than nvarmx)
Definition: dimens.f90:42
real(c_double), dimension(:), pointer, save qimp
Definition: coincl.f90:158
real(c_double), pointer, save fmax
Definition: coincl.f90:185
Field boundary condition descriptor (for variables)
Definition: cs_field.h:104
cs_real_t * af
Definition: cs_field.h:115
cs_real_t * b
Definition: cs_field.h:114
cs_real_t * a
Definition: cs_field.h:113
cs_real_t * bf
Definition: cs_field.h:116