Boundary conditions
Lagrangian boundary conditions are based on boundary zone (cs_boundary_zone_t) definitions. Additional information may be provided for Lagrangian boundary types and injections.
As usual, definitions may be created using the GUI and extended with user functions.
Access to the Lagrangian boundary conditions structure, which is necessary to most of the following examples, may be done as follows:
cs_lagr_zone_data_t * cs_lagr_get_boundary_conditions(void)
Return pointer to the main boundary conditions structure.
Definition cs_lagr.c:1479
Boundary zones
In this example, we assign rebound conditions to all boundary zones, except for an inlet and outlet type to specified zones. The type assigned is an integer based on the cs_lagr_bc_type_t enumerator type.
{
for (int z_id = 0; z_id < n_zones; z_id++) {
}
}
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.c:706
int cs_boundary_zone_n_zones(void)
Return number of boundary zones defined.
Definition cs_boundary_zone.c:421
@ CS_LAGR_OUTLET
Definition cs_lagr.h:88
@ CS_LAGR_INLET
Definition cs_lagr.h:87
@ CS_LAGR_REBOUND
Definition cs_lagr.h:89
int * zone_type
Definition cs_lagr.h:659
int id
Definition cs_zone.h:59
Injection sets
In the following example, a first injection set for an inlet zone is defined. Note that newly injected particles may also be modified using the cs_user_lagr_in function.
{
int set_id = 0;
}
}
cs_lagr_injection_set_t * cs_lagr_get_injection_set(cs_lagr_zone_data_t *zone_data, int zone_id, int set_id)
Provide access to injection set structure.
Definition cs_lagr.c:1177
cs_lagr_model_t * cs_glob_lagr_model
cs_lagr_specific_physics_t * cs_glob_lagr_specific_physics
cs_real_t diameter_variance
Definition cs_lagr.h:549
cs_real_t density
Definition cs_lagr.h:551
int injection_frequency
Definition cs_lagr.h:516
int temperature_profile
Definition cs_lagr.h:534
cs_real_t velocity_magnitude
Definition cs_lagr.h:543
int velocity_profile
Definition cs_lagr.h:529
cs_real_t cp
Definition cs_lagr.h:555
cs_real_t diameter
Definition cs_lagr.h:548
cs_gnum_t n_inject
Definition cs_lagr.h:513
int cluster
Definition cs_lagr.h:539
cs_real_t fouling_index
Definition cs_lagr.h:553
cs_real_t flow_rate
Definition cs_lagr.h:559
cs_real_t emissivity
Definition cs_lagr.h:561
cs_real_t stat_weight
Definition cs_lagr.h:557
cs_real_t temperature
Definition cs_lagr.h:546
int n_stat_classes
Definition cs_lagr.h:290
int itpvar
Definition cs_lagr.h:369
In the next example, a profile is assigned to the second injection set of an inlet zone (it is assumed this et was previously defined either through the GUI or user function).
This requires first defining a profile definition function, matching the profile of cs_lagr_injection_profile_compute_t. An example based on experimental profiles is given here:
static void
_injection_profile(int zone_id,
int location_id,
{
const int itmx = 8;
cs_real_t zi[] = {0.e-3, 1.e-3, 1.5e-3, 2.0e-3, 2.5e-3, 3.0e-3, 3.5e-3,
4.0e-3, 4.5e-3, 5.0e-3};
cs_real_t lvf[] = {0.377e-4, 2.236e-4, 3.014e-4, 4.306e-4, 5.689e-4,
8.567e-4, 7.099e-4, 4.520e-4, 2.184e-4, 0.377e-4};
cs_real_t ui[] = {5.544, 8.827, 9.068, 9.169, 8.923, 8.295, 7.151, 6.048,
4.785, 5.544};
const cs_real_t z = b_face_coords[face_id][2];
int i = 0;
if (z > zi[0]) {
for (i = 0; i < itmx; i++) {
if (z >= zi[i] && z < zi[i+1])
break;
}
}
cs_real_t up = ui[i] +(z-zi[i])*(ui[i+1]-ui[i])/(zi[i+1]-zi[i]);
cs_real_t lvfp = lvf[i] + (z-zi[i])*(lvf[i+1]-lvf[i])/(zi[i+1]-zi[i]);
profile[ei] = lvfp * up;
}
}
double cs_real_t
Floating-point value.
Definition cs_defs.h:302
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition cs_defs.h:315
int cs_lnum_t
local mesh entity id
Definition cs_defs.h:298
cs_mesh_quantities_t * cs_glob_mesh_quantities
cs_real_t * b_face_cog
Definition cs_mesh_quantities.h:105
Assigning the profile to the injection set simply requires assigning the function to the pointer in the injection set structure:
{
int set_id = 1;
}
cs_lagr_injection_profile_compute_t * injection_profile_func
Definition cs_lagr.h:520
void * injection_profile_input
Definition cs_lagr.h:523
An optional user-defined input function may also be associated.
Boundary-particle interactions
It is also possible to decide of the behavior of particle when they encounter a boundary (this boundary has to be of type CS_LAGR_BC_USER).
In the following example, the particle is simply deposited and marked for elimination:
# pragma omp atomic
particles->n_part_dep += 1;
# pragma omp atomic
p_id,
for (
int k = 0;
k < 3;
k++)
particle_coord[
k] = c_intersect[
k];
@ k
Definition cs_field_pointer.h:70
#define CS_EVENT_OUTFLOW
Definition cs_lagr_event.h:56
#define CS_EVENT_DEPOSITION
Definition cs_lagr_event.h:62
@ CS_LAGR_STAT_WEIGHT
Definition cs_lagr_particle.h:90
@ CS_LAGR_COORDS
Definition cs_lagr_particle.h:95
static void cs_lagr_particles_set_flag(const cs_lagr_particle_set_t *particle_set, cs_lnum_t particle_id, int mask)
Set flag value with a selected mask for a given particle in a set.
Definition cs_lagr_particle.h:526
static void * cs_lagr_particles_attr(cs_lagr_particle_set_t *particle_set, cs_lnum_t particle_id, cs_lagr_attribute_t attr)
Get pointer to a current attribute of a given particle in a set.
Definition cs_lagr_particle.h:400
static cs_real_t cs_lagr_particle_get_real(const void *particle, const cs_lagr_attribute_map_t *attr_map, cs_lagr_attribute_t attr)
Get attribute value of type cs_real_t of a given particle in a set.
Definition cs_lagr_particle.h:1229
#define CS_LAGR_PART_DEPOSITED
Definition cs_lagr_particle.h:57
@ CS_LAGR_PART_OUT
Definition cs_lagr_tracking.h:60
Volume conditions
Lagrangian volume conditions are based on volume zone (cs_volume_zone_t) definitions. Additional information may be provided for Lagrangian injections.
As usual, definitions may be created using the GUI and extended with user functions.
Access to the Lagrangian volume conditions structure, which is necessary to most of the following examples, may be done as follows:
cs_lagr_zone_data_t * cs_lagr_get_volume_conditions(void)
Return pointer to the main volume conditions structure.
Definition cs_lagr.c:1503
Injection sets
In the following example, we inject 1 particle set at each time step:
{
int set_id = 0;
}
const cs_zone_t * cs_volume_zone_by_name(const char *name)
Return a pointer to a volume zone based on its name if present.
Definition cs_volume_zone.c:676
{
cs_gnum_t n_inject[] = {500, 500};
for (int set_id = 0; set_id < 2; set_id++) {
}
}
const cs_zone_t * cs_volume_zone_by_id(int id)
Return a pointer to a volume zone based on its id.
Definition cs_volume_zone.c:652
double precision, dimension(:,:,:), allocatable density
Definition atimbr.f90:124
In the following example, we inject 2 particle sets at computation initialization (i.e. at the first time step of a computation sequence in which the Lagrangian module is activated). Note that newly injected particles may also be modified using the cs_user_lagr_in function.
{
cs_gnum_t n_inject[] = {500, 500};
for (int set_id = 0; set_id < 2; set_id++) {
}
}