8.3
general documentation
Boundary forces

Boundary forces

This is an example of cs_user_extra_operations which computes boundary forces

Example 1: compute total forces on a boundary zone (subset of boundary faces).

{
const cs_lnum_t n_b_faces = domain->mesh->n_b_faces;
cs_field_t *b_forces = cs_field_by_name_try("boundary_forces");
if (b_forces != nullptr) {
cs_real_3_t total_b_forces = {0., 0., 0.};
cs_real_3_t *bpro_forces = (cs_real_3_t *) b_forces->val;
/* get zone from its name, here "selected_wall" */
const cs_zone_t *zn = cs_boundary_zone_by_name("selected_wall");
for (cs_lnum_t e_id = 0; e_id < zn->n_elts; e_id++) {
cs_lnum_t face_id = zn->elt_ids[e_id];
for (cs_lnum_t i = 0; i < 3; i++)
total_b_forces[i] += bpro_forces[face_id][i];
}
/* parallel sum */
cs_parall_sum(3, CS_REAL_TYPE, total_b_forces);
}
}
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:711
#define CS_REAL_TYPE
Definition: cs_defs.h:486
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition: cs_defs.h:359
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:335
cs_field_t * cs_field_by_name_try(const char *name)
Return a pointer to a field based on its name if present.
Definition: cs_field.cpp:2515
static void cs_parall_sum(int n, cs_datatype_t datatype, void *val)
Sum values of a given datatype on all default communicator processes.
Definition: cs_parall.h:147
Field descriptor.
Definition: cs_field.h:131
cs_real_t * val
Definition: cs_field.h:152
Definition: cs_zone.h:55
const cs_lnum_t * elt_ids
Definition: cs_zone.h:65

Example 2: compute pressure forces on a boundary zone (subset of boundary faces).

{
const cs_lnum_t n_b_faces = domain->mesh->n_b_faces;
const cs_real_3_t *b_f_face_normal =
(cs_real_3_t *)domain->mesh_quantities->b_f_face_normal;
cs_real_3_t total_b_p_forces = {0., 0., 0.};
/* get zone from its name, here "selected_wall" */
const cs_zone_t *zn = cs_boundary_zone_by_name("selected_wall");
/* compute static pressure on selected boundary faces */
cs_real_t *p_b_val;
BFT_MALLOC(p_b_val, zn->n_elts, cs_real_t);
cs_post_b_pressure(zn->n_elts, zn->elt_ids, p_b_val);
for (cs_lnum_t e_id = 0; e_id < zn->n_elts; e_id++) {
cs_lnum_t face_id = zn->elt_ids[e_id];
for (cs_lnum_t i = 0; i < 3; i++)
total_b_p_forces[i] += p_b_val[e_id]*b_f_face_normal[face_id][i];
}
BFT_FREE(p_b_val);
/* parallel sum */
cs_parall_sum(3, CS_REAL_TYPE, total_b_p_forces);
}
#define BFT_FREE(_ptr)
Definition: bft_mem.h:90
#define BFT_MALLOC(_ptr, _ni, _type)
Definition: bft_mem.h:58
double cs_real_t
Floating-point value.
Definition: cs_defs.h:342
void cs_post_b_pressure(cs_lnum_t n_b_faces, const cs_lnum_t b_face_ids[], cs_real_t pres[])
Compute pressure on a specific boundary region.
Definition: cs_post_util.cpp:588
cs_lnum_t n_elts
Definition: cs_zone.h:64