Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MRF: Further developed to replace SRF
MRF (multiple reference frames) can now be used to simulate SRF (single reference frame) cases by defining the MRF zone to include all the cells is the mesh and applying appropriate boundary conditions. The huge advantage of this is that MRF can easily be added to any solver by the addition of forcing terms in the momentum equation and absolute velocity to relative flux conversions in the formulation of the pressure equation rather than having to reformulate the momentum and pressure system based on the relative velocity as in traditional SRF. Also most of the OpenFOAM solver applications and all the solver modules already support MRF. To enable this generalisation of MRF the transformations necessary on the velocity boundary conditions in the MRF zone can no longer be handled by the MRFZone class itself but special adapted fvPatchFields are required. Although this adds to the case setup it provides much greater flexibility and now complex inlet/outlet conditions can be applied within the MRF zone, necessary for some SRF case and which was not possible in the original MRF implementation. Now for walls rotating within the MRF zone the new 'MRFnoSlip' velocity boundary conditions must be applied, e.g. in the tutorials/modules/incompressibleFluid/mixerVessel2DMRF/constant/MRFProperties case: boundaryField { rotor { type MRFnoSlip; } stator { type noSlip; } front { type empty; } back { type empty; } } similarly for SRF cases, e.g. in the tutorials/modules/incompressibleFluid/mixerSRF case: boundaryField { inlet { type fixedValue; value uniform (0 0 -10); } outlet { type pressureInletOutletVelocity; value $internalField; } rotor { type MRFnoSlip; } outerWall { type noSlip; } cyclic_half0 { type cyclic; } cyclic_half1 { type cyclic; } } For SRF case all the cells should be selected in the MRFproperties dictionary which is achieved by simply setting the optional 'selectionMode' entry to all, e.g.: SRF { selectionMode all; origin (0 0 0); axis (0 0 1); rpm 1000; } In the above the rotational speed is set in RPM rather than rad/s simply by setting the 'rpm' entry rather than 'omega'. The tutorials/modules/incompressibleFluid/rotor2DSRF case is more complex and demonstrates a transient SRF simulation of a rotor requiring the free-stream velocity to rotate around the apparently stationary rotor which is achieved using the new 'MRFFreestreamVelocity' velocity boundary condition. The equivalent simulation can be achieved by simply rotating the entire mesh and keeping the free-stream flow stationary and this is demonstrated in the tutorials/modules/incompressibleFluid/rotor2DRotating case for comparison. The special SRFSimpleFoam and SRFPimpleFoam solvers are now redundant and have been replaced by redirection scripts providing details of the case migration process.
- Loading branch information