9.2
general documentation
Atmospheric examples

Initialization and finalization

Initialization and finalization is similar to that of the base examples

Example 1

For boundary faces of zone "open_11", assign an inlet boundary condition prescribed from the meteo profile with automatic choice between inlet/ outlet according to the meteo profile.

{
int *iautom = cs_glob_bc_pm_info->iautom;
const cs_zone_t *zn = cs_boundary_zone_by_name("open_11");
for (cs_lnum_t e_idx = 0; e_idx < zn->n_elts; e_idx++) {
const cs_lnum_t face_id = zn->elt_ids[e_idx];
bc_type[face_id] = CS_INLET;
iautom[face_id] = 1;
}
}
cs_boundary_condition_pm_info_t * cs_glob_bc_pm_info
const cs_zone_t * cs_boundary_zone_by_name(const char *name)
Return a pointer to a boundary zone based on its name if present.
Definition: cs_boundary_zone.cpp:708
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:325
@ CS_INLET
Definition: cs_parameters.h:83
int * iautom
Definition: cs_boundary_conditions.h:93
Definition: cs_zone.h:51
const cs_lnum_t * elt_ids
Definition: cs_zone.h:61
cs_lnum_t n_elts
Definition: cs_zone.h:60

Example 3

For boundary faces of zone "inlet_3", assign an inlet boundary condition. Here, all other variables prescribed from the meteo profile are assumed to be managed by the GUI, except for dynamic variables which are prescribed with a rough log law.

{
const cs_lnum_t n_b_faces = domain->mesh->n_b_faces;
const cs_real_3_t *restrict b_face_cog
= (const cs_real_3_t *)domain->mesh_quantities->b_face_cog;
constexpr cs_real_t d2o3 = 2./3;
/* Parameters for the analytical rough wall law (neutral) */
constexpr cs_real_t rugd = 0.10;
constexpr cs_real_t zref = 10.0;
constexpr cs_real_t xuref = 10.0;
const cs_zone_t *zn = cs_boundary_zone_by_name("inlet_3");
for (cs_lnum_t e_idx = 0; e_idx < zn->n_elts; e_idx++) {
const cs_lnum_t face_id = zn->elt_ids[e_idx];
bc_type[face_id] = CS_INLET;
/* Dynamic variables are prescribed with a rough log law;
note: using functions from the `cs_turbulence_bc` series
is preferrable when the appropriate function is available. */
const cs_real_t zent = b_face_cog[face_id][2];
const cs_real_t ustar = cs_turb_xkappa*xuref/log((zref+rugd)/rugd);
const cs_real_t xkent = cs_math_pow2(ustar)/sqrt(cs_turb_cmu);
const cs_real_t xeent = cs_math_pow3(ustar)/cs_turb_xkappa/(zent+rugd);
CS_F_(k)->bc_coeffs->rcodcl1[face_id] = xkent;
CS_F_(eps)->bc_coeffs->rcodcl1[face_id] = xeent;
}
else if (cs_glob_turb_model->itytur == 3) {
for (int ii = 0; ii< 3; ii++)
CS_F_(rij)->bc_coeffs->rcodcl1[n_b_faces*ii + face_id] = d2o3*xkent;
for (int ii = 3; ii< 6; ii++)
CS_F_(rij)->bc_coeffs->rcodcl1[n_b_faces*ii + face_id] = 0;
CS_F_(eps)->bc_coeffs->rcodcl1[face_id] = xeent;
}
CS_F_(k)->bc_coeffs->rcodcl1[face_id] = xkent;
CS_F_(eps)->bc_coeffs->rcodcl1[face_id] = xeent;
CS_F_(phi)->bc_coeffs->rcodcl1[face_id] = d2o3;
CS_F_(f_bar)->bc_coeffs->rcodcl1[face_id] = 0.0;
}
CS_F_(k)->bc_coeffs->rcodcl1[face_id] = xkent;
CS_F_(omg)->bc_coeffs->rcodcl1[face_id] = xeent/cs_turb_cmu/xkent;
}
CS_F_(nusa)->bc_coeffs->rcodcl1[face_id]
= cs_turb_cmu*cs_math_pow2(xkent)/xeent;
}
}
}
#define restrict
Definition: cs_defs.h:148
double cs_real_t
Floating-point value.
Definition: cs_defs.h:332
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition: cs_defs.h:349
@ nusa
Definition: cs_field_pointer.h:79
@ k
Definition: cs_field_pointer.h:68
@ eps
Definition: cs_field_pointer.h:69
@ omg
Definition: cs_field_pointer.h:78
@ rij
Definition: cs_field_pointer.h:71
@ phi
Definition: cs_field_pointer.h:73
@ f_bar
Definition: cs_field_pointer.h:74
#define CS_F_(e)
Macro used to return a field pointer by its enumerated value.
Definition: cs_field_pointer.h:47
CS_F_HOST_DEVICE cs_real_t cs_math_pow3(cs_real_t x)
Compute the cube of a real value.
Definition: cs_math.h:918
CS_F_HOST_DEVICE cs_real_t cs_math_pow2(cs_real_t x)
Compute the square of a real value.
Definition: cs_math.h:902
double cs_turb_cmu
Definition: cs_turbulence_model.cpp:484
double cs_turb_xkappa
Definition: cs_turbulence_model.cpp:422
const cs_turb_model_t * cs_glob_turb_model
@ CS_TURB_SPALART_ALLMARAS
Definition: cs_turbulence_model.h:68
@ CS_TURB_V2F_PHI
Definition: cs_turbulence_model.h:65
@ CS_TURB_K_OMEGA
Definition: cs_turbulence_model.h:67
DISABLE_WARNING_POP int model
Definition: cs_turbulence_model.h:143
int itytur
Definition: cs_turbulence_model.h:169

Example 4

Define a rough wall at boundary faces of zone 'b_5'.

{
/* Parameters for the analytical rough wall law (neutral) */
constexpr cs_real_t rugd = 0.10;
cs_span<cs_real_t> bpro_roughness;
cs_span<cs_real_t> bpro_roughness_t;
if (cs_field_try("boundary_roughness") != nullptr)
bpro_roughness = cs_field("boundary_roughness")->get_val_s();
if (cs_field_try("boundary_thermal_roughness") != nullptr)
bpro_roughness = cs_field("boundary_thermal_roughness")->get_val_s();
const cs_zone_t *zn = cs_boundary_zone_by_name("b_5");
for (cs_lnum_t e_idx = 0; e_idx < zn->n_elts; e_idx++) {
const cs_lnum_t face_id = zn->elt_ids[e_idx];
bc_type[face_id] = CS_ROUGHWALL;
if (bpro_roughness.size() != 0)
bpro_roughness[face_id] = rugd;
if (bpro_roughness_t.size() != 0)
bpro_roughness_t[face_id] = 0.01;
}
}
Define a templated mdspan class (non owner of data)
Definition: cs_mdspan.h:68
CS_F_HOST_DEVICE cs_lnum_t size() const
Getter for total size.
Definition: cs_mdspan.h:508
cs_span< cs_real_t > get_val_s(const int time_id=0) const
Return a 1D span view of field values. If the field is not a scalar a fatal error is provoked.
Definition: cs_field.cpp:5080
cs_field_t * cs_field(int id)
Return a pointer to a field based on its id. This function requires that a field of the given id is d...
Definition: cs_field.cpp:4295
cs_field_t * cs_field_try(int id)
Return a pointer to a field based on its id. If no field of the given name is defined,...
Definition: cs_field.cpp:4371
@ CS_ROUGHWALL
Definition: cs_parameters.h:88