Goals of this unit:
-
- free surfaces with boundary conditions in 3D,
- formation of a proper jet,
- controlling the jet (preventing infinite jet),
- introduction of the gravity vector and other material properties,
- activation and material specification in the alias-section.
The fluid-mechanical problem
This example shows a flow with free surface. The level of the fluid is decreasing in the draining tank because of a circular hole at the front face of the geometry, where a fluid jet will evolve. In Figure 10, geometry has been rotated such that the user can see the outlet at the bottom right side. The velocity and the flow rate of the jet depend on the depth of the fluid.
Figure 10: sketch of the simulation
In Figure 10, we observe the outer container (covered by brown points), that encloses the fluid geometry. This container was created to cut the jet, ejected from the orifice hole, and will prevent the formation of an infinite jet. The boundaries of this outer container have been defined in the alias-section in the following way:
"cut_side" = " BC$outflow$ ACTIVE$noinit_always$ IDENT%IDENT_outflow% MAT$MatUSER$ TOUCH%TOUCH_liquid% MOVE$NO_MOVE$ CHAMBER1 POSTPROCESS$PP_OUT$ "
"cut_bottom" = " REV_ORIENT BC$outflow$ ACTIVE$noinit_always$ IDENT%IDENT_outflow% MAT$MatUSER$ TOUCH%TOUCH_liquid% MOVE$NO_MOVE$ CHAMBER1 POSTPROCESS$PP_OUT$"
Free surface detection
As the setting contains free surfaces, we turn on the free surface detection by setting the parameter
compute_FS to "YES" in either the
USER_common_variables or the
common_variables file:
# Set parameter compute_FS='YES' either in Ucv or cv to turn on detection of free surfaces:
compute_FS = 'YES'
Consistent geometry:
The
MESHFREE points of the jet through the outlet orifice would be deleted, if they would see any geometry part from its back-side. So, to get rid of this situation, one must prepare the geometry in such a way that any point can uniquely determine its inside/outside status regarding the geometry model (boundary elements). Figure 11 shows the proper geometry modeling (inner AND outer skin of the tank).
Figure 11: geometrical setup of the problem
The outer skin prevents
MESHFREE points from being deleted once they pass through the orifice hole. The outer skin of the tank is defined by:
"plane1" = " BC$wall$ ACTIVE$noinit_always$ IDENT%IDENT_slip% MAT$MatUSER$ TOUCH%TOUCH_liquid% MOVE$NO_MOVE$ CHAMBER1 "
"plane2" = " BC$wall$ ACTIVE$noinit_always$ IDENT%IDENT_slip% MAT$MatUSER$ TOUCH%TOUCH_liquid% MOVE$NO_MOVE$ CHAMBER1 "
Flow and boundary conditions
In order to provoke the flow through the orifice hole (driven by hydrostatic pressure), we introduce the gravity vector:
gravity($MatUSER$) = (0.0, -9.81, 0.0)
The gravity vector (body forces) is a physical property of the specified material $MatUSER$. It is listed in the "USER_common_variables.dat" together with the other material properties such as density, viscosity and initial temperatures.
The relevant boundary conditions are
BC_p(0) = (
%BND_free%)
# fallback for free surfaces
BC_p(
$free0$) = (
%BND_free%)
BC_p(
$wall$) = (
%BND_wall%)
BC_p(
$outflow$) = (
%BND_NEUMANN%, 0.0)
#(%BND_wall%)
#BC_v - velocity conditions
BC_v(0) = (
%BND_free%,0,0,0,0.3)
# fallback for free surfaces
BC_v(
$free0$) = (
%BND_free%,0,0,0,0.3)
# the last number 0.3 is the inertial thickness, i.e. incorporate inertial forces into the free surface boundary conditions, see FPMDOCU
BC_v(
$wall$) = (
%BND_slip%,0,0.3)
BC_v(
$outflow$) = (
%BND_NEUMANN%, 0.0, 0.0, 0.0)
#BCON_pCorr - dynamic pressure conditions
BCON(0,%ind_p_dyn%) = (
%BND_free%)
# fallback for free surfaces
BCON(
$free0$,%ind_p_dyn%) = (
%BND_free%)
BCON(
$wall$,%ind_p_dyn%) = (
%BND_wall%)
BCON(
$outflow$,%ind_p_dyn%) = (
%BND_NEUMANN%, 0.0)
#(%BND_wall%)
The boundary index flag $free0$ defines the boundary conditions at the free surface. In the
ALIAS section, the top wall is specified by the flag
ACTIVE$free_surface$ (see below), which means, that the border is active during pointfilling and preparation, after start-up it is switched off, turning all points belonging to "top" automatically into free surface points.
"top" = " BC$free0$ ACTIVE$free_surface$ MAT$MatUSER$ CHAMBER1 "
Typically there are at least the following three
ACTIVE statements present:
The
ACTIVE($init_always$) flag is used for walls which are initially filled and are active throughout the computation. For walls which are not active initially but might come into contact with the fluid (and thus become active) the
ACTIVE($noinit_always$) flag is defined. Finally
ACTIVE($free_surface$) specifies surfaces which are initially filled with points and then immediately switched to the free surface boundary condition.
Use temperature to colorize the material
We use the temperature to simply colorize the material (choosing very small heat conductivity) and isolation boundary conditions:
BC_T(0) = (%BND_ROBIN%, 0.0, 0.0, 0.3)
# fallback for free surfaces
BC_T(
$free0$) = (%BND_ROBIN%, 0.0, 0.0, 0.3)
BC_T(
$wall$) = (%BND_ROBIN%, 0.0, 0.0, 0.3)
BC_T(
$outflow$) = (%BND_ROBIN%, 0.0, 0.0, 0.3)
The temperature is initialized due to the y-component of their initial positions:
Output files
In the result folder,
MESHFREE will generate two kinds of files. The result file starting with BE_... contains the boundary elements. With this, the user has a feedback, how FPM interpreted the geometry from the input files given in the
begin_boundary_elements{} environment. The other result file contains the pointcloud together with the result items defined in the
SAVE_ITEM section.
The user can check the "free surface particles" by observing the pointcloud result file with (item "KOB"), as shown in Figure 10, there red particles are free surface particles.
For this tutorial we have chosen special output such that deactivated particles can be seen in ParaView. The activation status can be checked using the item "Activation" which is 0 if the particle is deactivated or it shows the number of time cycles it has been activated without interruption.
Use outer boundary as wall
As an option, the user can switch the fluid behavior at the outflow-box by changing the boundary conditions from $outflow$ to $wall$. In this case, the jet becomes reflected as if the outer box was a wall, the liquid will flow down along the wall due to the given gravity. See the commented lines:
#"cut_side" = " BC$wall$ ACTIVE$noinit_always$ IDENT%IDENT_slip% MAT$MatUSER$ TOUCH%TOUCH_liquid% MOVE$NO_MOVE$ CHAMBER1 "
#"cut_bottom" = " REV_ORIENT BC$wall$ ACTIVE$noinit_always$ IDENT%IDENT_slip% MAT$MatUSER$ TOUCH%TOUCH_liquid% MOVE$NO_MOVE$ CHAMBER1 "
Suggestions to explore MESHFREE:
-
- play with the interaction radius SMOOTH_LENGTH
- switch the boundary conditions of the out bounds from outflow to solid wall conditions
Note: In order to reproduce Figures 10 and 11, load the state files tut02_figure10.pvsm and tut02_figure11.pvsm in ParaView and choose 'Search files under specified directory'. Then, select the correct data directory (
MESHFREE results folder).