CFD calculation of the organ key touch

Geometry

First, let’s describe what we want to build. Organ pallet is placed inside large box with under long rectangular hole. Pallet’s rotation axis is near hole’s end. Wind chest hole length varies between stops and organs, so let’s take length 300mm and width 12mm. The pallet itself will be 318mm in length and 30mm width, placed below the hole.

Obviously, our case is symmetric along the pallet’s vertical middle plane. It allows using symmetry plane boundary conditions in the case. Also pallet’s bottom surface and space below it can be excluded, if we assume pressure inside the wind chest to be zero.

Grid

The case is just a 3x4x6 array of boxes with some ones excluded. The top blocks line is a hole (strictly, the half of hole) in the chest. Three other “floors” are chest internal area. It has 2x1x4 (in blocks) cut that is pallet surface.

The whole mesh is 35mm width and 358mm long. The top blocks are 6mm wide, corresponding to 12mm chest hole. The bottom cut is 15mm wide. As about heights, they vary with the pallet descend value, labelled as d1 on the draw. Rear block height d2 is about 0.1 of d1.

All blocks have non-uniform grading. Cell sizes are smaller near walls and larger in free air.

Boundary conditions

There are four boundaries:
* walls – pallet and chest surfaces
* inlet – air inside chest
* outlet – atmosphere
* symmPl – symmetry plane through pallet’s middle

Air flow is pressure-driven, so inlet and outlet BC have the fixed pressure and zeroGradient velocity. As for other fields, they are token from OpenFOAM tutorials. I am not sure they are absolutely right, but I hope…

Here is the whole boundary condition table:

walls inlet outlet symmPl
U fixedValue (0 0 0) zeroGradient symmetryPlane
nut nutkWallFunction calculated 0 calculated 0 symmetryPlane

Computations

Our case should be run multiple times with different pallet descend values. OpenFOAM has a family of dynamic mesh solvers, but it is too hard to learn it. Instead, lets create new folder result with standard OpenFOAM case structure. Then just run the solver multiple times. After each run, copy all fields to the folder result/[d], where [d] means pallet’s descend value. Also copy constant/polyMesh/points file to the result/[d]/polyMesh folder. ParaView will read these points and update scene for each time step.

These steps is done with the next script

#!/bin/bash

# Pallet descend values
for d in '0.0125' '0.025' '0.05' '0.075' '0.1'
do  b=$(echo "scale=3;$d/10.0" | bc)

# Generate mesh
m4 -D dFront=$d -D dBack=$b constant/polyMesh/blockMeshDict.m4 > constant/polyMesh/blockMeshDict
blockMesh >blockMesh.log
if [ "$?" -ne "0" ]; then echo 'Error in blockMesh'$?
break
fi

# Remove iteration folders except '0'
ls | grep -P '^[0-9]*[1-9][0-9]*$' | xargs rm -r -d simpleFoam >log if [$? -ne 0 ]; then
echo 'Error in simpleFoam' $? break fi # Create resulting folder. # -p key created all parent folders if need mkdir -p result/$d/polyMesh

# Find directory of the last iteration
lastdir=$(ls | grep -P '^[0-9]+' | xargs printf '%05d\n' | sort | tail -n 1) # Remove trailing spaces ld=$(echo $lastdir | sed 's/^0*//') echo "Diameter$d processed with $ld iterations" # Copy fields and points cp -r$ld/* result/$d cp -r constant/polyMesh/points result/$d/polyMesh/
done

cp -r constant result
echo >result/case.foam


Results

Resulting torque is shown on the plot. Red line represents computation results, green line shows predicted values near pallet closed state. Right axis shows a force in kilograms that is created at the pallet’s free end.

As you can see, the maximum torque 0.46 Nm is achieved at 1mm pallet descend. During further pallet descending, the torque decreases to 0.225 Nm.

As for pallet closing, the simulation is stable only to 0.125mm. But we can find torques for less values by hands.

When pallet is totally closed, the atmosphere pressure is uniformly distributed at the chest hole. The torque is found as
$\int_0^l p w z dz = p w \frac{l^2}{2} = 700 \times 0.006 \times 0.3^2 \times \frac{1}{2} = 0.189 N/m$

When pallet is almost, but not fully, closed, pressure remains uniformly distributed at the hole, and changes linearly from -700 to 0 between pallet and chest board, as shown on the figure. The torque created can be found as
$700\times 0.06\times\frac{0.3^2}{2} + 700\times 0.009\times \frac{1}{2} \times\frac{0.3^2}{2} = 700\times 0.0105\times\frac{0.3^2}{2} = 0.33N/m$

To get the force in kg at the pallet’s end, lets divide the torque on the pallet length and gravity acceleration. Also don’t forget to double the result, because we simulated only the half of the pallet:
$W = \frac{2\times T}{0.3\times 9.81}$

The pallet’s weight is shown on the plot. Red line represents simulation results, green line shows predicted values near pallet closing.

Now we can describe the force at the pallet’s end in different positions:

• closed: 128g
• touched: 224g
• 1mm: 312g
• open: 152g

Hmm… too large… The only reason I can see is pipe hole influence. Maybe, the pressure above the pallet is not equal to atmosphere, but larger, because pipe holes resists to air escape from the chest.