Specifies a free surface.


AcuSolve Command


FREE_SURFACE("name") {parameters...}


User-given name.


shape (enumerated) [no default]
Shape of the surfaces in this set.
three_node_triangle or tri3
Three-node triangle.
four_node_quad or quad4
Four-node quadrilateral
six_node_triangle or tri6
Six-node triangle.
element_set or elem_set (string) [no default]
User-given name of the parent element set.
surfaces (array) [no default]
List of element surfaces.
surface_sets (list) [={}]
List of surface set names (strings) to use in this command. When using this option, the connectivity, shape, and parent element of the surfaces are provided by the surface set container and it is unnecessary to specify the shape, element_set and surfaces parameters directly to the FREE_SURFACE command. This option is used in place of directly specifying these parameters. In the event that both of the surface_sets and surfaces parameters are provided, the full collection of surface elements is read and a warning message is issued. The surface_sets option is the preferred method to specify the surface elements. This option provides support for mixed element topologies and simplifies pre-processing and post-processing.
surface_tension_model (string) [=none]
User-given name of the surface tension model. If none, surface tension is not modeled.
contact_angle_model (string) [=none]
User-given name of the contact angle model. Used when surface_tension_model is specified. If none, the default contact angle model is used.


This command specifies the surfaces (element faces) that define a free surface and imposes the appropriate nodal boundary condition on the mesh motion on those surfaces. Optional surface tension and contact angle models may also be specified.

The free-surface surfaces are defined with respect to the elements of an element set. For example,
ELEMENT_SET( "interior" ) {
    shape                  = four_node_tet
    elements               = { 1, 8, 3, 4, 9 ;
                               3, 3, 4, 9, 5 ;
                               ... }
FREE_SURFACE( "water surface" ) {
    shape                  = three_node_triangle
    element_set            = "interior"
    surfaces               = { 1, 12, 9, 3, 4 ;
                               3, 52, 5, 3, 4 ; }
    surface_tension_model  = "water/air"
    contact_angle_model    = "water/air @ smooth aluminum"

specifies that two surfaces of the element set "interior" are on a free surface boundary, and that this free surface has certain properties specified by the surface_tension_model and contact_angle_model parameters.

There are two main forms of this command. The legacy version, or single topology version, of the command relies on the use of the surfaces parameter to define the surfaces. When using this form of the command, all surfaces within a given set must have the same shape, and it is necessary to include both the element_set and shape parameters in the command. shape specifies the shape of the surface. This shape must be compatible with the shape of the "parent" element set whose user-given name is provided by element_set. The element set shape is specified by the shape parameter of the ELEMENT_SET command. The compatible shapes are:
Element Shape
Surface Shape

The surfaces parameter contains the faces of the element set. This parameter is a multi-column array. The number of columns depends on the shape of the surface. For three_node_triangle, this parameter has five columns, corresponding to the element number, of the parent element set, a unique, within this set, surface number, and the three nodes of the element face. For four_node_quad, surfaces has six columns, corresponding to the element number, a surface number, and the four nodes of the element face. For six_node_triangle, surfaces has eight columns, corresponding to the element number, a surface number, and the six nodes of the element face. One row per surface must be given. The three, four, or six nodes of the surface may be in any arbitrary order, since they are reordered internally based on the parent element definition.

The surfaces may be read from a file. For the above example, the surfaces may be placed in a file, such as free.srf:
1 12 9 3 4
3 52 5 3 4
and ready by:
FREE_SURFACE( "water surface" ) {
   shape       = three_node_triangle
   element_set = "interior"
   surfaces    = Read( "free.srf" )
The mixed topology form of the FREE_SURFACE command provides a more powerful and flexible mechanism for defining the surfaces. Using this form of the command, it is possible to define a collection of surfaces that contains different element shapes. This is accomplished through the use of the surface_sets parameter. The element faces are first created in the input file using the SURFACE_SET command, and are then referred to by the FREE_SURFACE command. For example, a collection of triangular and quadrilateral element faces can be defined using the following SURFACE_SET commands.
SURFACE_SET( "tri faces" ) {
    surfaces     = { 1, 1, 1, 2, 4 ;
                     2, 2, 3, 4, 6 ;
                     3, 3, 5, 6, 8 ; }
    shape        = three_node_triangle
    volume_set   = "tetrahedra"
SURFACE_SET( "quad faces" ) {
    surfaces     = { 1, 1, 1, 2, 4, 9 ;
                     2, 2, 3, 4, 6, 12 ;
                     3, 3, 5, 6, 8, 15 ; }
    shape        = four_node_quad
    volume_set   = "prisms"
Then, a single FREE_SURFACE command is defined that contains the tri and quad faces as follows:
   surface_sets       = {"tri_faces", "quad_faces"}
The list of surface sets can also be placed in a file, such as surface_sets.srfst:
tri faces
quad faces
and read using:
FREE_SURFACE ( "water surface" ) {
   surface_sets   = Read("surface_sets.srfst")

The mixed topology version of the FREE_SURFACE command is preferred. This version provides support for multiple element topologies within a single instance of the command and simplifies pre-processing and post-processing. In the event that both the surface_sets and surfaces parameters are provided in the same instance of the command, the full collection of surface elements is read and a warning message is issued. Although the single and mixed topology formats of the commands can be combined, it is strongly recommended that they are not.

This command also automatically creates the following nodal (Dirichlet) boundary condition on the mesh velocity for all surface nodes:

where is the mesh velocity, is the fluid velocity, and n is the surface normal at the nodes. The latter is the area-weighted average of the neighboring element surface normals. This particular averaging ensures that the mass conservation property of the continuity equation becomes a volume-conserving property of the mesh movement equation, which in turn is needed for mass conservation. The precedence of this boundary condition is automatically set to zero.
Note: This is lower than the default value of one for boundary conditions created through the NODAL_BOUNDARY_CONDITION command.

The surface_tension_model parameter provides the surface tension information to the free surface. This parameter specifies the user-given name of a SURFACE_TENSION_MODEL command. If this parameter is not given the surface tension defaults to zero. If it is given, then in addition a contact angle at the side walls of the free surface may be specified with the contact_angle_model parameter. This parameter specifies the user given name of a CONTACT_ANGLE_MODEL command. If contact_angle_model is not given, the contact angle defaults to 90 degrees. See the SURFACE_TENSION_MODEL command for details.

The momentum equation also requires a boundary condition on the free surface. Normally, a constant-pressure element boundary condition should be imposed, which is all that is needed.

The side walls of a tank, or any surface that intersects with a free surface, require special care at the intersection. If a side wall has a no-slip velocity boundary condition, then the above boundary condition on the mesh motion will prevent the free surface from moving at the corner where it meets the wall. Thus, for just these corner nodes, the no-slip condition needs to be replaced by a slip velocity boundary condition in order to allow the correct free surface motion. A slip condition on mesh displacement is typically used for the entire side wall.

In order for a free surface to be physically stable, some type of restoring force is necessary. This is usually provided by an acceleration of the reference frame, or a body force such as gravity acting towards the interior of the fluid.