pimpleFoam.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) 2011-2021 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 Application
25  pimpleFoam
26 
27 Description
28  Transient solver for incompressible, turbulent flow of Newtonian fluids,
29  with optional mesh motion and mesh topology changes.
30 
31  Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected.
32 
33 \*---------------------------------------------------------------------------*/
34 
35 #include "fvCFD.H"
36 #include "dynamicFvMesh.H"
39 #include "pimpleControl.H"
40 #include "pressureReference.H"
41 #include "CorrectPhi.H"
42 #include "fvModels.H"
43 #include "fvConstraints.H"
44 #include "localEulerDdtScheme.H"
45 #include "fvcSmooth.H"
46 
47 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
48 
49 int main(int argc, char *argv[])
50 {
51  #include "postProcess.H"
52 
53  #include "setRootCaseLists.H"
54  #include "createTime.H"
55  #include "createDynamicFvMesh.H"
56  #include "initContinuityErrs.H"
57  #include "createDyMControls.H"
58  #include "createFields.H"
59  #include "createUfIfPresent.H"
60 
61  turbulence->validate();
62 
63  if (!LTS)
64  {
65  #include "CourantNo.H"
66  #include "setInitialDeltaT.H"
67  }
68 
69  // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
70 
71  Info<< "\nStarting time loop\n" << endl;
72 
73  while (pimple.run(runTime))
74  {
75  #include "readDyMControls.H"
76 
77  if (LTS)
78  {
79  #include "setRDeltaT.H"
80  }
81  else
82  {
83  #include "CourantNo.H"
84  #include "setDeltaT.H"
85  }
86 
87  runTime++;
88 
89  Info<< "Time = " << runTime.timeName() << nl << endl;
90 
91  // --- Pressure-velocity PIMPLE corrector loop
92  while (pimple.loop())
93  {
94  if (pimple.firstPimpleIter() || moveMeshOuterCorrectors)
95  {
97 
98  mesh.update();
99 
100  if (mesh.changing())
101  {
102  MRF.update();
103 
104  if (correctPhi)
105  {
106  #include "correctPhi.H"
107  }
108 
109  if (checkMeshCourantNo)
110  {
111  #include "meshCourantNo.H"
112  }
113  }
114  }
115 
116  fvModels.correct();
117 
118  #include "UEqn.H"
119 
120  // --- Pressure corrector loop
121  while (pimple.correct())
122  {
123  #include "pEqn.H"
124  }
125 
126  if (pimple.turbCorr())
127  {
128  laminarTransport.correct();
129  turbulence->correct();
130  }
131  }
132 
133  runTime.write();
134 
135  Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
136  << " ClockTime = " << runTime.elapsedClockTime() << " s"
137  << nl << endl;
138  }
139 
140  Info<< "End\n" << endl;
141 
142  return 0;
143 }
144 
145 
146 // ************************************************************************* //
pimpleNoLoopControl & pimple
IOMRFZoneList & MRF
virtual void correct()
Correct the fvModels.
Definition: fvModels.C:316
engineTime & runTime
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:251
virtual void preUpdateMesh()
Prepare for mesh update.
Definition: fvModels.C:240
correctPhi
checkMeshCourantNo
dynamicFvMesh & mesh
Info<< "Reading field U\"<< endl;volVectorField U(IOobject("U", runTime.timeName(), mesh, IOobject::MUST_READ, IOobject::AUTO_WRITE), mesh);volScalarField rho(IOobject("rho", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE), thermo.rho());volVectorField rhoU(IOobject("rhoU", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE), rho *U);volScalarField rhoE(IOobject("rhoE", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE), rho *(e+0.5 *magSqr(U)));surfaceScalarField pos(IOobject("pos", runTime.timeName(), mesh), mesh, dimensionedScalar(dimless, 1.0));surfaceScalarField neg(IOobject("neg", runTime.timeName(), mesh), mesh, dimensionedScalar(dimless, -1.0));surfaceScalarField phi("phi", fvc::flux(rhoU));Info<< "Creating turbulence model\"<< endl;autoPtr< compressible::momentumTransportModel > turbulence(compressible::momentumTransportModel::New(rho, U, phi, thermo))
Definition: createFields.H:94
static const char nl
Definition: Ostream.H:260
bool LTS
Definition: createRDeltaT.H:1
moveMeshOuterCorrectors
Foam::fvModels & fvModels
Calculates and outputs the mean and maximum Courant Numbers.
messageStream Info
Execute application functionObjects to post-process existing results.
singlePhaseTransportModel laminarTransport(U, phi)
Provides functions smooth spread and sweep which use the FaceCellWave algorithm to smooth and redistr...
Creates and initialises the velocity field Uf if required.