overview of frequently asked questions and hints for solution

*Short URL to this page:
https://meshfree.pages.fraunhofer.de/docu/faq
*

The split into the two types of input files, i.e. USER_common_variables and common_variables, is based on the idea that the definition of the physical model (geometry, boundary conditions, material parameters, etc) should be decoupled from the specification of numerical parameters that are used mainly for development and debugging.

Especially for first-time users, USER_common_variables should be the main focus.

Especially for first-time users, USER_common_variables should be the main focus.

These can be accessed and used, e.g. in equations, with the Y-syntax and the use of the desired index variable, cf. __Indices__. See Variables for an example.

Starting from the topmost level in the hierarchy, the evaluation of Equations is executed. The location, from which an equation is called, determines if the equation is evaluated with respect to the point cloud, the MONITORPOINTS, the boundary elements etc.
In the above example, in level 0 the equation is called in a SAVE_ITEM which triggers the evaluation with respect to the point cloud. From there, the successive levels are run through. It is important that all involved levels refer to point cloud quantities in this example.

# level 0
SAVE_ITEM = ( %SAVE_scalar%, equn{$EQ_angle$}, "angle" )
# level 1
begin_equation{$EQ_angle$}
atan( equn($EQ_vn$)/equn(EQ_vt) )*180.0/3.141592653589793
end_equation
# level 2
begin_equation{$EQ_vn$}
abs( equn($vx$)*Y%ind_n(1)% + equn($vy$)*Y%ind_n(2)% + equn($vz$)*Y%ind_n(3)% )
end_equation
# level 2
begin_equation{$EQ_vt$}
sqrt( equn($vt_x$)^2 + equn($vt_y$)^2 + equn($vt_z$)^2 )
end_equation
...

- Switch on the detection of free surfaces by setting the parameter compute_FS to 'YES' for the corresponding chamber.
- Switch on the additional free surface check by setting the parameter ORGANIZE_CheckPointsAtFS_PerformPreCheck adequately, if the free surface is not present at the start of the simulation and develops at a later time.
- Set free surface boundary conditions for the relevant boundary geometry as well as for the default free surface with index 0, e.g. BC_v($BCfree$) = (%BND_free%, 0, 0, 0, 0.3) BC_p($BCfree$) = (%BND_free%, p0_hyd) BCON($BCfree$,%ind_p_dyn%) = (%BND_free%, p0_dyn) BC_v(0) = (%BND_free%, 0, 0, 0, 0.3) BC_p(0) = (%BND_free%, p0_hyd) BCON(0,%ind_p_dyn%) = (%BND_free%, p0_dyn)

- Components of a vector are referenced by round brackets, e.g.
- Inline Equations are defined by square brackets, e.g.
- Direct referencing and evaluation of Equations and Curves requires curly brackets. Referencing in inline equations or explicit equation definitions requires round brackets, e.g.
SAVE_ITEM = ( %SAVE_scalar%, equn{$EQ_vel_mag$}, "velocity_magnitude" ) begin_equation{$EQ_vel_mag$} sqrt( equn($EQ_v1_squared$) + equn($EQ_v2_squared$) + equn($EQ_v3_squared$) ) end_equation begin_equation{$EQ_v1_squared$} Y%ind_v(1)%*Y%ind_v(1)% end_equation begin_equation{$EQ_v2_squared$} Y%ind_v(2)%*Y%ind_v(2)% end_equation begin_equation{$EQ_v3_squared$} Y%ind_v(3)%*Y%ind_v(3)% end_equation
- Environments (cf. __GeneralRemarks__) are defined by curly brackets, e.g.
- Assignments (cf. __GeneralRemarks__) with one or two arguments on the left hand side (LHS) as well as multiple arguments on the right hand side (RHS) require round brackets, e.g.
- The additional options during read-in of a geometry (i.e. GeometryManipulations, GeometryRestrictions, and exportGeometry{}) require curly brackets as does the include{}-command itself, e.g.
begin_boundary_elements{} include{pipe.msh} scale{0.001} only{"inflow"} exportGeometry{OBJ,AFTER} end_boundary_elements

A comma has to be used as delimiter for multiple arguments on the right hand side (RHS) and left hand side (LHS) in assignments (cf. __GeneralRemarks__), e.g.

Spaces are allowed in most places except

Spaces are allowed in most places except

- on the right hand side of an alias defined in a ConstructClause when it is referenced in the first column of Curves, e.g.
begin_construct{} "T_Start" = "&T_1&+&T_2&" "T_End" = "&T_1&+&T_2&+&T_3&" end_construct begin_curve{$CV_rotate$} 0.0 0.0 &T_Start& 0.0 &T_Start& equn{$EQ_RotationVelocity$} &T_End& equn{$EQ_RotationVelocity$} &T_End& 0.0 1000.0 0.0 end_curve

