sharifi |
June 6, 2013 12:02 |
thanks for the answer.
I found another way to do that. It might be interesting for you.
code:
I've made one or two modification in the original code.
Quote:
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\/ 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::systemCall
Description
Executes system calls, entered in the form of a string list
SourceFiles
systemCall.C
IOsystemCall.H
\*---------------------------------------------------------------------------*/
#ifndef systemCall_H
#define systemCall_H
#include "stringList.H"
#include "pointFieldFwd.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of classes
class objectRegistry;
class dictionary;
class mapPolyMesh;
/*---------------------------------------------------------------------------*\
Class systemCall Declaration
\*---------------------------------------------------------------------------*/
class systemCall
{
protected:
// Private data
//- Name of this set of system calls
word name_;
//- List of calls to execute - every step
stringList executeCalls_;
//- List of calls to execute when exiting the time-loop
stringList endCalls_;
//- List of calls to execute - write steps
stringList writeCalls_;
//\\---------------------------------------------------\\//
const objectRegistry& obr_;
label writeInterval_;
//\\---------------------------------------------------\\//
// Private Member Functions
//- Disallow default bitwise copy construct
systemCall(const systemCall&);
//- Disallow default bitwise assignment
void operator=(const systemCall&);
public:
//- Runtime type information
TypeName("systemCall");
// Constructors
//\\---------------------------------------------------\\//
//- Construct for given objectRegistry and dictionary.
// Allow the possibility to load fields from files
systemCall
(
const word& name,
const objectRegistry& obr,//unused
const dictionary&,
const bool loadFromFilesUnused = false
);
//\\---------------------------------------------------\\//
//- Destructor
virtual ~systemCall();
// Member Functions
//- Return name of the system call set
virtual const word& name() const
{
return name_;
}
//- Read the system calls
virtual void read(const dictionary&);
//- Execute the "executeCalls" at each time-step
virtual void execute();
//- Execute the "endCalls" at the final time-loop
virtual void end();
//- Write, execute the "writeCalls"
virtual void write();
//- Update for changes of mesh
virtual void updateMesh(const mapPolyMesh&)
{}
//- Update for changes of mesh
virtual void movePoints(const pointField&)
{}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************** *********************** //
|
Quote:
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\/ 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 "systemCall.H"
#include "Time.H"
#include "dynamicCode.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Foam::systemCall, 0);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::systemCall::systemCall
(
const word& name,
const objectRegistry& obr,
const dictionary& dict,
const bool loadFromFilesUnused
)
:
name_(name),
executeCalls_(),
endCalls_(),
writeCalls_(),
//\\---------------------------------------------------\\//
obr_(obr)
//\\---------------------------------------------------\\//
{
read(dict);
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::systemCall::~systemCall()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::systemCall::read(const dictionary& dict)
{
dict.readIfPresent("executeCalls", executeCalls_);
dict.readIfPresent("endCalls", endCalls_);
dict.readIfPresent("writeCalls", writeCalls_);
//\\---------------------------------------------------\\//
dict.lookup("writeInterval") >> writeInterval_;
//\\---------------------------------------------------\\//
if (executeCalls_.empty() && endCalls_.empty() && writeCalls_.empty())
{
WarningIn("Foam::system::read(const dictionary&)")
<< "no executeCalls, endCalls or writeCalls defined."
<< endl;
}
else if (!dynamicCode::allowSystemOperations)
{
FatalErrorIn
(
"systemCall::read(const dictionary&)"
) << "Executing user-supplied system calls is not"
<< " enabled by default" << endl
<< "because of security issues. If you trust the case you can"
<< " enable this" << endl
<< "facility be adding to the InfoSwitches setting in the system"
<< " controlDict:" << endl
<< endl
<< " allowSystemOperations 1" << endl
<< endl
<< "The system controlDict is either" << endl
<< endl
<< " ~/.OpenFOAM/$WM_PROJECT_VERSION/controlDict" << endl
<< endl
<< "or" << endl
<< endl
<< " $WM_PROJECT_DIR/etc/controlDict" << endl
<< endl
<< exit(FatalError);
}
}
void Foam::systemCall::execute()
{
forAll(executeCalls_, callI)
{
Foam::system(executeCalls_[callI]);
}
}
void Foam::systemCall::end()
{
forAll(endCalls_, callI)
{
Foam::system(endCalls_[callI]);
}
}
//\\---------------------------------------------------\\//
void Foam::systemCall::write()
{
if (obr_.time().timeIndex() % writeInterval_==0)
{
forAll(writeCalls_, callI)
{
Foam::system(writeCalls_[callI]);
}
}
}
//\\---------------------------------------------------\\//
// ************************************************** *********************** //
|
(don't forget : wmake libso)
you should now add in the controlDict of your problem writeInterval the desirable Interval.
|