mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: add simple subLoopTime
- similar idea as subCycleTime but without sub-dividing the time interval or incrementing time itself
This commit is contained in:
@ -284,6 +284,7 @@ $(Time)/Time.C
|
||||
$(Time)/TimeIO.C
|
||||
$(Time)/findTimes.C
|
||||
$(Time)/subCycleTime.C
|
||||
$(Time)/subLoopTime.C
|
||||
$(Time)/findInstance.C
|
||||
$(Time)/timeSelector.C
|
||||
|
||||
|
||||
85
src/OpenFOAM/db/Time/subLoopTime.C
Normal file
85
src/OpenFOAM/db/Time/subLoopTime.C
Normal file
@ -0,0 +1,85 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2017 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "subLoopTime.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::subLoopTime::subLoopTime(Time& runTime, const label nCycles)
|
||||
:
|
||||
time_(runTime),
|
||||
index_(0),
|
||||
total_(nCycles)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::subLoopTime::~subLoopTime()
|
||||
{
|
||||
stop();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
bool Foam::subLoopTime::status() const
|
||||
{
|
||||
return (index_ < total_);
|
||||
}
|
||||
|
||||
|
||||
void Foam::subLoopTime::stop()
|
||||
{
|
||||
// If called manually, ensure status() will return false
|
||||
index_ = total_ + 1;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::subLoopTime::loop()
|
||||
{
|
||||
const bool active = (index_ < total_); // as per status()
|
||||
|
||||
if (active)
|
||||
{
|
||||
operator++();
|
||||
}
|
||||
else if (index_)
|
||||
{
|
||||
// Not active, the loop condition has now exiting on the last subloop
|
||||
}
|
||||
|
||||
return active;
|
||||
}
|
||||
|
||||
|
||||
Foam::subLoopTime& Foam::subLoopTime::operator++()
|
||||
{
|
||||
++index_;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
137
src/OpenFOAM/db/Time/subLoopTime.H
Normal file
137
src/OpenFOAM/db/Time/subLoopTime.H
Normal file
@ -0,0 +1,137 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2017 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::subLoopTime
|
||||
|
||||
Description
|
||||
A class for managing sub-loops referencing Time.
|
||||
|
||||
SourceFiles
|
||||
subLoopTime.C
|
||||
|
||||
SeeAlso
|
||||
subCycleTime
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef subLoopTime_H
|
||||
#define subLoopTime_H
|
||||
|
||||
#include "Time.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class subLoopTime Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class subLoopTime
|
||||
{
|
||||
// Private Member Functions
|
||||
|
||||
//- Disallow default bitwise copy construct
|
||||
subLoopTime(const subLoopTime&) = delete;
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const subLoopTime&) = delete;
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
Time& time_;
|
||||
|
||||
//- The current sub-cycle index
|
||||
label index_;
|
||||
|
||||
//- The total number of cycles in the sub-cycle
|
||||
label total_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from time with fixed number of cycles
|
||||
// \param runTime the top-level time
|
||||
// \param nCycles the number of times to loop
|
||||
subLoopTime(Time& runTime, const label nCycles);
|
||||
|
||||
|
||||
//- Destructor
|
||||
~subLoopTime();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- The current cycle index
|
||||
inline label index() const
|
||||
{
|
||||
return index_;
|
||||
}
|
||||
|
||||
//- The total number of cycles
|
||||
inline label nCycles() const
|
||||
{
|
||||
return total_;
|
||||
}
|
||||
|
||||
//- Return true if looping is active
|
||||
bool status() const;
|
||||
|
||||
//- Force terminate the loop
|
||||
void stop();
|
||||
|
||||
//- True if looping is active, increments the index.
|
||||
// Example usage,
|
||||
// \code
|
||||
// while (control.loop())
|
||||
// {
|
||||
// solve;
|
||||
// }
|
||||
// \endcode
|
||||
bool loop();
|
||||
|
||||
|
||||
// Member Operators
|
||||
|
||||
//- Prefix increment
|
||||
subLoopTime& operator++();
|
||||
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user