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.c:193
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.c:3614
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.c:3461
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.c:601
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_real_t normal[3])
Set generalized Dirichlet BC for a vector for a given face.
Definition: cs_boundary_conditions_set_coeffs.h:698
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_real_t normal[3])
Set generalized BC for an anisotropic symmetric vector for a given face.
Definition: cs_boundary_conditions_set_coeffs.c:3650
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
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_real_t normal[3])
Set generalized Dirichlet BC for an anisotropic vector for a given face.
Definition: cs_boundary_conditions_set_coeffs.c:3733
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_real_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
#define BEGIN_C_DECLS
Definition: cs_defs.h:528
double cs_real_t
Floating-point value.
Definition: cs_defs.h:332
#define _(String)
Definition: cs_defs.h:63
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition: cs_defs.h:347
#define END_C_DECLS
Definition: cs_defs.h:529
cs_real_t cs_real_33_t[3][3]
3x3 matrix of floating-point values
Definition: cs_defs.h:356
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:325
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 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:702
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:200
integer, save nftcdt
Global indicator of condensation source terms (ie. sum on the processors of nfbpcd) cells associated ...
Definition: optcal.f90:815
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