Files
CFDEMcoupling-PFM/src/lagrangian/cfdemParticle/subModels/liggghtsCommandModel/writeLiggghts/writeLiggghts.C
danielque cd1ddfa16a make sure restart file is written if end time changes
if the OF end time gets modified at runtime, we need to update the time
setting for invoking the write_restart command if we only want to write
at the end of the simulation;
otherwise we will either write the file too soon or - probably even
worse - not at all
2023-06-20 15:26:59 +02:00

162 lines
4.5 KiB
C

/*---------------------------------------------------------------------------*\
CFDEMcoupling - Open Source CFD-DEM coupling
CFDEMcoupling is part of the CFDEMproject
www.cfdem.com
Christoph Goniva, christoph.goniva@cfdem.com
Copyright 2009-2012 JKU Linz
Copyright 2012- DCS Computing GmbH, Linz
-------------------------------------------------------------------------------
License
This file is part of CFDEMcoupling.
CFDEMcoupling 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.
CFDEMcoupling 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 CFDEMcoupling; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Description
This code is designed to realize coupled CFD-DEM simulations using LIGGGHTS
and OpenFOAM(R). Note: this code is not part of OpenFOAM(R) (see DISCLAIMER).
\*---------------------------------------------------------------------------*/
#include "error.H"
#include "writeLiggghts.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(writeLiggghts, 0);
addToRunTimeSelectionTable
(
liggghtsCommandModel,
writeLiggghts,
dictionary
);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from components
writeLiggghts::writeLiggghts
(
const dictionary& dict,
cfdemCloud& sm,
int i
)
:
liggghtsCommandModel(dict,sm,i),
propsDict_(dict.subOrEmptyDict(typeName + "Props")),
command_("write_restart"),
path_(word("..")/word("DEM")),
writeName_("liggghts.restartCFDEM"),
writeLast_(propsDict_.lookupOrDefault<Switch>("writeLast" ,true)),
overwrite_(false)
{
// check if verbose
verbose_ = propsDict_.found("verbose");
if (propsDict_.found("path"))
{
path_ = fileName(propsDict_.lookup("path"));
if (!checkPath(path_))
{
FatalError << "The path you provided in writeLiggghtsProps is incorrect: " << path_ << "\n" << abort(FatalError);
}
else
{
Info << "Using user defined path to write LIGGGHTS restart file: " << path_ << endl;
}
}
if (propsDict_.found("writeName"))
{
propsDict_.lookup("writeName") >> writeName_;
}
if (!writeLast_ && propsDict_.found("overwrite"))
{
overwrite_ = Switch(propsDict_.lookup("overwrite"));
}
if (writeLast_)
{
runLast_ = true;
}
else
{
//Warning << "Using invalid options of writeLiggghts, please use 'writeLast' option." << endl;
runEveryWriteStep_ = true;
}
command_ += " " + path_ + "/" + writeName_;
if (overwrite_)
{
strCommand_ = command_;
}
else
{
command_ += "_";
}
Info << "writeLiggghts: A restart file writeName_" << command_ << " is written." << endl;
checkTimeSettings(dict_);
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
writeLiggghts::~writeLiggghts()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
const char* writeLiggghts::command(int commandLine)
{
return strCommand_.c_str();
}
bool writeLiggghts::runCommand(int couplingStep)
{
if (!overwrite_) strCommand_ = addTimeStamp(command_);
// update time settings if restart file is only written at last step and
// end time has changed
if
(
runLast_
&& particleCloud_.mesh().time().runTimeModifiable()
&& particleCloud_.mesh().time().endTime().value() != endTime_
)
{
checkTimeSettings(dict_);
}
return runThisCommand(couplingStep);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* //