Add the parameter CONTROL_writeUcvLines with the desired value to common_variables to write all lines read from USER_common_variables and possibly stop after each completed entity.

The number of filling iterations can be restricted by setting the parameters SimCut and SimCutBoundary. This can help to detect incorrect orientations of parts of a geometry (boundary elements) in addition to checking the normals visually.

This can be achieved by switching on the parameter CONTROL_StopAfterReadingGeometry, see there for details.

Adapt the MainFormat and the FourFormatLetters in the SAVE_format and, optionally, stop the simulation after reading the geometry. Saving of the normals is only possible for the EnSight6 binary format.

SAVE_format(1) = 'ENSIGHT6 BINARY NN--'
CONTROL_StopAfterReadingGeometry = 1 # comment if the simulation should run until the specified end time

The IDENT identifier that has to be specified for AliasForGeometryItems only influences the numerical point cloud organization. It **does not** define a physical boundary condition. These have to be specified separately for each physical quantity, see BoundaryConditions for details.

## general/organizational quantities
SAVE_ITEM = ( %SAVE_scalar%, [Y%ind_kob%], "KOB") # kind of boundary: enables filtering of interior, free surface, wall points etc
SAVE_ITEM = ( %SAVE_scalar%, [Y%ind_h%], "SmoothingLength") # smoothing length/interaction radius of point cloud
SAVE_ITEM = ( %SAVE_scalar%, [Y%ind_proc%], "MPIprocess") # domain decomposition by MPI

## quantities for LIQUID solver
SAVE_ITEM = ( %SAVE_vector%, [Y%ind_v(1)%], [Y%ind_v(2)%], [Y%ind_v(3)%], "Velocity") # velocity
SAVE_ITEM = ( %SAVE_scalar%, [Y%ind_p%], "HydrostaticPressure") # hydrostatic pressure
SAVE_ITEM = ( %SAVE_scalar%, [Y%ind_p_dyn%], "DynamicPressure") # dynamic pressure
SAVE_ITEM = ( %SAVE_scalar%, [Y%ind_T%], "Temperature") # temperature (if computation is switched on)
SAVE_ITEM = ( %SAVE_scalar%, [Y%ind_k%], "Turbulent_k") # turbulent kinetic energy (if computation is switched on)
SAVE_ITEM = ( %SAVE_scalar%, [Y%ind_eps%], "Turbulent_eps") # turbulent dissipation (if computation is switched on)

## quantities for DROPLETPHASE solver
SAVE_ITEM = ( %SAVE_vector%, [Y%ind_v(1)%], [Y%ind_v(2)%], [Y%ind_v(3)%], "Velocity") # velocity
SAVE_ITEM = ( %SAVE_scalar%, [Y%ind_d30%], "d30") # droplet diameter

Please make sure that you have write access to the specified SAVE_path and that there is enough disk space available.

Furthermore, clarity for later post-processing can be increased if additional information is integrated into the SAVE_path, such as the employed MESHFREE version, the date, specific parameters of the simulation etc. See Variables for the options concerning system variables.

In the following example, the MESHFREE version number as well as the specified value of the alias "run" is automatically incorporated in the SAVE_path.

Furthermore, clarity for later post-processing can be increased if additional information is integrated into the SAVE_path, such as the employed MESHFREE version, the date, specific parameters of the simulation etc. See Variables for the options concerning system variables.

In the following example, the MESHFREE version number as well as the specified value of the alias "run" is automatically incorporated in the SAVE_path.

SAVE_path = 'results___version=@VERSION@___run=&run&___'
begin_alias{}
"run" = "1"
end_alias
begin_selection{"run"}
case{"1"}
...
case{"2"}
...
end_selection

In this case, an INTEGRATION with %INTEGRATION_FLUX% or the like for an %IDENT_BlindAndEmpty% boundary **is not** applicable since this approach necessarily requires the movement of the point cloud.

Instead, you have to work with a %IDENT_void% boundary. For this, the usual INTEGRATION statements can then be used, e.g. %AVERAGE_BND% to determine an average value on the measurement surface.

Instead, you have to work with a %IDENT_void% boundary. For this, the usual INTEGRATION statements can then be used, e.g. %AVERAGE_BND% to determine an average value on the measurement surface.

According to experience, good performance is achieved by choosing the number of MPI processes such that approximately 10000 MESHFREE points per MPI process exist.

This can be realized by the definition of an appropriate EVENT. For example, terminate the simulation if the time step size becomes too small.

EVENT($EV_Stop$) = ( equn{$EQ_stop$}, %EVENT_StopFPM%, $MSG_stop$ )
begin_equation{$EQ_stop$}
if ( Y%ind_dt% < 1e-8 ) :: 1.0
else :: 0.0
endif
end_equation
EventMessage($MSG_stop$) = "MESHFREE was stopped: time step size falls below given minimum."

This can be realized by the ComputationalSteering options reread_Ucv and reread_cv, see there for details.