moveMesh.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2022-2023 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 \*---------------------------------------------------------------------------*/
25 
26 #include "multiphaseEuler.H"
27 #include "fvcDiv.H"
28 #include "fvcMeshPhi.H"
29 
30 // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
31 
33 {
34  if
35  (
36  pimple.flow()
38  )
39  {
40  if
41  (
43  // && divergent()
44  && !divU.valid()
45  )
46  {
47  // Construct and register divU for mapping
48  divU = new volScalarField
49  (
50  "divU0",
51  fvc::div
52  (
54  )
55  );
56  }
57 
58  // Move the mesh
59  mesh_.move();
60  }
61 }
62 
63 
65 {
66  if
67  (
68  pimple.flow()
69  && (pimple.firstIter() || pimple.moveMeshOuterCorrectors())
70  )
71  {
72  if (mesh.changing())
73  {
75 
76  if (correctPhi || mesh.topoChanged())
77  {
78  fluid_.meshUpdate();
79 
80  fluid_.correctPhi
81  (
82  p_rgh,
83  divU,
85  pimple
86  );
87  }
88 
89  meshCourantNo();
90  }
91 
92  divU.clear();
93  }
94 }
95 
96 
97 // ************************************************************************* //
bool flow() const
Flag to indicate to solve for the flow.
bool move()
Move the mesh.
Definition: fvMesh.C:653
bool moveMeshOuterCorrectors() const
Switch to move the mesh at the start of every PIMPLE.
bool firstIter() const
Flag to indicate the first iteration.
bool topoChanged() const
Has the mesh topology changed this time-step.
Definition: polyMesh.H:482
Provides controls for the pressure reference in closed-volume simulations.
pimpleNoLoopControl pimple
PIMPLE inner-loop controls.
Definition: solver.H:107
fvMesh & mesh_
Region mesh.
Definition: solver.H:62
const fvMesh & mesh
Region mesh.
Definition: solver.H:101
Buoyancy related data for the Foam::solvers::isothermalFluid solver module when solving buoyant cases...
Definition: buoyancy.H:70
void moveMesh()
Update gh and ghf following mesh-motion.
Definition: buoyancy.C:124
bool correctPhi
Switch to correct the flux after mesh change.
Definition: fluidSolver.H:101
const surfaceScalarField & phi
Reference to the mass-flux field.
virtual void moveMesh()
Called at the start of the PIMPLE loop to move the mesh.
Definition: moveMesh.C:32
autoPtr< volScalarField > divU
Stored divU from the previous mesh so that it can be.
virtual void motionCorrector()
Corrections that follow mesh motion.
Definition: moveMesh.C:64
const phaseSystem::phaseModelPartialList & movingPhases
Reference to the moving phases.
pimpleControl pimple(mesh)
Calculate the divergence of the given field.
Calculate the mesh motion flux and convert fluxes from absolute to relative and back.
U
Definition: pEqn.H:72
tmp< VolField< Type > > div(const SurfaceField< Type > &ssf)
Definition: fvcDiv.C:47
tmp< surfaceScalarField > absolute(const tmp< surfaceScalarField > &tphi, const volVectorField &U)
Return the given relative flux in absolute form.
Definition: fvcMeshPhi.C:202
VolField< scalar > volScalarField
Definition: volFieldsFwd.H:64
correctPhi