Skip to content

Boundary Conditions

Boundary Conditions

Boundary conditions in GUERNICA are configured through [components] boundaries together with one or more [boundary:<name>] sections. These sections define how specific mesh boundary attributes are treated by the wall boundary condition operator. Periodic boundaries are handled implicitly by the mesh itself and are not listed in boundaries (more details on how periodicity is represented are given in Mesh).

At a high level, GUERNICA builds a WallBCOperator from the input file and then attaches it to the advection operator. This means boundary conditions enter through the advection face terms rather than as separate standalone physics operators. The wall boundary condition data are stored by boundary attribute and then used when boundary faces are processed.

A typical setup in the input file looks like:

[components]
species = n
boundaries = left_wall, right_wall

[boundary:left_wall]
attrs = 1
type = maxwellian_channel
alpha = wall_alpha
temperature = wall_temperature
ux = wall_ux
uy = wall_uy
uz = wall_uz
specular_coeff = 0.2

[boundary:right_wall]
attrs = 2
type = absorbing

[profile:wall_alpha]
type = constant
value = 1.0

[profile:wall_temperature]
type = constant
value = 1.0

[profile:wall_ux]
type = constant
value = 0.0

[profile:wall_uy]
type = constant
value = 0.0

[profile:wall_uz]
type = constant
value = 0.0

Here, boundaries in [components] lists the named boundary condition blocks that will be used in the simulation. Each [boundary:<name>] section then applies a boundary condition to one or more mesh boundary attributes through the attrs entry. In other words, the mesh determines where a boundary condition applies, and the [boundary:<name>] section determines what happens there.

The currently supported boundary condition types are:

  • absorbing
  • specular
  • maxwellian_channel

Absorbing

An absorbing boundary removes outgoing neutral population at the wall. In the wall boundary condition operator, this is represented by setting both the specular coefficient and the wall injection strength to zero for the corresponding boundary attribute. A minimal absorbing setup is

[components]
boundaries = outlet

[boundary:outlet]
attrs = 2
type = absorbing

This is the simplest wall model and is appropriate when neutrals reaching the wall should be fully lost.

Specular

A specular boundary reflects particles at the wall. In the wall boundary condition operator, this is represented through a specular reflection setting associated with the boundary attribute. A minimal specular setup is

[components]
boundaries = mirror_wall

[boundary:mirror_wall]
attrs = 1
type = specular

Conceptually, this corresponds to reflecting the velocity component normal to the wall while preserving the tangential motion, as handled by the advection boundary-face logic.

Maxwellian Channel

A maxwellian_channel boundary prescribes an incoming Maxwellian wall distribution. In the implementation, this is built for each boundary attribute as

\[ f_w(v_x,v_y,v_z) = \frac{1}{(2\pi T)^{d/2}} \exp\!\left( -\frac{(v_x-u_x)^2 + (v_y-u_y)^2 + (v_z-u_z)^2}{2T} \right), \]

where \(T\) is the wall temperature, \((u_x,u_y,u_z)\) is the wall drift velocity, and \(d\) is the velocity-space dimension used by the operator. The amplitude alpha is stored separately from the normalized Maxwellian itself and is used by the boundary condition machinery when applying the wall source.

A typical maxwellian_channel setup is

[components]
boundaries = source_wall

[boundary:source_wall]
attrs = 1
type = maxwellian_channel
alpha = wall_alpha
temperature = wall_temperature
ux = wall_ux
uy = wall_uy
uz = wall_uz
specular_coeff = 0.0

[profile:wall_alpha]
type = constant
value = 1.0

[profile:wall_temperature]
type = constant
value = 1.0

[profile:wall_ux]
type = constant
value = 0.0

[profile:wall_uy]
type = constant
value = 0.0

[profile:wall_uz]
type = constant
value = 0.0

In practice:

  • alpha sets the strength of the wall Maxwellian channel,
  • temperature sets the wall temperature,
  • ux, uy, and uz set the wall drift velocity,
  • specular_coeff allows a specular fraction to be associated with that same wall attribute.