Mesh motion and topology change are now combinable run-time selectable options within fvMesh, replacing the restrictive dynamicFvMesh which supported only motion OR topology change. All solvers which instantiated a dynamicFvMesh now instantiate an fvMesh which reads the optional constant/dynamicFvMeshDict to construct an fvMeshMover and/or an fvMeshTopoChanger. These two are specified within the optional mover and topoChanger sub-dictionaries of dynamicFvMeshDict. When the fvMesh is updated the fvMeshTopoChanger is first executed which can change the mesh topology in anyway, adding or removing points as required, for example for automatic mesh refinement/unrefinement, and all registered fields are mapped onto the updated mesh. The fvMeshMover is then executed which moved the points only and calculates the cell volume change and corresponding mesh-fluxes for conservative moving mesh transport. If multiple topological changes or movements are required these would be combined into special fvMeshMovers and fvMeshTopoChangers which handle the processing of a list of changes, e.g. solidBodyMotionFunctions:multiMotion. The tutorials/multiphase/interFoam/laminar/sloshingTank3D3DoF case has been updated to demonstrate this new functionality by combining solid-body motion with mesh refinement/unrefinement: /*--------------------------------*- C++ -*----------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org \\ / A nd | Version: dev \\/ M anipulation | \*---------------------------------------------------------------------------*/ FoamFile { format ascii; class dictionary; location "constant"; object dynamicMeshDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // mover { type motionSolver; libs ("libfvMeshMovers.so" "libfvMotionSolvers.so"); motionSolver solidBody; solidBodyMotionFunction SDA; CofG (0 0 0); lamda 50; rollAmax 0.2; rollAmin 0.1; heaveA 4; swayA 2.4; Q 2; Tp 14; Tpn 12; dTi 0.06; dTp -0.001; } topoChanger { type refiner; libs ("libfvMeshTopoChangers.so"); // How often to refine refineInterval 1; // Field to be refinement on field alpha.water; // Refine field in between lower..upper lowerRefineLevel 0.001; upperRefineLevel 0.999; // Have slower than 2:1 refinement nBufferLayers 1; // Refine cells only up to maxRefinement levels maxRefinement 1; // Stop refinement if maxCells reached maxCells 200000; // Flux field and corresponding velocity field. Fluxes on changed // faces get recalculated by interpolating the velocity. Use 'none' // on surfaceScalarFields that do not need to be reinterpolated. correctFluxes ( (phi none) (nHatf none) (rhoPhi none) (alphaPhi.water none) (meshPhi none) (meshPhi_0 none) (ghf none) ); // Write the refinement level as a volScalarField dumpLevel true; } // ************************************************************************* // Note that currently this is the only working combination of mesh-motion with topology change within the new framework and further development is required to update the set of topology changers so that topology changes with mapping are separated from the mesh-motion so that they can be combined with any of the other movements or topology changes in any manner. All of the solvers and tutorials have been updated to use the new form of dynamicMeshDict but backward-compatibility was not practical due to the complete reorganisation of the mesh change structure.
Overview ======== + Template case for rotating geometry flow for a closed geometry + Can be used for MRF or AMI simulations + Setup to run the simpleFoam solver for MRF, pimpleDyMFoam for AMI + The case is designed to be meshed with snappyHexMesh + snappyHexMesh is setup to use 3 trisurface files + fixed.obj: CAD of the stationary geometry + rotating.obj: CAD of the rotating geometry + rotatingZone.obj: CAD of surface bounding the rotating region + Copy the *.obj files to the constant/geometry directory + The fixed.obj should contain an inlet and outlet region to create the relevant patches in the mesh Background Mesh =============== + The blockMeshDict file contains a configuration for a cylindrical background mesh aligned along the z-axis + The mesh includes a core box-shaped block and inner and outer cylinders + The backgroundMesh subdictionary includes key geometric parameters of the mesh + The inner cylinder relates to the rotatingZone.obj + The outer cyliner relates to the external boundary, e.g. fixed.obj + Set the radii of inner and outer cylinders to ~2% larger than respective OBJ files + Set background mesh density with boxCells, inCells, outCells and zCells + Run blockMesh + NOTE: An alternative blockMeshDict-box file exists if the user wants a regular box-shaped background mesh, similar to set up in the inflowOutflow template Features ======== + Run surfaceFeatures to extract features for explicit feature capturing Castellated Mesh ================ + run snappyHexMesh to obtain a castellatedMesh + Review the mesh; modify refinement levels and regenerate the mesh as required (levels are set in refinementSurfaces and refinementRegions) Snapped Mesh ============ + In snappyHexMeshDict, set castellatedMesh off; snap on; + Run the snapping phase of snappyHexMesh + Review the mesh Layers ====== + To add layers to the mesh along wall boundary patches... + Switch on addLayers; switch snap off; + Run snappyHexMesh + The number of layers can be changed by modifying nSurfaceLayers Initialisation ============== + Initialise the field files in the 0 directory + Set the viscosity in constant/transportProperties + Rotating properties are set in constant/rotatingZoneProperties + For MRF, this file is included from system/fvModels + For AMI, this file is included from constant/dynamicMeshDict + Ensure settings are appropriate in controlDict, fvSchemes, fvSolution, for relevant simulation; for AMI, in particular, ensure that deltaT, ddtSchemes and relaxationFactors are set for transient simulation