tut3d_02

TUTORIAL 2: flow out of a tank

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. Here should be a picture
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). Here should be a picture
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:
ACTIVE($init_always$) = ( %ACTIVE_init%, %ACTIVE_always% ) ACTIVE($free_surface$) = ( %ACTIVE_init% ) ACTIVE($noinit_always$) = ( %ACTIVE_noinit%, %ACTIVE_always%)
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:
INITDATA($MatUSER$,%ind_T%) = [Y%ind_x(2)%] # colorize/initialize temperature by y-values
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).