11.11 Flow rigid-body interaction using MovingReferenceFrame

The fluid-structure interaction problem with only one rigid body can be simulated using the MovingReferenceFrame method. In this method, the grid is fixed to the body whereas the inertial velocity field is calculated. It should be noted that the output velocity fields are expressed using the coordinate basis of the moving frame. Further, note that if you are using the FilterAeroForces, the force vector (Fx,Fy,Fz ) has been automatically converted and output in the inertial frame (ground reference frame).

To use this formulation the user need to specify the force type inside the FORCING tag as follwos:

1<FORCE TYPE="MovingReferenceFrame"> 
2<FRAMEVELOCITY> [MRF FUNCTION NAME] </FRAMEVELOCITY> 
3<PIVOTPOINT> x0,  y0,  z0  </PIVOTPOINT> 
4</FORCE>

Here we are required to provide one function for this force type which defines the linear velocity and the angular velocity of reference frame or both. In the case of rotating frame, i.e. when we are prescribing the angular velocity of reference frame, we can provide a coordinate of PIVOTPOINT, around which the frame is rotating. If no pivot point provided, the origin of coordinates in the moving reference frame will be used as the pivot point. Note that the frame velocities (both linear and angular velocities) must be defined in the inertial stationary frame of reference,i.e. ground reference frame (and expressed using the basis of inertial stationary frame), however, the Poivot point is in the moving reference frame.

Examples of linear and angular velocity funcitons together with their usage in the Forcing is shown below:

1<CONDITIONS> 
2 
3<FUNCTION NAME="VelMRF"> 
4<E VAR="u" VALUE="2*sin(PI*t)" /> 
5<E VAR="v" VALUE="0.1" /> 
6<E VAR="w" VALUE="0" /> 
7<E VAR="Omega_x" VALUE="0" /> 
8<E VAR="Omega_y" VALUE="0" /> 
9<E VAR="Omega_z" VALUE="0.3*cos(2*PI*t)" /> 
10</FUNCTION> 
11 
12</CONDITIONS> 
13 
14<FORCING> 
15 
16<FORCE TYPE="MovingReferenceFrame"> 
17<FRAMEVELOCITY> VelMRF </FRAMEVELOCITY> 
18<PIVOTPOINT> 0.2, 0.0, 0.0  </PIVOTPOINT> 
19</FORCE> 
20 
21</FORCING>

The moving frame function defines the velocity of the body frame observed in the inertial reference frame

uframe = u0 + Ω ×  (x - x0).

This means that these functions (such as the VelMRF in the above example) are defined and expressed in the stationary inertial frame (ground frame).

Here, u0 = (u, v, w) is the translational velocity, Ω = (Omega_x, Omega_y, Omega_z) is the angular velocity. x0 = (0.2,0.0,0.0) is the rotation pivot and it is fixed in the body frame. Translational motion is allowed for all dimensions while rotational motion is currently restricted to z (omega_z) for 2D, 3DH1D and full 3D simulations.

Finally, note that when using MovingReferenceFrame force type, for any open part of the computational domain that the user specifies the velocity, such as inlet and free stream boundary conditions, the USERDEFINEDTYPE="MovingFrameDomainVel" tag can be used for velocity components. For example if boundary ID=2 is the inlet with Uinfx and Uinfy the values of inlet velocities defined as parameters, the boundary condition for this boundary becomes:

1<REGION REF="2"> 
2<D VAR="u" USERDEFINEDTYPE="MovingFrameDomainVel" VALUE="Uinfx" /> 
3<D VAR="v" USERDEFINEDTYPE="MovingFrameDomainVel" VALUE="Uinfy" /> 
4<N VAR="p" USERDEFINEDTYPE="H" VALUE="0" /> 
5</REGION>

for the wall boundary conditions on the surface of the body, we need to use MRFWall tag as shown below:

1<REGION REF="0"> 
2<D VAR="u" USERDEFINEDTYPE="MRFWall" VALUE="Uinfx" /> 
3<D VAR="v" USERDEFINEDTYPE="MRFWall" VALUE="Uinfy" /> 
4<N VAR="p" USERDEFINEDTYPE="H" VALUE="0" /> 
5</REGION>

The outlet and pressure boundary conditions are the same as before. In practical, It is not necessary to set the MovingFrameDomainVel or MRFWall tag for all velocity components. In the circumstance when the analytical solution of a velocity component in the body frame is available, the value can still be prescribed as a normal Dirichlet-type boundary condition.

In addition to the prescribed motion, the frame velocity can also be determined from the fluid-body interaction. One example is as follows:

1<CONDITIONS> 
2<FUNCTION NAME="VelMRF"> 
3<E VAR="u" VALUE="0.0" /> 
4<E VAR="v" VALUE="0" /> 
5<E VAR="Omega_z" VALUE="cos(t)"/> 
6</FUNCTION> 
7 
8<FUNCTION NAME="InitDisp"> 
9<E VAR="x" VALUE="0" /> 
10<E VAR="y" VALUE="0" /> 
11<E VAR="Theta_z" VALUE="0"/> 
12</FUNCTION> 
13 
14<FUNCTION NAME="ExtForce"> 
15<E VAR="fx" VALUE="-1" /> 
16<E VAR="fy" VALUE="0" /> 
17<E VAR="Mz" VALUE="0"/> 
18</FUNCTION> 
19</CONDITIONS> 
20 
21<FORCING> 
22<FORCE TYPE="MovingReferenceFrame"> 
23<FRAMEVELOCITY> VelMRF </FRAMEVELOCITY> 
24<EXTERNALFORCE>  ExtForce </EXTERNALFORCE> 
25<INITIALDISPLACEMENT>  InitDisp </INITIALDISPLACEMENT> 
26<MASS>         1.0, 0., 0,  0,1,0,  0,0,1 </MASS> 
27<MOTIONPRESCRIBED>  0, 1 ,1 </MOTIONPRESCRIBED> 
28<PIVOTPOINT> 0. , 0,0 </PIVOTPOINT> 
29</FORCE> 
30</FORCING>

The meanings of the parameters are:

Option name

Description

Default
MOTIONPRESCRIBED

A vector that denotes a certain degree of freedom is prescribed by the FRAMEVELOCITY (1) or determined from fluid force (0).

1
EXTERNALFORCE

External force exerted on the body, (fx, fy, fz, Mx, My, Mz).

0
MASS

Mass matrix of the body system. Its size is 3 × 3 in 2D and 4 × 4 in 3D.

0
DAMPING

Damper matrix of the body system. Its size is 3 × 3 in 2D and 4 × 4 in 3D.

0
RIGIDITY

Stiffness matrix of the body system. Its size is 3 × 3 in 2D and 4 × 4 in 3D.

0
INITIALDISPLACEMENT

A function to set the initial displacement of the body, (x, y, z, Theta_x, Theta_y, Theta_z).

0
TRAVELINGWAVESPEED

A traveling wave motion can be set to simulation problem such as a traveling wave propagating along an infinite geometry.

0
OutputFile

Output file name.

SessionFileName.mrf
OutputFrequency

Output frequency of the body’s motion.

1