LetterCases

highlighting several capabilities of MESHFREE

What we want to simulate

In the LetterCases tutorials we demonstrate several capacities of the MESHFREE software. We do this by taking the geometrical set-up, consisting of the letters "C", "F" and "D" (for Computational Fluid Dynamics) standing on a plate, and sprinkling these letters with droplets, letting them melt, rolling them flat with a cylinder and so on. All LetterCases tutorials are written with the implicit understanding that the user has already worked through the Tutorial cases. In this preliminary section we want to explain a few things found in most or all LetterCases UCV files that may have not been covered by the Tutorial or are worth a short explanation.

Geometry manipulations

When we include the letters we will often do additional modifications of their geometries. The include{} command for the letter "C" could, for example, look like this:

begin_boundary_elements{} include{C.stl}, applyAlias{"C"}, scale{&scaleC&}, offset{[&offset0C(1)&],[&offset0C(2)&],[&offset0C(3)&]} , reorientation{%GEO_Tube%, %GEO_Outside% } end_boundary_elements

With the command offset{} we can change the position of the letters. This allows us to place the letters nice and ordered in a row, whereas they would otherwise be overlapping each other. With reorientation{} we can force the directions of the normal vectors of the geometries to the outside or the inside by choosing %GEO_Outside% or %GEO_Inside% respectively. This feature allows us to use the same geometry files for all LetterCases, whether we want the letters to be rigid and to interact with particles from outside themselves or we want the letters to contain particles and change their shape.

We will often need information about the space one of the letters, all letters together or the plate is occupying. We can get this information with a CONSTRUCT clause. Equipped with the argument %CONSTRUCT_BoxMidPoint%, it draws a box around the geometrical item whose alias it is given as the third argument. It returns a vector containing the position of a point somewhere on a line between the lower left and the upper right corner of the box, its exact position depending on the second argument.

begin_construct{} "minC" = CONSTRUCT( %CONSTRUCT_BoxMidPoint%, 0, "C" ) "maxC" = CONSTRUCT( %CONSTRUCT_BoxMidPoint%, 1, "C" ) end_construct

In this case, "minC" would contain the position of the lower left corner of the box, whereas "maxC" would contain the position of its upper right corner. With 0.5 as second argument, we would receive the position of the center of the box.

Here should be a picture
Figure 0: The general geometrical set-up.
Stability constraints

Sometimes, for example when a point has few neighbors or when the order used in the approximation of its differential operators is low, we want to vary some boundary conditions to maintain a certain level of numerical stability. We define an equation called "IsCritical" to quickly test a particle for possible stability issues.

#--------------------------------------------------------------------------- # stability constraints #--------------------------------------------------------------------------- begin_equation{$IsCritical$} # 1 means critical, -1 means all in butter if ( 0 ) :: 1 elseif (Y%ind_OrdApprox(2)%<2) :: 1 # bad order of approximation (laplace) elseif (Y%ind_OrdApprox(1)%<2) :: 1 # bad order of approximation (gradient) elseif (Y%ind_nbRegularNeighbors% < 15) :: 1 # number of neighbors less than 15 elseif ( Y%ind_nbInteriorNeighbors% < 4 ) :: 1 # if a tear-off point (direct link between free surface and wall) has too few neighbors else :: -1 # point NOT critical (regular case) endif end_equation ENFORCE_min_max($Mat1$,%ind_v(1)%) = (-3.0, 3.0 ) ENFORCE_min_max($Mat1$,%ind_v(2)%) = (-3.0, 3.0 ) ENFORCE_min_max($Mat1$,%ind_v(3)%) = (-3.0, 3.0 )

For the same reasons we set an upper and lower limit for the velocity. This is achieved by the handy command ENFORCE_min_max. Since these commands are evaluated at the end of each time step, the results of the time integrations are taken and values that are too small or too big are set to the maximum and minimum values, respectively.

See Download for archives of example setup suites.

List of members:
CleaningJet Letters getting washed away by a water jet
Coating Letters getting coated with enamel
Melting Letters melting in two different ways
PorousMedia Local flow resistance in isotropic and anisotropic porous materials
Rolling Letters getting flattened by a rolling cylinder
Spray Letters getting sprayed with paint
Swelling Letters swelling like bread
Swelling_b Letters swelling like muffins