Velocity and traction boundary conditions

Velocity and traction boundary conditions#

Prescribed velocity boundary conditions#

Most of the time, one chooses relatively simple boundary values for the velocity: either a zero boundary velocity, a tangential flow model in which the tangential velocity is unspecified but the normal velocity is zero at the boundary, or one in which all components of the velocity are unspecified (i.e., for example, an outflow or inflow condition where the total stress in the fluid is assumed to be zero). However, sometimes we want to choose a velocity model in which the velocity on the boundary equals some prescribed value. A typical example is one in which plate velocities are known, for example their current values or historical reconstructions. In that case, one needs a model in which one needs to be able to evaluate the velocity at individual points at the boundary. This can be implemented via plugins.

To implement a new boundary velocity model, you need to overload the aspect::VelocityBoundaryConditions::Interface class and use the ASPECT_REGISTER_BOUNDARY_VELOCITY_MODEL macro to register your new class. The implementation of the new class should be in namespace aspect::BoundaryVelocity.

In essence, the main function you have to implement for this plugin system is one that, given a point returns the prescribed velocity at that point. There are also member functions in the base class you can overload that are called at the beginning of each time step; this is useful if one needs to perform some operation once for each time step; examples are models that need to call an external program to obtain plate velocities for the current time, or from historical records, in which case it is far cheaper to do so only once at the beginning of the time step than for every boundary point separately. See, for example, the aspect::VelocityBoundaryConditions::GPlates class.

The remaining functions are discussed in the documentation of this interface class at aspect::VelocityBoundaryConditions::Interface.

Prescribed traction boundary conditions#

Alternatively, at a boundary one can prescribe the traction (i.e., a force density) that drives the velocity, rather than the velocity itself. As for prescribed velocities, a plugin system allows to describe this information, with the key function being one that for a given point returns the prescribed traction.

To implement a new boundary traction model, you need to overload the aspect::BoundaryTraction::Interface class and use the ASPECT_REGISTER_BOUNDARY_TRACTION_MODEL macro to register your new class. The implementation of the new class should be in namespace aspect::BoundaryTraction. The member functions that can be overloaded are discussed in the documentation of this interface class at aspect::BoundaryTraction::Interface.