Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
multiValveEngine: New fvMeshMover for multi-valve IC engine mesh motion
This mesh mover facilitates explicit node translation based on scaled distance functions for the providing smooth deformation of the mesh to accommodate the motion piston and multiple valves present in IC engines. and run-time mesh-to-mesh mapping used to avoid extreme mesh distortion and support the necessary topology changes that occur at valve closure. Highlighted features include: * Piston motion based on user-defined functions, with options for standard crank and connecting rod motion. * Valve motion based on user-provided lift data or table. * Support for linerPatches, slidingPatches, and frozenZones. * Non-conformal coupled (NCC) interfaces can be used to provide better control of the mesh-motion around valves * Run-time mesh-to-mesh mapping used to avoid extreme mesh distortion and support the necessary topology changes that occur at valve closure * Control over mesh motion per moving object including motion parameters and layer thickness. Description from the multiValveEngine.H file: A mesh mover using explicit node translation based on scaled distance functions per moving object. The mover supports any number of valves together with piston motion and following features: - Piston motion: Function1 of user-time, may be set to crankConnectingRodMotion for standard crank and connecting rod motion. - Valve motion: Function1, may be set to table if the valve lift date is provided in the form of a table. - Smooth mesh motion between a moving object and other patches. - linerPatches: the set of patches corresponding to the cylinder liner Used by createEngineZones - slidingPatches: a set of patches along which mesh is allowed to deform. For example, on the cylinder liner, it is desired to slide mesh nodes while piston is moving. - frozenZones: list of pointZones the points of which are frozen, i.e. do not move. - Run-time clearance estimation based on patch-to-patch distances printed. - Supports cellSet and cellZone definitions to restrict mesh motion. - Supports domains with nonConformalCoupling (NCC) interfaces, enabling e.g. nodes to slide along with the interface. - Closing the valve can be achieved by meshToMesh mapping onto a new grid with closed valve geometry at user given time. - Mesh motion can be controlled per moving object by setting: - patches: list of patches defining the object. - motion: a Function1 which returns the object position as a function of time. - movingZones: list of pointZones the points of which move with the object. - maxMotionDistance: a distance away from the moving object after nodes are not allowed to move. (Default inf.) - movingFrozenLayerThickness: thickness of layer in which points move with the moving object. (Default 0) - staticFrozenLayerThickness: thickness of layer in which points are fixed with respect to static patches (e.g. walls). (Default 0) - cosineScaling: a switch whether nodal translation is weighted by its distance from the moving object. The objective is to yield less deformation near the moving object and sustain e.g. boundary layer. (Default no, i.e. linear weighting) - fractionalTravelInterval: fraction of the stroke travelled after which the cached motion scaling weights are recalculated For valve object only: - minLift: a minimum valve lift value after considered closed. Some of the above parameters are highlighted in a given schematic piston-valve configuration w.r.t entries used to control piston motion. Furthermore, an example dictionary entries are provided below. | | | | | | | | | | S | | | | T | | | | E | | | | M | | / | | \ / | | \ / | | \ _____________/ | | \_____________ | : | | : | | : /``````````````` ```````````````\ : | | : / VALVE HEAD \ : | | L : /_____________________________________________\ : | | I : /\ : | | N : || staticFrozenLayerThickness : | | E : NCC (optional) \/ (w.r.t. piston motion) : | | R : `````````` : | | : : | | : : | |........:.......................................................:........| | : /\ : | | : || movingFrozenLayerThickness : | |________:_________________________\/____________________________:________| PISTON \verbatim mover { type multiValveEngine; libs ("libfvMeshMoversMultiValveEngine.so"); frozenZones (frozenZone1 frozenZone2); slidingPatches ( liner valveStem "nonCouple.*" ); linerPatches (liner); piston { patches (piston); axis (0 0 1); motion { type crankConnectingRodMotion; conRodLength 1e3; stroke 1.0; } // Move the points in the piston bowl with the piston movingZones (pistonBowl); // Optional maxMotionDistance 1e30; movingFrozenLayerThickness 0; staticFrozenLayerThickness 0; fractionalTravelInterval 0.1; cosineScaling yes; } valves { iv { patches (valveHead); axis (0 0 1); // Optional maxMotionDistance 1e30; movingFrozenLayerThickness 0; staticFrozenLayerThickness 0; fractionalTravelInterval 0.1; cosineScaling yes; minLift 0.001; motion { type table; values ( (0 0) (480 0.1) (720 0) ); // For multi-cycle simulations, use repeat outOfBounds repeat; interpolationScheme linear; } } } } \endverbatim Note: The implementation utilises pointDist objects for distance computation, resulting distance fields do not propagate through NCC interfaces. Hence, there should be no horizontal NCC interface separating piston from cylinder head as it would result in potentially ill defined mesh deformation. Due to same feature, in a schematic case setup above, valve motion affects only cells between NCC patches even though no cellSet is explicitly defined. SourceFiles multiValveEngine.C Patch contributed by: * Heikki Kahila, Wärtsilä Finland: Original implementation * Bulut Tekgül, Wärtsilä Finland: Testing, cleanup, help with refactoring * Henry Weller, CFD Direct: Refactoring, generalisation, optimisation and merging into OpenFOAM
- Loading branch information